Files
BetterDesk/web-nodejs/public/css/tenants.css
T
UNITRONIX 7a0b3b7387 fix: resolve 8 GitHub issues (#90 #97 #100 #82 #78 #75 #98 #68)
- #90: Bump z-index hierarchy (modal 1100, toast 1200, tooltip 1300)
- #97: Block old peer ID re-registration after ID change (IsRenamedPeerID)
- #100: Add broken pipe/connection refused to isNormalClose(), reduce TCP log spam
- #82: Reset cookie secure flag + CSRF downgrade on SSL cert fallback
- #78: Docker entrypoint write-check before start with clear error message
- #75: Replace transition:all with specific properties in 6 CSS files
- #98: Show HTTPS URL in Docker startup banner when SSL enabled
- #68: Add %% escaping for systemd specifiers alongside web-nodejs/server.js escaping

Files: 5 Go (signal, db), 2 Node.js (server, csrf), 6 CSS, 1 Docker, 1 installer
2026-04-10 00:00:04 +02:00

271 lines
5.7 KiB
CSS

/* BetterDesk Console - Tenants Styles */
/* Tenants grid */
.tenants-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
gap: var(--space-md);
margin-top: var(--space-md);
}
.tenant-card {
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
border-radius: var(--radius-lg);
padding: var(--space-lg);
cursor: pointer;
transition: border-color 0.2s, box-shadow 0.2s, transform 0.15s;
transform: translateY(0);
position: relative;
overflow: hidden;
}
.tenant-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: var(--accent-blue);
opacity: 0;
transition: opacity 0.2s;
}
.tenant-card:hover {
border-color: var(--accent-blue);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transform: translateY(-2px);
}
.tenant-card:hover::before {
opacity: 1;
}
.tenant-card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-md);
}
.tenant-card-header h3 {
color: var(--text-primary);
font-size: var(--font-size-base);
font-weight: var(--font-weight-semibold);
margin: 0;
display: flex;
align-items: center;
gap: var(--space-sm);
}
.tenant-card-header .tenant-status {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: var(--font-size-xs);
font-weight: 500;
padding: 2px 8px;
border-radius: var(--radius-full);
}
.tenant-status.active {
color: var(--accent-green);
background: var(--accent-green-muted);
}
.tenant-status.disabled {
color: var(--text-muted);
background: var(--bg-tertiary);
}
.tenant-status .dot {
width: 6px;
height: 6px;
border-radius: 50%;
}
.tenant-status.active .dot { background: var(--accent-green); }
.tenant-status.disabled .dot { background: var(--text-muted); }
.tenant-card-stats {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-sm);
margin-bottom: var(--space-md);
padding: var(--space-sm);
background: var(--bg-tertiary);
border-radius: var(--radius-md);
}
.tenant-stat {
text-align: center;
padding: var(--space-xs) 0;
}
.tenant-stat .value {
display: block;
font-size: var(--font-size-xl);
font-weight: var(--font-weight-bold);
color: var(--text-primary);
font-variant-numeric: tabular-nums;
line-height: 1.2;
}
.tenant-stat .label {
display: block;
font-size: 10px;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: 2px;
}
.tenant-card-footer {
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid var(--border-primary);
padding-top: var(--space-sm);
}
.tenant-slug {
color: var(--text-muted);
font-size: var(--font-size-xs);
font-family: var(--font-mono, 'Fira Mono', monospace);
background: var(--bg-tertiary);
padding: 2px 8px;
border-radius: var(--radius-sm);
}
.tenant-card-actions {
display: flex;
gap: 4px;
}
.tenant-card-actions .btn {
opacity: 0.6;
transition: opacity 0.15s;
}
.tenant-card:hover .tenant-card-actions .btn {
opacity: 1;
}
/* empty tenants */
.tenants-empty {
grid-column: 1 / -1;
text-align: center;
padding: 64px 20px;
background: var(--bg-secondary);
border: 2px dashed var(--border-primary);
border-radius: var(--radius-lg);
}
.tenants-empty .material-icons {
font-size: 56px;
color: var(--text-muted);
margin-bottom: var(--space-md);
opacity: 0.5;
}
.tenants-empty p {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
/* Detail sections */
.tenant-detail-tabs {
display: flex;
gap: 4px;
margin-bottom: var(--space-lg);
border-bottom: 1px solid var(--border-primary);
padding-bottom: 0;
}
.tenant-detail-tab {
padding: 8px 16px;
border: none;
background: transparent;
color: var(--text-secondary);
font-size: var(--font-size-sm);
cursor: pointer;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color 0.2s, border-color 0.2s;
}
.tenant-detail-tab:hover {
color: var(--text-primary);
background: var(--bg-tertiary);
}
.tenant-detail-tab.active {
color: var(--accent-blue);
border-bottom-color: var(--accent-blue);
font-weight: var(--font-weight-medium);
}
.tenant-detail-panel { display: none; }
.tenant-detail-panel.active { display: block; }
/* assignment lists */
.assignment-list {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.assignment-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--space-sm) var(--space-md);
background: var(--bg-tertiary);
border-radius: var(--radius-md);
font-size: var(--font-size-sm);
transition: background 0.15s;
}
.assignment-item:hover {
background: var(--bg-secondary);
outline: 1px solid var(--border-primary);
}
.assignment-item .name {
color: var(--text-primary);
font-weight: var(--font-weight-medium);
}
/* Form enhancements */
#form-modal .form-row {
margin-bottom: var(--space-md);
}
#form-modal .form-row label {
display: block;
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
color: var(--text-secondary);
margin-bottom: var(--space-xs);
}
#form-modal .form-row label:has(input[type="checkbox"]) {
display: flex;
align-items: center;
gap: var(--space-sm);
cursor: pointer;
color: var(--text-primary);
}
/* responsive */
@media (max-width: 768px) {
.tenants-grid {
grid-template-columns: 1fr;
}
.tenant-card-stats {
grid-template-columns: repeat(3, 1fr);
}
}