:root{--ink:#17384a;--navy:#173f50;--teal:#168b82;--paper:#fffdfa;--cream:#f3f0e8;--line:#d8dfdc;--muted:#6c7d83;--orange:#e88832;--danger:#b7354f;--attraction:#ef6b3f;--show:#8359bd;--character:#d78b24;--dining:#3f9a67;--shop:#bc5c91;--service:#3981c6;--landmark:#d44f87}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--cream);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}button,input,select,textarea{font:inherit;color:inherit}.app{height:100dvh;display:grid;grid-template-rows:62px 1fr}.topbar{display:flex;align-items:center;gap:18px;padding:0 18px;background:var(--navy);color:#fff;box-shadow:0 2px 14px #17384a35;z-index:30}.brand{min-width:0}.brand h1{margin:0;font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand p{margin:3px 0 0;color:#cddde1;font-size:10px}.top-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.save-state{font-size:9px;color:#d1e2e4}.top-button{border:1px solid #ffffff40;border-radius:9px;background:#ffffff14;color:#fff;padding:8px 12px;font-size:10px;font-weight:800;cursor:pointer}.top-button.primary{border-color:#fff;background:#fff;color:var(--navy)}
.top-button.save-button:not(:disabled){border-color:#7ed8cb;background:#168b82}.top-button:disabled{opacity:.42;cursor:default}
.layout{position:relative;min-height:0}.map-shell{position:absolute;inset:0;overflow:hidden;background:#bad39c}.viewport{position:absolute;inset:0;overflow:hidden;touch-action:none;cursor:grab}.viewport.dragging{cursor:grabbing}.world{position:absolute;width:3840px;height:2816px;transform-origin:0 0;user-select:none}.world>img,.world>svg{position:absolute;inset:0;width:100%;height:100%}.world>img{pointer-events:none}.road-line,.route-under,.route-line,.route-muted-under,.route-muted-line,.route-optional-under,.route-optional-line,.route-optional-active-under,.route-optional-active-line,.route-active-under,.route-active-line,.access-under,.access-line{fill:none;stroke-linecap:round;stroke-linejoin:round}.road-line{stroke:var(--teal);opacity:.46}.roads-hidden .road-line{display:none}.route-under,.route-muted-under,.route-optional-under,.route-optional-active-under,.route-active-under{stroke:#fff}.route-line,.route-muted-line{stroke:var(--navy)}.route-muted-line{opacity:.28}.route-optional-line{stroke:#7c8589;opacity:.85}.route-optional-active-line{stroke:#65747a}.route-active-line{stroke:#177bd0}.access-under{stroke:#fff}.access-line{stroke:var(--navy);stroke-dasharray:16 13;opacity:.48}.map-point{cursor:pointer;filter:drop-shadow(0 3px 4px #17384a45)}.plan-marker{cursor:pointer;filter:drop-shadow(0 4px 6px #17384a65)}.plan-marker .marker-name{fill:var(--ink);font-size:27px;text-anchor:start;paint-order:stroke;stroke:#fff;stroke-width:8px;stroke-linejoin:round}.map-tools{position:absolute;right:14px;top:14px;z-index:6;display:grid;border-radius:12px;overflow:hidden;background:#fffffff2;box-shadow:0 5px 18px #17384a30}.map-tools button{width:46px;height:41px;border:0;border-bottom:1px solid #dfe5e1;background:transparent;font-weight:900;cursor:pointer}.map-tools button:last-child{border:0;font-size:9px}
.journey-card{position:absolute;z-index:8;left:18px;right:18px;bottom:18px;padding:13px 14px 12px;border:1px solid #ffffff90;border-radius:16px;background:#fffdfaf2;box-shadow:0 10px 34px #17384a35;backdrop-filter:blur(12px)}.journey-heading{display:flex;align-items:center;gap:12px}.journey-heading>div{min-width:0}.journey-heading strong{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.journey-heading span{display:block;margin-top:2px;color:var(--muted);font-size:9px}.text-button{margin-left:auto;border:0;background:transparent;color:var(--teal);font-size:10px;font-weight:850;cursor:pointer}.journey-stops{display:flex;gap:7px;margin-top:10px;padding-bottom:3px;overflow-x:auto;scrollbar-width:thin}.journey-stop{display:flex;align-items:center;gap:6px;flex:none;max-width:190px;padding:7px 9px;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);cursor:pointer}.journey-stop.active{border-color:#177bd0;background:#e8f3ff;color:#115e9b}.journey-stop.optional{border-style:dashed}.journey-stop b{display:grid;place-items:center;flex:none;width:20px;height:20px;border-radius:50%;background:var(--navy);color:#fff;font-size:9px}.journey-stop.active b{background:#177bd0}.journey-stop span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:750}.segment-info{margin-top:7px;color:var(--muted);font-size:9px}
.editor-panel{position:absolute;z-index:20;top:0;right:0;bottom:0;width:430px;padding:16px;background:var(--paper);border-left:1px solid var(--line);box-shadow:-10px 0 32px #17384a20;overflow-y:auto;transform:translateX(102%);transition:transform .22s ease}.is-editing .editor-panel{transform:translateX(0)}.is-editing .map-shell{right:430px}.is-editing .journey-card{display:none}.editor-header,.sheet-header{display:flex;align-items:flex-start;gap:12px}.editor-header>div,.sheet-header>div{min-width:0}.editor-header h2,.sheet-header h2{margin:0;font-size:16px}.editor-header p{margin:3px 0 0;color:var(--muted);font-size:9px}.icon-button{margin-left:auto;width:32px;height:32px;border:0;border-radius:9px;background:#edf1ef;font-size:18px;cursor:pointer}.template-tools{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;margin-top:15px}.template-tools select{min-width:0;border:1px solid #ccd5d1;border-radius:8px;background:#fff;padding:7px;font-size:10px}.button{min-height:34px;border:0;border-radius:8px;padding:7px 10px;background:var(--navy);color:#fff;font-size:10px;font-weight:800;cursor:pointer}.button.secondary{background:var(--teal)}.button.ghost{background:#e8eeec;color:var(--ink)}.template-description{margin:7px 0 13px;color:var(--muted);font-size:9px;line-height:1.5}.small-label{display:block;margin:10px 0 4px;color:var(--muted);font-size:9px;font-weight:800}.plan-title-input,.sheet-input{width:100%;border:1px solid #ccd5d1;border-radius:9px;background:#fff;padding:9px 10px}.plan-title-input{font-size:12px;font-weight:800}.edit-list-heading{display:flex;align-items:baseline;gap:8px;margin:16px 0 8px}.edit-list-heading strong{font-size:12px}.edit-list-heading span{color:var(--muted);font-size:8px}.edit-plan-list{display:grid;gap:6px}.edit-step{display:grid;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:7px;padding:8px;border:1px solid var(--line);border-radius:10px;background:#fff}.edit-step.excluded{opacity:.58;background:#f1f1ee}.edit-step-number{display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:var(--navy);color:#fff;font-size:9px}.edit-step-main{min-width:0;border:0;background:transparent;text-align:left;cursor:pointer}.edit-step-main strong,.edit-step-main span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-step-main strong{font-size:10px}.edit-step-main span{margin-top:2px;color:var(--muted);font-size:8px}.edit-step-tags{display:flex;gap:4px;margin-top:3px}.tag{padding:2px 5px;border-radius:999px;background:#eef1ef;color:var(--muted);font-size:7px;font-weight:800}.tag.optional{background:#fff0d8;color:#915a0a}.tag.required{background:#fae5ea;color:#9d2943}.edit-step-actions{display:flex;gap:3px}.edit-step-actions button{min-width:25px;height:25px;padding:0 5px;border:0;border-radius:6px;background:#edf1ef;font-size:8px;font-weight:850;cursor:pointer}.edit-step-actions button.delete{color:var(--danger);background:#fae9ed}.edit-step-actions button:disabled{opacity:.3}.add-step{width:100%;margin-top:8px;background:var(--teal)}.empty-plan{padding:18px 10px;border:1px dashed #bdcac5;border-radius:10px;text-align:center;color:var(--muted);font-size:9px}.advanced-tools{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}.advanced-tools summary{cursor:pointer;font-size:10px;font-weight:800}.advanced-content{padding-top:8px}.field{display:grid;gap:3px;margin:7px 0}.field label{color:var(--muted);font-size:8px;font-weight:800}.field input,.field select{width:100%;border:1px solid #ccd5d1;border-radius:7px;background:#fff;padding:7px;font-size:9px}.filter-types{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.filter-types label{display:flex;align-items:center;gap:4px;padding:6px;border-radius:7px;background:#edf1ef;font-size:8px}.filter-types input{width:14px;height:14px}.hint{color:var(--muted);font-size:8px}.switch{display:flex;align-items:center;gap:6px;margin:8px 0;font-size:9px}.switch input{width:16px;height:16px}.data-stats{display:flex;gap:12px;margin-top:9px;color:var(--muted);font-size:8px}
.step-editor,.destination-picker{position:fixed;z-index:60;inset:0}.sheet-backdrop{position:absolute;inset:0;background:#102d3a7d;backdrop-filter:blur(2px)}.sheet-panel,.picker-panel{position:absolute;top:50%;left:50%;width:min(430px,calc(100% - 28px));max-height:calc(100dvh - 40px);padding:17px;border-radius:16px;background:var(--paper);box-shadow:0 22px 70px #102d3a60;transform:translate(-50%,-50%);overflow:auto}.sheet-header span{display:block;margin-bottom:2px;color:var(--teal);font-size:8px;font-weight:800}.destination-button{display:flex;align-items:center;gap:8px;width:100%;min-height:41px;border:1px solid #ccd5d1;border-radius:9px;background:#fff;padding:9px 10px;text-align:left;cursor:pointer}.destination-button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}.destination-button b{margin-left:auto;color:var(--teal);font-size:9px}.sheet-input{font-size:10px}.sheet-input[type=time]{width:140px}.sheet-input[rows]{resize:vertical;line-height:1.45}.optional-setting{margin-top:12px}.sheet-done{width:100%;margin-top:14px;background:var(--teal)}.picker-panel{width:min(620px,calc(100% - 28px))}.picker-search{width:100%;margin-top:14px;border:1px solid #bfcac6;border-radius:10px;background:#fff;padding:11px 12px;font-size:11px}.picker-filters{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:8px 0}.picker-filters select{border:1px solid #ccd5d1;border-radius:8px;background:#fff;padding:8px;font-size:9px}.picker-results{display:grid;grid-template-columns:1fr 1fr;gap:6px;max-height:52dvh;overflow:auto}.picker-result{display:flex;align-items:center;gap:8px;min-width:0;border:1px solid var(--line);border-radius:9px;background:#fff;padding:9px;text-align:left;cursor:pointer}.picker-result:hover{border-color:var(--teal);background:#f2faf7}.picker-result-dot{flex:none;width:10px;height:10px;border-radius:50%;background:var(--poi-color,var(--teal))}.picker-result.area{--poi-color:var(--navy)}.picker-result.attraction{--poi-color:var(--attraction)}.picker-result.show{--poi-color:var(--show)}.picker-result.character{--poi-color:var(--character)}.picker-result.dining{--poi-color:var(--dining)}.picker-result.service{--poi-color:var(--service)}.picker-result.landmark{--poi-color:var(--landmark)}.picker-result div{min-width:0}.picker-result strong,.picker-result span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-result strong{font-size:9px}.picker-result span{margin-top:2px;color:var(--muted);font-size:7px}
.plan-marker .marker-name{display:none}.plan-marker.selected .marker-name{display:block}
.map-point .poi-area-ring{fill:var(--area-color);stroke:#fff;stroke-width:5}.map-point .poi-type-core{fill:var(--type-color);stroke:#fff;stroke-width:3}.map-point .poi-type-icon{fill:#fff;stroke:#fff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.map-point .poi-name{font-size:31px;font-weight:800;fill:var(--ink);paint-order:stroke;stroke:#fff;stroke-width:8px;stroke-linejoin:round}.stop-note{max-height:76px;margin-top:6px;padding-top:7px;border-top:1px solid #e2e7e4;overflow:auto;white-space:pre-line;color:var(--ink);font-size:9px;line-height:1.55}.plan-advice{margin-top:6px;color:var(--muted);font-size:8px}.plan-advice summary{cursor:pointer;font-weight:800}.plan-advice p{margin:5px 0 0;line-height:1.55}.picker-group-title{grid-column:1/-1;position:sticky;top:0;z-index:2;margin-top:4px;padding:7px 4px 4px;background:var(--paper);color:var(--ink);font-size:9px;font-weight:900}.picker-result-dot{display:grid;place-items:center;width:24px;height:24px;border:4px solid var(--area-color);background:var(--type-color);color:#fff;font-size:9px;font-style:normal;font-weight:900}.picker-result-dot i{font-style:normal}.tag.high{background:#fae5ea;color:#9d2943}
.parade-under,.parade-line,.parade-stripes{fill:none;stroke-linecap:round;stroke-linejoin:round}.parade-under{stroke:#fff7e3}.parade-line{stroke:#f18bdc}.parade-stripes{stroke:#ffcd1c;stroke-dasharray:none}.parade-label{font-size:26px;font-weight:900;fill:#7b5610;paint-order:stroke;stroke:#fff7d6;stroke-width:8px;stroke-linejoin:round}.parade-endpoint{fill:#ffcd1c;stroke:#fff;stroke-width:5;vector-effect:non-scaling-stroke}.plan-marker .plan-area-ring{fill:var(--area-color);stroke:#fff;stroke-width:5}.plan-marker .plan-type-core{fill:var(--type-color);stroke:#fff;stroke-width:3}.plan-marker>.poi-type-icon{fill:#fff;stroke:#fff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.plan-marker.selected .plan-area-ring{fill:var(--area-color);stroke:#177bd0;stroke-width:8}.route-number-chip rect{fill:#fff;stroke:var(--navy);stroke-width:3}.route-number-chip text{fill:var(--navy);stroke:none;font-size:16px;font-weight:900;text-anchor:middle;dominant-baseline:middle}.priority-must .route-number-chip rect,.priority-high .route-number-chip rect{stroke:var(--danger)}.priority-must .route-number-chip text,.priority-high .route-number-chip text{fill:var(--danger)}.priority-optional .route-number-chip rect{stroke:#707c81;stroke-dasharray:4 3}.priority-optional .route-number-chip text{fill:#657177}.journey-stop.priority-high{border-color:#d45c70;background:#fff4f6}.journey-stop.priority-high b,.journey-stop.priority-must b{background:var(--danger)}.journey-stop.priority-must{border-color:var(--danger)}.journey-stop.priority-optional{border-style:dashed;border-color:#899397;background:#f8f9f8}.journey-stop.priority-optional b{background:#6f7c81}.tag.must{background:#f7dce3;color:#90223d}.tag.normal{background:#edf1ef;color:#63757c}.edit-step.priority-optional{border-style:dashed}.sheet-input#stepPriority{width:100%}
@media(max-width:1050px){.editor-panel{width:min(390px,100%);box-shadow:-14px 0 38px #17384a35}.is-editing .map-shell{right:0}}
@media(max-width:720px){.app{grid-template-rows:56px 1fr}.topbar{padding:0 11px}.brand h1{font-size:14px}.brand p,.save-state{display:none}.top-button{padding:7px 9px}.journey-card{left:9px;right:9px;bottom:9px;padding:11px;border-radius:14px}.journey-heading strong{font-size:12px}.journey-stop{max-width:155px}.map-tools{right:9px;top:9px}.editor-panel{position:fixed;top:auto;bottom:0;width:100%;height:62dvh;border:0;border-radius:18px 18px 0 0;box-shadow:0 -12px 36px #17384a30;transform:translateY(102%)}.is-editing .editor-panel{transform:translateY(0)}.is-editing .map-shell{right:0;bottom:48dvh}.template-tools{grid-template-columns:1fr 1fr}.template-tools select{grid-column:1/-1}.picker-results{grid-template-columns:1fr}.sheet-panel,.picker-panel{top:auto;left:0;bottom:0;width:100%;max-height:88dvh;border-radius:18px 18px 0 0;transform:none}.plan-marker .marker-name{font-size:34px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
/* Adaptive world-space strokes: JavaScript updates these map-unit widths on
   every zoom so the visible line grows gently, rather than being fixed or
   scaling at the full map ratio. */
.road-line,.route-under,.route-line,.route-muted-under,.route-muted-line,.route-optional-under,.route-optional-line,.route-optional-active-under,.route-optional-active-line,.route-active-under,.route-active-line,.access-under,.access-line,.parade-under,.parade-line,.parade-stripes{vector-effect:none}
.road-line{stroke-width:var(--road-width)}
.route-under{stroke-width:var(--route-under-width)}
.route-line{stroke-width:var(--route-width)}
.route-muted-under{stroke-width:var(--muted-under-width)}
.route-muted-line{stroke-width:var(--muted-width)}
.route-optional-under{stroke-width:var(--optional-under-width)}
.route-optional-line{stroke-width:var(--optional-width);stroke-dasharray:var(--optional-dash) var(--optional-gap)}
.route-optional-active-under,.route-active-under{stroke-width:var(--active-under-width)}
.route-optional-active-line{stroke-width:var(--active-width);stroke-dasharray:var(--active-dash) var(--active-gap)}
.route-active-line{stroke-width:var(--active-width)}
.access-under{stroke-width:var(--access-under-width)}
.access-line{stroke-width:var(--access-width)}
.parade-under{stroke-width:var(--parade-under-width)}
.parade-line{stroke-width:var(--parade-border-width)}
.parade-stripes{stroke-width:var(--parade-center-width)}

#paradeRoute path{opacity:.58}
#paradeRoute.parade-hidden{display:none}
.parade-toggle{position:absolute;left:0;top:-46px;display:flex;align-items:center;gap:8px;min-height:36px;padding:7px 11px 7px 9px;border:1px solid #ffffffb5;border-radius:999px;background:#fffdfaf2;box-shadow:0 7px 22px #17384a30;backdrop-filter:blur(10px);cursor:pointer;user-select:none}
.parade-toggle input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.parade-toggle-track{position:relative;display:block;width:31px;height:18px;border-radius:999px;background:#aab5b5;box-shadow:inset 0 0 0 1px #17384a18;transition:background .18s ease}
.parade-toggle-track i{position:absolute;left:3px;top:3px;width:12px;height:12px;border-radius:50%;background:#fff;box-shadow:0 1px 4px #17384a45;transition:transform .18s ease}
.parade-toggle input:checked+.parade-toggle-track{background:#d7a91e}
.parade-toggle input:checked+.parade-toggle-track i{transform:translateX(13px)}
.parade-toggle input:focus-visible+.parade-toggle-track{outline:3px solid #177bd055;outline-offset:2px}
.parade-toggle-label{font-size:10px;font-weight:850;color:var(--ink);white-space:nowrap}

.map-display-control{position:absolute;right:0;top:-46px;display:flex;align-items:stretch;min-height:36px;border:1px solid #ffffffb5;border-radius:999px;background:#fffdfaf2;box-shadow:0 7px 22px #17384a30;backdrop-filter:blur(10px);z-index:12}
.map-display-toggle{position:relative;display:flex;align-items:center;gap:8px;padding:7px 10px;cursor:pointer;user-select:none;font-size:10px;font-weight:850;white-space:nowrap}
.map-display-toggle input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.map-display-track{position:relative;display:block;width:31px;height:18px;border-radius:999px;background:#aab5b5;box-shadow:inset 0 0 0 1px #17384a18;transition:background .18s ease}
.map-display-track i{position:absolute;left:3px;top:3px;width:12px;height:12px;border-radius:50%;background:#fff;box-shadow:0 1px 4px #17384a45;transition:transform .18s ease}
.map-display-toggle input:checked+.map-display-track{background:var(--teal)}
.map-display-toggle input:checked+.map-display-track i{transform:translateX(13px)}
.map-display-toggle input:focus-visible+.map-display-track{outline:3px solid #177bd055;outline-offset:2px}
.control-chevron-button{width:35px;border:0;border-left:1px solid #dce3df;background:transparent;color:var(--ink);font-size:15px;font-weight:900;cursor:pointer}.control-chevron{display:grid;place-items:center;transition:transform .18s ease}.control-chevron-button[aria-expanded="true"] .control-chevron{transform:rotate(180deg)}
.map-settings-toggle{border-radius:0 999px 999px 0}
.map-display-settings{position:absolute;right:0;bottom:45px;width:min(320px,calc(100vw - 36px));padding:14px;border:1px solid #ffffffb8;border-radius:15px;background:#fffdfaf5;box-shadow:0 14px 44px #17384a40;backdrop-filter:blur(14px)}
.map-settings-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.map-settings-heading strong{font-size:12px}.map-settings-heading span{color:#9b7210;font-size:9px;font-weight:800}
.map-display-settings .field{margin:8px 0}.map-display-settings .filter-types{grid-template-columns:repeat(3,1fr)}.map-display-settings .filter-types label{padding:6px 5px}.map-setting-switches{display:flex;gap:12px}.map-setting-switches .switch{margin:5px 0}.map-display-settings .data-stats{margin-top:5px}
.favorite-chip rect{fill:#fffaf0;stroke:#d4a21b}.favorite-chip text{fill:#b17d00}.route-number-chip.has-favorite rect{stroke:#d4a21b}.route-number-chip .favorite-star-text{fill:#b17d00}
.poi-labels-hidden .map-point .favorite-chip text{display:block}
.interest-chip rect{fill:#e7f7f7;stroke:#0d8da1}.interest-chip text{fill:#0b7483;font-size:14px}.poi-labels-hidden .map-point .interest-chip text{display:block}.map-point.is-interest .poi-area-ring{stroke:#0d8da1;stroke-width:7}.tag.interests{background:#dff3f3;color:#0b7483}
.step-interests{margin-top:10px;padding:10px;border:1px solid #cfe2de;border-radius:10px;background:#f5faf8}.step-interests-heading strong,.step-interests-heading span{display:block}.step-interests-heading strong{font-size:10px}.step-interests-heading span{margin-top:2px;color:var(--muted);font-size:8px}.step-interests-list{display:grid;gap:5px;margin-top:8px;max-height:180px;overflow:auto}.step-interests-list label{display:flex;align-items:center;gap:7px;padding:7px 8px;border-radius:8px;background:#fff;font-size:9px;cursor:pointer}.step-interests-list input{width:15px;height:15px;accent-color:#0d8da1}
.route-direction-arrow{pointer-events:none}.route-direction-arrow path{fill:#fff;stroke:#17384a55;stroke-width:.7;transform:scale(var(--route-arrow-scale));transform-origin:0 0;vector-effect:non-scaling-stroke}.route-muted-arrow{opacity:.35}.route-optional-arrow{opacity:.78}.route-optional-active-arrow,.route-active-arrow{opacity:1}
.route-multiplicity-badge{pointer-events:none}.route-multiplicity-body{transform:scale(var(--route-arrow-scale));transform-origin:0 0}.route-multiplicity-badge rect{fill:#fffdfaf2;stroke:var(--navy);stroke-width:1;vector-effect:non-scaling-stroke}.route-multiplicity-badge text{fill:var(--navy);font-size:10px;font-weight:900;text-anchor:middle;dominant-baseline:middle}
.temporary-navigation-under,.temporary-navigation-line{fill:none;stroke-linecap:round;stroke-linejoin:round}.temporary-navigation-under{stroke:#fff;stroke-width:var(--active-under-width)}.temporary-navigation-line{stroke:#0d8da1;stroke-width:var(--active-width)}.temporary-navigation-arrow{opacity:1}.navigate-button{background:#0d8da1}.temporary-navigation-bar{display:flex;align-items:center;gap:12px;margin:0 0 9px;padding:8px 10px;border-radius:11px;background:#e7f7f7;border:1px solid #99d3d4}.temporary-navigation-bar[hidden]{display:none}.temporary-navigation-bar div{min-width:0}.temporary-navigation-bar span,.temporary-navigation-bar strong{display:block}.temporary-navigation-bar span{color:#0d7887;font-size:8px;font-weight:850}.temporary-navigation-bar strong{margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}.temporary-navigation-bar button{margin-left:auto;flex:none;border:0;border-radius:8px;background:#0d8da1;color:#fff;padding:7px 9px;font-size:9px;font-weight:850;cursor:pointer}
.poi-detail-close{position:absolute}.poi-detail-meta{padding-right:38px;color:var(--teal);font-size:9px;font-weight:850}.poi-detail-card h2{margin:5px 42px 13px 0;line-height:1.3}.poi-wait{padding:10px 12px;border-radius:11px;background:#eef3f0}.poi-wait span{font-size:10px;font-weight:800}.poi-description{color:#344e5a;white-space:pre-line}.poi-detail-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.favorite-button{background:#e9edf0;color:var(--ink)}.favorite-button.is-favorite{background:#f4d36c;color:#694b00}.official-link{margin-left:auto;color:var(--teal);font-size:10px;font-weight:850;text-decoration:none}.official-link[hidden]{display:none}.plan-marker,.map-point{outline:none}.plan-marker:focus-visible,.map-point:focus-visible{filter:drop-shadow(0 0 8px #177bd0)}
@media(max-width:720px){.map-display-control{right:0}.map-display-settings{right:0;width:min(320px,calc(100vw - 18px))}}

/* Keep map dragging and marker interaction in separate hit-test layers. */
#roads,#route,#paradeRoute{pointer-events:none}
.map-point .marker-hit-area,.plan-marker .marker-hit-area{r:var(--marker-hit-radius);fill:transparent!important;stroke:transparent!important;stroke-width:0!important;pointer-events:all}
.map-point .poi-name{display:block;pointer-events:none;transition:opacity .12s ease}
.poi-labels-hidden .map-point .poi-name{display:block;opacity:0;visibility:hidden}
.poi-labels-hidden .map-point:hover .poi-name,.poi-labels-hidden .map-point:focus-visible .poi-name{display:block;opacity:0;visibility:hidden}
.map-point .poi-name,.plan-marker .marker-name{pointer-events:all}

/* Map-anchored detail bubble. */
.poi-detail{position:absolute;z-index:26;inset:auto;width:min(380px,calc(100% - 24px));filter:drop-shadow(0 16px 34px #102d3a55)}
.poi-detail-card{position:relative;left:auto;top:auto;width:100%;max-height:min(520px,calc(100dvh - 150px));padding:17px;border:1px solid #ffffffb8;border-radius:16px;background:#fffdfaf7;box-shadow:none;transform:none;overflow:auto;backdrop-filter:blur(14px)}
.poi-bubble-arrow{position:absolute;z-index:2;left:-7px;top:var(--bubble-arrow-top,52px);width:15px;height:15px;border-left:1px solid #ffffffb8;border-bottom:1px solid #ffffffb8;background:#fffdfa;transform:rotate(45deg)}
.poi-detail.bubble-left .poi-bubble-arrow{left:auto;right:-7px;border:0;border-right:1px solid #ffffffb8;border-top:1px solid #ffffffb8}
.poi-detail-card h2{margin-bottom:11px;font-size:18px}.poi-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.poi-fact{min-width:0;padding:9px;border-radius:10px;background:#eef3f0}.poi-fact span,.poi-fact strong{display:block}.poi-fact span{color:var(--muted);font-size:8px;font-weight:800}.poi-fact strong{margin-top:4px;color:var(--ink);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.poi-wait{display:block}.poi-wait strong{display:block;width:auto;height:auto;border-radius:0;background:transparent;color:var(--ink);font-size:16px}.poi-live-warning{margin:9px 0 0;padding:8px 10px;border-radius:9px;background:#fff2c9;color:#6f5208;font-size:8px;line-height:1.5}.poi-live-warning b,.poi-live-warning span{display:block}.poi-description{margin:11px 0;font-size:10px;line-height:1.65}.poi-detail-actions .button{min-height:31px}.poi-detail-close{right:10px;top:10px}
@media(max-width:720px){.poi-detail{width:min(350px,calc(100% - 18px))}.poi-detail-card{position:relative;top:auto;bottom:auto;max-height:min(440px,calc(100dvh - 130px));transform:none;border-radius:15px}.poi-facts{grid-template-columns:1fr 1fr}.poi-wait{grid-column:1/-1}.poi-description{font-size:10px}}

/* Current location is temporary session state. The visible point keeps a
   stable screen size while its snapped point remains on the local walkway. */
.location-widget{position:absolute;z-index:18;right:14px;top:151px;width:132px}.location-widget.expanded{width:248px}
.location-control{overflow:hidden;border:1px solid #ffffffb8;border-radius:14px;background:#fffdfaf2;box-shadow:0 7px 24px #17384a34;backdrop-filter:blur(12px)}.location-control-bar{display:flex;align-items:stretch;height:39px}.location-main-button{display:flex;align-items:center;justify-content:center;gap:7px;flex:1;min-width:0;border:0;background:transparent;color:var(--navy);font-size:10px;font-weight:900;cursor:pointer}.location-main-button svg{width:18px;height:20px;overflow:visible;filter:drop-shadow(0 1px 1px #17384a30)}.location-main-button path{fill:#177bd0;stroke:#fff;stroke-width:1.5;stroke-linejoin:round}.location-widget[data-source="manual"] .location-main-button path{fill:#f07a32}.location-expand-button{flex:none}
.location-panel{width:100%;padding:10px 11px 11px;border-top:1px solid #e1e7e4;background:#fffdfab8}
.location-status{display:flex;align-items:flex-start;gap:9px}.location-status>i{flex:none;width:11px;height:11px;margin-top:2px;border:3px solid #fff;border-radius:50%;background:#aab5b5;box-shadow:0 0 0 1px #17384a28}.location-status>i.gps,.location-status>i.locating{background:#177bd0}.location-status>i.manual,.location-status>i.error{background:#f07a32}.location-status strong,.location-status span{display:block}.location-status strong{font-size:10px}.location-status span{margin-top:3px;color:var(--muted);font-size:8px;line-height:1.4}.location-actions{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}.location-actions button{min-height:27px;border:0;border-radius:7px;padding:5px 8px;background:#e8eeec;color:var(--ink);font-size:8px;font-weight:850;cursor:pointer}.location-actions #confirmLocation,.location-actions #resumeGps{background:#177bd0;color:#fff}.location-actions #clearLocation{margin-left:auto;color:#7a5555}
#locationLayer{pointer-events:none}.location-accuracy{fill:#2788dc24;stroke:#2788dc55;stroke-width:1;vector-effect:non-scaling-stroke;pointer-events:none}.location-snap-line{fill:none;stroke:#536d78;stroke-width:2;stroke-dasharray:5 5;vector-effect:non-scaling-stroke;opacity:.7;pointer-events:none}.location-snap-point{fill:#fff;stroke:#0d8da1;stroke-width:2;vector-effect:non-scaling-stroke;pointer-events:none}.location-marker{pointer-events:all;filter:drop-shadow(0 4px 7px #17384a70)}.location-marker.editing{cursor:grab}.location-marker.editing:active{cursor:grabbing}.location-marker-body{transform:scale(var(--route-arrow-scale)) rotate(var(--location-heading,0deg));transform-origin:0 0;transition:transform .12s linear}.location-marker-arrow{fill:#177bd0;stroke:#fff;stroke-width:5;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.location-marker.manual .location-marker-arrow{fill:#f07a32}
@media(max-width:720px){.location-widget{right:9px;top:140px;width:118px}.location-widget.expanded{width:min(248px,calc(100vw - 18px))}.location-control-bar{height:37px}}
.app-toast{position:absolute;z-index:95;left:50%;top:18px;width:max-content;max-width:min(460px,calc(100% - 28px));padding:11px 16px;border:1px solid #ffd7a6;border-radius:12px;background:#fff6e7f5;box-shadow:0 12px 36px #17384a3f;color:#7b4310;font-size:10px;font-weight:850;line-height:1.5;text-align:center;transform:translate(-50%,-12px);opacity:0;transition:opacity .18s ease,transform .18s ease;backdrop-filter:blur(12px)}.app-toast.visible{transform:translate(-50%,0);opacity:1}.app-toast[hidden]{display:none}

/* Mobile map gestures and compact floating controls. */
.viewport{overscroll-behavior:none}
.journey-collapse-button{flex:none;width:28px;height:28px;border-left:0;border-radius:8px;background:#edf1ef}
.journey-card.collapsed{padding:7px 42px 7px 8px}
.journey-card.collapsed .journey-heading{position:absolute;right:7px;top:7px}
.journey-card.collapsed .journey-heading>div,.journey-card.collapsed #showAllRoute,.journey-card.collapsed .segment-info,.journey-card.collapsed .stop-note,.journey-card.collapsed .plan-advice,.journey-card.collapsed .temporary-navigation-bar{display:none}
.journey-card.collapsed .journey-stops{gap:6px;margin:0;padding:0;scrollbar-width:none}
.journey-card.collapsed .journey-stops::-webkit-scrollbar{display:none}
.journey-card.collapsed .journey-stop{width:28px;height:28px;padding:3px;border:0;background:transparent}
.journey-card.collapsed .journey-stop b{width:22px;height:22px}
.journey-card.collapsed .journey-stop span{display:none}
.plan-library-tools{margin-top:14px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#f4f7f5}
.plan-library-tools>label{display:block;margin-bottom:5px;color:var(--muted);font-size:8px;font-weight:850}
.plan-library-tools>div{display:flex;gap:6px}.plan-library-tools select{min-width:0;flex:1;border:1px solid #ccd5d1;border-radius:8px;background:#fff;padding:7px;font-size:10px}.plan-library-tools .button{min-height:32px}.plan-library-tools .button:disabled{opacity:.38;cursor:default}
.location-widget{width:72px}.location-widget.expanded{width:218px}
.location-control{border-radius:12px}.location-control-bar{height:34px}
.location-main-button{flex:1;gap:0;padding:0}.location-main-button svg{width:20px;height:20px;filter:none}
.location-main-button svg circle,.location-main-button svg path{fill:none;stroke:#177bd0;stroke-width:2;stroke-linecap:round;vector-effect:non-scaling-stroke}
.location-main-button svg circle:last-child{fill:#177bd0;stroke:none}.location-widget[data-source="manual"] .location-main-button svg circle,.location-widget[data-source="manual"] .location-main-button svg path{stroke:#f07a32}.location-widget[data-source="manual"] .location-main-button svg circle:last-child{fill:#f07a32;stroke:none}
.location-main-text{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.location-expand-button{width:30px}.location-panel{padding:8px 9px 9px}.location-status{gap:7px}.location-actions{margin-top:7px}.location-actions button{min-height:26px;padding:4px 7px}
.poi-detail{width:min(320px,calc(100% - 20px));filter:drop-shadow(0 10px 24px #102d3a4d)}
.poi-detail-card{max-height:min(420px,calc(100dvh - 120px));padding:12px;border-radius:13px}
.poi-detail-card h2{margin:3px 34px 8px 0;font-size:15px}.poi-detail-meta{font-size:8px}.poi-facts{gap:4px}.poi-fact{padding:7px}.poi-fact strong{margin-top:2px;font-size:9px}.poi-wait strong{font-size:13px}.poi-live-warning{margin-top:6px;padding:6px 8px}.poi-description{margin:8px 0;font-size:9px;line-height:1.5}.poi-detail-actions{gap:5px}.poi-detail-actions .button{min-height:28px;padding:5px 8px;font-size:9px}.official-link{font-size:9px}.poi-detail-close{right:7px;top:7px;width:27px;height:27px}
@media(max-width:720px){.location-widget{right:9px;top:139px;width:70px}.location-widget.expanded{width:min(218px,calc(100vw - 18px))}.location-control-bar{height:34px}.journey-card.collapsed{padding:6px 40px 6px 7px}.poi-detail{width:min(300px,calc(100% - 16px))}.poi-detail-card{max-height:min(370px,calc(100dvh - 108px));padding:11px}.poi-facts{grid-template-columns:repeat(3,minmax(0,1fr))}.poi-wait{grid-column:auto}.poi-description{font-size:9px}.plan-library-tools{margin-top:10px}.template-tools{margin-top:9px}}

/* Rounded centered chevrons and animated zoom feedback. */
.control-chevron-button{display:grid;place-items:center;padding:0}.control-chevron{display:block;width:18px;height:18px;line-height:0;transform-origin:50% 50%;transition:transform .2s cubic-bezier(.22,.8,.3,1)}.control-chevron svg{display:block;width:18px;height:18px;overflow:visible}.control-chevron path{fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.map-tools button{transition:background-color .16s ease,transform .16s ease}.map-tools button:active{background:#dfecea;transform:scale(.9)}

/* The compact route still keeps enough text to identify every stop. */
.journey-card.collapsed .journey-stop{width:auto;height:30px;max-width:150px;gap:5px;padding:3px 8px 3px 3px;border:1px solid var(--line);background:#fff}
.journey-card.collapsed .journey-stop.priority-optional{border-style:dashed}.journey-card.collapsed .journey-stop.active{border-color:#177bd0;background:#e8f3ff}
.journey-card.collapsed .journey-stop b{width:22px;height:22px}.journey-card.collapsed .journey-stop span{display:block;max-width:105px;font-size:9px}
.journey-stop.active b{box-shadow:0 0 0 3px #177bd0,0 0 0 5px #fff}

/* Keep the data date beside the title and make selected map markers obvious. */
.poi-title-row{display:flex;align-items:flex-start;gap:8px;padding-right:34px}.poi-title-row h2{min-width:0;flex:1;margin:3px 0 8px}.poi-title-row>span{flex:none;margin-top:6px;color:var(--muted);font-size:7px;font-weight:800;white-space:nowrap}.poi-live-warning{display:block}.poi-live-warning span{display:block}
.marker-selection-halo{display:none;fill:none;stroke:#177bd0;stroke-width:6}.plan-marker.selected .marker-selection-halo{display:block}
@media(max-width:720px){.journey-card.collapsed .journey-stop{max-width:126px}.journey-card.collapsed .journey-stop span{max-width:82px}.poi-title-row{gap:5px}.poi-title-row>span{font-size:6.5px}}

/* Route selection remains still until the user explicitly asks to move. */
.route-jump-button{position:absolute;z-index:14;left:50%;top:-46px;min-height:36px;padding:7px 11px;border:1px solid #ffffffb5;border-radius:999px;background:#fffdfaf2;color:var(--teal);box-shadow:0 7px 22px #17384a30;backdrop-filter:blur(10px);font-size:10px;font-weight:850;white-space:nowrap;transform:translateX(-50%);cursor:pointer}.route-jump-button[hidden]{display:none}

/* The collapse control and stop pills keep the same appearance and bottom
   position in both card states. */
.journey-card{padding-right:50px}.journey-collapse-button{position:absolute;right:7px;bottom:7px;top:auto;width:28px;height:28px;border:0;border-radius:9px;background:#edf1ef;box-shadow:inset 0 0 0 1px #d8dfdc}
.journey-card.collapsed .journey-heading{position:static}
.journey-card.collapsed .journey-stop{width:auto;height:auto;max-width:190px;gap:6px;padding:7px 9px;border:1px solid var(--line);background:#fff}
.journey-card.collapsed .journey-stop b{width:20px;height:20px}.journey-card.collapsed .journey-stop span{display:block;max-width:none;font-size:10px}
@media(max-width:720px){.journey-card{padding-right:46px}.journey-card.collapsed .journey-stop{max-width:155px}.journey-card.collapsed .journey-stop span{max-width:none;font-size:10px}}

/* Keep the route jump action beside the parade toggle so the right-side map
   display control always has its own space. */
.journey-left-controls{position:absolute;z-index:14;left:0;top:-46px;display:flex;align-items:center;gap:8px}
.journey-left-controls .parade-toggle{position:relative;left:auto;top:auto;z-index:auto}
.journey-left-controls .route-jump-button{position:relative;left:auto;top:auto;z-index:auto;transform:none}

/* Keep map symbols readable without letting them grow with every map pixel. */
.map-marker-visual{transform:scale(var(--map-marker-scale,1));transform-origin:0 0}
.plan-marker .map-marker-visual .poi-type-icon{fill:#fff;stroke:#fff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
.map-point .map-marker-visual{transform:scale(var(--poi-marker-scale,var(--map-marker-scale,1)))}
.map-point>.marker-hit-area{r:var(--poi-hit-radius);pointer-events:all}
.plan-marker>.marker-hit-area{r:var(--poi-hit-radius);pointer-events:all}

/* In the expanded card the collapse control belongs to the heading row, so it
   no longer reserves a blank strip down the full right side of the card. */
.journey-card:not(.collapsed){padding-right:14px}
.journey-card:not(.collapsed) .journey-collapse-button{position:relative;right:auto;bottom:auto;margin-left:0}
@media(max-width:720px){.journey-card:not(.collapsed){padding-right:11px}}

/* Keep the source date and its live-data caveat together in one compact
   notice at the upper-right of the detail bubble. */
.poi-title-row{align-items:flex-start;padding-right:32px}
.poi-title-row .poi-data-notice{flex:none;width:132px;margin-top:3px;padding:6px 8px;border-radius:8px;background:#fff2c9;color:#6f5208;font-size:7.5px;font-weight:800;line-height:1.35;text-align:right}
.poi-data-notice span,.poi-data-notice strong{display:block}
.poi-data-notice span{margin:0 0 2px;color:#9a6b00;font-size:7px;white-space:nowrap}
.poi-data-notice strong{font-weight:850}
.poi-description{font-size:11px;line-height:1.65}
@media(max-width:720px){.poi-title-row .poi-data-notice{width:116px;padding:5px 7px;font-size:7px}.poi-data-notice span{font-size:6.5px}.poi-description{font-size:10.5px;line-height:1.62}}

/* Refined detail-bubble structure and anchoring. */
.poi-detail-card{max-height:min(520px,calc(100dvh - 150px),var(--bubble-available-height,520px))}
.poi-detail-topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:7px}
.poi-detail-topbar .poi-detail-meta{min-width:0;padding-right:0}
.poi-detail-topbar .poi-detail-close{position:static;flex:none;margin:0}
.poi-title-row{display:grid;grid-template-columns:minmax(0,1fr) 132px;align-items:start;gap:12px;padding-right:0;margin-bottom:11px}
.poi-title-row h2{margin:2px 0 0;overflow-wrap:anywhere}
.poi-title-row .poi-data-notice{width:auto;margin:0;padding:7px 8px;text-align:left}
.poi-facts{margin-top:0}
.poi-detail.bubble-above .poi-bubble-arrow,.poi-detail.bubble-below .poi-bubble-arrow{left:var(--bubble-arrow-left,50%)}
.poi-detail.bubble-above .poi-bubble-arrow{top:auto;bottom:-7px;border:0;border-right:1px solid #ffffffb8;border-bottom:1px solid #ffffffb8}
.poi-detail.bubble-below .poi-bubble-arrow{top:-7px;border:0;border-left:1px solid #ffffffb8;border-top:1px solid #ffffffb8}
.map-point.detail-selected .marker-selection-halo,.plan-marker.detail-selected .marker-selection-halo{display:block;stroke:#177bd0;stroke-width:7}
.map-marker-visual{transition:opacity .12s ease}.map-point:active .map-marker-visual,.plan-marker:active .map-marker-visual{opacity:.68}
button,.button,.map-point,.plan-marker,[role="button"]{-webkit-tap-highlight-color:transparent}
button:focus,.button:focus,.map-point:focus,.plan-marker:focus,[role="button"]:focus{outline:none}
@media(max-width:720px){.poi-detail-card{max-height:min(420px,calc(100dvh - 120px),var(--bubble-available-height,420px))}.poi-title-row{grid-template-columns:minmax(0,1fr) 112px;gap:9px;margin-bottom:9px}.poi-title-row .poi-data-notice{padding:6px 7px}.poi-detail-topbar{margin-bottom:5px}}

/* Human-readable Markdown route sharing. */
.plan-share-tools{margin-top:7px}.plan-share-tools .button{flex:1}
.route-markdown-dialog{position:fixed;z-index:80;inset:0}.route-markdown-panel{position:absolute;top:50%;left:50%;width:min(620px,calc(100% - 28px));max-height:calc(100dvh - 40px);padding:17px;border-radius:16px;background:var(--paper);box-shadow:0 22px 70px #102d3a60;transform:translate(-50%,-50%);overflow:auto}.route-markdown-help{margin:10px 0;color:var(--muted);font-size:9px;line-height:1.55}.route-markdown-panel textarea{display:block;width:100%;min-height:260px;padding:12px;border:1px solid #bcc9c4;border-radius:10px;background:#fff;color:var(--ink);font:10px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.route-markdown-panel textarea:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px #168b8220}.route-markdown-actions{display:flex;justify-content:flex-end;gap:7px;margin-top:10px}
@media(max-width:720px){.route-markdown-panel{top:auto;left:0;bottom:0;width:100%;max-height:88dvh;padding:14px;border-radius:18px 18px 0 0;transform:none}.route-markdown-panel textarea{min-height:230px;font-size:9px}.route-markdown-actions{display:grid;grid-template-columns:1fr 1fr}.route-markdown-actions .button{padding-inline:6px}}
