/* ────────────────────────────────────────────────────────────────────────────── app.css — Smart Scheduling Admin Dashboard ────────────────────────────────────────────────────────────────────────────── */ /* Layout */ body { font-size: 0.9rem; } #sidebar { width: 220px; min-height: 100vh; background: #1a1f36; position: fixed; top: 0; left: 0; bottom: 0; overflow-y: auto; z-index: 100; transition: transform 0.25s ease; } /* ── Mobile hamburger button ─────────────────────────────────────────────── */ #mobileNavToggle { display: none; position: fixed; top: 10px; left: 10px; z-index: 200; background: #1a1f36; color: #fff; border: none; border-radius: 6px; padding: 6px 11px; font-size: 1.1rem; cursor: pointer; } #sidebarOverlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 99; } /* ── Responsive: collapse sidebar on small screens ───────────────────────── */ @media (max-width: 767.98px) { #sidebar { transform: translateX(-220px); } #sidebar.sidebar-open { transform: translateX(0); } #sidebarOverlay.sidebar-open { display: block; } #main { margin-left: 0; padding: 12px; padding-top: 52px; } #mobileNavToggle { display: block; } } /* ── QR scan mode: hide sidebar/nav for clean mobile attendance page ─────── */ body.qr-scan-mode #sidebar, body.qr-scan-mode #mobileNavToggle, body.qr-scan-mode #sidebarOverlay { display: none !important; } body.qr-scan-mode #main { margin-left: 0 !important; padding: 24px 16px !important; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; } body.qr-scan-mode #main .section { width: 100%; max-width: 480px; } body.qr-scan-mode #main h4 { text-align: center; } #sidebar .brand { font-size: 1rem; font-weight: 700; letter-spacing: .04em; padding: 1.2rem 1rem .8rem; color: #fff; border-bottom: 1px solid rgba(255,255,255,.1); } #sidebar .nav-link { color: rgba(255,255,255,.75); border-radius: 6px; margin: 2px 8px; padding: 7px 12px; font-size: .85rem; display: flex; align-items: center; gap: 8px; } #sidebar .nav-link:hover, #sidebar .nav-link.active { background: rgba(255,255,255,.12); color: #fff; } #sidebar .nav-section { font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.4); padding: 12px 20px 4px; } #main { margin-left: 220px; padding: 24px; } /* Cards */ .stat-card { border: none; border-radius: 12px; } .stat-card .value { font-size: 2rem; font-weight: 700; } /* Tables */ .table-sm td, .table-sm th { vertical-align: middle; } .badge-locked { background: #c0392b; } .badge-confirmed { background: #27ae60; } .badge-proposed { background: #f39c12; } .badge-cancelled { background: #6c757d; } .session-cancelled { opacity: 0.65; text-decoration: line-through; } /* Settings table – fixed column widths, no layout blowout */ .settings-table { table-layout: fixed; width: 100%; } .settings-table th, .settings-table td { word-break: break-word; } .settings-table td.text-break { word-break: break-all; } /* System page – pill selector */ .system-pill { border: 1px solid #dee2e6; background: #f8f9fa; color: #495057; } .system-pill.active { background: #0d6efd; border-color: #0d6efd; color: #fff; } .system-pill:hover:not(.active) { background: #e9ecef; } /* Log viewer */ .log-viewer { background: #0d1117; color: #c9d1d9; font-size: 0.72rem; font-family: 'Consolas', 'Monaco', monospace; padding: 12px 16px; border-radius: 6px; max-height: 540px; overflow: auto; white-space: pre-wrap; word-break: break-all; line-height: 1.5; } /* Slot colour palette */ .slot-1 { background: #dbeafe; border-left: 4px solid #3b82f6; } .slot-2 { background: #dcfce7; border-left: 4px solid #22c55e; } .slot-3 { background: #fef9c3; border-left: 4px solid #eab308; } .slot-4 { background: #fce7f3; border-left: 4px solid #ec4899; } /* Calendar grid */ .cal-grid { display: grid; grid-template-columns: 90px repeat(7, 1fr); gap: 3px; font-size: .78rem; } .cal-grid .cal-header { background: #f1f5f9; font-weight: 600; text-align: center; padding: 6px 2px; border-radius: 4px; } .cal-grid .cal-time { background: #f8fafc; font-size: .72rem; color: #64748b; display: flex; align-items: center; justify-content: flex-end; padding-right: 6px; border-radius: 4px; } .cal-cell { min-height: 64px; border-radius: 6px; padding: 4px 6px; cursor: pointer; transition: opacity .15s; border: 1px solid transparent; } .cal-cell:empty { background: #f8fafc; border-color: #e2e8f0; } .cal-cell:hover { opacity: .85; } /* Proposal table */ #proposalSection { display: none; } .proposal-row td { vertical-align: middle; } /* Toast */ .toast-container { z-index: 9999; } /* Section show/hide */ .section { display: none; } .section.active { display: block; } /* Form labels */ .form-label { font-weight: 500; } /* Loading spinner overlay */ #loadingOverlay { position: fixed; inset: 0; background: rgba(255,255,255,.6); display: none; align-items: center; justify-content: center; z-index: 5000; } /* Month calendar grid */ .month-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; font-size: .8rem; } .month-day-header { text-align: center; font-weight: 600; background: #f1f5f9; padding: 5px 2px; border-radius: 4px; } .month-day { min-height: 72px; background: #fff; border: 1px solid #e2e8f0; border-radius: 6px; padding: 4px 6px; } .month-day-num { font-weight: 700; font-size: .75rem; color: #475569; margin-bottom: 3px; } .month-event { background: #dbeafe; color: #1e40af; border-radius: 4px; padding: 2px 5px; font-size: .72rem; margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: default; }