@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@500;600&display=swap");:root,[data-theme=light]{--primary-50:#e8f1fb;--primary-100:#d0e3f7;--primary-200:#a8c9ed;--primary-500:#1b6bb5;--primary-600:#155a9a;--primary-700:#114a80;--primary-900:#0a2c4d;--accent-50:#fff4e6;--accent-500:#e68a00;--accent-700:#b86c00;--bg:#f0f2f5;--bg-elevated:#f7f8fa;--surface:#ffffff;--surface-2:#f4f5f7;--surface-3:#ebedf0;--surface-hover:#f0f2f5;--surface-active:#e8f1fb;--overlay:rgba(15,19,24,0.45);--text:#0f1318;--text-secondary:#2a323c;--text-muted:#5f6b7a;--text-disabled:#8b95a5;--text-inverse:#ffffff;--border:#dde1e6;--border-subtle:#ebedf0;--border-strong:#c5cbd3;--border-focus:#1b6bb5;--success:#1b7a3d;--success-bg:#e8f6ee;--success-text:#0f4d26;--warning:#c77700;--warning-bg:#fff6e8;--warning-text:#8a5200;--danger:#b42318;--danger-bg:#feecec;--danger-text:#7a160f;--info:#155a9a;--info-bg:#e8f1fb;--info-text:#0a2c4d;--sidebar-bg:#0f1318;--sidebar-bg-2:#1a2028;--sidebar-border:rgba(255,255,255,0.06);--sidebar-text:#c5cbd3;--sidebar-muted:#8b95a5;--sidebar-hover:rgba(255,255,255,0.06);--sidebar-active-bg:rgba(27,107,181,0.22);--sidebar-active-text:#ffffff;--sidebar-active-bar:var(--accent-500);--topbar-bg:rgba(255,255,255,0.86);--topbar-border:var(--border);--radius-sm:4px;--radius:8px;--radius-lg:12px;--radius-xl:16px;--shadow-sm:0 1px 2px rgba(15,19,24,0.04);--shadow-md:0 2px 8px rgba(15,19,24,0.06),0 1px 2px rgba(15,19,24,0.04);--shadow-lg:0 8px 24px rgba(15,19,24,0.1);--font:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;--font-mono:"IBM Plex Mono",ui-monospace,monospace;--sidebar-width:248px;--sidebar-collapsed:72px;--header-height:56px;--page-pad:1.5rem 1.75rem 2.25rem}[data-theme=dark]{--primary-50:#12253a;--primary-100:#1a3550;--primary-200:#244868;--primary-500:#4d9adf;--primary-600:#6fafeb;--primary-700:#8fc0ef;--primary-900:#d0e3f7;--accent-50:#2a1f0f;--accent-500:#f0a030;--accent-700:#ffc066;--bg:#0b0e12;--bg-elevated:#101419;--surface:#151a21;--surface-2:#1a2028;--surface-3:#222933;--surface-hover:#1e2630;--surface-active:#1a2f45;--overlay:rgba(0,0,0,0.62);--text:#eef0f3;--text-secondary:#c5cbd3;--text-muted:#8b95a5;--text-disabled:#5f6b7a;--text-inverse:#0f1318;--border:#2a323c;--border-subtle:#222933;--border-strong:#3d4754;--border-focus:#4d9adf;--success:#3dbf6a;--success-bg:#14301f;--success-text:#a8efc0;--warning:#e6a23c;--warning-bg:#33260f;--warning-text:#ffd699;--danger:#f07070;--danger-bg:#3a1515;--danger-text:#ffc9c9;--info:#6fafeb;--info-bg:#152536;--info-text:#c5ddf5;--sidebar-bg:#080a0d;--sidebar-bg-2:#0f1318;--sidebar-border:rgba(255,255,255,0.05);--sidebar-text:#a8b0bc;--sidebar-muted:#6b7482;--sidebar-hover:rgba(255,255,255,0.05);--sidebar-active-bg:rgba(77,154,223,0.18);--sidebar-active-text:#ffffff;--sidebar-active-bar:var(--accent-500);--topbar-bg:rgba(21,26,33,0.9);--topbar-border:var(--border);--shadow-sm:0 1px 2px rgba(0,0,0,0.35);--shadow-md:0 4px 16px rgba(0,0,0,0.35);--shadow-lg:0 12px 36px rgba(0,0,0,0.45)}*{box-sizing:border-box}html{color-scheme:light}html[data-theme=dark]{color-scheme:dark}body,html{margin:0;padding:0;min-height:100%;background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;transition:background-color .2s ease,color .2s ease}a{color:var(--primary-600);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit}button{cursor:pointer}h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.02em;color:var(--text)}h1{font-size:1.375rem;line-height:1.25}h2{font-size:1.125rem;line-height:1.3}h3{font-size:.95rem;line-height:1.35}p{margin:0}:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}.mapboxgl-map{border-radius:var(--radius-lg)}.map-container{height:calc(100vh - 180px);min-height:420px;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface-2)}@keyframes flash-update{0%{background-color:var(--primary-50)}to{background-color:transparent}}.flash-update{animation:flash-update 1.2s ease-out}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.85)}}.live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--success);animation:pulse-dot 1.4s ease-in-out infinite}.live-dot--offline{background:var(--text-muted);animation:none}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}