:root{--bg:#e9edf5;--bg-gradient:none;--surface:#e9edf5;--border:#d7deec;--text:#3d4d63;--text-strong:#101c31;--text-muted:#7b8aa3;--blue:#3b82f6;--blue-dark:#1d4ed8;--green:#10b981;--amber:#f59e0b;--purple:#8b5cf6;--pink:#ec4899;--red:#ef4444;--header-bg:linear-gradient(90deg, #e2edfb 0%, #eaf2fd 100%);--sidebar-bg:#eef1f8;--sidebar-text:#64748b;--sidebar-active-bg:#e2edfb;--neu-light:#fff;--neu-dark:#c7d0e2;--shadow-card:6px 6px 14px var(--neu-dark), -6px -6px 14px var(--neu-light);--shadow-card-hover:8px 8px 18px var(--neu-dark), -8px -8px 18px var(--neu-light);--shadow-neu-sm:4px 4px 9px var(--neu-dark), -4px -4px 9px var(--neu-light);--shadow-neu-inset:inset 3px 3px 7px var(--neu-dark), inset -3px -3px 7px var(--neu-light);--radius:18px;--radius-sm:12px;--sans:"Nunito", system-ui, "Segoe UI", sans-serif;--ease:cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}body{font-family:var(--sans);background:var(--bg);background-image:var(--bg-gradient);color:var(--text);background-attachment:fixed;margin:0}::selection{background:#bfdbfe}.dash{--sidebar-w:232px;min-height:100vh}.dash-sidebar{width:var(--sidebar-w);background:var(--sidebar-bg);color:var(--sidebar-text);z-index:40;height:100vh;transition:transform .32s var(--ease);flex-direction:column;gap:28px;padding:22px 14px;display:flex;position:fixed;top:0;left:0;transform:translate(-100%);box-shadow:8px 0 24px -14px #101c3138}.dash-main{min-width:0;transition:margin-left .32s var(--ease);flex-direction:column;margin-left:0;display:flex}.dash.menu-open .dash-sidebar{transform:translate(0)}.dash.menu-open .dash-main{margin-left:var(--sidebar-w)}.dash-brand{align-items:center;gap:10px;padding:0 8px;display:flex}.dash-brand-dot{background:linear-gradient(135deg, var(--blue) 0%, var(--purple) 100%);color:#fff;letter-spacing:-.5px;border-radius:14px;place-items:center;width:40px;height:40px;font-size:13px;font-weight:900;display:grid;box-shadow:0 6px 16px -6px #3b82f6b3}.dash-brand-name{color:var(--text-strong);font-size:17px;font-weight:800}.dash-brand-logo{width:auto;max-width:150px;height:auto;max-height:96px;display:block}.dash-nav{flex-direction:column;flex:1;gap:4px;display:flex}.dash-navlink{color:var(--sidebar-text);transition:background .25s var(--ease), color .25s var(--ease), transform .25s var(--ease);border-radius:12px;align-items:center;gap:10px;padding:10px 14px;font-size:14px;font-weight:700;text-decoration:none;display:flex}.dash-navicon{width:34px;height:34px;color:var(--sidebar-text);background:var(--sidebar-bg);box-shadow:var(--shadow-neu-sm);border-radius:10px;place-items:center;transition:color .25s,box-shadow .25s;display:grid}.dash-navicon svg{width:18px;height:18px}.dash-navlink:hover{color:var(--text-strong);background:#f1f5fb;transform:translate(2px)}.dash-navlink:hover .dash-navicon{color:var(--blue)}.dash-navlink.active{background:var(--sidebar-active-bg);color:var(--blue-dark);box-shadow:inset 3px 0 0 var(--blue)}.dash-navlink.active .dash-navicon{color:var(--blue);box-shadow:var(--shadow-neu-inset)}.dash-user{background:var(--sidebar-active-bg);border-radius:12px;align-items:center;gap:10px;margin-bottom:8px;padding:8px 10px;display:flex}.dash-user-avatar{background:linear-gradient(135deg, var(--blue) 0%, var(--purple) 100%);color:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:34px;height:34px;font-size:14px;font-weight:800;display:grid}.dash-user-name{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:700;overflow:hidden}.dash-logout{border:1px solid var(--border);color:var(--sidebar-text);cursor:pointer;font-family:var(--sans);background:0 0;border-radius:12px;padding:10px;font-size:13px;font-weight:700;transition:background .25s,color .25s,border-color .25s}.dash-logout:hover{color:var(--red);background:#fef2f2;border-color:#fecaca}.dash-header{background:var(--header-bg);z-index:10;align-items:center;gap:14px;padding:12px 24px;display:flex;position:sticky;top:0;box-shadow:0 6px 16px -12px #101c3166}.dash-header-spacer{flex:1}.dash-hamburger{background:var(--sidebar-bg);width:42px;height:42px;box-shadow:var(--shadow-neu-sm);cursor:pointer;transition:box-shadow .2s var(--ease);border:none;border-radius:12px;flex-direction:column;justify-content:center;gap:4px;padding:0 11px;display:flex}.dash-hamburger:hover{box-shadow:var(--shadow-card)}.dash-hamburger:active{box-shadow:var(--shadow-neu-inset)}.dash-hamburger span{background:var(--text-strong);border-radius:2px;height:2.5px;display:block}.dash-mockbadge{color:#92400e;letter-spacing:.6px;text-transform:uppercase;background:linear-gradient(90deg,#fef3c7,#fde68a);border-radius:999px;padding:5px 12px;font-size:11px;font-weight:800}.dash-content{width:100%;max-width:1280px;animation:pagein .4s var(--ease);margin:0 auto;padding:28px}.panel-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:18px;display:grid}.panel-grid>.panel{margin-top:0}@media (width<=860px){.panel-grid{grid-template-columns:1fr}}@keyframes pagein{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.page-title{color:var(--text-strong);letter-spacing:-.3px;margin:0 0 20px;font-size:24px;font-weight:900}.page-error{color:var(--red);border-radius:var(--radius-sm);background:#fee2e2;padding:12px 16px;font-size:14px;font-weight:600}.kpi-row{grid-template-columns:repeat(auto-fit,minmax(175px,1fr));gap:14px;display:grid}.kpi-card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-card);transition:transform .3s var(--ease), box-shadow .3s var(--ease);align-items:center;gap:14px;padding:18px;display:flex}.kpi-card:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-3px)}.kpi-icon{background:var(--surface);width:46px;height:46px;box-shadow:var(--shadow-neu-sm);border-radius:14px;flex-shrink:0;place-items:center;display:grid}.kpi-icon svg{width:22px;height:22px}.tone-blue .kpi-icon{color:var(--blue)}.tone-green .kpi-icon{color:var(--green)}.tone-amber .kpi-icon{color:var(--amber)}.tone-purple .kpi-icon{color:var(--purple)}.tone-pink .kpi-icon{color:var(--pink)}.tone-red .kpi-icon{color:var(--red)}.kpi-body{flex-direction:column;gap:2px;min-width:0;display:flex}.kpi-value{color:var(--text-strong);font-variant-numeric:tabular-nums;letter-spacing:-.5px;white-space:nowrap;font-size:24px;font-weight:900}.kpi-label{color:var(--text-muted);font-size:12.5px;font-weight:700}.kpi-delta{vertical-align:2px;margin-left:8px;font-size:12px;font-weight:800}.kpi-delta.up{color:var(--green)}.kpi-delta.down{color:var(--red)}.kpi-skeleton{background:linear-gradient(90deg,#eef2f8 25%,#f8fafc 50%,#eef2f8 75%) 0 0/200% 100%;border-radius:6px;width:70px;height:24px;animation:1.4s infinite shimmer;display:block}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.panel{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-card);transition:box-shadow .3s var(--ease);margin-top:18px;padding:20px 22px}.panel:hover{box-shadow:var(--shadow-card-hover)}.panel-title{color:var(--text-strong);margin:0 0 4px;font-size:15.5px;font-weight:800}.panel-hint{color:var(--text-muted);margin:0 0 12px;font-size:12.5px}.echart-overlay{color:var(--text-muted);background:var(--surface);border-radius:var(--radius-sm);justify-content:center;align-items:center;font-size:14px;font-weight:600;display:flex;position:absolute;inset:0}.echart-error{color:var(--red)}.daterange{align-items:center;gap:8px;display:flex}.daterange input[type=date]{font-family:var(--sans);color:var(--text);background:#fff;border:1px solid #d7e3f5;border-radius:10px;padding:7px 10px;font-size:13px;font-weight:600;transition:border-color .2s}.daterange input[type=date]:focus{border-color:var(--blue);outline:none}.daterange-preset{font-family:var(--sans);color:var(--text-muted);cursor:pointer;transition:all .2s var(--ease);background:#fff;border:1px solid #d7e3f5;border-radius:999px;padding:6px 12px;font-size:12px;font-weight:800}.daterange-preset:hover{border-color:var(--blue);color:var(--blue);transform:translateY(-1px)}.daterange-sep{color:var(--text-muted)}.route-select{font-family:var(--sans);color:var(--text-strong);background:var(--surface);cursor:pointer;box-shadow:var(--shadow-neu-sm);border:none;border-radius:12px;margin-bottom:20px;padding:10px 16px;font-size:13.5px;font-weight:700}.route-select:focus{box-shadow:var(--shadow-neu-inset);outline:none}.login-page{background:#f2f8fc;justify-content:center;align-items:center;min-height:100vh;display:flex}.login-container{flex-direction:column;align-items:center;gap:1.5rem;width:100%;max-width:420px;padding:2rem;display:flex}.login-logo{color:#005cb2;letter-spacing:.5px;font-family:Titan One,Comic Sans MS,cursive;font-size:2rem}.login-card{width:100%;font-family:"Fredoka", var(--sans);animation:pagein .5s var(--ease);background:#fff;border-radius:16px;flex-direction:column;gap:1.25rem;padding:2rem;display:flex;box-shadow:0 24px 50px -24px #003c8040}.login-head{text-align:center}.login-card h1{font-family:"Fredoka", var(--sans);color:#003c80;margin:0 0 .35rem;font-size:1.5rem;font-weight:600}.login-subtitle{color:#64748b;margin:0;font-size:.95rem}.login-field{flex-direction:column;gap:.375rem;display:flex}.login-field label{color:#003c80;font-size:.875rem;font-weight:500}.login-card input{width:100%;font-size:1rem;font-family:"Fredoka", var(--sans);background:#fff;border:1px solid #cbd5e1;border-radius:.75rem;padding:.75rem 1rem;transition:border-color .2s,box-shadow .2s}.login-card input:focus{border-color:#005cb2;outline:none;box-shadow:0 0 0 3px #005cb21f}.login-card button{color:#fff;font-family:"Fredoka", var(--sans);cursor:pointer;transition:background .2s var(--ease), transform .2s var(--ease);background:#005cb2;border:none;border-radius:.75rem;margin-top:.25rem;padding:.8rem;font-size:1rem;font-weight:600}.login-card button:hover:not(:disabled){background:#0076cb;transform:translateY(-1px)}.login-card button:disabled{opacity:.6;cursor:default}.login-error{color:#ef4444;background:#fef2f2;border:1px solid #ef4444;border-radius:.75rem;padding:.75rem 1rem;font-size:.875rem}.fullpage-loading{min-height:100vh;color:var(--text-muted);justify-content:center;align-items:center;font-weight:700;display:flex}@media (width<=760px){.dash-sidebar{width:82vw;max-width:300px}.dash.menu-open .dash-main{margin-left:0}.dash-header{flex-wrap:wrap;padding:10px 16px}.dash-content{padding:18px 14px}}
