/* ========================================================= ADMIN LAYOUT STYLES — sidebar, topbar, main content ========================================================= */ body.admin-page { display: flex; min-height: 100vh; background: var(--bg-base); } /* ══════════════════════════════ SIDEBAR ══════════════════════════════ */ .sidebar { width: var(--sidebar-w); flex-shrink: 0; background: var(--sidebar-bg); border-right: 1px solid var(--sidebar-border); display: flex; flex-direction: column; height: 100vh; position: fixed; top: 0; left: 0; z-index: 100; overflow-y: auto; transition: var(--transition); } .sidebar-brand { padding: 24px 20px; border-bottom: 1px solid var(--sidebar-border); display: flex; align-items: center; gap: 12px; flex-shrink: 0; } .brand-icon { width: 40px; height: 40px; background: var(--primary); border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; color: white; flex-shrink: 0; box-shadow: var(--shadow-sm); } .brand-text { display: flex; flex-direction: column; line-height: 1.3; } .brand-name { font-size: 0.95rem; font-weight: 700; color: var(--text-primary); letter-spacing: -0.01em; } .brand-sub { font-size: 0.75rem; color: var(--text-muted); font-weight: 500; } .sidebar-nav { padding: 16px 0; flex: 1; } .nav-section-title { padding: 16px 20px 8px; font-size: 0.7rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.08em; } .nav-item { display: flex; align-items: center; gap: 12px; padding: 10px 20px; color: var(--text-secondary); font-size: 0.9rem; font-weight: 500; text-decoration: none; border-radius: 0; transition: var(--transition); position: relative; cursor: pointer; border: none; background: none; width: 100%; text-align: left; } .nav-item:hover { background: #F3F4F6; color: var(--text-primary); } .nav-item.active { background: #EFF6FF; color: var(--primary-dark); } .nav-item.active::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--primary); border-radius: 0 2px 2px 0; } .nav-item .nav-icon { width: 20px; text-align: center; font-size: 0.95rem; flex-shrink: 0; color: inherit; } .nav-item .nav-badge { margin-left: auto; background: var(--danger); color: #fff; font-size: 0.7rem; font-weight: 700; padding: 2px 8px; border-radius: 20px; } .sidebar-footer { border-top: 1px solid var(--sidebar-border); padding: 16px; flex-shrink: 0; background: #FAFAFA; } .user-info { display: flex; align-items: center; gap: 12px; padding: 10px; border-radius: var(--radius-md); background: #FFFFFF; border: 1px solid var(--sidebar-border); box-shadow: var(--shadow-sm); } .user-avatar { width: 36px; height: 36px; border-radius: 50%; background: #E0E7FF; display: flex; align-items: center; justify-content: center; font-size: 0.9rem; font-weight: 700; color: var(--primary-dark); flex-shrink: 0; } .user-details { flex: 1; overflow: hidden; } .user-name { font-size: 0.85rem; font-weight: 600; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .user-role { font-size: 0.75rem; color: var(--text-muted); text-transform: capitalize; } .user-logout { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 1.1rem; padding: 6px; transition: all 0.2s; border-radius: var(--radius-sm); } .user-logout:hover { color: var(--danger); background: #FEF2F2; } /* ══════════════════════════════ MAIN CONTENT AREA ══════════════════════════════ */ .admin-main { margin-left: var(--sidebar-w); flex: 1; display: flex; flex-direction: column; min-height: 100vh; min-width: 0; } /* ── Topbar ── */ .topbar { height: 64px; background: var(--bg-surface); border-bottom: 1px solid var(--border-light); display: flex; align-items: center; padding: 0 32px; gap: 16px; position: sticky; top: 0; z-index: 50; } .topbar-title { font-size: 1.05rem; font-weight: 600; color: var(--text-primary); flex: 1; } .topbar-actions { display: flex; align-items: center; gap: 12px; } .topbar-time { font-size: 0.82rem; font-weight: 500; color: var(--text-secondary); display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: #F9FAFB; border: 1px solid var(--border-light); border-radius: var(--radius-md); } /* ── Content ── */ .admin-content { flex: 1; padding: 32px; overflow-y: auto; } /* ══════════════════════════════ DASHBOARD STATS CARDS ══════════════════════════════ */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; margin-bottom: 32px; } .stat-card { background: var(--bg-surface); border: 1px solid var(--border-light); border-radius: var(--radius-lg); padding: 24px; display: flex; align-items: flex-start; gap: 16px; transition: var(--transition); box-shadow: var(--shadow-sm); } .stat-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--border-hover); } .stat-icon { width: 48px; height: 48px; border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; font-size: 1.3rem; flex-shrink: 0; } .stat-body { flex: 1; min-width: 0; } .stat-label { font-size: 0.8rem; color: var(--text-muted); font-weight: 600; margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.05em; } .stat-value { font-size: 1.9rem; font-weight: 800; color: var(--text-primary); line-height: 1; letter-spacing: -0.02em; } .stat-change { font-size: 0.75rem; color: var(--text-muted); margin-top: 8px; font-weight: 500; } /* Card color variants (Flat UI style) */ .stat-card.primary .stat-icon { background: #EFF6FF; color: #2563EB; } .stat-card.success .stat-icon { background: #ECFDF5; color: #059669; } .stat-card.danger .stat-icon { background: #FEF2F2; color: #DC2626; } .stat-card.warning .stat-icon { background: #FFFBEB; color: #D97706; } .stat-card.info .stat-icon { background: #F0F9FF; color: #0284C7; } .stat-card.violet .stat-icon { background: #F5F3FF; color: #7C3AED; } /* ══════════════════════════════ DATA TABLE PAGE LAYOUT ══════════════════════════════ */ .page-toolbar { display: flex; align-items: center; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; } .page-toolbar .search-box { flex: 1; min-width: 250px; max-width: 360px; position: relative; } .search-box .search-icon { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: var(--text-muted); font-size: 0.9rem; } .search-box input { width: 100%; padding: 10px 14px 10px 38px; background: #FFFFFF; border: 1px solid var(--border-light); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.9rem; outline: none; transition: var(--transition); font-family: 'Inter', sans-serif; box-shadow: var(--shadow-sm); } .search-box input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15); } .search-box input::placeholder { color: #9CA3AF; } /* ══════════════════════════════ MAP PAGE IN ADMIN ══════════════════════════════ */ .admin-map-page .admin-content { padding: 0; display: flex; flex-direction: column; } .admin-map-page .topbar { z-index: 500; } #admin-map { flex: 1; min-height: calc(100vh - 64px); } .map-sidebar-floating { position: absolute; top: 16px; left: 16px; z-index: 400; width: 280px; background: #FFFFFF; border: 1px solid var(--border-light); border-radius: var(--radius-lg); padding: 16px; box-shadow: var(--shadow-md); } /* ══════════════════════════════ RESPONSIVE ══════════════════════════════ */ @media (max-width: 768px) { .sidebar { transform: translateX(-100%); } .sidebar.open { transform: translateX(0); box-shadow: var(--shadow-lg); } .admin-main { margin-left: 0; } .stats-grid { grid-template-columns: 1fr; } }