:root{--surface-canvas:#1c1e1f;--surface-panel:#082e39;--surface-raised:#0b3b46;--surface-line:rgb(209 231 229 / .15);--surface-grid:rgb(209 231 229 / .08);--text-primary:#f3f5f3;--text-secondary:#c0d4d2;--text-muted:#91aba9;--route:#55b9d3;--route-before:#5cc8e6;--route-muted:#a4e6f5;--selection:#f07845;--sunlight:#f4b63d;--alpenglow:#e98a91;--teal:#087c83;--forest:#176b50;--accent:#f0a67d;--accent-hover:#f5bb9a;--accent-press:#e08d61;--accent-ink:#1a1410;--focus:var(--accent);--font-display:Georgia,ui-serif,serif;--font-ui:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,sans-serif;font-family:var(--font-ui);color:var(--text-primary);background:var(--surface-canvas)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:320px;background:var(--surface-canvas)}button,a{font:inherit}button{cursor:pointer;color:inherit}button:focus-visible,a:focus-visible{outline:2px solid var(--focus);outline-offset:3px}
#landing-screen:focus-visible,#planning-workspace:focus-visible,#start-screen:focus-visible{outline:none}.app-shell{position:relative;display:grid;grid-template-columns:clamp(204px,12vw,240px) minmax(0,1fr);min-height:100vh}.app-rail{position:sticky;top:0;height:100vh;padding:27px 16px 20px;border-right:1px solid rgb(209 231 229 / .10);background:rgb(20 22 23 / .55);-webkit-backdrop-filter:blur(16px) saturate(1.1);backdrop-filter:blur(16px) saturate(1.1);display:flex;flex-direction:column}.brand{color:var(--text-primary);font-size:13px;font-weight:800;letter-spacing:.14em;text-decoration:none;padding:0 4px}.brand-rail-lockup{display:block;font-size:var(--brand-logo-size)}
/* The logo (AV-013): the symbol plus the brand name as live text, built by
   aventurro/brand_runtime.js. Sized by font-size in em and laid out with
   inline-flex, so a name of any length keeps the same proportions. */
.brand-lockup{display:inline-flex;align-items:flex-end;white-space:nowrap;font-family:var(--font-ui);font-weight:600;line-height:1;letter-spacing:-.01em;color:var(--text-primary)}
/* AV-046: the Lentiqa master drawn inline -- as tall as the symbol of the logo before it (2.29em), its width from the drawing. */
.brand-lockup-logo{display:block;flex:0 0 auto;height:2.29em;width:auto;overflow:visible}
/* Another name than the logo draws (BRAND_NAME): the clouds over the name as live text. */
.brand-lockup-text{flex-direction:column;align-items:flex-start;gap:.12em}
.brand-lockup-symbol{display:block;flex:0 0 auto;height:.7em;width:auto;overflow:visible}
.brand-lockup-name{display:inline-flex;font-weight:300;font-size:1.3em;letter-spacing:.01em}
.brand-letter{display:inline-block;white-space:pre}.product-nav{display:grid;gap:4px;margin-top:44px}.product-nav a,.product-nav span{min-height:37px;padding:10px;border-radius:6px;color:var(--text-muted);font-size:13px;text-decoration:none}.product-nav .active{background:rgb(85 185 211 / .12);color:var(--text-primary);box-shadow:inset 2px 0 var(--route)}.rail-current{margin:34px 5px 0;padding:15px 10px;border-top:1px solid var(--surface-line);border-bottom:1px solid var(--surface-line)}.rail-current p,.rail-footer{margin:0;color:var(--text-muted);font-size:12px;font-weight:750;letter-spacing:.11em}.rail-current a{display:block;margin:9px 0 5px;color:var(--text-primary);font-size:14px;text-decoration:none;line-height:1.3}.rail-current span{font-size:14px;color:var(--text-muted)}.rail-footer{margin-top:auto;padding:10px;line-height:1.65;color:#6d9290}
/* Component display rules must never defeat capability-driven hidden states. */
.journey-panels[hidden],.mission-workspace[hidden],.journey-nav[hidden],.mission-status-strip[hidden],.mission-controls[hidden],.creator-panel[hidden],.empty-journey[hidden],.planning-workspace[hidden],.stage-rail[hidden],.start-screen[hidden]{display:none!important}
main{min-width:0;width:100%;padding:clamp(14px,1.3vw,32px) clamp(14px,1.6vw,40px) 30px;display:flex;flex-direction:column;min-height:100dvh}.mission-header{min-width:0;min-height:180px;position:relative;display:flex;justify-content:space-between;align-items:center;gap:28px;padding:18px 0}.mission-copy,.mission-controls,.mission-utility,.mission-weather{position:relative;z-index:1}.mission-copy,.mission-controls{min-width:0}.eyebrow{margin:0 0 6px;color:#b3d5d2;font-size:12px;font-weight:800;letter-spacing:.14em}.mission-super{margin:0 0 2px;font-size:15px;font-weight:600;color:#dcebe9;letter-spacing:-.01em;text-shadow:0 1px 4px rgb(0 0 0 / .4)}.mission-header h1{margin:0;font-family:var(--font-display);font-size:clamp(30px,3.2vw,44px);font-weight:500;line-height:1.02;letter-spacing:-.03em;text-shadow:0 2px 10px rgb(0 0 0 / .35)}.mission-context{margin:10px 0 0;color:var(--text-secondary);font-size:14px}.mission-status{margin:6px 0 0;min-height:16px;color:var(--text-muted);font-size:14px}.mission-status:empty{display:none}.mission-controls{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:8px;height:100%}.scenario-selector{display:flex;padding:3px;border:1px solid rgb(243 245 243 / .19);background:rgb(3 24 31 / .25);border-radius:4px}.scenario-selector button{min-height:29px;padding:0 10px;border:0;background:transparent;color:var(--text-secondary);font-size:14px;white-space:nowrap}.scenario-selector button[aria-pressed="true"]{background:rgb(243 245 243 / .15);color:var(--text-primary)}.mission-metrics{display:grid;grid-template-columns:repeat(4,minmax(74px,1fr));gap:0;margin:0;border-top:1px solid rgb(243 245 243 / .24)}.mission-metrics div{display:grid;grid-template-columns:18px 1fr;column-gap:8px;align-items:center;padding:10px 0 0 14px;border-left:1px solid rgb(243 245 243 / .16)}.mission-metrics div:first-child{border-left:0;padding-left:0}.metric-icon{grid-row:1/3;width:18px;height:18px;color:var(--sunlight);opacity:.82}.metric-icon svg{display:block;width:100%;height:100%}.mission-metrics dt{color:#b2cfcc;font-size:12px;font-weight:750;letter-spacing:.11em}.mission-metrics dd{margin:4px 0 0;font-size:17px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.04em}
.mission-utility{display:flex;align-items:center;gap:10px}.utility-icon{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid rgb(243 245 243 / .22);border-radius:50%;background:rgb(28 30 31 / .45);color:#e7f0ef}.utility-icon svg{width:16px;height:16px}
.mission-weather{text-align:right;color:#f3f5f3}.mission-weather #mission-weather-temp{display:block;font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.03em;text-shadow:0 1px 4px rgb(0 0 0 / .4)}.mission-weather #mission-weather-desc{display:block;margin-top:2px;font-size:14px;color:#dcebe9}
.leaflet-control-zoom{border:1px solid rgb(243 245 243 / .19)!important;background:rgb(3 24 31 / .74)!important;box-shadow:none!important;border-radius:3px!important}.leaflet-control-zoom a{background:transparent!important;color:#d3dfde!important;border-color:rgb(243 245 243 / .14)!important}.leaflet-control-zoom a:hover{background:rgb(243 245 243 / .12)!important;color:#fff!important}

.key-points button{font-size:14px;letter-spacing:.01em}
.journey-nav{display:flex;gap:2px;overflow:auto;margin:13px 0 0;padding:0 2px;border-bottom:1px solid var(--surface-line)}.mission-status-strip{display:flex;align-items:center;gap:17px;min-height:49px;border-bottom:1px solid var(--surface-line)}.mission-status-strip>p{margin:0;color:var(--text-muted);font-size:12px;font-weight:800;letter-spacing:.12em;white-space:nowrap}.mission-status-strip>div{display:flex;flex-wrap:wrap;gap:7px 13px}.status-item{display:inline-flex;align-items:center;gap:6px;color:var(--text-secondary);font-size:14px;white-space:nowrap}.status-item i{width:6px;height:6px;border-radius:50%;background:#829b9a}.status-item[data-state="AVAILABLE"] i{background:var(--teal)}.status-item[data-state="PARTIAL"] i{background:var(--sunlight)}.status-item[data-state="UNAVAILABLE"] i{background:var(--alpenglow)}.status-item[data-state="UNKNOWN"] i{background:var(--text-muted)}
.mission-workspace{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) clamp(320px,24vw,600px);align-items:stretch;margin-top:16px;border:1px solid var(--surface-line);background:var(--surface-panel);box-shadow:0 17px 38px rgb(0 12 18 / .19)}.map-zone,.telemetry-zone{padding:18px 20px;min-width:0}.telemetry-zone{border-top:1px solid var(--surface-line);background:linear-gradient(90deg,rgb(2 25 33 / .25),rgb(10 59 68 / .45))}
@media(max-width:1180px){.mission-workspace{display:flex;flex-direction:column}.map-zone{order:1}.telemetry-zone{order:3}.telemetry-zone{border-left:0;border-top:1px solid var(--surface-line)}}.instrument-heading{display:flex;justify-content:space-between;gap:18px;align-items:start}.instrument-heading h2{margin:0;font-size:18px;letter-spacing:-.03em}.instrument-heading>p{margin:2px 0;color:var(--text-muted);font-size:14px;font-variant-numeric:tabular-nums}.journey-map{width:100%;height:auto;aspect-ratio:7/3;min-height:260px;max-height:75dvh;margin-top:14px;border:1px solid rgb(243 245 243 / .19);background:#0a3a46;box-shadow:inset 0 0 0 1px rgb(0 0 0 / .12)}.journey-map > svg{width:100%;height:100%;display:block}.map-foot{display:grid;grid-template-columns:auto 1fr auto;gap:12px;margin-top:9px;color:var(--text-muted);font-size:12px;letter-spacing:.04em}.map-foot span:nth-child(2){text-align:center}.leaflet-container{font:inherit}.leaflet-control-attribution{background:rgb(3 24 31 / .74)!important;color:#d3dfde!important;font-size:12px!important}.leaflet-control-attribution a{color:#d3dfde!important}.telemetry-legend{display:flex;gap:17px;margin:13px 0 2px;color:var(--text-secondary);font-size:12px}.telemetry-legend span{display:flex;align-items:center;gap:5px}.telemetry-legend i{width:14px;height:3px;display:inline-block}.legend-elevation{background:var(--route)}.legend-light{background:repeating-linear-gradient(135deg,var(--sunlight) 0 3px,var(--alpenglow) 3px 6px)}.telemetry-zone svg{display:block;width:100%;height:auto;aspect-ratio:1000/150;overflow:visible;cursor:crosshair;background-image:linear-gradient(var(--surface-grid) 1px,transparent 1px);background-size:100% 33%}.profile-fill{fill:var(--teal);opacity:.22}.profile-line-before{fill:none;stroke:var(--route-before);stroke-width:3;stroke-linejoin:round}.profile-line-after{fill:none;stroke:var(--selection);stroke-width:3;stroke-linejoin:round}.profile-base{stroke:rgb(243 245 243 / .32);stroke-width:1}.profile-guide{stroke:var(--selection);stroke-width:1.5;stroke-dasharray:4 4}.profile-day-boundary{stroke:rgb(243 245 243 / .22);stroke-width:1;stroke-dasharray:2 3}.profile-day-label{fill:var(--text-muted);font-size:12px;font-weight:700}.profile-marker{fill:var(--selection);stroke:var(--text-primary);stroke-width:3}.telemetry-zone text{fill:var(--text-muted);font-size:var(--profile-label-size,12px)}.light-timeline-wrap{margin:12px 0 12px}.timeline-label{display:flex;justify-content:space-between;color:var(--text-muted);font-size:12px;letter-spacing:.1em}.timeline-label span:first-child{color:#e9c987;font-weight:800}.light-timeline{height:10px;position:relative;overflow:hidden;margin-top:6px;background:#0a3440}.light-transition{position:absolute;top:0;bottom:0;min-width:7px;background:repeating-linear-gradient(135deg,var(--sunlight) 0 3px,var(--alpenglow) 3px 6px)}.timeline{height:17px;position:relative;border-top:1px solid rgb(243 245 243 / .3)}.timeline button{position:absolute;top:-7px;width:14px;height:14px;padding:0;border:2px solid #bed6d7;border-radius:50%;background:#082e39}.selection-needle{position:absolute;top:-9px;bottom:-1px;width:2px;background:var(--selection);box-shadow:0 0 0 3px color-mix(in srgb,var(--selection) 16%,transparent)}.key-points{display:flex;justify-content:space-between;gap:5px}.key-points button{min-height:34px;flex:1;padding:6px 3px;border:0;background:transparent;color:var(--text-muted);font-size:14px;font-variant-numeric:tabular-nums}.key-points button:hover{background:rgb(243 245 243 / .07);color:var(--text-primary)}
.tab-heading{display:flex;justify-content:space-between;gap:8px;padding-bottom:17px;border-bottom:1px solid var(--surface-line)}.tab-heading h2{margin:0;font-size:28px;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.045em}.selection-time{margin:7px 0 0;color:var(--text-muted);font-size:14px}.tab-heading button{align-self:start;min-height:34px;padding:0 9px;border:1px solid color-mix(in srgb,var(--accent) 55%,transparent);background:color-mix(in srgb,var(--accent) 6%,transparent);color:#f7d99e;font-size:14px}.selection-facts{display:grid;grid-template-columns:1fr 1fr;margin:0}.selection-facts div{position:relative;min-height:78px;padding:15px 8px 11px 14px;border-bottom:1px solid var(--surface-line)}.selection-facts div:nth-child(odd){border-right:1px solid var(--surface-line)}.selection-facts div:before{content:"";position:absolute;left:0;top:19px;width:3px;height:25px;background:var(--route)}.selection-facts [data-kind="light"]:before{background:var(--sunlight)}.selection-facts [data-kind="wind"]:before{background:var(--teal)}.selection-facts dt{color:var(--text-muted);font-size:12px;font-weight:750;letter-spacing:.1em}.selection-facts dd{margin:5px 0 0;font-size:16px;font-weight:700;line-height:1.15;letter-spacing:-.03em}.secondary-row{display:flex;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--surface-line);font-size:12px}.secondary-row span{color:var(--text-secondary)}.secondary-row strong{max-width:55%;text-align:right;font-size:14px}.secondary-row[data-kind="photography"] strong{color:#f2cb83}
.why-backdrop{position:fixed;z-index:10;inset:0;background:rgb(0 12 17 / .59)}.why-panel{position:fixed;z-index:11;right:0;top:0;width:min(470px,100vw);height:100dvh;padding:26px;overflow:auto;transform:translateX(103%);transition:transform .22s ease;background:linear-gradient(150deg,#0d4651,#052d38);border-left:1px solid var(--surface-line);box-shadow:-18px 0 43px rgb(0 10 14 / .35)}.why-panel.open{transform:translateX(0)}.why-heading{display:flex;justify-content:space-between;padding-bottom:20px;border-bottom:1px solid var(--surface-line)}.why-heading h2{margin:0;font-size:22px}.why-heading button{border:0;background:transparent;color:var(--text-secondary);font-size:14px}.evidence-summary{margin-top:22px}.evidence-summary>p{color:var(--text-secondary);font-size:14px;line-height:1.55}.evidence-summary dl,.why-detail{margin:18px 0}.evidence-summary dl div,.why-detail div{padding:11px 0;border-bottom:1px solid var(--surface-line)}.evidence-summary dt,.why-detail dt{color:var(--text-muted);font-size:12px;letter-spacing:.08em}.evidence-summary dd,.why-detail dd{margin:5px 0 0;font-size:14px;overflow-wrap:anywhere}.technical-detail{margin-top:20px;padding:14px;border:1px solid var(--surface-line);background:rgb(3 28 37 / .28)}.technical-detail summary{cursor:pointer;color:#f5d18e;font-size:14px}.technical-detail>p{color:var(--text-muted);font-size:14px;line-height:1.5}
@media(max-width:900px){.app-shell{display:block}.app-rail{position:relative;height:auto;padding:17px 18px;border-right:0;border-bottom:1px solid var(--surface-line)}.product-nav,.rail-current,.rail-footer{display:none}main{padding:14px}.mission-utility,.mission-weather{display:none}.mission-header{min-height:212px;padding:21px;display:block}.mission-header h1{font-size:38px}.mission-controls{align-items:stretch;margin-top:18px}.scenario-selector{align-self:flex-start}.mission-metrics{margin-top:16px}.mission-metrics div{padding-left:10px}.mission-metrics dd{font-size:15px}.journey-nav{margin-top:9px}.mission-status-strip{align-items:start;padding:11px 0;gap:11px}.mission-status-strip>div{flex-wrap:wrap;gap:7px 12px}.mission-workspace{display:flex;flex-direction:column;align-items:stretch;min-width:0;margin-top:12px}.map-zone{padding:15px}.telemetry-zone{order:3;padding:16px}.map-foot{grid-template-columns:auto 1fr}.map-foot span:last-child{display:none}.key-points{overflow:auto;justify-content:space-between}.key-points button{min-width:76px;flex:0 0 auto}.why-panel{top:auto;bottom:0;width:100%;height:min(84dvh,720px);border-left:0;border-top:1px solid var(--surface-line);transform:translateY(103%)}.why-panel.open{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}
.journey-rail{margin:20px 5px 0}.journey-rail .rail-current{margin:0;padding:12px 10px}.journey-rail button{width:100%;margin-top:10px;min-height:34px;border:1px solid rgb(85 185 211 / .55);background:rgb(85 185 211 / .09);color:var(--text-primary);font-size:14px;text-align:left}.journey-list{display:grid;gap:3px;margin-top:7px}.journey-list button{width:100%;padding:10px;border:0;border-left:2px solid transparent;background:transparent;color:var(--text-secondary);text-align:left}.journey-list button[aria-current="page"]{border-left-color:var(--route);background:rgb(85 185 211 / .1);color:var(--text-primary)}.journey-list strong,.journey-list span{display:block}.journey-list strong{font-size:14px;line-height:1.25}.journey-list span{margin-top:3px;color:var(--text-muted);font-size:14px;line-height:1.35}.creator-panel,.empty-journey{margin-top:16px;padding:clamp(22px,4vw,48px);border:1px solid var(--surface-line);background:linear-gradient(125deg,#073641,#082932 64%,#041f29);box-shadow:0 18px 38px rgb(0 12 18 / .2)}.creator-panel{max-width:850px}.creator-panel h2,.empty-journey h2{max-width:680px;margin:0;font-family:var(--font-display);font-size:clamp(30px,4vw,48px);font-weight:500;letter-spacing:-.045em;line-height:1}.creator-panel>div>p:not(.eyebrow),.empty-journey p{max-width:630px;color:var(--text-secondary);line-height:1.55}.creator-panel form{display:grid;gap:17px;max-width:720px;margin-top:30px}.creator-panel label,.creator-panel legend{color:var(--text-secondary);font-size:12px}.creator-panel input,.creator-panel select{display:block;width:100%;min-height:42px;margin-top:7px;padding:8px 10px;border:1px solid rgb(209 231 229 / .25);border-radius:2px;background:#041f29;color:var(--text-primary)}.creator-panel fieldset{display:grid;gap:10px;margin:0;padding:14px;border:1px solid var(--surface-line)}.creator-panel fieldset>label{display:inline-flex;align-items:center;gap:7px}.creator-panel fieldset input[type="radio"]{width:auto;min-height:auto;margin:0;accent-color:var(--accent)}.creator-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.creator-actions{display:flex;gap:10px;margin-top:7px}.creator-actions button,.empty-journey button{min-height:42px;padding:0 16px;border:1px solid rgb(85 185 211 / .6);background:#087c83;color:white;font-weight:700}.creator-actions button[type="button"]{border-color:var(--surface-line);background:transparent;color:var(--text-secondary)}.creator-actions button:disabled{cursor:wait;opacity:.65}.creator-error{min-height:18px;margin:0;color:#ffd0bf;font-size:14px}.empty-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(220px,.8fr);gap:48px;align-items:end}.planning-facts{display:grid;gap:0;margin:0;border-top:1px solid var(--surface-line)}.planning-facts div{padding:13px 0;border-bottom:1px solid var(--surface-line)}.planning-facts dt{color:var(--text-muted);font-size:12px;font-weight:800;letter-spacing:.12em}.planning-facts dd{margin:5px 0 0;font-size:15px}.route-boundary{min-height:18px;margin:12px 0 0;font-size:14px;color:#f2cb83}@media(max-width:900px){.journey-rail{margin-top:13px}.journey-rail .rail-current{display:block}.journey-list{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.journey-list button{border:1px solid var(--surface-line)}.creator-grid,.empty-grid{grid-template-columns:1fr}.creator-panel,.empty-journey{padding:24px 20px}.creator-actions{flex-wrap:wrap}}
.planning-workspace{position:relative;margin-top:16px;flex:1 1 auto;min-height:420px;border:1px solid var(--surface-line);background:var(--surface-panel);box-shadow:0 17px 38px rgb(0 12 18 / .19);overflow:hidden}.planning-canvas{position:absolute;inset:0;background:#0a3a46}.planning-canvas>div,.planning-canvas>svg{position:absolute;inset:0;width:100%;height:100%}.planning-overlay{position:absolute;top:16px;left:16px;z-index:1200;display:flex;align-items:center;gap:14px;padding:9px 14px;border:1px solid rgb(243 245 243 / .19);background:rgb(3 24 31 / .74)}.planning-overlay p{margin:0;color:var(--text-secondary);font-size:12px;font-weight:800;letter-spacing:.12em}#planning-map-status{color:var(--text-muted);font-size:12px;letter-spacing:.04em}.maplibregl-ctrl-group{background:rgb(3 24 31 / .74);border:1px solid rgb(243 245 243 / .19);box-shadow:none}.maplibregl-ctrl-group button{background:transparent}.maplibregl-ctrl-group button:not(:disabled):hover{background:rgb(243 245 243 / .12)}.maplibregl-ctrl-icon{filter:invert(1) brightness(1.5)}.maplibregl-ctrl-attrib{background:rgb(3 24 31 / .74)!important;color:#d3dfde!important;font-size:12px!important}.maplibregl-ctrl-attrib a{color:#d3dfde!important}.aventurro-pan-control{display:grid;grid-template-columns:repeat(3,28px);grid-auto-rows:28px;gap:1px}.aventurro-pan-control button{border:0;background:transparent;color:var(--text-primary);font-size:13px;line-height:28px;cursor:pointer}.aventurro-pan-up{grid-column:2;grid-row:1}.aventurro-pan-left{grid-column:1;grid-row:2}.aventurro-pan-right{grid-column:3;grid-row:2}.aventurro-pan-down{grid-column:2;grid-row:2}@media(max-width:900px){.planning-workspace{min-height:360px}}
.stage-rail{display:flex;flex-wrap:wrap;align-items:center;gap:2px 2px;margin-top:14px;padding-top:2px;min-width:0}.stage-rail button{min-height:32px;padding:0 12px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:12px;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap}.stage-rail button:hover{color:var(--text-secondary)}.stage-rail button[aria-pressed="true"]{color:var(--text-primary);border-bottom-color:var(--accent)}.stage-rail button.stage-rail-all{font-size:12px;font-weight:800;letter-spacing:.1em;padding-right:16px;margin-right:6px;border-right:1px solid var(--surface-line)}.stage-rail button.stage-rail-unanalysed[aria-pressed="true"]{border-bottom-color:var(--teal)}.stage-dot{display:inline-block;width:6px;height:6px;margin-right:6px;border-radius:50%;background:var(--selection);vertical-align:middle}.stage-rail-unanalysed .stage-dot{background:transparent;border:1.5px solid var(--text-muted)}
.stage-marker{width:16px;height:16px;padding:0;border:2px solid #f3f5f3;border-radius:50%;background:#087c83;cursor:pointer}.stage-marker[data-state=ANALYZED]{background:var(--selection)}.stage-marker .stage-marker-label{position:absolute;left:50%;bottom:calc(100% + 1px);transform:translateX(-50%);line-height:1;pointer-events:none}
.stage-marker-label{background:transparent!important;border:0!important;box-shadow:none!important;color:#f3f5f3;font-size:12px;font-weight:800;text-shadow:0 1px 3px rgb(0 0 0 / .85)}.stage-marker-label:before{display:none}
.profile-boundary{stroke:rgb(243 245 243 / .22);stroke-width:1;stroke-dasharray:2 3}

@media(max-width:900px){.stage-rail{margin-top:10px;overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch}.stage-rail button.stage-rail-all{flex:0 0 auto}}
.planning-controls{position:absolute;top:16px;right:64px;z-index:1200;display:flex;flex-wrap:wrap;align-items:center;gap:8px;max-width:min(540px,calc(100% - 80px));padding:9px 14px;border:1px solid rgb(243 245 243 / .19);background:rgb(3 24 31 / .74)}.planning-controls label{display:flex;flex-direction:column;gap:3px;color:var(--text-muted);font-size:12px;font-weight:750;letter-spacing:.08em}.planning-controls select,.planning-controls input{min-height:30px;padding:2px 6px;border:1px solid rgb(209 231 229 / .25);border-radius:2px;background:#041f29;color:var(--text-primary);font-size:13px}.planning-camp-hint{color:var(--text-secondary);font-size:12px;max-width:220px}.planning-controls button{min-height:30px;padding:0 7px;border:1px solid var(--surface-line);background:transparent;color:var(--text-secondary);font-size:12px}.planning-summary-stack{position:absolute;left:130px;bottom:16px;z-index:1200;display:flex;flex-direction:column-reverse;gap:10px;max-width:min(400px,calc(100% - 146px));max-height:70%}.planning-day-preview{max-height:45%;overflow:auto;padding:10px 14px;border:1px solid rgb(243 245 243 / .19);background:rgb(3 24 31 / .74);font-size:13px}.planning-day-preview:empty{display:none}.planning-day-row{display:flex;flex-wrap:wrap;gap:8px;padding:6px 0;border-bottom:1px solid var(--surface-line);color:var(--text-secondary)}.planning-day-row strong{color:var(--text-primary)}.planning-camps-summary{margin-top:6px}.planning-camp-row{display:flex;justify-content:space-between;gap:10px;padding:5px 0;color:var(--text-secondary)}
.planning-elevation-profile-panel{flex-shrink:0;padding:10px 14px 4px;border:1px solid rgb(243 245 243 / .19);background:rgb(3 24 31 / .74)}.planning-elevation-profile-panel[hidden]{display:none}.planning-elevation-profile-panel svg{display:block;width:100%;height:96px;overflow:visible;cursor:crosshair}.planning-elevation-profile-panel text{fill:var(--text-muted);font-size:var(--profile-label-size,12px)}
.camps-panel{margin-top:18px}.camps-panel-heading{display:flex;justify-content:space-between;align-items:center;gap:10px}.camps-panel-heading button{min-height:30px;padding:0 10px;border:1px solid rgb(85 185 211 / .55);background:rgb(85 185 211 / .09);color:var(--text-primary);font-size:12px}.camps-panel-heading button:disabled{cursor:default;opacity:.6}.camps-list{margin-top:8px}.camps-empty{margin:0;color:var(--text-muted);font-size:13px}.camps-row{padding:9px 0;border-bottom:1px solid var(--surface-line);font-size:13px}.camps-row strong{display:block;color:var(--text-primary)}.camps-row span{color:var(--text-muted)}.camps-night{display:block;margin-top:2px}.camps-row[data-state="UNAVAILABLE"] .camps-night,.night-unavailable{color:var(--text-muted);font-style:italic}.camps-row[data-state="PARTIAL"] .camps-night{color:var(--sunlight)}.camps-days{margin-bottom:6px}.camps-day-row{display:flex;flex-wrap:wrap;gap:8px;padding:7px 0;border-bottom:1px solid var(--surface-line);font-size:13px;color:var(--text-muted)}.camps-day-row strong{color:var(--text-primary)}.camps-rest-row{display:flex;flex-wrap:wrap;gap:8px;padding:7px 0 7px 10px;border-bottom:1px solid var(--surface-line);border-left:2px solid var(--selection);font-size:13px;color:var(--text-muted)}.camps-rest-row strong{color:var(--selection)}.camps-stay{display:block;margin-top:2px;color:var(--text-secondary)}
.start-screen{margin-top:16px;flex:1 1 auto;padding:clamp(20px,3vw,36px);border:1px solid var(--surface-line);background:linear-gradient(125deg,#073641,#082932 64%,#041f29);box-shadow:0 18px 38px rgb(0 12 18 / .2)}.start-screen-heading{display:flex;justify-content:space-between;align-items:center;gap:14px;padding-bottom:18px;border-bottom:1px solid var(--surface-line)}.start-journey-section{margin-top:26px}.start-journey-section h2{margin:0 0 12px;font-family:var(--font-display);font-size:22px;font-weight:500;letter-spacing:-.02em}.start-journey-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.start-card{display:flex;flex-direction:column;gap:6px;padding:16px;border:1px solid var(--surface-line);border-left:3px solid var(--route);background:rgb(85 185 211 / .06);color:var(--text-primary);text-align:left}.start-card:hover{background:rgb(85 185 211 / .12)}.start-card strong{font-size:16px;line-height:1.3}.start-card span{color:var(--text-muted);font-size:13px}#start-completed .start-card{border-left-color:var(--text-muted)}.start-empty{margin:0;color:var(--text-muted);font-size:14px}@media(max-width:900px){.start-screen{padding:18px}.start-screen-heading{flex-wrap:wrap}}
.planning-controls button:disabled{cursor:default;opacity:.5}
.stage-tree{display:flex;flex-wrap:wrap;align-items:center;gap:4px;flex:1;min-width:0}.stage-tree-group{display:inline-flex;flex-wrap:wrap;align-items:center;gap:2px;padding:0 4px;border:1px solid var(--surface-line);border-radius:3px}.stage-tree-group-head,.stage-tree-children{display:inline-flex;flex-wrap:wrap;align-items:center;gap:2px}.stage-tree-children[hidden]{display:none}.stage-tree-toggle small{margin-left:6px;color:var(--text-muted);font-size:12px;font-weight:600}.stage-tree-caret{display:inline-block;width:12px;margin-right:2px}.stage-rail .stage-tree-toggle{color:var(--text-secondary);font-weight:750;letter-spacing:.04em}.stage-rail .stage-tree-show{padding:0 8px;color:var(--route)}.stage-rail .stage-tree-show:hover{color:var(--text-primary)}
.stage-tree--list{display:block}.stage-tree--list button{font:inherit;cursor:pointer}.stage-tree--list .stage-tree-all{display:block;width:100%;padding:6px 0;border:0;border-bottom:1px solid var(--surface-line);background:none;color:var(--text-muted);font-size:12px;font-weight:800;letter-spacing:.1em;text-align:left}.stage-tree--list .stage-tree-all[aria-pressed="true"]{color:var(--text-primary)}.stage-tree--list .stage-tree-group{display:block;padding:0;border:0;border-radius:0}.stage-tree--list .stage-tree-group-head{display:flex;justify-content:space-between;width:100%;border-bottom:1px solid var(--surface-line)}.stage-tree--list .stage-tree-toggle{flex:1;padding:6px 0;border:0;background:none;color:var(--text-primary);font-weight:700;text-align:left}.stage-tree--list .stage-tree-show{padding:0 8px;border:0;background:none;color:var(--route);font-size:12px}.stage-tree--list .stage-tree-show[aria-pressed="true"]{color:var(--accent)}.stage-tree--list .stage-tree-children{display:block;padding-left:14px}.stage-tree--list .stage-tree-children[hidden]{display:none}.stage-tree--list .stage-tree-leaf{width:100%;border:0;border-bottom:1px solid var(--surface-line);background:none;text-align:left}.stage-tree--list .stage-tree-leaf:hover{color:var(--text-primary)}.stage-tree--list .stage-tree-leaf[aria-pressed="true"]{box-shadow:inset 3px 0 var(--accent);padding-left:8px}
.journey-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.journey-actions[hidden]{display:none}.journey-actions button{min-height:32px;padding:0 12px;border:1px solid rgb(243 245 243 / .3);background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:14px}.journey-actions button:hover{background:rgb(28 30 31 / .7)}.start-card-item{position:relative;display:flex}.start-card-item .start-card{flex:1;padding-bottom:46px}.start-card-actions{position:absolute;right:12px;bottom:12px;display:flex;gap:6px}.start-card-actions button{min-height:30px;padding:0 10px;border:1px solid var(--surface-line);background:rgb(3 24 31 / .5);color:var(--text-secondary);font-size:14px}.start-card-actions button:hover{color:var(--text-primary);border-color:rgb(243 245 243 / .35)}.delete-journey-dialog h2{font-size:28px;line-height:1.15}.delete-journey-warning{margin:14px 0 4px;color:var(--text-primary);font-size:16px;font-weight:700}.delete-journey-detail{margin:0 0 6px;color:var(--text-muted);font-size:14px}.danger-button{border:1px solid #d6604a!important;background:#a8402f!important;color:#fff!important}.danger-button:disabled{opacity:.6}
.planning-point-menu{position:absolute;z-index:1300;min-width:150px;padding:4px;border:1px solid rgb(243 245 243 / .25);background:rgb(3 24 31 / .96);box-shadow:0 8px 20px rgb(0 0 0 / .45)}.planning-point-menu[hidden]{display:none}.planning-point-menu button{display:block;width:100%;min-height:30px;padding:0 10px;border:0;background:transparent;color:var(--text-primary);font-size:13px;text-align:left;cursor:pointer}.planning-point-menu button:hover:not(:disabled),.planning-point-menu button:focus-visible{background:rgb(85 185 211 / .18)}.planning-point-menu button:disabled{cursor:default;color:var(--text-muted)}
.planning-marker{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer}.planning-marker::before{content:"";box-sizing:border-box;border:2px solid var(--text-primary);box-shadow:0 1px 4px rgb(0 0 0 / .55)}.planning-marker[data-role="start"]::before{width:20px;height:20px;border-radius:50%;background:#3fd0c9}.planning-marker[data-role="intermediate"]::before{width:12px;height:12px;border-radius:50%;background:var(--selection)}.planning-marker[data-role="camp"]{z-index:1}.planning-marker[data-role="return"]::before{width:12px;height:12px;border-radius:50%;background:transparent;box-shadow:inset 0 0 0 3px var(--selection)}.planning-marker[data-role="camp"]::before{width:18px;height:18px;clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%);background:#1f8fe0}.planning-marker[data-role="current-end"]::before{width:20px;height:20px;clip-path:polygon(50% 0%,100% 100%,0% 100%);background:#f3f5f3}
.save-journey-dialog{position:fixed;z-index:1300;top:50%;left:50%;transform:translate(-50%,-50%);width:min(560px,calc(100% - 32px));max-height:85vh;overflow:auto}
.save-journey-dialog[hidden],.save-journey-backdrop[hidden]{display:none!important}
.landing-screen[hidden],.app-shell[hidden]{display:none!important}
.landing-screen{position:fixed;inset:0;z-index:2000;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100dvh;padding:48px 24px;text-align:center;color:var(--text-primary);background-image:radial-gradient(circle at 50% 42%,rgb(2 16 21 / .18) 0%,rgb(2 16 21 / .58) 60%,rgb(2 16 21 / .88) 100%),linear-gradient(180deg,rgb(1 12 16 / .82) 0%,rgb(1 12 16 / .05) 32%,rgb(1 12 16 / .1) 62%,rgb(1 12 16 / .86) 100%),url("/docs/design_reference/landing_v0_1/hero_night_camp.jpg");background-size:cover;background-position:center;background-repeat:no-repeat}
.landing-brand{position:absolute;top:27px;left:32px;z-index:2}
/* The lockup's own box is 1320x420 with room around the mark, so its letters
   are about a quarter of the box's height: 48px (the reference demo's value)
   left them 13px tall beside a 58px title. Scaled with the window instead. */
.landing-logo{display:block;font-size:var(--brand-logo-size);opacity:0;transition:opacity .25s ease}
.landing-logo.show{opacity:1}
.landing-content{display:flex;flex-direction:column;align-items:center;gap:18px;max-width:640px}
.landing-content .eyebrow{margin:0;color:var(--text-secondary);font-size:12px;font-weight:750;letter-spacing:.14em}
.landing-title{margin:0;font-family:var(--font-display);font-size:clamp(34px,5.5vw,58px);font-weight:500;letter-spacing:-.03em;line-height:1.08}
.landing-subtitle{margin:0;max-width:520px;color:var(--text-secondary);font-size:17px;line-height:1.55}
.landing-cta{margin-top:6px;min-height:50px;padding:0 28px;border:1px solid color-mix(in srgb,var(--accent) 70%,transparent);border-radius:2px;background:var(--accent);color:var(--accent-ink);font-size:15px;font-weight:700}
.landing-cta:hover{background:var(--accent-hover)}
.landing-secondary-link{color:var(--text-secondary);font-size:14px;text-decoration:none}
.landing-secondary-link:hover{color:var(--text-primary);text-decoration:underline}
.landing-footer{position:absolute;bottom:24px;left:0;right:0;margin:0;color:var(--text-muted);font-size:12px;font-weight:750;letter-spacing:.11em;line-height:1.5}
@media(max-width:900px){.landing-title{font-size:clamp(28px,8vw,40px)}.landing-subtitle{font-size:15px}.landing-brand{top:18px;left:18px}}
/* The sidebar becomes a top bar: a fixed height rather than its full width. */

.save-journey-backdrop{position:fixed;z-index:1290;inset:0;background:rgb(0 12 17 / .59)}
/* Telemetry cockpit (docs/cockpit_v0_1_design.md section 4): bands use the profile width and its 0..1000 x axis, so no horizontal padding around their SVGs. */
.cockpit{display:grid;gap:8px;margin-top:10px}.cockpit-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;padding:0 1.8%;color:var(--text-muted);font-size:12px;font-variant-numeric:tabular-nums}.cockpit-status{margin:0;padding:0 1.8%;color:var(--text-secondary);font-size:13px}.cockpit-status[data-state="UNAVAILABLE"]{color:var(--text-muted)}
.cockpit-band{background:rgba(164,230,245,.035);border-radius:12px;padding:8px 0 8px}.cockpit-band-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 12px;padding:0 1.8%;font-size:13px}.cockpit-band-head strong{color:var(--text-primary);font-size:12px;font-weight:800;letter-spacing:.11em;text-transform:uppercase}.cockpit-band-head span{color:var(--text-secondary);font-variant-numeric:tabular-nums}.cockpit-band[data-state="UNAVAILABLE"] .cockpit-band-head span{color:var(--text-muted)}
.telemetry-zone .cockpit-band svg{aspect-ratio:1000/110;background-image:none}
.cockpit-line{fill:none;stroke-width:2.2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.cockpit-dot{stroke:none}.cockpit-series-0.cockpit-line{stroke:var(--route-before)}.cockpit-series-1.cockpit-line{stroke:var(--route-muted);stroke-dasharray:5 4}.cockpit-dot.cockpit-series-0{fill:var(--route-before)}.cockpit-dot.cockpit-series-1{fill:var(--route-muted)}.cockpit-scrubber{stroke:var(--selection);stroke-width:1.6;vector-effect:non-scaling-stroke}
.cockpit-legend{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:6px;padding:0 1.8%;color:var(--text-secondary);font-size:12px}.cockpit-legend span{display:inline-flex;align-items:center;gap:6px}.cockpit-swatch{display:inline-block;width:16px;height:0;border-top:2.5px solid var(--route-before)}.cockpit-swatch.cockpit-series-1{border-top:2.5px dashed var(--route-muted)}.cockpit-range{margin-left:auto;color:var(--text-muted);font-variant-numeric:tabular-nums}
.cockpit-toggle{justify-self:start;min-height:32px;margin:2px 1.8% 0;padding:0 14px;border:1px solid var(--surface-line);border-radius:999px;background:rgb(243 245 243 / .06);color:var(--text-primary);font-size:13px;cursor:pointer}.cockpit-toggle:hover{background:rgb(243 245 243 / .12)}.cockpit-toggle:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.cockpit-note{margin:6px 0 0;padding:0 1.8%;color:var(--text-secondary);font-size:13px;font-variant-numeric:tabular-nums}.cockpit-band[data-band="freezing_level"] .cockpit-series-1.cockpit-line{stroke:var(--text-muted);stroke-dasharray:none;opacity:.8}.cockpit-band[data-band="freezing_level"] .cockpit-dot.cockpit-series-1{fill:var(--text-muted)}.cockpit-band[data-band="freezing_level"] .cockpit-swatch.cockpit-series-1{border-top:2.5px solid var(--text-muted)}
/* Journey search (header magnifier): a real button and a rail filter field. */
button.utility-icon{padding:0;cursor:pointer;font:inherit}button.utility-icon:hover,button.utility-icon[aria-expanded="true"]{background:rgb(85 185 211 / .22);border-color:rgb(85 185 211 / .6)}button.utility-icon:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.journey-search{box-sizing:border-box;width:calc(100% - 20px);margin:6px 10px 2px;min-height:34px;padding:0 10px;border:1px solid rgb(85 185 211 / .55);border-radius:6px;background:rgb(28 30 31 / .5);color:var(--text-primary);font:inherit;font-size:14px}.journey-search::placeholder{color:var(--text-muted)}.journey-search:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.journey-search-empty{margin:6px 10px;color:var(--text-muted);font-size:13px}
/* A hidden scenario switch (every Journey without an analysed scenario) must not leave its empty frame behind. */
.scenario-selector[hidden]{display:none}
.cockpit-bands{display:grid;gap:8px}.cockpit-hour{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:0 1.8%;color:var(--text-secondary);font-size:13px}.cockpit-hour input{flex:1 1 220px;min-width:0;accent-color:var(--accent)}.cockpit-hour output{color:var(--text-primary);font-variant-numeric:tabular-nums}
/* Cockpit value grid (4b): lines drawn in the SVG, labels as HTML above them at the plot's left edge (SVG text would stretch with the band). */
.cockpit-plot{position:relative;margin-top:4px}.cockpit-grid{stroke:rgb(209 231 229 / .14);stroke-width:1;vector-effect:non-scaling-stroke}.cockpit-ticks{position:absolute;inset:0;pointer-events:none}.cockpit-tick{position:absolute;left:1.8%;transform:translateY(-100%);margin-top:-1px;padding:0 5px;border-radius:3px;background:rgb(4 31 41 / .78);color:var(--text-secondary);font-size:12px;line-height:1.3;font-variant-numeric:tabular-nums;white-space:nowrap}
/* The light layer is hidden where no light analysis exists (setLightLayer in app.js). */
.light-timeline-wrap[hidden],.telemetry-legend span[hidden]{display:none}
/* Elevation grid on the profile (profileValueGrid): labelled lines replace the unlabelled background stripes. */
#elevation-profile,#planning-elevation-profile{background-image:none}.profile-grid{stroke:rgb(209 231 229 / .14);stroke-width:1;vector-effect:non-scaling-stroke}.telemetry-zone text.profile-grid-label,.profile-grid-label{fill:var(--text-secondary);paint-order:stroke;stroke:rgb(4 26 34 / .9);stroke-width:3px;stroke-linejoin:round;font-variant-numeric:tabular-nums}
/* Mission Control identity v0.1 (docs/mission_control_identity_v0_1_design.md) sections 1-2: one photo per Journey in ONE layer behind the top of the page (the hero is text over it -- no second hero picture, no seam), fading continuously into the graphite canvas and ending for good at 78% of 900px (~700px). Values from the approved board I (I_final.dc.html). */
.page-backdrop{position:absolute;top:0;left:0;right:0;height:900px;overflow:hidden;z-index:0;pointer-events:none}.page-backdrop[hidden]{display:none}/* AV-025: no uniform filter on the photo -- the identity doc (§2) wants it clear at the top and darkening only as it fades down (the gradient below, values from the final mock); saturate(.85) brightness(.82) dimmed it from the first pixel. */
.page-backdrop-photo{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 45%}.page-backdrop::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgb(28 30 31 / .30) 0%,rgb(28 30 31 / .45) 14%,rgb(28 30 31 / .65) 28%,rgb(28 30 31 / .85) 45%,rgb(28 30 31 / .96) 62%,var(--surface-canvas) 78%,var(--surface-canvas) 100%)}.page-backdrop[data-kind="strip"]{height:var(--hero-strip-height,240px)}.page-backdrop[data-kind="strip"]::after{background:linear-gradient(180deg,rgb(28 30 31 / .30) 0%,rgb(28 30 31 / .55) 55%,var(--surface-canvas) 100%)}.app-rail,main{position:relative;z-index:1}
/* Text on the photo: a left-to-right graphite scrim behind the title (board I), no box. It reaches below the hero and fades out there (mask), so it never ends in an edge -- no seam. */
/* AV-026: the scrim under the title started at full strength on the header's top edge (28 px below the page top),
   drawing a sharp horizontal edge across the photo. It now reaches up to the page top and fades in over
   the first 44 px -- full again by the eyebrow, so the text keeps its contrast. */
.mission-header::before{content:"";position:absolute;inset:-32px 0 -48px -28px;z-index:-1;pointer-events:none;background:linear-gradient(90deg,rgb(28 30 31 / .78) 0%,rgb(28 30 31 / .45) 38%,rgb(28 30 31 / .22) 62%,rgb(28 30 31 / 0) 100%);-webkit-mask-image:linear-gradient(180deg,transparent 0,#000 76px,#000 58%,transparent 100%);mask-image:linear-gradient(180deg,transparent 0,#000 76px,#000 58%,transparent 100%)}
/* Identity §4-§5: real margins around the cards (28px from the screen edges and the rail, 20px between cards) so the fade and the glass can show; the cards are separate teal glass panels (values from board I). The workspace itself is no longer a panel. */
main{padding:28px 28px 40px}.mission-workspace{margin-top:24px;gap:20px;border:0;background:transparent;box-shadow:none}
.map-zone,.tab-panel,.telemetry-zone{border:1px solid rgb(209 231 229 / .16);border-radius:18px;background:rgb(4 26 34 / .92);-webkit-backdrop-filter:blur(16px) saturate(1.1);backdrop-filter:blur(16px) saturate(1.1);box-shadow:0 20px 50px rgb(0 0 0 / .45),inset 0 1px 0 rgb(255 255 255 / .05)}
.telemetry-zone{border-color:rgb(209 231 229 / .18);border-radius:16px;background:rgb(5 30 38 / .82);-webkit-backdrop-filter:blur(20px) saturate(1.15);backdrop-filter:blur(20px) saturate(1.15);box-shadow:0 16px 40px rgb(0 0 0 / .40),inset 0 1px 0 rgb(255 255 255 / .06)}
.journey-map{border-radius:10px;overflow:hidden}
/* Floating chips on the canvas/hero: the day selector, the tempo switch and the cockpit's forecast-hour slider -- teal glass (spec §3 keeps chips teal). */
.stage-rail{width:fit-content;max-width:100%;box-sizing:border-box;margin-top:18px;padding:4px 6px;border:1px solid rgb(209 231 229 / .20);border-radius:16px;background:rgb(5 30 38 / .72);-webkit-backdrop-filter:blur(14px) saturate(1.15);backdrop-filter:blur(14px) saturate(1.15);box-shadow:0 10px 30px rgb(0 0 0 / .35),inset 0 1px 0 rgb(255 255 255 / .07)}.stage-rail[hidden]{display:none}.stage-tree-group{border-radius:10px}
.scenario-selector{padding:4px;border:1px solid rgb(209 231 229 / .18);border-radius:14px;background:rgb(4 26 34 / .72);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 10px 30px rgb(0 0 0 / .30),inset 0 1px 0 rgb(255 255 255 / .06)}.scenario-selector button{border-radius:10px}
.cockpit-hour{width:fit-content;max-width:calc(100% - 3.6%);box-sizing:border-box;margin:2px 1.8%;padding:6px 14px;border:1px solid rgb(209 231 229 / .20);border-radius:14px;background:rgb(5 30 38 / .72);-webkit-backdrop-filter:blur(14px) saturate(1.15);backdrop-filter:blur(14px) saturate(1.15);box-shadow:0 10px 30px rgb(0 0 0 / .35),inset 0 1px 0 rgb(255 255 255 / .07)}.cockpit-hour input{min-width:180px}
@media(max-width:1180px){.mission-workspace{gap:20px}}
@media(max-width:900px){main{padding:20px 20px 32px}.mission-workspace{margin-top:18px}.map-zone,.tab-panel,.telemetry-zone{border-radius:16px}.cockpit-hour{width:auto}}
/* The key-point row sits under the cockpit: its buttons reach 7px above it (.timeline button{top:-7px}), so keep them clear of the cockpit toggle. */
.cockpit:not([hidden]){margin-bottom:16px}
/* profile_storms_v0_1 section 1: Przegląd is the map and the profile, full width one above the other (board J); every other view is a tab panel -- the same teal glass card. Tabs switch panels; the bar follows board J (48px, 15px, route-blue underline). */
.mission-workspace{display:flex;flex-direction:column;gap:20px;grid-template-columns:none}.tab-panel{margin-top:24px;padding:20px 22px;min-width:0}.tab-panel[hidden]{display:none}.tab-heading{margin-bottom:6px}
.journey-nav{gap:4px;margin-top:16px}.journey-nav [role=tab]{min-height:48px;padding:0 16px;border:0;border-bottom:2px solid transparent;background:transparent;color:#a7c4c1;font:inherit;font-size:15px;font-weight:500;white-space:nowrap;cursor:pointer}.journey-nav [role=tab]:hover{color:var(--text-primary)}.journey-nav [role=tab][aria-selected="true"]{color:#f6f9f7;font-weight:600;border-bottom-color:#5cc8e6}.journey-nav [role=tab]:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.journey-nav [role=tab][hidden]{display:none}
.context-rows{margin-top:6px}.camps-panel{margin-top:0}
.weather-daily{overflow-x:auto;margin:4px 0 0}.weather-daily table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}.weather-daily caption{padding:0 0 8px;color:var(--text-muted);font-size:12px;text-align:left}.weather-daily th,.weather-daily td{padding:9px 10px;border-bottom:1px solid var(--surface-line);text-align:left;white-space:nowrap}.weather-daily thead th{color:var(--text-muted);font-size:12px;font-weight:700;letter-spacing:.04em}.weather-daily tbody th{color:var(--text-primary);font-weight:700}.weather-daily tbody th span{display:block;margin-top:2px;color:var(--text-muted);font-size:12px;font-weight:500}.weather-daily td{color:var(--text-secondary)}.weather-daily tr[data-state="UNAVAILABLE"] td{color:var(--text-muted);white-space:normal}
.weather-daily thead th{white-space:normal;vertical-align:bottom;min-width:84px}
/* Profile with grade (docs/profile_storms_v0_1_design.md section 2, board J). */
.profile-plot{position:relative;margin-top:8px}.telemetry-legend[hidden]{display:none}.profile-labels{position:relative;height:150px;margin:0}.profile-labels:empty{height:0}.profile-label{position:absolute;bottom:4px;max-height:146px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;writing-mode:vertical-rl;transform:translateX(-50%) rotate(180deg);color:#e3eeec;font-size:13px;font-weight:600;line-height:1}
.profile-label-line{stroke:rgb(227 238 236 / .35);stroke-width:1;vector-effect:non-scaling-stroke}.profile-label-dot{fill:#eef4f2;stroke:#1c1e1f;stroke-width:1.5;vector-effect:non-scaling-stroke}
.profile-line-halo{fill:none;stroke:rgb(255 255 255 / .2);stroke-width:6.2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.profile-grade-line{fill:none;stroke:url(#profile-grade);stroke-width:3.8;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.profile-svg-box{position:relative}.profile-grade-bar{width:96.4%;height:16px;margin:10px 0 0 1.8%;border-radius:4px;outline:1px solid rgb(255 255 255 / .28);outline-offset:-1px}.profile-grade-bar[hidden]{display:none}
.profile-tooltip{position:absolute;z-index:2;min-width:200px;padding:10px 14px;border:1px solid rgb(209 231 229 / .24);border-radius:10px;background:rgb(20 22 23 / .94);pointer-events:none;display:flex;flex-direction:column;gap:3px;font-size:13px;color:#e3eeec;transform:translate(14px,calc(-100% - 14px))}.profile-tooltip[hidden]{display:none}.profile-tooltip.flip{transform:translate(calc(-100% - 14px),calc(-100% - 14px))}.profile-tooltip strong{color:#ffd7c2;font-size:14px}.profile-tooltip span:last-child{color:#c3d9d6}
.profile-legend{margin-top:14px;color:#dbeae8;font-size:13px}.profile-legend[hidden]{display:none}.profile-legend-grade{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}.profile-legend-name{min-width:84px}.profile-legend-scale{position:relative;width:min(360px,100%)}.profile-legend-scale>div{height:12px;border-radius:4px;border:1px solid rgb(255 255 255 / .28)}.profile-legend-scale p{position:relative;height:16px;margin:4px 0 0;color:#8fb0ad;font-size:12px}.profile-legend-scale p span{position:absolute;transform:translateX(-50%)}.profile-legend-scale p span:first-child{transform:none}.profile-legend-scale p span:last-child{transform:translateX(-100%)}.profile-legend-note{flex:1 1 320px;color:#a7c4c1;font-size:12.5px;line-height:1.4}.profile-legend-trail{margin:8px 0 0;color:#a7c4c1;font-size:12.5px}.profile-legend-trail i{display:inline-block;width:22px;height:5px;margin-right:6px;border-radius:3px;background:#8a9794;vertical-align:middle}
.profile-plot + .timeline{margin-top:20px}
/* Storms tab (docs/profile_storms_v0_1_design.md section 4, board K). */
.storms-map-wrap{position:relative;margin:4px 0 18px;border-radius:12px;overflow:hidden;border:1px solid rgb(243 245 243 / .19)}.storms-map{width:100%;aspect-ratio:7/3;min-height:280px;max-height:60dvh;background:#0a3a46}
.frame-player{position:absolute;z-index:500;left:14px;top:14px;display:flex;align-items:center;gap:12px;height:48px;padding:0 16px 0 8px;background:rgb(28 30 31 / .78);border:1px solid rgb(209 231 229 / .2);border-radius:14px;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 10px 30px rgb(0 0 0 / .35),inset 0 1px 0 rgb(255 255 255 / .07)}.frame-player[hidden]{display:none}.frame-player button{flex:0 0 auto;width:34px;height:34px;border:0;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;padding:0}.frame-player svg{width:14px;height:14px;fill:var(--accent-ink)}.frame-player .icon-pause,.frame-player button[aria-pressed=true] .icon-play{display:none}.frame-player button[aria-pressed=true] .icon-pause{display:block}.storms-timeline-labels{display:flex;flex-direction:column;gap:1px;min-width:0}#storms-timeline-label{font-size:14px;font-weight:600;color:#f6f9f7;white-space:nowrap}.storms-timeline-note{font-size:12px;color:#f4b63d;white-space:nowrap}.storms-timeline-note[hidden]{display:none}#storms-timeline-frame{width:180px;accent-color:var(--accent)}
.radar-caption{position:absolute;z-index:500;left:14px;bottom:14px;right:14px;max-width:620px;padding:10px 14px;background:rgb(28 30 31 / .82);border:1px solid rgb(209 231 229 / .2);border-radius:12px;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);font-size:12.5px;line-height:1.45;color:#dbeae8}.radar-caption a{color:#a4e6f5}.radar-status{margin:0 0 6px}.radar-link{display:inline-block;margin-top:6px;padding:3px 9px;border:1px solid rgb(209 231 229 / .28);border-radius:8px;text-decoration:none}
.storms .storm-chart .cockpit-band-head{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:baseline}.storm-unit{margin-left:auto;color:#8fb0ad;font-size:12px}.storm-line{fill:none;stroke-width:2.4;stroke-linejoin:round;vector-effect:non-scaling-stroke}.storm-fill{opacity:.22}.storm-ref{stroke:#a4e6f5;stroke-opacity:.55;stroke-width:1.2;vector-effect:non-scaling-stroke}.storm-ref.storm-ref-high{stroke:#f4b63d}.storm-ref-label{position:absolute;right:4px;transform:translateY(-110%);color:#a4e6f5;font-size:12px}.storm-ref-label.storm-ref-high{color:#f4b63d}
.storm-code-track{display:block;width:100%;height:22px;border-radius:5px;background:rgb(164 230 245 / .1)}.storm-code{fill:var(--selection);opacity:.65}.storm-code-empty{margin:6px 0 0;color:#a7c4c1;font-size:12.5px}
.storm-axis{position:relative;height:40px;margin:8px 0 0}.storm-axis span{position:absolute;transform:translateX(-50%);text-align:center;color:#8fb0ad;font-size:12px;line-height:1.35;white-space:nowrap}.storm-axis span:first-child{transform:none}.storm-axis span:last-child{transform:translateX(-100%)}.storm-axis small{color:#6f9895;font-size:12px}
.storms-note{margin:14px 0 0;color:#a7c4c1;font-size:12.5px}.storms-daily td span{color:#8fb0ad}
.planning-search{flex:1 1 100%;min-width:0}.planning-search-field{position:relative}.planning-search label{width:100%}.planning-search input{width:100%;box-sizing:border-box}.planning-search input:disabled{opacity:.6;cursor:not-allowed}.planning-search-results{position:absolute;top:100%;left:0;right:0;z-index:1300;max-height:240px;margin:0;padding:0;overflow-y:auto;list-style:none;border:1px solid rgb(209 231 229 / .25);background:#041f29}.planning-search-results[hidden]{display:none}.planning-search-results li{display:block;padding:7px 10px;color:var(--text-primary);font-size:13px;line-height:1.3;cursor:pointer;overflow-wrap:anywhere}.planning-search-results li[aria-selected=true],.planning-search-results li:hover{background:rgb(92 200 230 / .16)}.planning-search-status{min-height:0;margin:3px 0 0;color:var(--text-muted);font-size:12px}.planning-search-status:empty{display:none}
/* Weather tab (docs/pogoda_v0_1_design.md, board L): one glass card per chart. */
.weather-tab[hidden]{display:none}.weather-top .selection-facts:empty{display:none}.weather-charts[hidden]{display:none}.weather-charts{min-width:0;margin-top:20px;display:grid;grid-template-columns:1fr;row-gap:20px;column-gap:20px}.weather-charts[data-layout="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}.weather-charts[data-layout="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}#weather-status{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;margin:14px 0 0;padding:0;color:var(--text-muted);font-size:12px}#weather-status[hidden]{display:none}.weather-charts .weather-card{margin-top:0}.weather-card-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px;margin-bottom:10px}.weather-card-head h3{margin:0;color:var(--text-secondary);font-size:12px;font-weight:750;letter-spacing:.14em;text-transform:uppercase}.weather-source{color:var(--text-muted);font-size:12px}.weather-plot{position:relative;margin-left:70px}.weather-plot svg{display:block;width:100%;height:100%;overflow:visible;cursor:crosshair}.weather-grid-labels{position:absolute;inset:0;pointer-events:none}.weather-grid-labels span{position:absolute;left:-70px;width:62px;text-align:right;transform:translateY(-50%);color:var(--text-muted);font-size:12px;line-height:1.2}.weather-grid{stroke:rgb(209 231 229 / .12);stroke-width:1;stroke-dasharray:3 5}.weather-silhouette{fill:rgb(209 231 229 / .056)}.weather-outline{fill:none;stroke:rgb(209 231 229 / .2);stroke-width:1.1;stroke-linejoin:round;stroke-linecap:round}.weather-cursor line{stroke:var(--selection);stroke-width:1.5;stroke-dasharray:4 4}.weather-tooltip{position:absolute;top:8%;z-index:5;min-width:200px;max-width:min(300px,100vw - 24px);padding:10px 14px;border:1px solid rgb(209 231 229 / .24);border-radius:10px;background:rgb(20 22 23 / .95);box-shadow:0 10px 30px rgb(0 0 0 / .4);pointer-events:none;font-size:13px;color:#e3eeec}.weather-tooltip[hidden]{display:none}.weather-tooltip strong{display:block;margin-bottom:6px;color:#ffd7c2;font-size:14px}.weather-tooltip-reason{display:block;margin-bottom:6px;color:var(--text-muted);font-size:12px}.weather-tooltip dl{display:grid;gap:3px;margin:0}.weather-tooltip dl div{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:8px}.weather-tooltip dt{color:#c3d9d6}.weather-tooltip dd{margin:0;font-variant-numeric:tabular-nums;font-weight:700}.weather-tooltip i{width:9px;height:9px;border-radius:2px}.weather-row{display:grid;grid-template-columns:62px minmax(0,1fr);align-items:center;gap:8px;margin-top:6px}.weather-row-label{color:var(--text-muted);font-size:12px;text-align:right}.weather-cells{display:grid;gap:4px}.weather-cell{display:flex;align-items:center;justify-content:center;min-height:26px;padding:0 2px;border-radius:4px;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden}.weather-cell[data-state=UNAVAILABLE]{border:1px dashed rgb(209 231 229 / .25);color:var(--text-muted);font-weight:400}.weather-km{position:relative;height:20px;margin:6px 0 0 70px}.weather-km span{position:absolute;top:2px;transform:translateX(-50%);color:var(--text-muted);font-size:12px;white-space:nowrap}.weather-legend{position:relative;width:min(520px,100%);margin-top:14px}.weather-legend-bar{position:relative;height:11px;border:1px solid rgb(255 255 255 / .28);border-radius:4px}.weather-legend-bar i{position:absolute;top:-4px;width:2px;height:19px;margin-left:-1px;background:#fff;box-shadow:0 0 0 1px rgb(0 0 0 / .4)}.weather-legend p{position:relative;height:18px;margin:4px 0 0}.weather-legend p span{position:absolute;transform:translateX(-50%);color:var(--text-muted);font-size:12px}.weather-legend p .weather-legend-zero{color:var(--text-primary);font-weight:800}.weather-note{margin:10px 0 0;color:var(--text-muted);font-size:12.5px;line-height:1.45}@media(max-width:900px){.weather-row{grid-template-columns:48px minmax(0,1fr)}.weather-km,.weather-plot{margin-left:56px}.weather-grid-labels span{left:-56px;width:50px}.weather-cell{font-size:12px}}
.weather-bars rect{fill:#4a74e2}.weather-icy{fill:rgb(170 214 250 / .42)}.weather-freezing-line{fill:none;stroke:#79acff;stroke-width:2.6;stroke-linejoin:round}.weather-arrow{display:inline-block;font-style:normal;font-weight:800;line-height:1}.weather-note [data-state=UNAVAILABLE]{color:var(--text-secondary)}
.weather-controls[hidden]{display:none}.weather-controls{margin-top:14px}
.weather-sim{display:grid;grid-template-columns:auto minmax(170px,auto) minmax(0,1fr) auto;align-items:center;gap:14px 18px}
.weather-play{width:40px;height:40px;border:0;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-size:14px}.weather-play:disabled{opacity:.35;cursor:default}
.weather-sim-now strong{display:block;margin-top:4px;font-family:var(--font-display);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.weather-sim-now strong span{color:var(--text-muted);font-family:var(--font-ui);font-size:12px;font-weight:400}
.weather-slider{position:relative;min-width:0}
.weather-slider input{width:100%;height:22px;margin:0;border:1px solid rgb(209 231 229 / .18);border-radius:6px;-webkit-appearance:none;appearance:none;cursor:pointer}
.weather-slider input:disabled{opacity:.45;cursor:default}
.weather-slider input::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:28px;border-radius:5px;background:#f3f5f3;box-shadow:0 0 0 2px rgb(0 0 0 / .35)}
.weather-slider input::-moz-range-thumb{width:14px;height:28px;border:0;border-radius:5px;background:#f3f5f3}
.weather-slider-days,.weather-slider-hours{position:relative;height:17px}
.weather-slider-days span,.weather-slider-hours span{position:absolute;transform:translateX(-50%);color:var(--text-muted);font-size:12px;white-space:nowrap}
.weather-slider-days span{color:var(--text-secondary);font-weight:700}.weather-slider-days .weather-rest-day{color:var(--selection)}
.weather-mode{display:flex;border:1px solid var(--surface-line);border-radius:8px;overflow:hidden}
.weather-mode button{min-height:34px;padding:0 12px;border:0;background:transparent;color:var(--text-secondary);font-size:13px;white-space:nowrap}
.weather-mode button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink);font-weight:700}
.weather-mode button:disabled{color:var(--text-muted);cursor:not-allowed;opacity:.7}
.weather-mode-reason{margin:8px 0 0;color:var(--text-muted);font-size:12px;text-align:right}
.weather-mode-reason[data-state=UNAVAILABLE]{color:var(--text-secondary)}
@media(max-width:1100px){.weather-sim{grid-template-columns:auto minmax(0,1fr) auto}.weather-slider{grid-column:1/-1;grid-row:2}.weather-mode-reason{text-align:left}}
.weather-value-fill path{opacity:.16}.weather-value-line line{stroke-width:3.4;stroke-linecap:round}.weather-margin{fill:rgb(79 143 214 / .30)}.weather-legend-swatches{display:flex;flex-wrap:wrap;gap:6px 18px;margin:12px 0 0;color:var(--text-muted);font-size:12px}.weather-legend-swatches i{display:inline-block;width:14px;height:10px;margin-right:6px;border-radius:2px;vertical-align:-1px}.weather-swatch-margin{background:rgb(79 143 214 / .55)}.weather-swatch-icy{background:rgb(170 214 250 / .75)}.weather-cell-time{min-height:20px;color:var(--text-secondary);font-weight:600;background:transparent}.weather-walk[hidden]{display:none}.weather-walk{display:flex;flex-wrap:wrap;align-items:end;gap:8px 14px;margin-top:12px}.weather-walk .eyebrow{flex-basis:100%}.weather-walk label{display:flex;flex-direction:column;gap:3px;color:var(--text-muted);font-size:12px;font-weight:700;letter-spacing:.06em}.weather-walk input,.weather-walk select{min-height:32px;padding:2px 8px;border:1px solid rgb(209 231 229 / .25);border-radius:6px;background:rgb(20 22 23 / .6);color:var(--text-primary);font-size:13px}.weather-walk button{min-height:32px;padding:0 12px;border:1px solid var(--surface-line);border-radius:6px;background:transparent;color:var(--text-secondary);font-size:13px}.weather-compare{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:12px}.weather-compare button{min-height:32px;padding:0 12px;border:1px solid var(--surface-line);border-radius:6px;background:transparent;color:var(--text-secondary);font-size:13px}.weather-compare button[aria-pressed=true]{border-color:var(--text-primary);color:var(--text-primary)}.weather-compare button:disabled{opacity:.5}.weather-compare-note{flex:1 1 320px;display:flex;flex-wrap:wrap;gap:4px 14px;margin:0;color:var(--text-muted);font-size:12px}.weather-compare-note[data-state=UNAVAILABLE]{color:var(--text-secondary)}.weather-model-key{display:inline-flex;align-items:center;gap:6px;color:var(--text-secondary)}.weather-compare-note svg{width:28px;height:6px;vertical-align:middle}.weather-model-line{fill:none;stroke:#f3f5f3;stroke-width:1.6;opacity:.85}.weather-model-row .weather-row-label{white-space:nowrap;color:var(--text-secondary)}#weather-walk-save{border-color:var(--accent);color:var(--text-primary)}.weather-walk-status{flex:1 1 220px;margin:0;color:var(--text-muted);font-size:12px}.weather-walk-status[data-state=UNAVAILABLE]{color:var(--text-secondary)}
/* Przegląd: the map card's height grip (glass, like the cards it joins). */
.map-resize{position:relative;z-index:2;align-self:center;display:flex;align-items:center;justify-content:center;width:76px;height:18px;margin:-19px 0;border:1px solid rgb(255 214 196 / .55);border-radius:9px;background:var(--accent);-webkit-backdrop-filter:blur(16px) saturate(1.1);backdrop-filter:blur(16px) saturate(1.1);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent),0 6px 16px rgb(0 0 0 / .40),inset 0 1px 0 rgb(255 255 255 / .22);cursor:ns-resize;touch-action:none;user-select:none}.map-resize span{width:30px;height:2px;border-radius:2px;background:var(--accent-ink);box-shadow:0 -4px 0 var(--accent-ink),0 4px 0 var(--accent-ink)}.map-resize:hover,.map-resize.dragging{border-color:rgb(255 255 255 / .8);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 28%,transparent),0 6px 16px rgb(0 0 0 / .40),inset 0 1px 0 rgb(255 255 255 / .22)}.map-resize:focus-visible{outline:2px solid var(--focus);outline-offset:3px}.journey-map.user-sized{aspect-ratio:auto;min-height:0;max-height:none}
@media(max-width:1180px){.map-resize{order:2}}
/* Przegląd default proportions (owner, 29.09.2026): a lower map and a much
   taller profile. The map's default height is used only while the viewer has
   no stored height (grip, localStorage); the profile's box is 1000x320. */
.journey-map{aspect-ratio:auto;height:clamp(300px,24vw,460px);min-height:0;max-height:none}#elevation-profile{aspect-ratio:1000/320}
.map-heading-tools{display:flex;align-items:center;gap:14px}.terrain3d-toggle{min-height:32px;padding:0 12px;border:1px solid rgb(243 245 243 / .3);border-radius:6px;background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:13px;white-space:nowrap}.terrain3d-toggle[aria-pressed=true]{border-color:var(--accent);color:var(--text-primary);background:color-mix(in srgb,var(--accent) 16%,transparent)}.terrain3d-toggle[hidden]{display:none}.map-stage{position:relative;display:flow-root}.terrain3d{position:absolute;inset:14px 0 0 0;z-index:1100;border:1px solid rgb(243 245 243 / .19);border-radius:10px;overflow:hidden;background:#141617}.terrain3d[hidden]{display:none}.terrain3d-map{position:absolute;inset:0}.terrain3d-bar{position:absolute;left:12px;bottom:34px;z-index:2;display:flex;flex-wrap:wrap;align-items:end;gap:8px 16px;max-width:calc(100% - 24px);padding:10px 14px;border:1px solid rgb(209 231 229 / .24);border-radius:10px;background:rgb(20 22 23 / .88);font-size:12px}.terrain3d-bar label{display:flex;flex-direction:column;gap:3px;color:var(--text-muted);font-weight:700;letter-spacing:.06em}.terrain3d-bar label strong{display:inline;color:var(--text-primary);font-size:14px;font-variant-numeric:tabular-nums;letter-spacing:0}.terrain3d-bar input[type=date]{min-height:32px;padding:2px 8px;border:1px solid rgb(209 231 229 / .25);border-radius:6px;background:rgb(20 22 23 / .6);color:var(--text-primary);font-size:13px}.terrain3d-hour{min-width:min(260px,60vw)}
/* Camera (AV-015): rotation and tilt as visible controls, both ways in sync
   with dragging the map. The tilt stops at 65 degrees (TERRAIN3D_MAX_PITCH). */
.terrain3d-camera{position:absolute;left:12px;top:12px;z-index:2;display:flex;flex-wrap:wrap;align-items:end;gap:6px 14px;max-width:calc(100% - 80px);padding:8px 12px;border:1px solid rgb(209 231 229 / .24);border-radius:10px;background:rgb(20 22 23 / .82);color:var(--text-secondary);font-size:12px}
.terrain3d-camera label{display:grid;gap:3px;min-width:120px}.terrain3d-camera input[type=range]{accent-color:var(--route)}
.terrain3d-camera input[type=range]:focus-visible,.terrain3d-camera button:focus-visible{outline:2px solid var(--focus);outline-offset:3px}
/* The compass (AV-018): its own round control under zoom, 48 px -- the
   largest thing in the corner, as the one that turns the whole view. */
.terrain3d .maplibregl-ctrl-group:has(.terrain3d-compass){border-radius:50%;overflow:visible}
.terrain3d .maplibregl-ctrl-group button.terrain3d-compass{width:48px;height:48px;border-radius:50%}
.terrain3d .terrain3d-compass .maplibregl-ctrl-icon{background-size:44px 44px}
.terrain3d .maplibregl-ctrl-group button.terrain3d-compass:focus-visible{outline:2px solid var(--focus);outline-offset:3px;box-shadow:none}
.terrain3d-camera output{color:var(--text-primary);font-variant-numeric:tabular-nums}
.terrain3d-camera button{min-height:28px;padding:0 10px;border:1px solid rgb(243 245 243 / .3);border-radius:6px;background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:12px}
.terrain3d-limit{flex-basis:100%;margin:0;color:var(--text-muted);font-size:12px}.terrain3d-hour input{width:100%;accent-color:var(--accent)}.terrain3d-sun{flex:1 1 260px;margin:0;color:var(--text-secondary);font-size:12px;line-height:1.4}.terrain3d-sun[data-state=UNAVAILABLE]{color:var(--text-muted)}.terrain3d-status{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;margin:0;padding:24px;background:#141617;color:var(--text-secondary);font-size:14px;text-align:center}.terrain3d-status[hidden]{display:none}@media(max-width:900px){.terrain3d-bar{right:12px}.terrain3d-hour{min-width:0;flex:1 1 160px}}
.storm-layers{display:inline-flex;flex-wrap:wrap;align-self:flex-start;gap:0;border:1px solid var(--surface-line);border-radius:8px;overflow:hidden}.storm-layers button{min-height:34px;padding:0 14px;border:0;border-left:1px solid var(--surface-line);background:transparent;color:var(--text-secondary);font-size:13px;white-space:nowrap}.storm-layers button:first-child{border-left:0}.storm-layers button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink);font-weight:700}.clouds-caption{margin:6px 0 0}.clouds-caption[data-state=UNAVAILABLE]{color:var(--text-muted)}.lightning-panel{margin:0 0 18px}.lightning-panel[hidden]{display:none}.lightning-frame{border:1px solid rgb(243 245 243 / .19);border-radius:12px;overflow:hidden;background:#141617}.lightning-frame iframe{display:block;width:100%;aspect-ratio:7/3;min-height:280px;max-height:60dvh;border:0}.lightning-caption{margin:8px 0 0;color:var(--text-muted);font-size:12.5px;line-height:1.45}.lightning-caption a,.clouds-caption a{color:inherit;text-decoration:underline}
.weather-bar{position:sticky;top:0;z-index:40;margin-top:20px;padding:12px 22px;background:rgb(4 26 34 / .97)}.weather-bar[hidden]{display:none}.weather-bar .weather-compare{margin-top:10px}.weather-top .weather-controls{margin-top:4px}

/* Task 2 (AV-008): the Pogoda layout switch (1/2/3 charts per row) and the
   compact card's hover/touch overlay. */
.weather-layout{display:inline-flex;flex-wrap:wrap;align-self:flex-start;gap:0;border:1px solid var(--surface-line);border-radius:8px;overflow:hidden}
.weather-layout[hidden]{display:none}
.weather-layout button{display:flex;align-items:center;justify-content:center;min-width:36px;min-height:32px;padding:0 9px;border:0;border-left:1px solid var(--surface-line);background:transparent;color:var(--text-secondary)}
.weather-layout button:first-child{border-left:0}
.weather-layout button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}
.weather-layout svg{width:16px;height:16px;fill:currentColor}
.weather-card-compact{position:relative;padding-bottom:14px}
.weather-card-compact .weather-plot{margin-left:0}
.weather-card-compact .weather-grid-labels{display:none}
/* AV-048 §5: compact cards keep the chart and an always-visible small legend. */
.weather-legend-compact{margin:-4px 0 8px}
.weather-legend-compact .weather-legend{width:100%;margin-top:0}
.weather-legend-compact .weather-legend-bar{height:7px}
.weather-legend-compact .weather-legend p{height:16px;margin-top:2px}
.weather-legend-compact .weather-legend p span{font-size:12px}
.weather-legend-compact .weather-legend-swatches{margin:0;font-size:12px}
.weather-card-compact .weather-timing text,.weather-card-compact .weather-forecast-end text{display:none}
/* AV-048 §5: the tooltip's own values first, the rest compact. */
.weather-tooltip dl.weather-tooltip-main{margin-bottom:6px}
.weather-tooltip .weather-tooltip-primary dt{color:#f3f5f3;font-weight:700}
.weather-tooltip .weather-tooltip-primary dd{font-size:14px}
.weather-tooltip dl.weather-tooltip-more{grid-template-columns:1fr;gap:1px;padding-top:6px;border-top:1px solid rgb(209 231 229 / .14);font-size:12px}
.weather-tooltip dl.weather-tooltip-more dt{color:var(--text-muted)}
.weather-plot svg:focus-visible{outline:2px solid var(--focus);outline-offset:3px}
/* AV-048 §3: what the saved dates put behind us, or beyond the forecast. */
.weather-cell[data-gap]{background:repeating-linear-gradient(45deg,rgb(209 231 229 / .12) 0 3px,transparent 3px 7px);color:var(--text-muted);font-size:12px;font-weight:600;line-height:1.05;white-space:normal;text-align:center;border-style:dashed}
.weather-hatch-line{stroke:rgb(209 231 229 / .2);stroke-width:3}
.weather-timing text{fill:var(--text-muted);font-size:13px;font-weight:600}
.weather-forecast-end line{stroke:#e8b04a;stroke-width:1.5;stroke-dasharray:5 4}
.weather-forecast-end text{fill:#e8b04a;font-size:12px;font-weight:700}
.weather-dates-banner{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:10px 14px;border-left:3px solid var(--sunlight)}
.weather-dates-banner p{flex:1 1 320px;margin:0;color:var(--text-secondary);font-size:13.5px;line-height:1.45}
.weather-dates-actions{display:flex;flex-wrap:wrap;gap:8px}
.weather-dates-actions button{min-height:32px;padding:0 12px;border:1px solid rgb(243 245 243 / .3);border-radius:8px;background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:13px;cursor:pointer}
.weather-dates-actions button:hover{border-color:var(--accent)}
/* AV-048 §4: the charts' frames while the forecast is on its way. */
.weather-skeleton-plot{border-radius:6px;background:linear-gradient(90deg,rgb(209 231 229 / .035) 0%,rgb(209 231 229 / .09) 50%,rgb(209 231 229 / .035) 100%);background-size:200% 100%;animation:weather-shimmer 1.4s linear infinite}
@keyframes weather-shimmer{from{background-position:100% 0}to{background-position:-100% 0}}
@media (prefers-reduced-motion: reduce){.weather-skeleton-plot{animation:none}}

/* AV-009 task 2: Kalendarz tab -- a monthly grid, each day a fixed 24 h box,
   entries inside positioned proportionally to their real clock time. */
.calendar-controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.calendar-controls button{min-height:32px;padding:0 12px;border:1px solid rgb(243 245 243 / .3);background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:14px}
#calendar-prev-month,#calendar-next-month{min-width:32px;padding:0;font-size:16px}
.calendar-month-label{min-width:140px;color:var(--text-primary);font-size:15px;font-weight:700;text-align:center;text-transform:capitalize}
#calendar-add-leg{margin-left:auto;border-color:var(--accent);background:color-mix(in srgb,var(--accent) 16%,transparent)}
.calendar-cost-summary{margin:10px 0 0;color:var(--text-muted);font-size:13px}
.calendar-grid{margin-top:14px}
.calendar-weekday-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;margin-bottom:2px}
.calendar-weekday-row span{padding:4px 6px;color:var(--text-muted);font-size:12px;font-weight:800;letter-spacing:.08em;text-align:center}
.calendar-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;background:var(--surface-line)}
.calendar-day{position:relative;min-height:64px;padding:4px 3px 6px;background:#141617}
.calendar-day-empty{background:rgb(20 22 23 / .4)}
.calendar-day-number{flex:0 0 auto;color:var(--text-muted);font-size:12px}
/* The head of a day cell: two rows of FIXED height in every cell, so the
   bars' lanes below start at the same height across a week and a bar
   crossing midnight still reads as one bar. Row 1: the date, the walking
   day that sets out here ("D3"), a rest day's name. Row 2: the rest-day
   controls. Nothing here overlaps .calendar-day-events. */
.calendar-day-head{display:flex;align-items:center;gap:5px;height:18px;overflow:hidden;white-space:nowrap}
.calendar-trek-day{flex:0 0 auto;padding:0 5px;border-radius:3px;background:rgb(243 245 243 / .12);color:var(--text-primary);font-size:12px;font-weight:800;line-height:16px}
.calendar-rest-label{display:flex;flex:1 1 auto;min-width:0;overflow:hidden;color:var(--selection);font-size:12px;font-weight:800}
.calendar-rest-word{flex:0 0 auto}
.calendar-rest-place{flex:0 1 auto;min-width:0;overflow:hidden;color:var(--text-muted);font-weight:400;text-overflow:ellipsis;white-space:pre}
.calendar-day-tools{display:flex;align-items:center;justify-content:space-between;gap:2px;height:26px}
.calendar-day-tools-end{display:flex;gap:2px;margin-left:auto}
.calendar-rest-button{flex:0 0 auto;min-width:24px;height:24px;padding:0;border:1px solid rgb(243 245 243 / .22);border-radius:4px;background:rgb(28 30 31 / .6);color:var(--text-muted);font-size:15px;line-height:1;cursor:pointer}
.calendar-rest-button:hover,.calendar-rest-button:focus-visible{border-color:var(--accent);color:var(--text-primary)}
.calendar-rest-button:disabled{opacity:.45;cursor:default}
.calendar-rest-before{padding:0 5px}.calendar-rest-before-word{font-size:12px}
.calendar-day-rest{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--selection) 13%,transparent) 0 5px,color-mix(in srgb,var(--selection) 6%,transparent) 5px 10px),#141617}
/* Narrow cells: the rest day's place goes (it stays in the tooltip, and the
   camp's own bar below names it) so the word "Odpoczynek" itself is whole. */
@media(max-width:900px){.calendar-rest-place{display:none}.calendar-day-head{gap:3px}.calendar-rest-label{font-weight:700;letter-spacing:-.03em}}
@media(max-width:700px){.calendar-rest-before{padding:0}.calendar-rest-before-word{display:none}}
.calendar-rest-status{margin:8px 0 0;color:var(--text-muted);font-size:13px}
.calendar-rest-status[data-state="UNAVAILABLE"]{color:var(--selection)}
.calendar-day-events{position:relative;margin-top:3px}
.calendar-event{position:absolute;display:flex;align-items:center;gap:2px;height:20px;min-width:6px;padding:0 4px;border:0;overflow:hidden;background:#4a74e2;color:#fff;font-size:12px;line-height:20px;white-space:nowrap;text-align:left;cursor:pointer}
.calendar-event-camp{background:#087c83}
.calendar-event-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calendar-event-continue{flex:0 0 auto;font-weight:800;opacity:.85}
.calendar-event-tip{position:absolute;top:100%;left:0;z-index:40;margin-top:4px;min-width:200px;padding:9px 12px;border:1px solid rgb(209 231 229 / .24);border-radius:8px;background:rgb(20 22 23 / .97);box-shadow:0 14px 30px rgb(0 0 0 / .4);color:#e3eeec;font-size:12.5px;line-height:1.4;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease;white-space:normal}
.calendar-event:hover .calendar-event-tip,.calendar-event:focus .calendar-event-tip,.calendar-event:focus-within .calendar-event-tip{opacity:1;visibility:visible}
.calendar-event-tip strong{color:#ffd7c2}
.camp-accommodation-note{margin:0;color:var(--text-muted);font-size:12.5px;line-height:1.4}
.camps-accommodation{display:block;margin-top:2px;color:var(--text-muted);font-size:12.5px}
@media(max-width:900px){.calendar-day{min-height:52px}.calendar-month-label{min-width:0}}

/* AV-010/AV-013: the landing screen's welcome intro -- the brand symbol's
   vectors (peaks/sun/route) and the brand name as live text, one span per
   letter (built by aventurro/brand_runtime.js). The animation rules are
   scoped to .brand-intro: the same lockup elsewhere is simply shown. */
/* The reference's own composition (docs/design_reference/brand/
   welcome_animation_reference.html): the intro covers the whole viewport,
   the mark sits at 50% / 42% of it, the greeting at 69% -- positioned, not
   stacked in a centred column (which put the mark lower and the greeting
   right under it). 66px text is the reference's 546px mark with its
   9-letter name; the lockup takes the width its own name needs. */
/* AV-047: the Lentiqa intro v2 (aventurro/brand_intro.js) -- a graded
   photograph (or real ridges from the DEM) at dusk, a soft lenticular stack
   forming over the summit and condensing into the logo's clouds, the name
   revealed under them, the flight into the landing logo. Every layer moves
   by transform, opacity and filter only; brand_intro.js sizes and places
   them for the window. */
.brand-intro{position:fixed;inset:0;z-index:1200;overflow:hidden;cursor:pointer;contain:strict}
.brand-intro[hidden]{display:none}
.brand-intro>*{position:absolute;inset:0}
.bi-black{background:#000}
.bi-sky{background:linear-gradient(to bottom,#03080f 0%,#071421 25%,#0b1828 60%,#121a2a 84%,#221f2b 100%);opacity:0;will-change:opacity,transform}
.bi-sky::after{content:"";position:absolute;inset:0;background:radial-gradient(var(--glow-rx,42vw) var(--glow-ry,26vh) at 50% var(--glow-y,40%),rgba(240,166,125,.14),rgba(240,166,125,.08) 45%,rgba(240,166,125,.025) 75%,rgba(240,166,125,0))}
.bi-stars{width:100%;height:100%;opacity:0;will-change:opacity}
.bi-scene{opacity:0;will-change:opacity,filter}
.bi-camera{position:absolute;inset:0;will-change:transform}
.bi-photo{position:absolute;max-width:none;filter:brightness(.72) saturate(.85) contrast(1.08)}
.bi-photo[hidden],.bi-ridges[hidden]{display:none}
.bi-ridges{position:absolute;inset:0;width:100%;height:100%}
.bi-grade{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(7,20,33,.85) 0%,rgba(14,29,44,.35) 35%,rgba(14,29,44,.1) 60%,rgba(7,20,33,.55) 100%)}
.bi-summit{position:absolute;width:0;height:0}
.bi-soft{inset:auto;left:0;top:0;transform-origin:0 0;pointer-events:none}
.bi-stack,.bi-lens{position:absolute;inset:0;will-change:transform,opacity}
.bi-lens svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.bi-lens{opacity:0}
.bi-vignette{background:radial-gradient(ellipse 75% 70% at 50% 45%,transparent 55%,rgba(0,0,0,.5) 100%);will-change:opacity}
.bi-grain{width:100%;height:100%;opacity:.07;mix-blend-mode:overlay;will-change:opacity}
.brand-mark-wrap{inset:auto;left:0;top:0;line-height:0;transform-origin:0 0;will-change:transform}
.brand-mark-wrap .brand-lockup{display:block}
.brand-mark-wrap .brand-lockup-logo{width:100%;height:auto;overflow:visible}
.brand-intro .lq-cloud{opacity:0}
.brand-intro .lq-wordmark .brand-letter{transform-box:view-box}
/* AV-047: in the small sizes (rail, landing corner, live pages) the thin
   letters get a stroke in their own colour, 0.6 CSS px whatever the size --
   the "t"'s bar and the "q"'s tail stay readable at DPR 1. The intro's big
   lockup has none (its letters are thick enough); its flight crossfades to a
   stroked copy that matches this one exactly when it lands. */
.brand-lockup-logo .brand-letter path{stroke:#fff;stroke-width:.6px;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.brand-intro .brand-lockup-logo .brand-letter path{stroke:none}
.brand-intro .brand-lockup-logo .bi-name-stroke .brand-letter path{stroke:#fff;vector-effect:none}
/* Śledzenie na żywo panel (AV-022): two link cards, then the positions. */
.live-server,.live-panel-note{margin:4px 0 0;color:var(--text-muted);font-size:14px;line-height:1.45}.live-panel-error{margin:12px 0 0;color:var(--alpenglow);font-size:14px}.live-panel-note[hidden],.live-panel-error[hidden]{display:none}
.live-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:16px;margin-top:16px}.live-link-card{display:grid;align-content:start;gap:10px;padding:16px;border:1px solid rgb(209 231 229 / .16);border-radius:14px;background:rgb(3 24 31 / .45)}.live-link-card[data-active="true"]{border-color:rgb(92 200 230 / .45)}.live-link-card h3,.live-positions h3{margin:0;font-size:16px}.live-link-help{margin:0;color:var(--text-secondary);font-size:14px;line-height:1.45}.live-link-state{margin:0;font-size:14px;font-weight:700}.live-link-card[data-active="true"] .live-link-state{color:var(--route-before)}
.live-link-url{display:flex;gap:8px}.live-link-url[hidden]{display:none}.live-link-url input,.live-link-password input{min-width:0;flex:1;min-height:36px;padding:0 10px;border:1px solid rgb(243 245 243 / .22);border-radius:8px;background:rgb(3 24 31 / .6);color:var(--text-primary);font:13px/1 ui-monospace,SFMono-Regular,Menlo,monospace}.live-link-password{display:grid;gap:6px;color:var(--text-muted);font-size:13px}.live-link-password input{font-family:var(--font-ui)}
.live-link-actions{display:flex;flex-wrap:wrap;gap:8px}.live-link-card button,.live-positions-heading button{min-height:36px;padding:0 12px;border:1px solid rgb(243 245 243 / .22);border-radius:8px;background:rgb(243 245 243 / .06);color:var(--text-primary);font-size:14px}.live-link-card button[data-action="issue"]{border-color:rgb(92 200 230 / .5);background:rgb(92 200 230 / .14)}.live-link-card button[data-action="revoke"],#live-delete-positions{border-color:rgb(233 138 145 / .5);color:#f3c7ca}.live-link-card button:disabled{opacity:.5}.live-link-note{margin:0;min-height:18px;color:var(--text-muted);font-size:13px}
.live-positions{margin-top:22px;padding-top:16px;border-top:1px solid var(--surface-line)}.live-positions-heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.live-positions-list{margin:12px 0 0;padding:0;list-style:none;max-height:340px;overflow:auto}.live-positions-list li{display:grid;grid-template-columns:minmax(150px,auto) 1fr auto;gap:14px;padding:7px 2px;border-bottom:1px solid var(--surface-grid);font-size:14px;font-variant-numeric:tabular-nums}.live-positions-list time{color:var(--text-secondary)}.live-positions-list li.live-positions-empty{display:block;color:var(--text-muted)}
@media(max-width:600px){.live-positions-list li{grid-template-columns:1fr;gap:2px}}

/* Clouds layer (AV-024): every frame its own layer; the shown one fades in
   over the previous (no blank map between frames), drawn white-on-clear by
   the #clouds-ir-white filter (index.html). */
.svg-defs{position:absolute;width:0;height:0;overflow:hidden}.clouds-frame{filter:url(#clouds-ir-white);transition:opacity .3s linear}
/* AV-024: the two invitations shout, in the brand's own colours (tokens
   from :root -- selection orange, route-before ice blue). "+ Nowa wyprawa"
   is the left rail's main call to action; "Widok 3D" invites to a feature
   people rarely find on their own. */
.journey-rail #new-journey{min-height:52px;margin-top:12px;padding:0 8px;white-space:nowrap;border:1px solid var(--route-before);border-radius:12px;background:var(--accent);color:var(--accent-ink);font-size:15px;font-weight:800;letter-spacing:-.01em;text-align:center;box-shadow:0 8px 22px color-mix(in srgb,var(--accent) 32%,transparent),inset 0 1px 0 rgb(255 255 255 / .28);transition:box-shadow .15s ease,transform .15s ease}
.journey-rail #new-journey:hover{box-shadow:0 0 0 3px rgb(92 200 230 / .55),0 10px 26px color-mix(in srgb,var(--accent) 42%,transparent),inset 0 1px 0 rgb(255 255 255 / .28);transform:translateY(-1px)}
.journey-rail #new-journey:focus-visible{outline:2px solid var(--route-before);outline-offset:3px}
.terrain3d-toggle{min-height:40px;padding:0 18px;border:1px solid rgb(255 255 255 / .35);border-radius:12px;background:linear-gradient(135deg,var(--route-before),var(--route));color:var(--surface-canvas);font-size:15px;font-weight:800;letter-spacing:.01em;box-shadow:0 6px 20px rgb(92 200 230 / .35),inset 0 1px 0 rgb(255 255 255 / .35);transition:box-shadow .15s ease,transform .15s ease}
.terrain3d-toggle:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 55%,transparent),0 8px 24px rgb(92 200 230 / .45),inset 0 1px 0 rgb(255 255 255 / .35);transform:translateY(-1px)}
.terrain3d-toggle[aria-pressed=true]{border-color:var(--route-before);background:var(--accent);color:var(--accent-ink);box-shadow:0 6px 18px color-mix(in srgb,var(--accent) 35%,transparent)}

/* AV-025: the 3D view's gestures, said where they are used -- right-drag (or
   Ctrl+drag) rotates and tilts; on touch, two fingers. Which line shows
   follows the device's pointer, not a guess. And a compass that is easy to
   hit: 56 px to see, an 80 px circle to click or drag (the ::before is part
   of the button), held clear of the zoom buttons above it. */
.terrain3d-hint{flex-basis:100%;max-width:340px;margin:2px 0 0;color:var(--text-secondary);font-size:12px;line-height:1.35}.terrain3d-hint strong{color:var(--text-primary);font-weight:700}
.terrain3d-hint-touch{display:none}@media (hover:none) and (pointer:coarse){.terrain3d-hint-mouse{display:none}.terrain3d-hint-touch{display:inline}}
.terrain3d .maplibregl-ctrl-group:has(.terrain3d-compass){margin-top:22px!important;margin-right:20px!important}
.terrain3d .maplibregl-ctrl-group button.terrain3d-compass{position:relative;width:56px;height:56px}
.terrain3d .terrain3d-compass .maplibregl-ctrl-icon{background-size:52px 52px}
.terrain3d .maplibregl-ctrl-group button.terrain3d-compass::before{content:"";position:absolute;inset:-12px;border-radius:50%}
/* The camera panel keeps clear of the compass and its hit circle (56 + 2 x 12 + 20 px margin). */
.terrain3d-camera{max-width:min(calc(100% - 132px),460px)}

/* AV-026: the local server runs older code than the page -- a plain notice. */
.server-stale{margin:0 0 12px;padding:10px 14px;border:1px solid rgb(244 182 61 / .6);border-radius:10px;background:rgb(244 182 61 / .14);color:var(--text-primary);font-size:14px}.server-stale[hidden]{display:none}

/* AV-026: the chart's own size grip under the profile card -- ice blue, a
   different shape from the orange map/chart split grip above it. */
.profile-resize{position:relative;z-index:2;align-self:center;display:flex;align-items:center;justify-content:center;width:56px;height:14px;margin:-17px 0 0;border:1px solid rgb(92 200 230 / .7);border-radius:7px;background:rgb(5 30 38 / .92);cursor:ns-resize;touch-action:none}
.profile-resize span{width:22px;height:2px;border-radius:2px;background:var(--route-before);box-shadow:0 4px 0 var(--route-before)}
.profile-resize:hover,.profile-resize.dragging{box-shadow:0 0 0 4px rgb(92 200 230 / .25)}
.profile-resize:focus-visible{outline:2px solid var(--focus);outline-offset:3px}

/* AV-027: one logo size wherever the logo is -- the landing screen (where the
   intro docks, measured live) and the rail of the journeys list and Mission
   Control. */
:root{--brand-logo-size:clamp(24px,2.1vw,34px)}
/* AV-046: the Echtro logotype rules (AV-027, AV-029) went with it: the Lentiqa letters are white curves of their own. */
/* AV-027: each tile on the Journey list shows the Journey's photo (decorative,
   alt=""), full width above its title. */
.start-card-thumb{display:block;width:calc(100% + 32px);aspect-ratio:16/9;margin:-16px -16px 6px;object-fit:cover;background:rgb(20 22 23 / .6)}
.journey-actions-error{flex-basis:100%;color:var(--text-secondary);font-size:13px}
.journey-actions-error:empty{display:none}
.planning-controls label[hidden],.planning-controls .planning-camp-hint[hidden]{display:none}
/* AV-031 (WP2): the legend of the route's OSM surface, on the Przegląd map
   (bottom left, clear of the attribution) -- over the map, so it never
   takes height from the map/chart split. */
.surface-legend{position:absolute;left:8px;bottom:8px;z-index:3;display:flex;flex-direction:column;gap:3px;max-width:calc(100% - 260px);min-width:220px;padding:6px 10px;border:1px solid rgb(243 245 243 / .16);background:rgb(11 29 36 / .86);color:var(--text-secondary);font-size:12px;pointer-events:none}
.surface-legend[hidden]{display:none}
.surface-legend .eyebrow{margin:0;font-size:12px}
.surface-legend p{margin:0}
.surface-legend ul{display:flex;flex-wrap:wrap;gap:2px 12px;margin:0;padding:0;list-style:none}
.surface-legend li{display:flex;align-items:center;gap:5px}
.surface-legend i{display:inline-block;width:16px;height:5px;border-radius:2px}
.surface-legend strong{color:var(--text-primary);font-weight:700}
@media(max-width:900px){.surface-legend{max-width:calc(100% - 16px)}}
.map-stage:has(#terrain3d:not([hidden])) .surface-legend{display:none}
/* AV-032: "+ Nowa wyprawa" -- activity and structure, two independent
   choices, as equal tiles. */
.new-journey-dialog fieldset{display:grid;gap:8px;margin:14px 0 0;padding:0;border:0}
.new-journey-dialog legend{margin-bottom:8px;color:var(--text-muted);font-size:12px;font-weight:750;letter-spacing:.08em;text-transform:uppercase}
.new-journey-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.new-journey-structures{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.new-journey-tile{position:relative;display:flex;flex-direction:column;gap:3px;min-height:58px;padding:10px 12px;border:1px solid var(--surface-line);background:rgb(20 22 23 / .6);color:var(--text-primary);cursor:pointer}
.new-journey-tile input{position:absolute;opacity:0;pointer-events:none}
.new-journey-tile span{color:var(--text-muted);font-size:12px}
.new-journey-tile:has(input:checked){border-color:rgb(92 200 230 / .85);background:rgb(92 200 230 / .14)}
.new-journey-tile:has(input:focus-visible){outline:2px solid rgb(92 200 230 / .9);outline-offset:2px}
.new-journey-dialog .creator-actions{margin-top:16px}
.new-journey-dialog{z-index:2100}
#new-journey-backdrop{z-index:2090}
/* AV-033: a compact Journey header -- the map and the profile get the room.
   One line of title (+ a status dot instead of the "STAN DANYCH" row and the
   repeated sentence under the title), the metrics beside it, the day rail,
   then the tabs with the Journey's actions on the same line. The start
   screen keeps its own header. */
.mission-status-strip{display:none!important}
body.journey-view .mission-header{min-height:0;padding:6px 0 2px;align-items:center;gap:20px}
body.journey-view .mission-header .eyebrow{display:none}
body.journey-view .mission-header h1{font-size:clamp(26px,2.3vw,34px)}
body.journey-view .mission-super:empty{display:none}
.mission-context:empty{display:none}
body.journey-view .mission-context{margin-top:4px;font-size:13px}
body.journey-view .mission-status:empty{display:none}
body.journey-view .mission-metrics div{padding-top:5px}
body.journey-view .mission-metrics dd{margin-top:2px;font-size:16px}
body.journey-view .stage-rail{margin-top:2px}
.mission-title-row{display:flex;align-items:center;gap:10px;min-width:0}
.mission-title-row h1{min-width:0}
.journey-status-dot{flex:0 0 auto;width:10px;height:10px;border-radius:50%;background:var(--text-muted);box-shadow:0 0 0 3px rgb(28 30 31 / .55);cursor:help}
.journey-status-dot[hidden]{display:none}
.journey-status-dot[data-state="AVAILABLE"]{background:var(--route-before,#5cc8e6)}
.journey-status-dot[data-state="PARTIAL"]{background:var(--sunlight)}
.journey-status-dot[data-state="UNAVAILABLE"]{background:var(--alpenglow)}
.journey-nav-row{display:flex;align-items:flex-end;gap:12px;margin-top:6px;border-bottom:1px solid var(--surface-line);min-width:0}
.journey-nav-row .journey-nav{flex:1 1 auto;margin:0;border-bottom:0;min-width:0}
.journey-nav-row .journey-actions{flex:0 0 auto;flex-wrap:nowrap;margin:0 0 6px auto}
.journey-nav-row .journey-actions button{min-height:28px;padding:0 10px;font-size:13px}
.journey-nav-row .journey-actions-error{position:absolute;right:0;margin-top:34px}
@media(max-width:1100px){.journey-nav-row{flex-wrap:wrap}.journey-nav-row .journey-actions{margin-left:0}}
/* AV-033: map and profile on the whole screen (Fullscreen API, or a fixed
   overlay where it is not available); Esc closes. */
.panel-fullscreen-toggle{min-width:32px;min-height:32px;padding:0 8px;border:1px solid rgb(243 245 243 / .3);border-radius:6px;background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:16px;line-height:1}
.panel-fullscreen-toggle:hover{background:rgb(28 30 31 / .7)}
.panel-is-fullscreen{position:fixed!important;inset:0;z-index:3000;margin:0!important;width:100vw!important;height:100vh!important;max-width:none!important;border-radius:0!important;overflow:auto;background:var(--surface-canvas)}
.panel-is-fullscreen:fullscreen{position:static!important}
#map-zone.panel-is-fullscreen #journey-map{height:calc(100vh - 150px)!important}
body.journey-view .mission-controls{flex-direction:row-reverse;align-items:center;gap:14px}
body.journey-view .mission-header{padding:0}
body.journey-view .journey-nav-row{margin-top:4px}
body.journey-view .journey-nav button{min-height:38px;padding-top:6px;padding-bottom:6px}
body.journey-view .journey-panels{margin-top:10px}
/* AV-034: the left panel's Journeys, grouped by activity; one line per name. */
.rail-group{display:grid;gap:2px}
.rail-group-head{display:flex!important;align-items:center;gap:8px;width:100%;margin:6px 0 0!important;min-height:30px!important;padding:4px 8px!important;border:0!important;background:transparent!important;color:var(--text-muted)!important;font-size:12px!important;font-weight:750;letter-spacing:.08em;text-transform:uppercase;text-align:left}
.rail-group-head:hover{color:var(--text-secondary)!important}
.rail-group-head svg{flex:0 0 auto;width:14px;height:14px}
.rail-group-head::after{content:"▾";margin-left:4px;font-size:12px;transition:transform .15s}
.rail-group-head[aria-expanded="false"]::after{transform:rotate(-90deg)}
.rail-group-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rail-group-count{flex:0 0 auto;min-width:20px;padding:0 6px;border-radius:9px;background:rgb(243 245 243 / .08);color:var(--text-secondary);font-size:12px;text-align:center;letter-spacing:0}
.rail-group-list{display:grid;gap:2px}
.rail-group-list[hidden]{display:none}
.journey-list .rail-group-list strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.journey-list .rail-group-list button[data-past="true"]{opacity:.6}
.journey-list,.rail-group,.rail-group-list,.rail-group-list button{min-width:0}
.rail-group-list button{overflow:hidden}
.rail-group-head{letter-spacing:.03em!important}
.journey-list .rail-group-list span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* AV-035: where "Według planu" starts when not on the plan's dates. */
.weather-anchor-note{margin:0 0 8px;padding:6px 10px;border-left:3px solid var(--sunlight);background:rgb(244 182 61 / .08);color:var(--text-secondary);font-size:13px}
.weather-walk-day{display:flex!important;flex-direction:row!important;align-items:center;gap:6px;font-size:12px}
.weather-gap{cursor:help;text-decoration:underline dotted}

/* AV-037: route edits -- the ghost handle on the line, the menu's items. */
.planning-ghost-handle{width:14px;height:14px;border-radius:50%;background:rgba(243,245,243,.9);border:2px solid #55b9d3;box-shadow:0 0 0 3px rgba(85,185,211,.25);cursor:grab}
.planning-point-menu{display:flex;flex-direction:column}
.planning-point-menu[hidden]{display:none}
.planning-point-menu button[hidden]{display:none}
/* AV-033 fix: under ~1180 px the compact header's title and its controls
   (metrics, weather, search) wrap instead of running past the window. */
@media(max-width:1180px){body.journey-view .mission-header{flex-wrap:wrap}
body.journey-view .mission-controls{flex-wrap:wrap;justify-content:flex-end;min-width:0;max-width:100%}
body.journey-view .mission-metrics{min-width:0;flex-wrap:wrap}}
/* AV-033 fix: the compact header sits at the page's top and is short -- the
   tall header's 76 px fade-in would run into its fade-out; here the scrim
   starts full and only ever lightens towards the content. */
body.journey-view .mission-header::before{-webkit-mask-image:linear-gradient(180deg,#000 0,#000 35%,transparent 100%);mask-image:linear-gradient(180deg,#000 0,#000 35%,transparent 100%)}
/* AV-038: the calendar like Google/Outlook -- colour per kind (tokens),
   glass tiles (blur, accent border at ~50 %, 3 px accent edge), neighbouring
   months' days, today, agenda, legend. Text colours are the light tint of
   each kind on the dark calendar (contrast >= 4.5:1). */
:root{--cal-leg-bg:rgba(112,168,138,.20);--cal-leg-edge:#7fb69a;--cal-leg-line:rgba(127,182,154,.5);--cal-leg-text:#d6eadf;
--cal-rest-bg:rgba(214,142,92,.20);--cal-rest-edge:#d99a6c;--cal-rest-line:rgba(217,154,108,.5);--cal-rest-text:#f1dccb;
--cal-lodging-bg:rgba(104,140,214,.20);--cal-lodging-edge:#86a3dc;--cal-lodging-line:rgba(134,163,220,.5);--cal-lodging-text:#d8e2f6;
--cal-stage-bg:rgba(126,196,214,.18);--cal-stage-edge:#8cc8d8;--cal-stage-line:rgba(140,200,216,.5);--cal-stage-text:#d9eff5;
--cal-day-one-edge:#e07a4f;
--cal-other-bg:rgba(170,166,156,.16);--cal-other-edge:#aaa69c;--cal-other-line:rgba(170,166,156,.5);--cal-other-text:#e4e2dd}
.calendar-event,.calendar-agenda-item{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--k-line);background:var(--k-bg);color:var(--k-text)}
.calendar-event{box-shadow:inset 3px 0 0 var(--k-edge)}
.calendar-event-leg{--k-bg:var(--cal-leg-bg);--k-edge:var(--cal-leg-edge);--k-line:var(--cal-leg-line);--k-text:var(--cal-leg-text)}
.calendar-event-camp,.calendar-event-lodging{--k-bg:var(--cal-lodging-bg);--k-edge:var(--cal-lodging-edge);--k-line:var(--cal-lodging-line);--k-text:var(--cal-lodging-text)}
.calendar-event-rest{--k-bg:var(--cal-rest-bg);--k-edge:var(--cal-rest-edge);--k-line:var(--cal-rest-line);--k-text:var(--cal-rest-text)}
.calendar-event-stage,.calendar-event-day-one{--k-bg:var(--cal-stage-bg);--k-edge:var(--cal-stage-edge);--k-line:var(--cal-stage-line);--k-text:var(--cal-stage-text)}
.calendar-event-day-one{--k-edge:var(--cal-day-one-edge)}
.calendar-event-other{--k-bg:var(--cal-other-bg);--k-edge:var(--cal-other-edge);--k-line:var(--cal-other-line);--k-text:var(--cal-other-text)}
.calendar-event.calendar-event-stage,.calendar-event.calendar-event-day-one{cursor:default}
.calendar-day[data-date]{cursor:pointer}
.calendar-day[data-date]:hover{background:rgb(243 245 243 / .04)}
.calendar-day.calendar-day-outside{background:#141617;opacity:.5}
.calendar-day-outside .calendar-day-number{color:var(--text-muted)}
.calendar-day-today .calendar-day-number{display:inline-grid;place-items:center;min-width:22px;height:22px;border-radius:11px;background:var(--accent);color:var(--accent-ink);font-weight:700}
.calendar-controls{flex-wrap:wrap}
.calendar-view-toggle button{min-height:30px}
.calendar-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin:12px 0 0;padding:0;list-style:none;font-size:12.5px;color:var(--text-secondary)}
.calendar-legend li{display:inline-flex;align-items:center;gap:6px}
.calendar-legend li::before{content:"";width:14px;height:12px;border-radius:3px;border:1px solid var(--k-line);background:var(--k-bg);box-shadow:inset 3px 0 0 var(--k-edge)}
.calendar-legend li[data-kind="leg"],.calendar-add-types [data-kind="leg"]{--k-bg:var(--cal-leg-bg);--k-edge:var(--cal-leg-edge);--k-line:var(--cal-leg-line);--k-text:var(--cal-leg-text)}
.calendar-legend li[data-kind="lodging"],.calendar-add-types [data-kind="lodging"]{--k-bg:var(--cal-lodging-bg);--k-edge:var(--cal-lodging-edge);--k-line:var(--cal-lodging-line);--k-text:var(--cal-lodging-text)}
.calendar-legend li[data-kind="rest"],.calendar-add-types [data-kind="rest"]{--k-bg:var(--cal-rest-bg);--k-edge:var(--cal-rest-edge);--k-line:var(--cal-rest-line);--k-text:var(--cal-rest-text)}
.calendar-legend li[data-kind="stage"]{--k-bg:var(--cal-stage-bg);--k-edge:var(--cal-stage-edge);--k-line:var(--cal-stage-line)}
.calendar-legend li[data-kind="day-one"],.calendar-add-types [data-kind="day-one"]{--k-bg:var(--cal-stage-bg);--k-edge:var(--cal-day-one-edge);--k-line:var(--cal-stage-line);--k-text:var(--cal-stage-text)}
.calendar-legend li[data-kind="other"],.calendar-add-types [data-kind="other"]{--k-bg:var(--cal-other-bg);--k-edge:var(--cal-other-edge);--k-line:var(--cal-other-line);--k-text:var(--cal-other-text)}
.calendar-add-types{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:14px 0}
.calendar-add-types button{min-height:44px;padding:0 12px;border:1px solid var(--k-line);border-radius:8px;background:var(--k-bg);box-shadow:inset 3px 0 0 var(--k-edge);color:var(--k-text);font-weight:600;text-align:left;cursor:pointer}
.calendar-add-types button:disabled{opacity:.45;cursor:not-allowed}
.calendar-add-note{min-height:1.2em;color:var(--text-secondary);font-size:13px}
.calendar-agenda{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.calendar-agenda-date{margin:14px 0 2px;font-size:13px;font-weight:700;letter-spacing:.04em;color:var(--text-secondary)}
.calendar-agenda-date::first-letter{text-transform:uppercase}
.calendar-agenda-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 14px;padding:8px 12px;border-radius:8px;box-shadow:inset 3px 0 0 var(--k-edge);text-align:left;cursor:pointer}
.calendar-agenda-title{font-weight:600;overflow:hidden;text-overflow:ellipsis}
.calendar-agenda-when{font-size:12.5px;white-space:nowrap}
.calendar-agenda-detail{grid-column:1 / -1;font-size:12.5px;opacity:.9}
.creator-panel textarea{display:block;width:100%;margin-top:7px;padding:8px 10px;border:1px solid rgb(209 231 229 / .25);border-radius:2px;background:#041f29;color:var(--text-primary);font:inherit;resize:vertical}
.planning-search-results .planning-search-credit{cursor:default;font-size:12px;opacity:.75;padding-top:6px}.planning-search-results .planning-search-credit a{color:inherit}
/* AV-049: the accent's hover and pressed shades (tokens in :root). */
.journey-rail #new-journey:hover,.weather-play:hover,.frame-player button:hover,.map-resize:hover{background:var(--accent-hover)}
.landing-cta:active,.journey-rail #new-journey:active,.weather-play:active,.frame-player button:active,.map-resize.dragging{background:var(--accent-press)}
/* AV-062: "Pogoda" -- the forecast for any place (aventurro/place_weather.js). */
.place-weather{display:grid;gap:20px;margin-top:22px;min-width:0}
.place-weather[hidden],.place-forecast[hidden]{display:none}
.place-weather:focus-visible{outline:none}
.place-search-card{display:grid;gap:12px}
.place-search-head h2{margin:4px 0 0;font-family:var(--font-display);font-size:clamp(22px,2.4vw,30px);font-weight:500}
.place-search{position:relative;display:flex;align-items:center;gap:10px;min-height:54px;padding:0 16px;border:1px solid rgb(209 231 229 / .28);border-radius:14px;background:rgb(3 24 31 / .55)}
.place-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent)}
.place-search>svg{flex:0 0 auto;width:20px;height:20px;color:var(--text-muted)}
.place-search input{flex:1;min-width:0;height:52px;border:0;background:transparent;color:var(--text-primary);font-size:18px;outline:none}
.place-search input::placeholder{color:var(--text-muted)}
.place-results{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 6px);max-height:min(60vh,460px);overflow:auto;padding:6px;border:1px solid var(--surface-line);border-radius:12px;background:var(--surface-panel);box-shadow:0 18px 40px rgb(0 0 0 / .45)}
.place-results[hidden]{display:none}
.place-group-label{margin:8px 10px 4px;color:var(--text-muted);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.place-option{display:grid;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:4px 10px;min-height:44px;padding:6px 10px;border-radius:8px;cursor:pointer}
.place-option[aria-selected="true"],.place-option:hover{background:color-mix(in srgb,var(--accent) 16%,transparent)}
.place-option-icon{display:flex;color:var(--text-secondary)}
.place-option-icon svg{width:20px;height:20px}
.place-option[data-group="PEAK"] .place-option-icon{color:var(--accent)}
.place-option-name{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.place-option-meta{color:var(--text-muted);font-size:13px;text-align:right;white-space:nowrap}
.place-search-status{min-height:18px;margin:0;color:var(--text-muted);font-size:13px}
.place-search-status:empty{display:none}
.place-shortcuts{display:grid;gap:8px}
.place-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.place-chips:empty{display:none}
.place-chips-label{margin:0 6px 0 0;color:var(--text-muted);font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.place-chip{min-height:34px;padding:0 12px;border:1px solid var(--surface-line);border-radius:999px;background:rgb(3 24 31 / .4);color:var(--text-primary);font-size:13px}
.place-chip span{color:var(--text-muted)}
.place-chip:hover{border-color:var(--accent)}
.place-pick summary{cursor:pointer;color:var(--text-secondary);font-size:14px}
.place-pick-map{height:320px;margin-top:10px;border-radius:12px;overflow:hidden;background:#0b1d24}
.place-forecast{display:grid;gap:20px;min-width:0}
.place-head{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(240px,1fr);gap:20px;align-items:stretch}
.place-head h2{margin:4px 0 6px;font-family:var(--font-display);font-size:clamp(28px,3.2vw,44px);font-weight:500;line-height:1.05}
.place-meta{margin:0;color:var(--text-secondary);font-size:15px}
.place-meta strong{color:var(--text-primary)}
.place-source{margin:6px 0 0;color:var(--text-muted);font-size:12px}
.place-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.place-actions button{min-height:38px;padding:0 14px;border:1px solid var(--surface-line);border-radius:10px;background:rgb(3 24 31 / .45);color:var(--text-primary);font-size:14px}
.place-actions button:hover{border-color:var(--accent)}
#place-favorite[aria-pressed="true"]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 16%,transparent)}
#place-favorite span{color:var(--accent)}
.place-link-status{margin:6px 0 0;color:var(--text-muted);font-size:12px;word-break:break-all}
.place-link-status:empty{display:none}
.place-map{min-height:200px;border-radius:12px;overflow:hidden;background:#0b1d24}
.place-map-fallback{display:grid;place-items:center;color:var(--text-muted);font-size:13px}
.place-map-marker{width:16px;height:16px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px var(--accent-ink),0 0 0 6px color-mix(in srgb,var(--accent) 40%,transparent)}
.place-controls{display:grid;gap:12px}
.place-controls-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}
.place-controls-row .weather-layout{margin-left:auto}
.place-note{margin:0;color:var(--text-muted);font-size:13px}
.place-source-line{margin:0}
.place-more{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}
.place-more button{min-height:42px;padding:0 16px;border:1px solid var(--accent);border-radius:10px;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--text-primary);font-weight:700}
.place-more span{color:var(--text-muted);font-size:13px}
.weather-day-bands .weather-night{fill:rgb(3 12 20 / .38)}
.weather-day-bands .weather-night[data-state="CIVIL_TWILIGHT"]{fill:rgb(3 12 20 / .18)}
.weather-day-bands .weather-midnight{stroke:rgb(209 231 229 / .22);stroke-width:1;stroke-dasharray:3 4}
.weather-time-axis .weather-day-mark{color:var(--text-primary);font-weight:700}
.weather-apparent-line{fill:none;stroke:rgb(243 245 243 / .7);stroke-width:1.6;stroke-dasharray:5 4}
.weather-zero-line{stroke:rgb(150 200 255 / .45);stroke-width:1}
.place-cloud-line{fill:none;stroke-width:1.6}
.place-cloud-line.low,.place-swatch.low{stroke:#e8eef2;background:#e8eef2}
.place-cloud-line.mid,.place-swatch.mid{stroke:#9fbfdc;background:#9fbfdc}
.place-cloud-line.high,.place-swatch.high{stroke:#6d8ff0;stroke-dasharray:4 3;background:#6d8ff0}
.place-swatch{display:inline-block;width:18px;height:4px;margin-right:6px;border-radius:2px;vertical-align:middle}
.place-swatch.total{height:10px;background:#6f8796}
.place-table-card{min-width:0}
.place-table-scroll{overflow-x:auto;margin-top:10px;border:1px solid var(--surface-line);border-radius:10px}
.place-table-scroll:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.place-table{border-collapse:separate;border-spacing:0;font-size:12px;font-variant-numeric:tabular-nums}
.place-table th,.place-table td{min-width:40px;height:30px;padding:2px 4px;border-right:1px solid rgb(209 231 229 / .06);text-align:center;white-space:nowrap}
.place-table th[scope="row"]{position:sticky;left:0;z-index:2;min-width:84px;padding:0 10px;background:var(--surface-panel);color:var(--text-secondary);font-weight:600;text-align:left}
.place-table th[scope="row"] span{color:var(--text-muted);font-weight:400}
.place-table-days th[scope="colgroup"]{border-left:1px solid rgb(209 231 229 / .25);color:var(--text-primary);font-weight:700;text-align:left;padding-left:8px}
.place-table-hours th{color:var(--text-muted);font-weight:500}
.place-table td [data-state="UNAVAILABLE"]{color:var(--text-muted)}
.place-table .weather-arrow{display:inline-block;margin-right:2px;font-style:normal}
.place-table-icon{padding:2px}
.place-icon{width:24px;height:24px;vertical-align:middle;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.place-icon .i-sun{stroke:#f4c84a;fill:none}
.place-icon circle.i-sun{fill:#f4c84a}
.place-icon .i-moon{fill:#c9d6e8;stroke:none}
.place-icon .i-cloud{fill:#b8c7d1;stroke:#0b1d24;stroke-width:1}
.place-icon .i-fog{stroke:#b8c7d1}
.place-icon .i-rain{stroke:#6d9cf0}
.place-icon .i-snow{stroke:#ffffff;stroke-width:3}
.place-icon .i-bolt{stroke:#f4c84a;stroke-width:2}
.place-days{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin-top:12px}
.place-day{padding:14px;border:1px solid var(--surface-line);border-radius:12px;background:rgb(3 24 31 / .35)}
.place-day header{display:flex;align-items:center;justify-content:space-between;gap:8px}
.place-day h4{margin:0;font-size:14px;text-transform:capitalize}
.place-day .place-icon{width:30px;height:30px}
.place-day-temp{margin:6px 0 8px;font-size:22px;font-weight:700}
.place-day dl{display:grid;gap:4px;margin:0;font-size:13px}
.place-day dl div{display:flex;justify-content:space-between;gap:10px}
.place-day dt{color:var(--text-muted)}
.place-day dd{margin:0;text-align:right}
.place-day-window{margin-top:4px;padding-top:6px;border-top:1px solid var(--surface-line)}
.place-day-window strong{color:var(--accent)}
.place-day-partial{margin:8px 0 0;color:var(--text-muted);font-size:12px}
#place-all-days{margin-top:12px;min-height:38px;padding:0 14px;border:1px solid var(--surface-line);border-radius:10px;background:transparent;color:var(--text-primary)}
@media(max-width:900px){.place-head{grid-template-columns:1fr}.place-map{min-height:180px}.place-controls-row .weather-layout{margin-left:0}}
@media(max-width:520px){.place-search input{font-size:16px}.place-option{grid-template-columns:22px minmax(0,1fr)}.place-option-meta{grid-column:2;text-align:left}.place-pick-map{height:260px}.place-days{grid-template-columns:1fr}.place-actions button{flex:1 1 auto}}
.place-level-line{stroke:var(--text-primary);stroke-width:1.4;stroke-dasharray:6 4;opacity:.75}
.place-level-label{fill:var(--text-primary);font-size:13px;font-weight:700;paint-order:stroke;stroke:#082e39;stroke-width:3px}
.place-controls,.place-head,.place-search-card{min-width:0}
.place-controls-row>*{max-width:100%}
.place-levels{flex-wrap:wrap}
.weather-compare,.weather-compare-note{min-width:0;overflow-wrap:anywhere}
/* AV-063: a rail group (and its list) is never wider than its column -- the
   implicit auto track grew to a long name's width and pushed the phone page
   25 px sideways; the names already end in an ellipsis. */
.rail-group,.rail-group-list{grid-template-columns:minmax(0,1fr)}
/* AV-063: each day-card value on one line, the label beside it. */
.place-day dl div{align-items:baseline}
.place-day dt{flex:0 0 auto;white-space:nowrap}
.place-day dd{white-space:nowrap}
.place-day-window dd{white-space:normal}
/* AV-063: a night's bar -- the bed and its number when the bar is narrow. */
.calendar-event-camp,.calendar-event-lodging{container-type:inline-size}
.calendar-event-short{display:none;align-items:center;gap:2px;font-weight:800}
.calendar-event-short svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.calendar-event-short circle{fill:currentColor;stroke:none}
@container (max-width: 84px){
  .calendar-event-short{display:inline-flex}
  .calendar-event-camp .calendar-event-label,.calendar-event-lodging .calendar-event-label,
  .calendar-event-camp .calendar-event-continue,.calendar-event-lodging .calendar-event-continue{display:none}
}
/* AV-063: on a phone the Journey's actions wrap -- in one row they were wider
   than the screen (390 px: 28 px of sideways scroll). */
@media(max-width:600px){.journey-nav-row .journey-actions,.journey-actions{flex-wrap:wrap;min-width:0;max-width:100%}}
.weather-charts .weather-more{grid-column:1/-1}
/* AV-051: the second source and the licences' attributions. */
.weather-fallback{display:block;flex-basis:100%;color:var(--sunlight);font-size:12px}
.weather-charts .weather-attribution{grid-column:1/-1;margin:0;color:var(--text-muted);font-size:12px}
.place-controls .weather-fallback{margin:0}
/* AV-053: GPX import panel, drop target, download menu */
.planning-overlay{flex-wrap:wrap;max-width:330px;row-gap:8px}
.planning-overlay button{min-height:26px;padding:0 8px;border:1px solid var(--surface-line);background:transparent;color:var(--text-secondary);font-size:12px}
.route-import-panel{position:absolute;top:132px;right:64px;z-index:1250;width:min(380px,calc(100% - 80px));max-height:calc(100% - 148px);overflow:auto;padding:12px 16px 14px;border:1px solid rgb(243 245 243 / .19);background:rgb(3 24 31 / .92);font-size:13px;color:var(--text-secondary)}
.route-import-panel h2{margin:2px 0 8px;font-size:17px;color:var(--text-primary);overflow-wrap:anywhere}
.route-import-panel h3{margin:14px 0 6px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-primary)}
.route-import-panel p{margin:4px 0}
.route-import-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.route-import-list label{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.route-import-list select{margin-left:auto;min-height:26px;background:var(--surface-raised);color:var(--text-primary);border:1px solid var(--surface-line)}
.route-import-muted{color:var(--text-muted)}
.route-import-off{color:var(--sunlight)}
.route-import-error{color:var(--alpenglow)}
.route-import-version{display:flex;flex-wrap:wrap;gap:12px;margin:8px 0;padding:6px 10px;border:1px solid var(--surface-line)}
.route-import-version legend{padding:0 4px;color:var(--text-muted)}
.route-import-deviations{margin:4px 0;padding-left:18px}
.route-import-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
.route-import-actions button{min-height:30px;padding:0 12px;border:1px solid var(--surface-line);background:transparent;color:var(--text-secondary)}
.route-import-actions .route-import-done{border-color:var(--accent);background:var(--accent);color:var(--accent-ink);font-weight:600}
.route-import-poi{display:block;width:12px;height:12px;border:2px solid var(--surface-panel);border-radius:50%;background:var(--sunlight);box-shadow:0 0 0 1px rgb(0 0 0 / .4)}
.planning-drop-hint{position:absolute;inset:0;z-index:1400;display:none;place-items:center;border:3px dashed var(--accent);background:rgb(3 24 31 / .55);color:var(--text-primary);font-size:18px;pointer-events:none}
.planning-workspace.is-dropping .planning-drop-hint{display:grid}
.journey-gpx-menu{position:relative}
.journey-gpx-menu summary{display:flex;align-items:center;min-height:28px;padding:0 10px;border:1px solid rgb(243 245 243 / .3);background:rgb(28 30 31 / .45);color:var(--text-primary);font-size:13px;cursor:pointer;list-style:none}
.journey-gpx-menu summary::-webkit-details-marker{display:none}
.journey-gpx-menu summary::after{content:"▾";margin-left:6px}
.journey-gpx-options{position:absolute;z-index:1300;top:calc(100% + 4px);right:0;display:flex;flex-direction:column;min-width:280px;max-width:min(420px,calc(100vw - 32px));padding:4px;border:1px solid rgb(243 245 243 / .25);background:rgb(3 24 31 / .97);box-shadow:0 8px 20px rgb(0 0 0 / .45)}
.journey-gpx-options a{padding:8px 10px;color:var(--text-primary);text-decoration:none;font-size:13px}
.journey-gpx-options a:hover,.journey-gpx-options a:focus-visible{background:var(--surface-raised)}
@media(max-width:700px){.route-import-panel{top:auto;bottom:16px;right:16px;left:16px;width:auto;max-height:55%}}
.route-import-join{margin:10px 0;padding:8px 10px;border:1px solid var(--sunlight);background:rgb(244 182 61 / .08)}
.route-import-join-actions{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.route-import-join-actions button{min-height:28px;padding:0 10px;border:1px solid var(--surface-line);background:transparent;color:var(--text-primary);font-size:12px}
.route-import-join-actions button[aria-pressed="true"]{border-color:var(--accent);background:var(--accent);color:var(--accent-ink)}
.route-import-join-actions button:disabled{opacity:.45;cursor:not-allowed}
/* AV-053a: on wide screens the tabs never shrink into a scroll (the last tab
   cut off); the actions wrap to their own line instead. Phones keep the
   scrolling tab strip. */
@media(min-width:901px){.journey-nav-row{flex-wrap:wrap;row-gap:4px}.journey-nav{flex:1 0 auto}}
/* AV-064: a transfer beside the distance; a day timed over a short height gap */
.metric-transfer{display:block;margin-top:2px;color:var(--sunlight);font-size:12px;font-weight:600;letter-spacing:0}
.day-estimate{flex-basis:100%;color:var(--sunlight);font-size:12px;font-style:italic}
/* AV-054: accounts -- the rail's account link and the sign-in / account pages */
.account-link{display:block;margin-top:auto;padding:10px 4px 0;color:var(--text-secondary);font-size:13px;text-decoration:none}
.account-link:hover,.account-link:focus-visible{color:var(--text-primary)}
.auth-page{min-height:100vh;display:grid;place-items:center;padding:24px 16px;background:var(--surface-canvas)}
.auth-card{width:min(440px,100%);padding:28px 24px;border:1px solid var(--surface-line);background:var(--surface-panel);color:var(--text-secondary)}
.auth-card h1{margin:6px 0 18px;font-family:var(--font-display);font-size:28px;color:var(--text-primary)}
.auth-card h2{margin:24px 0 10px;font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-primary)}
.auth-card label{display:grid;gap:6px;margin:0 0 14px;font-size:13px}
.auth-card input:not([type=checkbox]){min-height:40px;padding:0 10px;border:1px solid var(--surface-line);background:var(--surface-raised);color:var(--text-primary);font-size:15px}
.auth-card .auth-check{display:flex;gap:8px;align-items:flex-start}
.auth-card button{min-height:40px;padding:0 16px;border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink);font-weight:600}
.auth-card button.secondary{border-color:var(--surface-line);background:transparent;color:var(--text-secondary);font-weight:500}
.auth-card .auth-error{min-height:18px;color:var(--alpenglow);font-size:13px}
.auth-card .auth-note{color:var(--text-muted);font-size:13px}
.auth-card .auth-link{word-break:break-all;font-family:ui-monospace,monospace;font-size:12px;color:var(--text-primary)}
.auth-card ul{padding-left:18px}
main.auth-card{align-self:center;height:fit-content;min-height:0;width:min(440px,100%);padding:28px 24px;display:block}
.auth-card a{color:var(--accent)}
.token-list{list-style:none;padding:0;display:grid;gap:8px}
.token-list li{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.token-list button{min-height:28px;padding:0 10px;font-size:12px}
