*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #0f1117;--bg-card: #1a1d27;--bg-sidebar: #151821;--border: #2a2d3a;--text: #e4e4e7;--text-muted: #9ca3af;--accent: #4f46e5;--accent-hover: #6366f1;font-family:Inter,system-ui,-apple-system,sans-serif;line-height:1.5;color:var(--text);background-color:var(--bg)}body,#root{min-height:100vh}.layout{display:flex;min-height:100vh}.sidebar{width:200px;background:var(--bg-sidebar);border-right:1px solid var(--border);padding:1.5rem 0;position:fixed;top:0;left:0;bottom:0;overflow-y:auto}.sidebar-title{font-size:1.1rem;font-weight:700;padding:0 1.25rem 1.25rem;color:var(--text);border-bottom:1px solid var(--border);margin-bottom:.5rem}.sidebar ul{list-style:none}.sidebar li a{display:block;padding:.6rem 1.25rem;color:var(--text-muted);text-decoration:none;font-size:.9rem;transition:background .15s,color .15s}.sidebar li a:hover{background:#4f46e51a;color:var(--text)}.sidebar li a.active{background:#4f46e526;color:var(--accent);font-weight:600;border-right:3px solid var(--accent)}.content{margin-left:200px;flex:1;padding:2rem;max-width:1200px}.auth-gate{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg)}.auth-form{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:2.5rem;width:360px;text-align:center}.auth-form h1{font-size:1.5rem;margin-bottom:1.5rem}.auth-form input{width:100%;padding:.7rem 1rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);font-size:.95rem;outline:none;margin-bottom:1rem}.auth-form input:focus{border-color:var(--accent)}.auth-form button{width:100%;padding:.7rem;border:none;border-radius:8px;background:var(--accent);color:#fff;font-size:.95rem;font-weight:600;cursor:pointer;transition:background .15s}.auth-form button:hover{background:var(--accent-hover)}.auth-error{color:#ef4444;font-size:.85rem;margin-top:.75rem}h2{font-size:1.5rem;font-weight:700;margin-bottom:1.25rem}h3{font-size:1rem;font-weight:600;margin-bottom:.75rem;display:flex;align-items:center;gap:.75rem}.stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:1.5rem}.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:1.25rem}.stat-value{font-size:1.6rem;font-weight:700;color:var(--text)}.stat-label{font-size:.8rem;color:var(--text-muted);margin-top:.25rem}.chart-card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:1.25rem;margin-bottom:1rem}.chart-row{display:flex;gap:1rem;margin-bottom:1rem}.chart-row>.chart-card{flex:1;margin-bottom:0}.chart-note{text-align:center;font-size:.8rem;color:var(--text-muted);margin-top:.5rem}.data-table{width:100%;border-collapse:collapse;font-size:.85rem}.data-table th{text-align:left;padding:.6rem .75rem;border-bottom:2px solid var(--border);color:var(--text-muted);font-weight:600;white-space:nowrap}.data-table td{padding:.5rem .75rem;border-bottom:1px solid var(--border)}.data-table tbody tr:hover{background:#4f46e50d}.data-table a{color:var(--accent);text-decoration:none}.data-table a:hover{text-decoration:underline}.sort-select{padding:.3rem .6rem;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);font-size:.8rem;cursor:pointer}.heatmap{overflow-x:auto}.heatmap-header,.heatmap-row{display:flex;gap:2px}.heatmap-label{width:28px;flex-shrink:0;font-size:.7rem;color:var(--text-muted);display:flex;align-items:center;justify-content:center}.heatmap-hour{width:28px;flex-shrink:0;font-size:.65rem;color:var(--text-muted);text-align:center}.heatmap-cell{width:28px;height:28px;flex-shrink:0;background:var(--accent);border-radius:3px}@media(max-width:768px){.sidebar{width:100%;position:static;border-right:none;border-bottom:1px solid var(--border);padding:1rem 0}.sidebar ul{display:flex;overflow-x:auto;gap:.25rem;padding:0 .75rem}.sidebar li a{white-space:nowrap;padding:.4rem .75rem;border-radius:6px}.sidebar li a.active{border-right:none;border-radius:6px}.layout{flex-direction:column}.content{margin-left:0;padding:1rem}.chart-row{flex-direction:column}}
