@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-latin-700-normal-Bxkt5Cjx.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-700-normal-Bth3BMcD.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-mono-latin-700-normal-7sUh57Bg.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-700-normal-CNHXzs6v.woff)format("woff")}:root{--bg:#0a0b0d;--panel:#0f1012;--raised:#17191d;--input-bg:#0c0d0f;--border:#232529;--border-hi:#30343a;--border-interactive:#6b7177;--text:#e6e9ec;--text-muted:#9aa3ad;--placeholder:#8b939d;--accent:#3f9aa0;--accent-hi:#6fc6cb;--accent-glow:#3f9aa038;--accent-muted:#3f9aa01a;--beam:#e9eef0;--green:#34d399;--green-bg:#34d39914;--green-ring:#34d39933;--amber:#fbbf24;--amber-bg:#fbbf2414;--amber-ring:#fbbf2433;--red:#f87171;--red-bg:#f8717114;--red-ring:#f8717133;--map-route:#6fc6cb;--map-route-comparison:#9aa3ad;--map-origin:#34d399;--map-cluster:#2b7a80;--map-camera-confirmed:#f87171;--map-camera-suspect:#fbbf24;--map-camera-confirmed-hi:#fca5a5;--map-camera-suspect-hi:#fcd34d;--map-marker-stroke:#fff;--r-sm:6px;--r:10px;--shadow:0 8px 40px #0009;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--t-xs:.625rem;--t-sm:.6875rem;--t-base:.75rem;--t-md:.8125rem;--t-lg:.875rem;--t-xl:1.375rem;--dur-fast:.15s;--dur-slow:.28s;--focus-ring:2px solid var(--accent-hi);--focus-offset:2px;--z-dropdown:200;--track-caption:.09em;--track-data:.04em;--beam-hi:#fff;--icon-btn:26px;--tap-min:24px;--font-sans:"IBM Plex Sans", system-ui, -apple-system, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace}*,:before,:after{box-sizing:border-box}#root{min-height:100svh}body{font-family:var(--font-sans);color:var(--text);background:var(--bg);font-size:var(--t-lg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-synthesis:none;text-rendering:optimizelegibility;margin:0;line-height:1.5}.plan-page{background:var(--panel);flex-direction:column;min-height:100svh;display:flex}.layout-body{flex-direction:column;flex:1;min-height:0;display:flex}.content-pane{flex-direction:column;display:flex}.app-header{padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:var(--s-3);display:flex}.header-actions{align-items:center;gap:var(--s-3);display:flex}.brand{flex-direction:column;gap:1px;min-width:0;display:flex}.wordmark{font-family:var(--font-mono);font-weight:700;font-size:var(--t-xl);letter-spacing:.01em;color:var(--beam);align-items:center;gap:9px;line-height:1;display:inline-flex}.wordmark:before{content:"";background:var(--accent-hi);width:9px;height:9px;box-shadow:0 0 0 3px var(--accent-muted);border-radius:1px;flex-shrink:0}.app-title{font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);white-space:normal;text-overflow:clip;margin:0;padding-left:18px;font-weight:500;overflow:visible}@media (width>=561px){.app-title{font-size:var(--t-base);letter-spacing:var(--track-caption);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}}.app-footer{padding:13px var(--s-4);border-top:1px solid var(--border);justify-content:center;display:flex}.app-footer a,.header-repo-link{font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);min-height:var(--tap-min);padding:0 var(--s-1);align-items:center;font-weight:500;text-decoration:none}.app-footer a{display:inline-flex}.header-repo-link{display:none}@media (width>=561px){.header-repo-link{display:inline-flex}}.app-footer a:hover,.header-repo-link:hover{color:var(--text)}.app-footer a:focus-visible,.header-repo-link:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset);border-radius:var(--r-sm)}.language-switcher{flex-direction:column;align-items:center;gap:3px;display:inline-flex}.language-switcher__label{color:var(--text-muted);font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:.05em;line-height:1.2}.lang-select{appearance:none;background:var(--raised);border:1px solid var(--border-interactive);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:.05em;border-radius:var(--r-sm);cursor:pointer;outline:none;padding:5px 9px}.lang-select:focus{border-color:var(--accent-hi);box-shadow:0 0 0 2px var(--accent-hi)}.map-container{background:var(--bg);flex-shrink:0;height:46svh;min-height:280px}.map-loading{background:var(--bg);width:100%;height:100%}@media (width>=900px){.plan-page{height:100svh;min-height:0}.layout-body{grid-template-columns:1fr min(420px,38%);min-height:0;display:grid}.map-container{min-width:0;height:100%;min-height:0}.content-pane{min-width:0;overflow-y:auto}}.route-panel{padding:var(--s-4);border-bottom:1px solid var(--border);--suggest-h:9rem;flex-direction:column;gap:10px;display:flex}.input-group{flex-direction:column;gap:5px;display:flex;position:relative}.field-label{font-family:var(--font-mono);font-size:var(--t-xs);text-transform:uppercase;letter-spacing:var(--track-caption);color:var(--text-muted);font-weight:500}.input-wrap{align-items:center;display:flex;position:relative}.field-input{width:100%;padding:10px 40px 10px var(--s-3);font-size:var(--t-lg);font-family:var(--font-sans);color:var(--text);background:var(--input-bg);border:1px solid var(--border-interactive);border-radius:var(--r);transition:border-color var(--dur-fast), box-shadow var(--dur-fast);outline:none}.field-input::placeholder{color:var(--placeholder)}.field-input:focus{border-color:var(--accent-hi);box-shadow:0 0 0 2px var(--accent-hi)}.icon-btn{width:var(--icon-btn);height:var(--icon-btn);border-radius:var(--r-sm);color:var(--text-muted);cursor:pointer;transition:color var(--dur-fast), background var(--dur-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.icon-btn:hover,.icon-btn:focus-visible{color:var(--accent-hi);background:var(--accent-muted)}.geo-btn{right:var(--s-2);position:absolute}.geo-btn:disabled{opacity:.3;cursor:not-allowed}.suggestions,.suggestion-status{background:var(--raised);border:1px solid var(--border-interactive);border-radius:var(--r);box-shadow:var(--shadow);z-index:var(--z-dropdown);padding:var(--s-1);max-height:var(--suggest-h);margin:0;list-style:none;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow-y:auto}.suggestions li button{text-align:left;width:100%;color:var(--text);font-size:var(--t-md);font-family:var(--font-sans);cursor:pointer;border-radius:var(--r-sm);background:0 0;border:none;padding:9px 11px;line-height:1.35;transition:background .1s}.suggestions li button:hover,.suggestions li button:focus{background:var(--accent-muted);outline:none}.suggestions li button[aria-selected=true]{background:var(--accent-muted);outline:2px solid var(--accent-hi);outline-offset:-2px}.suggestion-status{font-size:var(--t-md);color:var(--text-muted);padding:9px 11px;line-height:1.35}.suggestion-status.error{color:var(--red)}.field-error{font-size:var(--t-base);color:var(--red);margin:2px 0 0}.btn-plan{padding:var(--s-3);font-size:var(--t-lg);font-weight:600;font-family:var(--font-sans);color:var(--bg);background:var(--beam);border-radius:var(--r);cursor:pointer;letter-spacing:.02em;transition:background var(--dur-fast), box-shadow var(--dur-fast);border:none;margin-top:2px}.btn-plan:hover:not([aria-disabled=true]){background:var(--beam-hi);box-shadow:0 0 0 3px var(--accent-glow)}.btn-plan:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.btn-plan[aria-disabled=true]{background:var(--border-hi);color:var(--text-muted);cursor:not-allowed}.result-section{flex-direction:column;flex:1;display:flex}.camera-summary{align-items:center;gap:var(--s-2);padding:10px var(--s-4);background:var(--raised);border-bottom:1px solid var(--border);font-size:var(--t-md);color:var(--text-muted);display:flex}.avoided-badge{font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:var(--track-data);color:var(--green);background:var(--green-bg);border:1px solid var(--green-ring);border-radius:100px;align-items:center;gap:5px;padding:3px 10px;font-weight:500;display:inline-flex}.camera-summary .exposed{color:var(--amber);font-size:var(--t-base)}.camera-summary details{font-size:var(--t-base)}.camera-summary summary{cursor:pointer;color:var(--amber);min-height:var(--tap-min);padding:3px 0}.camera-summary ul{margin:var(--s-1) 0 0;padding-left:var(--s-4);color:var(--text-muted)}.route-result{padding:var(--s-4);gap:var(--s-4);flex-direction:column;display:flex}.verdict{align-items:flex-start;gap:var(--s-3);font-family:var(--font-sans);font-size:var(--t-lg);color:var(--text);font-weight:600;display:flex}.verdict:before{content:"";border-radius:2px;flex-shrink:0;width:9px;height:9px}.status{background:var(--panel);border:1px solid var(--border);border-radius:var(--r);border-left-width:3px;align-self:stretch;padding:13px 15px 13px 13px;line-height:1.45}.status:before{margin-top:5px}.status.clean{background:var(--green-bg);border-color:var(--green-ring);border-left-color:var(--green)}.status.clean:before{background:var(--green);box-shadow:0 0 0 3px var(--green-bg)}.stats{font-family:var(--font-mono);font-size:var(--t-sm);flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.stats li{background:var(--raised);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-muted);text-transform:uppercase;letter-spacing:var(--track-data);padding:5px 9px}.stats li:first-child,.stats li:nth-child(2){color:var(--text);border-color:var(--border-hi)}.stats li.fastest-exposes{color:var(--amber)}.comparison-toggle{margin-top:var(--s-2);padding:6px var(--s-3);background:var(--raised);border:1px solid var(--border-hi);border-radius:var(--r);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:var(--track-data);cursor:pointer;transition:color var(--dur-fast), border-color var(--dur-fast);align-self:flex-start}.comparison-toggle:before{content:"";vertical-align:middle;border-top:2px dashed #9ca3af;width:16px;height:0;margin-right:7px;display:inline-block}.comparison-toggle:hover,.comparison-toggle:focus-visible{color:var(--text);border-color:var(--accent)}.section-heading{font-family:var(--font-mono);font-size:var(--t-xs);text-transform:uppercase;letter-spacing:var(--track-caption);color:var(--text-muted);margin:0;font-weight:500}.directions{font-size:var(--t-md);counter-reset:step;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.directions li{border-radius:var(--r-sm);color:var(--text);counter-increment:step;align-items:baseline;gap:var(--s-3);padding:9px 10px;line-height:1.5;display:flex}.directions li:before{content:counter(step, decimal-leading-zero);font-family:var(--font-mono);font-size:var(--t-xs);letter-spacing:.02em;color:var(--accent-hi);text-align:right;flex-shrink:0;min-width:20px;padding-top:1px;font-weight:600}.directions li:hover{background:var(--raised)}.export-warning{border:1px solid var(--amber-ring);background:var(--amber-bg);border-radius:var(--r);gap:var(--s-2);font-size:var(--t-md);color:var(--amber);flex-direction:column;padding:14px;display:flex}.export-warning:focus-visible{outline:2px solid var(--amber-ring);outline-offset:var(--focus-offset)}.export-warning p{margin:0}.export-warning .export-risk{font-weight:500}.export-warning .export-howto{color:var(--text-muted)}.export-confirm{padding:9px var(--s-3);background:var(--raised);border:1px solid var(--border-hi);border-radius:var(--r-sm);color:var(--text);font-size:var(--t-md);font-weight:500;font-family:var(--font-sans);cursor:pointer;transition:border-color var(--dur-fast)}.export-confirm:hover{border-color:var(--accent)}.export-confirm:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.export-cancel{padding:var(--s-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-muted);font-size:var(--t-md);font-family:var(--font-sans);cursor:pointer;transition:color var(--dur-fast), border-color var(--dur-fast);background:0 0}.export-cancel:hover{color:var(--text);border-color:var(--border-hi)}.export-cancel:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.export-gpx-btn{background:var(--raised);border:1px solid var(--border-hi);border-radius:var(--r);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:var(--track-data);cursor:pointer;transition:color var(--dur-fast), border-color var(--dur-fast);align-self:flex-start;padding:9px 14px}.export-gpx-btn:hover{color:var(--text);border-color:var(--accent)}.export-gpx-btn:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}.coverage-warning{font-size:var(--t-base);color:var(--amber);margin:0}.error{padding:var(--s-3) var(--s-4);font-size:var(--t-md);color:var(--red);background:var(--red-bg);border-top:1px solid var(--red-ring);border-bottom:1px solid var(--red-ring);margin:0}.camera-popup-shell .maplibregl-popup-content{background:var(--panel);color:var(--text);border:1px solid var(--border-hi);border-radius:var(--r);box-shadow:var(--shadow);padding:var(--s-3) 14px;font-size:var(--t-md)}.camera-popup-shell.maplibregl-popup-anchor-top .maplibregl-popup-tip,.camera-popup-shell.maplibregl-popup-anchor-top-left .maplibregl-popup-tip,.camera-popup-shell.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{border-bottom-color:var(--panel)}.camera-popup-shell.maplibregl-popup-anchor-bottom .maplibregl-popup-tip,.camera-popup-shell.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip,.camera-popup-shell.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{border-top-color:var(--panel)}.camera-popup-shell.maplibregl-popup-anchor-left .maplibregl-popup-tip{border-right-color:var(--panel)}.camera-popup-shell.maplibregl-popup-anchor-right .maplibregl-popup-tip{border-left-color:var(--panel)}.camera-popup-shell .maplibregl-popup-close-button{color:var(--text-muted);min-width:var(--tap-min);min-height:var(--tap-min);padding:2px var(--s-2);font-size:1.125rem}.camera-popup-shell .maplibregl-popup-close-button:hover{color:var(--text);background:0 0}.camera-popup__title{color:var(--text);margin-bottom:var(--s-2);padding-right:var(--s-3);font-weight:600}.camera-popup__row{justify-content:space-between;gap:var(--s-4);line-height:1.7;display:flex}.camera-popup__k{color:var(--text-muted)}.camera-popup__v{color:var(--text)}.route-notice{padding:13px var(--s-4);background:var(--amber-bg);border-top:1px solid var(--amber-ring);border-bottom:1px solid var(--amber-ring);border-left:3px solid var(--amber);margin:0;line-height:1.5}.route-notice:before{background:var(--amber);box-shadow:0 0 0 3px var(--amber-bg);margin-top:6px}@media (prefers-reduced-motion:no-preference){.status,.route-notice{animation:verdict-in var(--dur-slow) cubic-bezier(.2, .7, .2, 1) both}@keyframes verdict-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{top:var(--s-2);left:var(--s-2);z-index:1000;min-height:var(--tap-min);padding:0 var(--s-3);font-family:var(--font-mono);font-size:var(--t-sm);text-transform:uppercase;letter-spacing:.08em;color:var(--bg);background:var(--beam);border-radius:var(--r-sm);align-items:center;font-weight:500;text-decoration:none;display:inline-flex;position:absolute;transform:translateY(-300%)}.skip-link:focus{outline:var(--focus-ring);outline-offset:var(--focus-offset);transform:translateY(0)}.directions-header{justify-content:space-between;align-items:center;gap:var(--s-2);display:flex}.printable-directions{display:none}@media print{.no-print{display:none!important}@page{margin:15mm}html,body,.plan-page,.layout-body,.content-pane,.result-section,.route-result{color:#000!important;box-shadow:none!important;background:#fff!important}.route-result{gap:0!important;padding:0!important;display:block!important}.directions-header{display:block}.printable-directions{color:#000;background:#fff;font-size:14pt;display:block}.printable-directions .print-heading{margin:0 0 12pt;font-size:20pt}.printable-directions .print-trip{flex-direction:column;gap:2pt;margin:0 0 6pt;font-size:13pt;display:flex}.printable-directions .print-totals{margin:0 0 16pt;font-size:12pt}.printable-directions .print-steps{margin:0 0 16pt;padding-left:1.6em;list-style:decimal}.printable-directions .print-steps li{break-inside:avoid;page-break-inside:avoid;margin-bottom:10pt;font-size:14pt;line-height:1.5}.printable-directions .print-notice{border-top:1px solid #000;margin:16pt 0 0;padding-top:8pt;font-size:10pt}}
