/* ============================================================================ Stat Cards ============================================================================ */ .admin-stat-card { position: relative; background: var(--glass-bg); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid var(--glass-border); box-shadow: var(--glass-shadow); border-radius: var(--border-radius); padding: 1.25rem; display: flex; flex-direction: column; gap: 0.5rem; overflow: hidden; } .admin-stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--accent-color); border-radius: var(--border-radius) var(--border-radius) 0 0; } .admin-stat-card.success::before { background: var(--success); } .admin-stat-card.warning::before { background: var(--warning); } .admin-stat-card.danger::before { background: var(--danger); } .admin-stat-card.info::before { background: var(--info); } .admin-stat-icon { width: 40px; height: 40px; border-radius: var(--border-radius-sm); background: var(--accent-soft); color: var(--accent-color); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .admin-stat-content { display: flex; flex-direction: column; gap: 0.125rem; } .admin-stat-value { font-size: 28px; font-weight: 700; color: var(--text-primary); font-family: var(--font-mono); letter-spacing: -0.02em; line-height: 1.2; } .admin-stat-label { font-size: 0.6875rem; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; } .admin-stat-footer { font-size: 0.75rem; color: var(--text-secondary); } .admin-stat-icon.danger { background: var(--danger-soft); color: var(--danger); } .admin-stat-icon.info { background: var(--info-soft); color: var(--info); } .admin-stat-icon.success { background: var(--success-soft); color: var(--success); } .admin-stat-icon.warning { background: var(--warning-soft); color: var(--warning); } /* ============================================================================ Dashboard ============================================================================ */ /* Dashboard layout */ .dash { display: flex; flex-direction: column; gap: 1.25rem; } .dash .admin-page-header { margin-bottom: 0; } /* KPI grid */ .dash-kpi-grid { display: grid; gap: 0.875rem; } .dash-kpi-4 { grid-template-columns: repeat(4, 1fr); } .dash-kpi-3 { grid-template-columns: repeat(3, 1fr); } .dash-kpi-2 { grid-template-columns: repeat(2, 1fr); } .dash-kpi-1 { grid-template-columns: 1fr; max-width: 320px; } /* Quick actions */ .dash-quick-actions { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.625rem; } .dash-quick-btn { display: flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.75rem 1rem; border: none; border-radius: var(--border-radius-sm); font-size: 0.8125rem; font-weight: 600; font-family: inherit; text-decoration: none; cursor: pointer; transition: all 0.15s ease; white-space: nowrap; } .dash-quick-btn:disabled { opacity: 0.7; cursor: not-allowed; transform: none !important; } .dash-quick-btn-success { background: var(--success-soft); color: var(--success); } .dash-quick-btn-info { background: var(--info-soft); color: var(--info); } .dash-quick-btn-warning { background: var(--warning-soft); color: var(--warning); } .dash-quick-btn-danger { background: var(--danger-soft); color: var(--danger); } .dash-quick-btn:hover { transform: translateY(-1px); filter: brightness(0.95); } [data-theme="light"] .dash-quick-btn-success { background: var(--success); color: #fff; } [data-theme="light"] .dash-quick-btn-info { background: var(--info); color: #fff; } [data-theme="light"] .dash-quick-btn-warning { background: var(--warning); color: #fff; } [data-theme="light"] .dash-quick-btn-danger { background: var(--danger); color: #fff; } /* Main content 3-col grid */ .dash-main-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 1rem; } /* Card link */ .dash-card-link { font-size: 0.75rem; color: var(--accent-color); font-weight: 600; text-decoration: none; transition: opacity 0.15s; } .dash-card-link:hover { opacity: 0.8; } /* Activity rows */ .dash-activity-row { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1.25rem; border-bottom: 1px solid var(--border-color); transition: background 0.1s; } .dash-activity-row:last-child { border-bottom: none; } .dash-activity-row:hover { background: var(--bg-tertiary); } .dash-activity-icon { width: 34px; height: 34px; border-radius: var(--border-radius-sm); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .dash-activity-icon.success { background: var(--success-soft); color: var(--success); } .dash-activity-icon.info { background: var(--info-soft); color: var(--info); } .dash-activity-icon.warning { background: var(--warning-soft); color: var(--warning); } .dash-activity-icon.danger { background: var(--danger-soft); color: var(--danger); } .dash-activity-icon.accent { background: var(--accent-soft); color: var(--accent-color); } .dash-activity-icon.muted { background: var(--bg-tertiary); color: var(--text-secondary); } .dash-activity-main { flex: 1; min-width: 0; } .dash-activity-text { font-size: 0.8125rem; font-weight: 500; color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dash-activity-sub { font-size: 0.75rem; color: var(--text-muted); margin-top: 1px; } .dash-activity-time { font-size: 0.6875rem; color: var(--text-muted); flex-shrink: 0; } /* Presence rows */ .dash-presence-row { display: flex; align-items: center; gap: 0.75rem; padding: 0.625rem 1.25rem; border-bottom: 1px solid var(--border-color); } .dash-presence-row:last-child { border-bottom: none; } .dash-presence-avatar { width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.6875rem; font-weight: 700; flex-shrink: 0; text-transform: uppercase; } .dash-presence-avatar.dash-status-in { background: var(--success-soft); color: var(--success); } .dash-presence-avatar.dash-status-away { background: var(--warning-soft); color: var(--warning); } .dash-presence-avatar.dash-status-out { background: var(--bg-tertiary); color: var(--text-muted); } .dash-presence-avatar.dash-status-leave { background: var(--info-soft); color: var(--info); } .dash-status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } .dash-status-dot.dash-status-in { background: var(--success); } .dash-status-dot.dash-status-away { background: var(--warning); } .dash-status-dot.dash-status-out { background: var(--text-muted); } .dash-status-dot.dash-status-leave { background: var(--info); } .dash-presence-label.dash-status-in { color: var(--success); } .dash-presence-label.dash-status-away { color: var(--warning); } .dash-presence-label.dash-status-out { color: var(--text-muted); } .dash-presence-label.dash-status-leave { color: var(--info); } .dash-presence-name { flex: 1; font-size: 0.8125rem; font-weight: 500; color: var(--text-primary); } .dash-presence-end { display: flex; align-items: center; gap: 0.75rem; flex-shrink: 0; } .dash-presence-label { font-size: 0.75rem; font-weight: 500; } .dash-presence-time { font-size: 0.6875rem; color: var(--text-muted); } /* Right column */ .dash-right-col { display: flex; flex-direction: column; gap: 1rem; } /* Project rows */ .dash-project-row { display: block; padding: 0.75rem 1.25rem; border-bottom: 1px solid var(--border-color); text-decoration: none; transition: background 0.1s; } .dash-project-row:last-child { border-bottom: none; } .dash-project-row:hover { background: var(--bg-tertiary); } .dash-project-name { font-size: 0.8125rem; font-weight: 500; color: var(--text-primary); } .dash-project-customer { font-size: 0.75rem; color: var(--text-muted); margin-top: 1px; } /* Stat mini rows */ .dash-stat-row { display: flex; align-items: center; justify-content: space-between; padding: 0.625rem 1.25rem; border-bottom: 1px solid var(--border-color); font-size: 0.8125rem; color: var(--text-secondary); } .dash-stat-row:last-child { border-bottom: none; } /* Empty row */ .dash-empty-row { padding: 1.5rem; text-align: center; color: var(--text-muted); font-size: 0.8125rem; } /* Bottom stacked layout (profile + sessions) */ .dash-bottom { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .dash .admin-card { margin-bottom: 0; } /* Profile grid inside account card */ .dash-profile-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem 1.5rem; } .dash-profile-item { display: flex; flex-direction: column; gap: 0.125rem; } .dash-profile-label { font-size: 0.6875rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-tertiary); } .dash-profile-value { font-size: 0.875rem; color: var(--text-primary); font-weight: 500; } /* ============================================================================ Responsive ============================================================================ */ @media (max-width: 1024px) { .dash-main-grid { grid-template-columns: 1fr 1fr; } .dash-right-col { grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr; } .dash-kpi-4 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .dash-kpi-grid { grid-template-columns: repeat(2, 1fr); } .dash-quick-actions { grid-template-columns: repeat(2, 1fr); } .dash-main-grid { grid-template-columns: 1fr; } .dash-right-col { grid-template-columns: 1fr; } .dash-bottom { grid-template-columns: 1fr; } } @media (max-width: 480px) { .dash-quick-actions { grid-template-columns: 1fr 1fr; } .dash-kpi-grid { grid-template-columns: 1fr; } .dash-profile-grid { grid-template-columns: 1fr; } } /* ============================================================================ Sessions / Devices ============================================================================ */ .sessions-list { display: flex; flex-direction: column; } .session-item { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.5rem; border-bottom: 1px solid var(--border-color); transition: var(--transition); } .session-item:last-child { border-bottom: none; } .session-item:hover { background: var(--bg-tertiary); } .session-item-current { background: var(--row-current); } .session-item-current:hover { background: var(--row-current-hover); } .session-icon { width: 40px; height: 40px; border-radius: var(--border-radius-sm); background: var(--bg-tertiary); color: var(--text-secondary); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .session-item-current .session-icon { background: color-mix(in srgb, var(--success) 15%, transparent); color: var(--success); } .session-info { flex: 1; min-width: 0; } .session-device { font-weight: 500; color: var(--text-primary); display: flex; align-items: center; flex-wrap: wrap; gap: 0.25rem; } .session-meta { font-size: 0.8125rem; color: var(--text-muted); margin-top: 0.25rem; display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; } .session-meta-separator { color: var(--border-color); } .session-actions { flex-shrink: 0; } @media (max-width: 640px) { .session-item { padding: 1rem; gap: 0.75rem; } .session-icon { width: 36px; height: 36px; } .session-device { font-size: 0.875rem; } .session-meta { font-size: 0.75rem; } }