:root{--brand-navy:#15496f;--brand-navy-deep:#0e3450;--brand-blue:#7fb0ce;--brand-paper:#e9f2f8;--accent:var(--brand-navy);--accent-deep:var(--brand-navy-deep);--accent-soft:#d7e6f1;--on-accent:#f2f8fc;--accent-on-dark:var(--brand-blue);--cream-0:#eef4f9;--cream-1:#e2ecf4;--cream-2:#d1e0ec;--cream-3:#acc7db;--ink-1:#0c1a24;--ink-2:#26343d;--ink-3:#566872;--ink-4:#8699a4;--signal-yellow:var(--accent);--signal-yellow-deep:var(--accent-deep);--signal-yellow-soft:var(--accent-soft);--sky:#2547d8;--leaf:#1f8a5b;--plum:#b03a6e;--amber:#ff8a00;--danger:#c2321c;--danger-deep:#98240f;--danger-soft:#fbe4df;--leaf-soft:#dcefe4;--map-bg:#e2ecf4;--map-land:#eaf1f7;--map-park:#d9e3c9;--map-water:#c9dbf0;--map-road:#fff;--map-stroke:#cbdbe8;--glass-tint:rgba(238,244,249,.62);--glass-tint-strong:rgba(238,244,249,.82);--glass-stroke:rgba(12,12,10,.1);--glass-shadow:0 10px 40px -10px rgba(12,12,10,.16),0 2px 8px -2px rgba(12,12,10,.06),inset 0 1px 0 hsla(0,0%,100%,.7);--r-sm:6px;--r-md:10px;--r-lg:16px;--r-xl:22px;--r-pill:999px;--nav-h:76px;--font-display:"Fraunces",Georgia,"Times New Roman",serif;--font-ui:"Geist",-apple-system,system-ui,sans-serif;--font-mono:"Geist Mono","JetBrains Mono",ui-monospace,monospace}html body{-webkit-font-smoothing:antialiased;background:var(--cream-0);color:var(--ink-1);font-family:var(--font-ui);text-rendering:optimizeLegibility}h1,h2,h3,h4,h5{font-family:var(--font-display);font-weight:700;letter-spacing:-.03em}body,html{-webkit-touch-callout:none;-webkit-text-size-adjust:none;-webkit-tap-highlight-color:transparent;height:100%;margin:0;overflow:hidden;padding:0;position:fixed;width:100%}.no-select,button,nav{-webkit-user-select:none;user-select:none}#root{height:100%;overflow:auto;position:relative;width:100%}.cordova{-webkit-overflow-scrolling:touch}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.fade-in{animation:fadeIn .35s cubic-bezier(.2,.7,.3,1) both}@keyframes routeDash{to{stroke-dashoffset:-32}}.route-dash{stroke-dasharray:16 8;animation:routeDash 1.6s linear infinite}@keyframes pulse{0%,to{opacity:.8;transform:scale(1)}50%{opacity:0;transform:scale(1.6)}}.pulse:before{animation:pulse 2s ease-out infinite;background:currentColor;border-radius:50%;content:"";inset:-4px;position:absolute}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}