.app-shell.map-active{height:100dvh;min-height:0;overflow:hidden}
.map-active>.topbar{display:none}
.map-active>.content{padding:0;height:calc(100dvh - 83px - env(safe-area-inset-bottom));min-height:0}
#map-root{height:100%}
.map-module{--map-top:108px;--map-bottom:0px;position:relative;height:100%;min-width:0;color:var(--ink);background:var(--tone-edf1e9,#edf1e9);overflow:hidden}
.map-module>*{min-width:0}
.map-header{position:absolute;top:calc(12px + env(safe-area-inset-top));left:12px;right:12px;display:grid;grid-template-columns:minmax(0,1fr) 44px;gap:8px;z-index:6;pointer-events:none}
.map-header>*{pointer-events:auto}.map-title-row{display:contents}.map-title-row>div{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.map-title-row>.map-icon-button{grid-column:2;grid-row:1;pointer-events:auto;box-shadow:0 3px 12px var(--tone-233b2c0c,#233b2c0c)}
.map-kicker{font-size:.62rem;font-weight:750;letter-spacing:.11em;color:var(--tone-647768,#647768);display:block}
.map-title-row h1{font-size:1.55rem;letter-spacing:-.045em;line-height:1.1;margin:4px 0 0}
.map-icon-button{display:inline-flex;align-items:center;justify-content:center;background:white;color:var(--green);border:1px solid var(--tone-dce4d8,#dce4d8);border-radius:13px;min-width:44px;min-height:44px;padding:10px;flex-shrink:0}
.map-icon-button .icon{width:20px;height:20px}
.map-search-field{grid-column:1;grid-row:1;display:flex;align-items:center;gap:10px;border:1px solid var(--tone-d8e0d2,#d8e0d2);border-radius:15px;background:#fffffff2;padding:0 13px;min-height:48px;box-shadow:0 3px 12px var(--tone-233b2c0c,#233b2c0c)}
.map-search-field:focus-within{outline:2px solid var(--tone-567653,#567653);outline-offset:1px}
.map-search-field>.icon{width:20px;color:var(--tone-6f806c,#6f806c);flex-shrink:0}
.map-search-field input{border:0;background:none;outline:0;min-width:0;width:100%;font:inherit;font-size:.9rem;padding:13px 0;color:var(--ink)}
.map-search-field .map-icon-button{border:0;padding:6px;min-width:34px;min-height:36px}
.map-filters{grid-column:1/-1;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0;padding:2px 0 4px}
.map-filter{background:#fff;border:1px solid var(--tone-dde4d7,#dde4d7);color:var(--tone-536957,#536957);border-radius:30px;padding:8px 12px;min-height:36px;white-space:nowrap;font-size:.73rem}
.map-filter.active{background:var(--tone-234c3e,#234c3e);border-color:var(--tone-234c3e,#234c3e);color:var(--tone-f8fff0,#f8fff0)}
.map-canvas{position:absolute;inset:0;min-height:0;background:radial-gradient(ellipse at center,var(--tone-f6f8f1,#f6f8f1),var(--tone-edf1e9,#edf1e9));overflow:hidden}
#map-surface{display:block;width:100%;height:100%;touch-action:none;user-select:none;padding:0;outline-offset:-3px}
.map-level-row{position:absolute;left:12px;right:12px;top:calc(var(--map-top) + 8px);display:flex;align-items:center;justify-content:space-between;gap:8px;z-index:1;pointer-events:none}
.map-level-row>span{font-size:.63rem;color:var(--tone-657a65,#657a65);background:var(--tone-f8fbf1dd,#f8fbf1dd);padding:6px 8px;border-radius:8px}
.map-level-button{pointer-events:auto;display:flex;align-items:center;gap:4px;background:#ffffffed;border:1px solid var(--tone-e2e8da,#e2e8da);color:var(--tone-31553e,#31553e);border-radius:9px;min-height:34px;padding:6px 10px;font-size:.68rem;max-width:60%}
.map-level-button .icon{width:14px;height:14px}
.map-streets path{fill:none;stroke:var(--tone-dce3d3,#dce3d3);stroke-width:60;stroke-linejoin:round}
.map-building{fill:var(--tone-d1ddbc,#d1ddbc);stroke:var(--tone-839b71,#839b71);stroke-width:1.4;vector-effect:non-scaling-stroke;stroke-linejoin:round;filter:drop-shadow(0 7px 7px var(--tone-a8b39640,#a8b39640));cursor:pointer}
.map-building.is-selected{fill:var(--tone-315946,#315946);stroke:var(--tone-193f2e,#193f2e);stroke-width:2}
.map-building:hover:not(.is-selected){fill:var(--tone-b7cb9d,#b7cb9d)}
.map-passages{fill:none;stroke-linejoin:round;stroke-linecap:round;pointer-events:none}.map-passage-border{stroke:var(--tone-91a57c,#91a57c)}.map-passage-fill{stroke:var(--tone-dce3d3,#dce3d3)}.map-passage.is-reported .map-passage-border{stroke:#b98a50;stroke-dasharray:16 10}.map-passage.is-reported .map-passage-fill{stroke:#f5dfb9;stroke-dasharray:16 10}
.map-street-name{font-size:22px;font-weight:650;letter-spacing:4px;fill:var(--tone-71816a,#71816a)}
.map-number{cursor:pointer}.map-number circle{fill:var(--tone-fafcf5,#fafcf5);stroke:var(--tone-91a57c,#91a57c);stroke-width:1.2;vector-effect:non-scaling-stroke}.map-number text{font-size:34px;font-weight:700;text-anchor:middle;fill:var(--tone-31503b,#31503b);pointer-events:none}
.map-number.is-selected circle{fill:var(--tone-dcf68b,#dcf68b);stroke:var(--tone-244a37,#244a37);stroke-width:1.8}
.map-number .selected-building-label{font-size:25px;paint-order:stroke;stroke:var(--tone-f6f8f1,#f6f8f1);stroke-width:9;stroke-linejoin:round;fill:var(--tone-173b32,#173b32)}
.map-zoom{position:absolute;right:12px;bottom:calc(var(--map-bottom) + 16px);display:flex;gap:5px;z-index:1}
.map-zoom .map-icon-button{box-shadow:0 2px 8px var(--tone-1a402212,#1a402212);background:#ffffffee;border-radius:11px}
.map-canvas-caption{position:absolute;bottom:calc(var(--map-bottom) + 18px);left:13px;font-size:.6rem;line-height:1.4;color:var(--tone-5c745b,#5c745b);pointer-events:none;max-width:calc(100% - 180px)}
.map-sheet{position:absolute;left:12px;right:12px;bottom:12px;z-index:4;background:#fffffff5;border-radius:20px;box-shadow:0 8px 28px var(--tone-172f2630,#172f2630);padding:14px 16px;max-height:min(38%,calc(100% - var(--map-top) - 150px));overflow:auto;overscroll-behavior:contain;border:1px solid var(--tone-e1e6dc,#e1e6dc)}
.map-sheet.expanded{max-height:min(43%,calc(100% - var(--map-top) - 150px))}
.map-sheet h2{font-size:1.3rem;letter-spacing:-.035em;line-height:1.2;margin:4px 0}
.map-muted{color:var(--tone-637466,#637466);font-size:.74rem;line-height:1.5;margin:8px 0 11px}
.map-card-title{display:flex;align-items:center;justify-content:space-between;gap:10px}
.map-card-title>div{flex:1;min-width:0}.map-card-title .map-icon-button{background:transparent}.map-card-links{display:flex;justify-content:space-between;gap:12px;margin-top:5px}
.map-card-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.map-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:43px;border:1px solid var(--tone-dbe4d2,#dbe4d2);border-radius:12px;background:var(--tone-f3f6ed,#f3f6ed);color:var(--tone-244b36,#244b36);font-size:.76rem;font-weight:650;padding:10px 14px}
.map-card-actions>.map-button{flex:1}
.map-button.primary{background:var(--green);border-color:var(--green);color:var(--tone-f2f8e8,#f2f8e8)}
.map-button .icon{width:17px;height:17px}
.map-button:disabled{opacity:.45;cursor:default}
.map-text-button{background:none;border:0;color:var(--tone-315e40,#315e40);text-decoration:underline;text-underline-offset:3px;font-size:.75rem;min-height:36px;padding:6px 0;text-align:left}
.map-context{display:grid;gap:4px;background:var(--tone-f1f5e5,#f1f5e5);border-left:3px solid var(--tone-a9c676,#a9c676);padding:9px 11px;border-radius:0 9px 9px 0;margin:9px 0}
.map-context strong{font-size:.8rem}.map-context span,.map-context small{font-size:.69rem;color:var(--tone-5f725b,#5f725b);line-height:1.45}
.map-card-details{border-top:1px solid var(--line);margin-top:12px;padding-top:12px;font-size:.75rem;color:var(--tone-5f725f,#5f725f);line-height:1.55}
.map-card-details img{width:100%;max-height:145px;object-fit:cover;border-radius:12px;margin-bottom:8px}
.map-results{position:absolute;inset:calc(var(--map-top) + 8px) 0 0;overflow:auto;background:var(--tone-fafcf7,#fafcf7);z-index:5;padding:4px 16px 16px}
.map-results-heading{display:flex;align-items:center;justify-content:space-between;color:var(--tone-617660,#617660);font-size:.72rem}
.map-search-result{display:flex;align-items:center;gap:11px;width:100%;text-align:left;padding:14px 0;background:none;border-bottom:1px solid var(--tone-e1e7dc,#e1e7dc);min-height:68px}
.map-result-icon{background:var(--tone-eaf0df,#eaf0df);color:var(--tone-45643b,#45643b);border-radius:12px;padding:11px;display:flex}
.map-search-result>span:nth-child(2){flex:1;min-width:0}.map-search-result strong{display:block;font-size:.87rem;color:var(--tone-274633,#274633)}.map-search-result small{display:block;color:var(--tone-61725e,#61725e);font-size:.72rem;line-height:1.5;margin-top:3px}
.map-search-result>.icon{width:18px;color:var(--tone-87977c,#87977c)}.map-search-empty{padding:25px 8px;color:var(--tone-566d55,#566d55);font-size:.86rem;line-height:1.6}.map-search-empty p{font-size:.76rem;margin-top:13px}
.map-module.is-searching .map-sheet{display:none}

.map-floor-switch button{padding:9px 8px;min-height:40px;border-radius:8px;background:none;font-size:.75rem;color:var(--tone-52694d,#52694d)}.map-floor-switch button.active{background:var(--tone-234d3b,#234d3b);color:white}
.floor-area.room{fill:var(--tone-e7eddc,#e7eddc);stroke:var(--tone-c2cdb5,#c2cdb5);stroke-width:.8}.floor-area.corridor{fill:#fffef4;stroke:none}.floor-area.is-selected{fill:var(--tone-d8ef9a,#d8ef9a);stroke:var(--tone-587c3f,#587c3f);stroke-width:2}
.floor-walls{fill:none;stroke:var(--tone-56634e,#56634e);stroke-width:3;stroke-linejoin:round}.floor-doors{fill:none;stroke:var(--tone-6d994b,#6d994b);stroke-width:2;stroke-dasharray:3 2}
.room-label{font-size:12px;text-anchor:middle;fill:var(--tone-617452,#617452);pointer-events:none;display:block}.show-room-labels .room-label,.room-label.is-selected{display:block}.room-label.is-selected{fill:var(--tone-28442a,#28442a);font-weight:750}
.floor-poi{cursor:pointer}.floor-poi circle{fill:#fff;stroke:var(--tone-8d9d80,#8d9d80);stroke-width:1.2}.floor-poi text{font-size:10px;fill:var(--tone-456137,#456137);text-anchor:middle;pointer-events:none}.floor-poi.is-selected circle{fill:var(--tone-e2f3b1,#e2f3b1);stroke:var(--tone-3e6930,#3e6930);stroke-width:2}
.selection-caption text{font-size:11px;font-weight:700;fill:var(--tone-25482c,#25482c);paint-order:stroke;stroke:var(--tone-fffff7,#fffff7);stroke-width:5;stroke-linejoin:round;pointer-events:none}
.route-line,.route-halo{fill:none;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.route-halo{stroke:#fff;stroke-width:9}.route-line{stroke:#2871d1;stroke-width:4;stroke-dasharray:8 3}
.route-line polyline,.route-halo polyline{vector-effect:non-scaling-stroke}.floor-poi.on-route circle{stroke:#2265bc;fill:#e9f2ff;vector-effect:non-scaling-stroke;stroke-width:2}
.route-endpoint{pointer-events:none}.route-endpoint circle{fill:#fff;stroke:#2265bc;stroke-width:2.5}.route-endpoint rect{fill:#2265bc;stroke:#fff;stroke-width:2}.route-endpoint text{text-anchor:middle;font-size:12px;font-weight:750;fill:#2265bc}.route-endpoint.end text{fill:#fff}
.route-endpoint.end circle{fill:#2265bc}.route-endpoint circle,.route-endpoint rect{vector-effect:non-scaling-stroke}
.map-route-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.map-field{display:grid;gap:7px;font-size:.74rem;color:var(--tone-4c664e,#4c664e);margin:10px 0}.map-field select,.map-field input{width:100%;max-width:100%;font-size:.8rem;color:var(--tone-254b35,#254b35);padding:10px;border-radius:10px;border:1px solid var(--tone-ccd9c2,#ccd9c2);background:var(--tone-fafcf7,#fafcf7);min-height:44px}
.map-checkbox{display:flex;align-items:flex-start;gap:8px;font-size:.74rem;line-height:1.4;color:var(--tone-536d55,#536d55);margin:12px 0}.map-checkbox input{width:18px;height:18px;flex-shrink:0;accent-color:var(--tone-315c3a,#315c3a)}
.map-route-note{font-size:.68rem;color:var(--tone-5f745c,#5f745c);background:var(--tone-eff4e9,#eff4e9);padding:9px 11px;border-radius:10px;line-height:1.55}
.map-route-settings{margin:9px 0;font-size:.78rem;color:var(--tone-31583c,#31583c)}.map-route-settings summary{padding:10px 12px;border:1px solid var(--tone-dce5d4,#dce5d4);border-radius:10px;cursor:pointer;background:var(--tone-f7f9f2,#f7f9f2);min-height:42px}.map-next-floor{width:100%;margin-top:10px;text-align:left;justify-content:flex-start;background:#e7f0fe;border-color:#c9daf0;color:#235ca5}
.map-steps{list-style:none;padding:0;margin:12px 0 0}.map-steps li{display:flex;gap:10px;font-size:.78rem;color:var(--tone-36553a,#36553a);padding:8px 0;border-top:1px solid var(--tone-e6ebdf,#e6ebdf);line-height:1.4}.map-step-number{background:var(--tone-e8f0df,#e8f0df);min-width:25px;height:25px;display:grid;place-items:center;border-radius:8px;font-size:.7rem}.map-steps .map-text-button{display:block;font-size:.7rem}
.map-error{font-size:.75rem;padding:10px 12px;color:#744c23;background:#fff1d9;border-radius:12px;white-space:pre-line;line-height:1.5;margin:5px 0 12px}
.map-data-meta,.map-import-preview{padding:13px;background:var(--tone-f2f6ec,#f2f6ec);border-radius:12px;margin:12px 0;font-size:.76rem;line-height:1.5}.map-data-meta p,.map-import-preview p{margin:6px 0}
@media(max-height:650px){.map-module:not(.is-searching) .map-filters{display:none}.map-header{top:calc(8px + env(safe-area-inset-top))}.map-sheet{padding:10px 12px}.map-kicker{font-size:.6rem}}
@media(min-width:700px){.map-active>.content{height:calc(100dvh - 85px)}.map-sheet{padding-left:24px;padding-right:24px}}
@media(max-width:359px){.map-button{font-size:.7rem;padding:9px}.map-card-title{gap:6px}}

.manual-step{border-left:3px solid #dca246;padding-left:8px!important}.route-line .outdoor-route{stroke:#b67728;stroke-dasharray:3 7}.map-route-settings select{font-size:16px}.room-label{paint-order:stroke;stroke:#ffffffdd;stroke-width:2px;stroke-linejoin:round}.map-card-title h2{overflow-wrap:anywhere}



.map-floor-switch{position:absolute;left:12px;right:12px;top:calc(var(--map-top) + 50px);display:flex;gap:3px;max-width:none;max-height:none;overflow-x:auto;padding:4px;scrollbar-width:thin;background:#fff;border:1px solid var(--tone-dbe4d2,#dbe4d2);border-radius:12px;z-index:1}
.map-floor-switch button{flex-shrink:0;min-height:36px;padding:7px 8px;white-space:nowrap}
.map-floor-switch[hidden]{display:none}
.map-indoor-layer{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .16s ease}
.map-indoor-layer.is-visible{opacity:1;visibility:visible;pointer-events:auto}
.indoor-background{fill:var(--tone-fafcf5,#fafcf5);stroke:var(--tone-91a57c,#91a57c);stroke-width:1;vector-effect:non-scaling-stroke}
.map-building.is-detailed{fill:var(--tone-e7eddc,#e7eddc);filter:none}
.map-number.is-detailed,.route-endpoint.is-detailed{visibility:hidden;pointer-events:none}
.map-indoor-layer .floor-walls,.map-indoor-layer .floor-doors{stroke-width:1.2;vector-effect:non-scaling-stroke}
.map-indoor-layer .floor-walls polyline,.map-indoor-layer .floor-doors polyline,.map-indoor-layer .floor-poi circle{vector-effect:non-scaling-stroke}
@media(prefers-reduced-motion:reduce){.map-indoor-layer{transition:none}}
.map-module.is-endpoint-search .map-filters{display:none}
.map-search-result:disabled{opacity:.55;cursor:default}
.route-endpoint-fields{position:relative;display:grid;gap:6px;padding-right:43px}
.route-endpoint-fields>.map-icon-button{position:absolute;right:0;top:50%;transform:translateY(-50%);min-width:36px;padding:7px}
.route-endpoint-field{display:grid;gap:3px;width:100%;text-align:left;background:var(--soft);border:1px solid var(--line);border-radius:11px;padding:9px 12px;color:var(--ink)}
.route-endpoint-field small,.route-endpoint-field span{font-size:.65rem;color:var(--muted)}
.route-endpoint-field strong{font-size:.8rem;font-weight:600}
.map-sheet.route-sheet:not(.expanded){max-height:min(35%,calc(100% - var(--map-top) - 130px));padding:10px 12px}
.route-sheet .map-route-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.route-sheet h2{font-size:1rem;margin:0;overflow-wrap:anywhere}
.route-section-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:.68rem;color:var(--muted)}
.route-sections{display:flex;gap:5px;overflow-x:auto;scrollbar-width:thin;padding:3px 0 5px}
.route-section{flex-shrink:0;max-width:160px;white-space:normal;font-size:.65rem;min-height:34px;padding:6px 9px;border:1px solid var(--line);border-radius:9px;color:var(--ink);background:var(--soft)}
.route-section.active{background:var(--green);color:white;border-color:var(--green)}
.route-section-actions{display:flex;gap:6px;margin-top:5px}.route-section-actions .primary{flex:1}
.route-transition{font-size:.72rem;margin:5px 0;color:var(--ink)}
.route-extra{font-size:.68rem;color:var(--muted);margin-top:7px;line-height:1.4}.route-extra summary{cursor:pointer}.route-extra p{margin:5px 0}

.map-passage.is-underground .map-passage-fill{stroke:#81749e;stroke-dasharray:9 6}.map-passage.is-underground .map-passage-border{stroke-dasharray:9 6}.map-indoor-layer .selection-caption text{pointer-events:none}

.map-indoor-layer .floor-area{vector-effect:non-scaling-stroke}.map-indoor-layer .indoor-background path{vector-effect:non-scaling-stroke}

.map-indoor-layer .source-plan .floor-areas{opacity:.2}.map-indoor-layer .source-plan .floor-walls{opacity:.4}

.map-passage-label{font-size:12px;fill:#67527e;paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none}
