:root{--ink:#203832;--muted:#60726c;--accent:#14685b;--accent-dark:#0b5146;--tint:#eaf3ef;--line:#e3e9e5;--surface:#fff;--canvas:#f5f8f6;--warning:#8b5929;--radius:12px;--shadow:0 4px 20px #243b3210;--font:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:var(--canvas);font-family:var(--font);font-size:14px;line-height:1.5}button,input,select{font:inherit}a,button,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}button:disabled{cursor:not-allowed;opacity:.55}button{border:0;background:none}button,input,select{min-height:44px}a,button{touch-action:manipulation}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #2b8576;outline-offset:3px}h1,h2,p{margin:0}h1{font-size:28px;line-height:1.2;letter-spacing:-.035em;font-weight:700}h2{font-size:15px;letter-spacing:-.015em}p{line-height:1.65}a{color:var(--accent);text-underline-offset:4px}svg{flex-shrink:0}::selection{background:#c0e5d8;color:var(--ink)}input{caret-color:var(--accent)}.app-shell{height:100dvh;min-height:480px;display:flex;flex-direction:column}.skip-link{position:fixed;top:-60px;left:20px;z-index:100;background:white;padding:12px}.skip-link:focus{top:8px}.topbar{height:80px;flex-shrink:0;background:var(--surface);padding:0 30px;gap:38px;border-bottom:1px solid var(--line);z-index:3}.brand,.topbar{display:flex;align-items:center}.brand{gap:10px;font-size:25px;font-weight:750;letter-spacing:-1.2px;padding:0}.brand-mark{display:grid;place-items:center;width:40px;height:40px;background:var(--accent);color:white;border-radius:11px}.brand-accent{color:var(--accent)}.campus-identity{display:flex;align-items:center;gap:12px;padding-left:32px;border-left:1px solid var(--line);min-width:220px}.campus-identity>svg{color:var(--muted)}.campus-identity div{display:flex;flex-direction:column}.campus-identity strong{font-size:13px;font-weight:650}.campus-identity span{font-size:12px;color:var(--muted)}.topbar nav{display:flex;align-self:stretch;gap:10px;margin-left:auto}.topbar nav button{position:relative;display:flex;align-items:center;gap:8px;padding:0 14px;font-size:13px;font-weight:600;color:var(--muted)}.topbar nav button.active{color:var(--accent)}.topbar nav button.active:after{position:absolute;bottom:0;left:14px;right:14px;height:3px;background:var(--accent);content:"";border-radius:3px 3px 0 0}.topbar nav button:hover{background:var(--canvas)}.topbar nav small{background:var(--tint);padding:1px 6px;border-radius:5px}.network-state{font-size:12px;display:flex;align-items:center;gap:6px;color:var(--accent);padding-left:10px}.network-state.is-offline{color:var(--warning)}.workspace{display:flex;flex:1 1;min-height:0}.directory{width:370px;flex-shrink:0;display:flex;flex-direction:column;background:var(--surface);z-index:2;border-right:1px solid var(--line)}.directory-scroll{overflow-y:auto;flex:1 1;min-height:0;scrollbar-color:#c2cdc6 transparent;scrollbar-width:thin;scroll-padding:20px}.search-header{padding:30px 25px 22px}.search-header h1{margin-bottom:8px}.search-header>p{color:var(--muted);font-size:13px;margin-bottom:24px}.search-box{border:1px solid #bdcec6;display:flex;align-items:center;gap:10px;border-radius:var(--radius);padding:0 13px;background:#fbfdfb;color:var(--accent);height:52px;box-shadow:0 2px 3px #243b3203}.search-box:focus-within{border-color:var(--accent);outline:2px solid #14685b22}.search-box input{width:100%;min-width:0;border:none;outline:none;background:none;font-size:13px;color:var(--ink);min-height:48px}.search-box input:focus-visible{outline:0}.search-box input::placeholder{color:#64756d}.search-box button{padding:0;min-width:28px}.category-filters{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}.category-filters button{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:8px;padding:0 11px;font-size:12px;min-height:38px;color:#556961}.category-filters button.selected{background:var(--accent);border-color:var(--accent);color:white}.category-filters button:hover:not(.selected){background:var(--tint);border-color:#acc4b9}.results-heading{display:flex;justify-content:space-between;align-items:center;padding:20px 25px 12px;border-top:1px solid var(--line)}.results-heading h2{font-size:14px}.results-heading>span{font-size:12px;color:var(--muted)}.place-list{padding:0 12px 24px}.place-row{display:flex;align-items:center;gap:12px;text-align:left;width:100%;padding:15px 12px;border-radius:9px;min-height:79px}.place-row+.place-row{border-top:1px solid #f0f3f1}.place-row:hover{background:var(--canvas)}.place-icon{width:39px;height:42px;display:grid;place-items:center;color:var(--accent);background:#edf3ef;border-radius:10px;flex-shrink:0}.place-icon.hostel{background:#f3f0e8;color:#796445}.place-icon.facility{background:#eff1f4;color:#5e6b7d}.place-row-copy{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:5px}.place-row-copy strong{font-size:13px;line-height:1.5;font-weight:620}.place-row-copy>span{font-size:10.5px;color:var(--muted);display:flex;flex-wrap:wrap;align-items:center;gap:7px}.row-separator{width:3px;height:3px;border-radius:50%;background:#9ca9a2}.row-chevron{color:#8b9b92}.trust-footer{display:flex;text-align:left;align-items:center;gap:10px;padding:17px 22px;min-height:74px;width:100%;background:#f5f8f6;border-top:1px solid var(--line);color:var(--muted);font-size:11px}.trust-footer>span{flex:1 1}.trust-footer small{display:block;font-size:10.5px;color:var(--accent);margin-top:3px}.trust-footer:hover{background:var(--tint)}.map-region{flex:1 1;min-width:0;position:relative;background:#e8edeb;isolation:isolate;overflow:hidden}.map-surface{position:absolute;inset:0;z-index:0}.map-loading{justify-content:center;flex-direction:column;gap:15px;color:var(--muted)}.map-caption,.map-loading{display:flex;align-items:center}.map-caption{position:absolute;top:24px;left:24px;border-radius:8px;background:#ffffffee;border:1px solid #ffffff;padding:11px 14px;box-shadow:var(--shadow);gap:9px;font-size:11px;color:#3d544a;pointer-events:none}.live-dot{width:6px;height:6px;border-radius:50%;background:var(--accent)}.map-caption-divider{height:11px;width:1px;background:#b9c7be;margin:0 2px}.map-tools{position:absolute;right:24px;top:24px;background:white;box-shadow:var(--shadow);display:flex;flex-direction:column;padding:4px;border-radius:10px}.map-tools button{width:42px;min-height:42px;display:grid;place-items:center;border-radius:7px}.map-tools button svg{width:18px}.map-tools button:hover{background:var(--tint);color:var(--accent)}.map-tools>span{height:1px;background:var(--line);margin:3px 7px}.north-arrow{position:absolute;right:38px;top:285px;display:flex;align-items:center;flex-direction:column;font-size:10px;color:#547369;gap:3px;pointer-events:none}.north-arrow svg{transform:rotate(-45deg)}.map-overlays{position:absolute;left:24px;bottom:42px;flex-direction:column;align-items:flex-start;gap:8px;max-width:calc(100% - 110px)}.map-legend,.map-overlays{display:flex;pointer-events:none}.map-legend{flex-wrap:wrap;gap:16px;background:#fffffff0;padding:11px 14px;border-radius:8px;font-size:10px;color:#54685b;box-shadow:var(--shadow)}.map-legend span{display:flex;align-items:center;gap:7px}.map-legend i{display:inline-block}.legend-building{width:10px;height:10px;background:#d9ded9;border:1px solid #8c9f93;border-radius:2px}.legend-path{width:17px;border-top:2px dashed #7b9183}.maplibregl-ctrl-attrib{font-size:10px!important;background:#fffffff0!important}.maplibregl-ctrl-scale{font-family:var(--font)!important;font-size:10px!important;background:#ffffffb3!important;border-color:#61766c!important;margin-left:24px!important}.map-pin{padding:0;min-height:34px;display:flex;gap:6px;align-items:center;white-space:nowrap;z-index:1;max-width:220px}.pin-dot{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;background:#fff;color:var(--accent);font-weight:700;font-size:11px;border:1.5px solid #558c78;box-shadow:0 2px 6px #244c3320;flex-shrink:0}.pin-label{display:none;background:#fffffff2;color:#244438;font-size:10px;font-weight:600;padding:4px 7px;border-radius:4px;white-space:normal;text-align:left;box-shadow:0 1px 5px #244c3310;max-width:170px}.map-pin.selected,.map-pin:focus-visible,.map-pin:hover{z-index:10}.map-pin.selected .pin-label,.map-pin:focus-visible .pin-label,.map-pin:hover .pin-label{display:block}.map-pin.selected .pin-dot{background:var(--accent);border:2px solid white;width:38px;height:38px;font-size:14px;box-shadow:0 0 0 4px #14685b25}.user-location{height:18px;width:18px;border:3px solid white;border-radius:50%;background:#2766d9;box-shadow:0 0 0 9px #2766d923}.map-message{position:absolute;left:20px;right:85px;top:80px;background:white;padding:14px;border-radius:8px;box-shadow:var(--shadow);font-size:12px}.panel-body{padding:26px}.panel-body>p{margin-top:16px}.panel-body>h2{margin-top:28px}.panel-title{margin-top:24px}.text-button{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;padding:0;color:var(--accent)}.text-button:hover{text-decoration:underline;text-underline-offset:3px}.subtle{color:var(--muted);font-size:13px}.destination-symbol{display:grid;place-items:center;height:74px;width:74px;border-radius:20px;background:var(--tint);color:var(--accent);margin:20px 0 25px}.category-text{display:block;font-size:12px;color:var(--accent);margin-bottom:10px}.details-panel h1{font-size:27px}.details-panel h1:focus{outline:0}.details-panel .subtle{margin-top:12px}.verification{display:flex;align-items:center;gap:6px;color:var(--warning);font-size:11px;margin-top:20px}.detail-actions{display:flex;gap:10px;margin-top:26px}.primary-button,.secondary-button{display:inline-flex;align-items:center;justify-content:center;gap:9px;border-radius:9px;padding:11px 17px;min-height:47px;font-size:12px;font-weight:600;text-decoration:none}.primary-button{color:white;background:var(--accent)}.primary-button:hover:not(:disabled){background:var(--accent-dark)}.secondary-button{border:1px solid #b9c9c0;background:#fff}.secondary-button:hover{background:var(--tint)}.secondary-button.saved{color:var(--accent);background:var(--tint)}.detail-section{border-top:1px solid var(--line);margin-top:28px;padding-top:24px}.detail-section p{font-size:13px;color:var(--muted);margin-top:10px}.place-facts{margin:24px 0}.place-facts>div{display:flex;justify-content:space-between;gap:12px;padding:10px 0;font-size:11px;border-bottom:1px solid var(--line)}dt{color:var(--muted)}dd{margin:0;text-align:right}.source-link{display:inline-flex;align-items:center;gap:8px;font-size:12px;min-height:44px}.empty-state{padding:28px 15px;color:var(--muted);text-align:center}.empty-state>svg{margin-bottom:12px}.empty-state h2{color:var(--ink);margin-bottom:10px}.empty-state p{font-size:13px;margin-bottom:18px}.status-message{font-size:12px;background:var(--tint);padding:14px;border-radius:9px;margin:14px 0}.directory-scroll>.status-message{margin:15px 25px}.location-notice{display:flex;align-items:flex-start;gap:8px;background:#f6f1e7;margin:18px 24px;border-radius:9px;padding:12px;font-size:12px;color:#715529}.location-notice button{min-height:30px;padding:0;flex-shrink:0}.field-label{display:block;font-size:12px;font-weight:600;margin:24px 0 8px}select{width:100%;border:1px solid #b7c7bd;border-radius:8px;color:var(--ink);padding:10px;background:white;font-size:12px}.location-link{margin-top:4px}.full-width{width:100%}.route-submit{margin-top:24px}.info-note{display:flex;gap:12px;margin-top:28px;padding-top:24px;border-top:1px solid var(--line)}.info-note>svg{color:var(--accent);margin-top:2px}.info-note h2{font-size:14px}.info-note p{font-size:12px;color:var(--muted);margin-top:8px}.package-summary{display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:24px 0;margin:24px 0 0}.package-summary span{font-size:13px}.package-summary small{font-size:11px;color:var(--muted)}.package-features{list-style:none;padding:0;margin:25px 0}.package-features li{display:flex;align-items:center;gap:10px;font-size:12px;margin:14px 0}.package-features svg{color:var(--accent)}.fine-print{line-height:1.65}.fine-print,.version-text{font-size:11px;color:var(--muted)}.version-text{overflow-wrap:anywhere}progress{width:100%;accent-color:var(--accent);height:10px;margin:15px 0}.coverage-facts{margin:25px 0}.coverage-facts>div{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding:13px 0;font-size:12px}.coverage-facts dd{font-size:16px;font-weight:650;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.skeleton{height:70px;margin-top:24px;border-radius:8px;background:#eef3ef}@media(min-width:1500px){.directory{width:395px}.search-header{padding:36px 30px 24px}.place-list{padding-left:17px;padding-right:17px}.results-heading{padding-left:30px;padding-right:30px}.place-row-copy strong{font-size:14px}}@media(max-width:1050px){.topbar{gap:22px;padding:0 22px}.campus-identity{padding-left:20px;min-width:180px}.topbar nav{gap:0}.topbar nav button{padding:0 10px}.network-state span{display:none}.directory{width:340px}}@media(max-width:760px){.app-shell{height:auto;min-height:100dvh}.topbar{height:66px;padding:0 18px;gap:15px;flex-wrap:wrap}.brand{font-size:23px}.brand-mark{width:34px;height:34px;border-radius:9px}.brand-mark svg{width:23px}.campus-identity{border:0;padding:0;margin-left:auto;min-width:0}.campus-identity>svg{display:none}.campus-identity strong{font-size:11px}.campus-identity span{font-size:10px}.network-state{padding:0}.topbar nav{position:fixed;left:0;right:0;bottom:0;height:65px;padding:0 15px calc(env(safe-area-inset-bottom,0px));background:white;z-index:30;border-top:1px solid var(--line);justify-content:space-around}.topbar nav button{flex-direction:column;justify-content:center;gap:4px;font-size:10px;min-width:80px}.topbar nav button.active:after{top:0;bottom:auto;left:15px;right:15px}.topbar nav small{position:absolute;right:12px;top:5px}.workspace{flex-direction:column;min-height:0;padding-bottom:calc(65px + env(safe-area-inset-bottom,0px))}.map-region{order:-1;min-height:330px;height:42dvh;flex:none;border-bottom:1px solid #d6dfd8}.directory{width:100%;border:0}.directory-scroll{overflow:visible}.search-header{padding:25px 22px 18px}.search-header h1{font-size:27px}.search-header>p{margin-bottom:19px}.category-filters{gap:7px}.category-filters button{min-height:44px;padding:0 12px}.results-heading{padding-left:22px;padding-right:22px}.place-list{padding:0 10px 15px}.place-row{min-height:79px}.place-row-copy strong{font-size:14px}.place-row-copy>span{font-size:11px}.trust-footer{padding:18px 22px;font-size:12px}.map-caption{top:16px;left:16px;font-size:10px;padding:9px 10px}.map-caption-divider{display:none}.map-caption{gap:7px;max-width:calc(100% - 92px)}.map-tools{top:16px;right:16px}.map-tools button{width:38px;min-height:40px}.map-overlays{left:16px;bottom:33px;gap:6px;max-width:calc(100% - 88px)}.map-legend{padding:8px;font-size:9px;gap:10px}.north-arrow{display:none}.maplibregl-ctrl-scale{margin-left:16px!important}.maplibregl-ctrl-attrib{font-size:9px!important}.panel-body{padding:24px 22px 32px}.details-panel h1{font-size:28px}.destination-symbol{margin-top:12px}.detail-actions .primary-button{flex:1 1}.map-message{left:16px;right:76px;top:69px}.location-notice{margin:16px 22px}}@media(max-width:370px){.topbar{padding:0 12px;gap:9px}.brand{font-size:21px}.campus-identity strong{font-size:10px}.map-caption{font-size:9px}.category-filters{gap:6px}.category-filters button{font-size:11px;padding:0 9px}}@media(max-height:500px) and (min-width:761px){.app-shell{height:100dvh;min-height:320px}.topbar{height:60px}.search-header{padding-top:18px}.trust-footer{min-height:55px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}.map-pin,.map-tools button{min-width:44px;min-height:44px}.map-pin{justify-content:center}.category-filters button{min-height:44px}.search-box button{min-width:44px}.location-notice button{min-width:44px;min-height:44px}.place-row{content-visibility:auto;contain-intrinsic-size:auto 79px}.network-state{white-space:nowrap}.topbar nav{height:calc(65px + env(safe-area-inset-bottom,0px))}@media(min-width:761px){.topbar nav{height:auto}}.campus-identity{min-width:0;max-width:310px;flex:1 1}.campus-identity>div{min-width:0;width:100%}.campus-identity label{display:block;font-size:11px;color:var(--muted);margin-bottom:2px}.campus-select{min-height:44px;padding:7px 26px 7px 9px;font-family:var(--font);font-weight:600;text-overflow:ellipsis}.campus-select:hover{border-color:var(--accent)}@media(max-width:760px){.campus-identity{max-width:calc(100% - 175px)}.campus-identity label{font-size:10px;margin:0}.campus-select{font-size:16px;min-height:44px;padding:5px 22px 5px 7px}.map-caption{align-items:flex-start}.map-caption>span:not(.live-dot):not(.map-caption-divider){display:block;min-width:0}.map-caption .live-dot{flex-shrink:0;margin-top:4px}}.map-pin.decluttered{visibility:hidden;pointer-events:none}.map-pin.show-label .pin-label{display:block}.map-tools button[aria-pressed=true]{background:var(--tint);color:var(--accent)}.map-tools button:disabled{opacity:.55;cursor:not-allowed}.map-status{max-width:420px;display:flex;flex-direction:column;gap:4px;background:#fffffff0;padding:9px 12px;border-radius:8px;font-size:10.5px;line-height:1.4;color:#3d544a;box-shadow:var(--shadow);pointer-events:none}.legend-height{width:10px;height:10px;background:#c9d2cb;border:1px solid #8c9f93;border-radius:2px;box-shadow:2px -2px 0 #aebbb2}.legend-height-estimated{width:10px;height:10px;background:#d8dfda;border:1px dashed #8c9f93;border-radius:2px;box-shadow:2px -2px 0 #c5cec7}@media(max-width:760px){.map-status{font-size:9.5px;padding:7px 9px;max-width:100%}}.walk-result{margin-top:16px;padding:14px;border-radius:9px;background:var(--tint);display:flex;flex-direction:column;gap:8px}.walk-badge{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;font-size:11.5px;font-weight:650;color:var(--warning);background:#fff;border:1px solid #e9dccd;border-radius:8px;padding:4px 8px}.walk-badge.warning{color:#7a3f17}.walk-summary{display:flex;align-items:baseline;gap:10px;margin:0}.walk-summary strong{font-size:22px;letter-spacing:-.02em}.walk-summary span{color:var(--muted)}.walk-steps{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px;font-size:13px;line-height:1.45}.walk-result .fine-print{margin:0}.legend-route{width:17px;height:4px;background:#14685b;border-radius:2px;box-shadow:0 0 0 1.5px #fff}.legend-direction{width:17px;border-top:3px dashed #c2372b}.legend-green{width:10px;height:10px;background:#e1ecdc;border:1px solid #b7cdb1;border-radius:2px}.legend-water{width:10px;height:10px;background:#d8eaf0;border:1px solid #a9cfdb;border-radius:2px}.map-legend{max-width:100%}.north-arrow{top:345px}.app-shell.map-only .directory,.app-shell.map-only .topbar{display:none}.app-shell.map-only .workspace{padding-bottom:0}.map-region.map-only{flex:1 1;height:auto}.legend-toggle{display:none;pointer-events:auto;align-items:center;gap:6px;background:#fffffff0;border-radius:8px;padding:0 12px;min-height:44px;font-size:12px;font-weight:600;color:#3d544a;box-shadow:var(--shadow)}.legend-toggle[aria-expanded=true]{color:var(--accent)}.map-legend,.map-status{font-size:11px}.pin-dot svg{width:15px;height:15px}.map-pin.selected .pin-dot svg{width:18px;height:18px}.map-pin.hostel .pin-dot{color:#796445;border-color:#a8916a}.map-pin.facility .pin-dot{color:#5e6b7d;border-color:#8692a3}.map-pin.selected .pin-dot{color:white}.legend-detected{width:10px;height:10px;background:#e3e7e4;border:1px dashed #9faea4;border-radius:2px}.legend-shortcut{width:17px;border-top:3px dotted #14685b}@media(max-width:760px){.legend-toggle{display:inline-flex}.map-legend{display:none;font-size:11px;padding:9px 10px}.map-legend.open{display:flex}.map-status{font-size:10.5px}.map-region.map-only{height:100dvh;min-height:100dvh}.app-shell.map-only{min-height:100dvh}}.nav-start{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0 6px}.nav-start>button{flex:1 1 150px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.voice-picker{margin:4px 0 8px}.voice-picker .field-label{margin-top:20px}.voice-download,.voice-picker>p.fine-print{margin-top:10px}.voice-group{font-size:12px;font-weight:600;margin:12px 0 8px}.voice-group span{font-weight:400;color:var(--muted);margin-left:6px}.voice-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.voice-card{display:flex;align-items:center;gap:10px;text-align:left;padding:8px 10px;min-height:56px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.voice-card:hover{background:var(--tint);border-color:#acc4b9}.voice-card.selected{border-color:var(--accent);background:var(--tint);box-shadow:0 0 0 1px var(--accent) inset}.voice-avatar{display:grid;place-items:center;width:42px;height:42px;flex-shrink:0}.voice-card.basic .voice-avatar{width:32px;height:32px}.voice-character{width:100%;height:100%;display:block;border-radius:50%;transition:transform .25s ease}.voice-card:hover .voice-character{transform:translateY(-1px) scale(1.04)}.voice-character.speaking{box-shadow:0 0 0 3px #fff,0 0 0 5px var(--accent)}.vc-eyes{transform-box:fill-box;transform-origin:center;animation:vc-blink 5.5s infinite}.voice-card:nth-child(2n) .vc-eyes{animation-delay:1.7s}.voice-card:nth-child(3n) .vc-eyes{animation-delay:3.1s}.vc-mouth{transform-box:fill-box;transform-origin:center}.voice-character.speaking .vc-mouth{animation:vc-talk .22s ease-in-out infinite alternate}@keyframes vc-blink{0%,92%,to{transform:scaleY(1)}95%{transform:scaleY(.1)}}@keyframes vc-talk{0%{transform:scaleY(.5)}to{transform:scaleY(1.9)}}@media (prefers-reduced-motion:reduce){.vc-eyes,.voice-character.speaking .vc-mouth{animation:none}.voice-character{transition:none}}.voice-copy{flex:1 1;min-width:0;display:flex;flex-direction:column}.voice-copy strong{font-size:13px}.voice-copy span{font-size:10.5px;color:var(--muted);line-height:1.35}.voice-state{color:var(--accent);display:grid;place-items:center}.voice-card:not(.selected) .voice-state{color:#8b9b92}.voice-more{margin-top:8px;min-height:36px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.nav-hud{position:absolute;inset:0;z-index:6;pointer-events:none}.nav-hud>*{pointer-events:auto}.nav-top{position:absolute;top:10px;left:12px;right:12px;max-width:460px;margin:0 auto;display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:14px;background:var(--accent-dark);color:#fff;box-shadow:0 6px 18px #0b514633}.nav-top .nav-turn{width:42px;height:42px;border-radius:11px;background:#ffffff1f;display:grid;place-items:center;flex-shrink:0}.nav-top .nav-copy{min-width:0}.nav-top .nav-distance{display:block;font-size:20px;line-height:1.1;font-weight:750;letter-spacing:-.02em}.nav-top .nav-instruction{font-size:14px;line-height:1.3;font-weight:600;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.nav-hud .nav-alert{top:84px;left:50%;transform:translateX(-50%);margin:0;white-space:nowrap;gap:6px;padding:6px 12px;border-radius:999px;color:var(--warning);font-size:12px;font-weight:650;box-shadow:var(--shadow)}.nav-bottom,.nav-hud .nav-alert{position:absolute;display:flex;align-items:center;background:#fff}.nav-bottom{left:12px;right:12px;bottom:calc(14px + env(safe-area-inset-bottom,0px));max-width:460px;margin:0 auto;gap:8px;padding:8px 8px 8px 16px;border-radius:14px;box-shadow:0 6px 18px #243b3226}.nav-bottom .nav-eta{flex:1 1;min-width:0;font-size:14px;color:var(--ink)}.nav-bottom .nav-eta small{display:flex;align-items:center;gap:4px;font-size:10.5px;line-height:1.3;color:var(--muted)}.nav-bottom .nav-icon-button{display:grid;place-items:center;width:44px;border-radius:10px;color:var(--accent);background:var(--tint)}.nav-bottom .nav-end{display:inline-flex;align-items:center;gap:6px;padding:0 14px;border-radius:10px;background:var(--accent-dark);color:#fff;font-weight:700}.app-shell.navigating .legend-toggle,.app-shell.navigating .map-legend,.app-shell.navigating .map-status,.app-shell.navigating .map-tools,.app-shell.navigating .maplibregl-ctrl-scale{display:none}.app-shell.navigating .north-arrow{top:96px;right:18px}.walker{width:44px;height:70px;pointer-events:none;filter:drop-shadow(0 0 1.5px #fff) drop-shadow(0 0 1.5px #fff) drop-shadow(0 3px 3px #0005)}.walker svg{width:100%;height:100%;overflow:visible}.wk-figure{stroke:#5b6662;stroke-width:7.5}.wk-head{fill:#5b6662;stroke:none}.wk-shadow{fill:#0003}.wk-arm,.wk-leg{transform-box:view-box}.wk-arm{transform-origin:20px 23px}.wk-leg{transform-origin:20px 39px}.wk-arm.wk-a,.wk-leg.wk-b{transform:rotate(14deg)}.wk-arm.wk-b,.wk-leg.wk-a{transform:rotate(-14deg)}.walker.walking .wk-arm.wk-b,.walker.walking .wk-leg.wk-a{animation:wk-swing .55s ease-in-out infinite alternate}.walker.walking .wk-arm.wk-a,.walker.walking .wk-leg.wk-b{animation:wk-swing .55s ease-in-out infinite alternate-reverse}.walker.walking svg{animation:wk-bob .275s ease-in-out infinite alternate}@keyframes wk-swing{0%{transform:rotate(-26deg)}to{transform:rotate(26deg)}}@keyframes wk-bob{0%{transform:translateY(0)}to{transform:translateY(-1.5px)}}@media (prefers-reduced-motion:reduce){.walker.walking .wk-arm,.walker.walking .wk-leg,.walker.walking svg{animation:none}}.voice-current{display:flex;align-items:center;gap:10px;margin-top:16px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.voice-current .text-button{min-height:36px}.walk-steps-toggle{margin-top:12px}.walk-steps-toggle summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--accent);min-height:36px;display:flex;align-items:center}.route-caution{margin-top:16px}@media(max-width:760px){.app-shell.route-view:not(.map-only) .map-region{position:sticky;top:0;z-index:4;height:46dvh;min-height:300px}.walk-result{scroll-margin-top:calc(max(46dvh,300px) + 12px)}}.opening-animation{position:fixed;inset:0;z-index:200;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:var(--canvas);transition:opacity .4s ease,visibility .4s;cursor:pointer;animation:oa-out .4s 3.2s forwards}@keyframes oa-out{to{opacity:0;visibility:hidden}}.opening-animation.leaving{opacity:0;visibility:hidden}.oa-stage{position:relative;width:min(300px,78vw);aspect-ratio:300/190;perspective:900px}.oa-table{position:absolute;inset:0;transform-style:preserve-3d;transform:rotateX(56deg)}.oa-sheet{position:absolute;left:0;right:0;top:0;display:flex;animation:oa-settle 1.1s cubic-bezier(.2,.7,.2,1) both}.oa-panel,.oa-sheet{height:100%;transform-style:preserve-3d}.oa-panel{flex:1 1;box-shadow:0 18px 30px #243b3226}.oa-panel svg{display:block;width:100%;height:100%}.oa-left{transform-origin:right center;animation:oa-unfold-left .8s cubic-bezier(.3,.8,.3,1) .35s both}.oa-right{transform-origin:left center;animation:oa-unfold-right .8s cubic-bezier(.3,.8,.3,1) .55s both}.oa-mid{position:relative;z-index:0}.oa-pin-shadow{top:44%;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:#0b514640;animation:oa-shadow .5s ease-out 1.25s both}.oa-pin,.oa-pin-shadow{position:absolute;left:50%}.oa-pin{top:6%;width:44px;margin-left:-22px;filter:drop-shadow(0 6px 6px #0b514633);animation:oa-drop .6s cubic-bezier(.3,1.5,.5,1) 1.15s both}.oa-brand{display:flex;align-items:center;gap:10px;font-size:30px;font-weight:750;letter-spacing:-1.3px;color:var(--ink);animation:oa-fade .6s ease-out 1.6s both}@keyframes oa-settle{0%{transform:translateZ(90px) scale(.55);opacity:0}30%{opacity:1}to{transform:none;opacity:1}}@keyframes oa-unfold-left{0%{transform:rotateY(-178deg)}to{transform:rotateY(0)}}@keyframes oa-unfold-right{0%{transform:rotateY(178deg)}to{transform:rotateY(0)}}@keyframes oa-drop{0%{transform:translateY(-90px);opacity:0}40%{opacity:1}to{transform:none;opacity:1}}@keyframes oa-shadow{0%{transform:scale(.2);opacity:0}to{transform:none;opacity:1}}@keyframes oa-fade{0%{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}@media (prefers-reduced-motion:reduce){.opening-animation *{animation-duration:1ms!important;animation-delay:0s!important}.opening-animation{animation-delay:1s}}.view-lever{position:absolute;right:12px;top:50%;transform:translateY(-50%);z-index:6;display:flex;flex-direction:column;align-items:center;gap:6px;width:52px;padding:10px 0;border-radius:14px;background:#fffffff2;box-shadow:0 6px 18px #243b3226;font-size:11px;font-weight:650;color:var(--muted)}.view-lever input{writing-mode:vertical-lr;direction:rtl;width:28px;height:150px;margin:0;accent-color:var(--accent);cursor:pointer}.view-lever output{min-width:38px;text-align:center;padding:3px 0;border-radius:7px;background:var(--tint);color:var(--accent-dark);font-weight:750}.nav-top .nav-preview{display:inline-flex;align-items:center;gap:6px;margin-top:8px;min-height:38px;padding:0 12px;border-radius:9px;background:#fff;color:var(--accent-dark);font-size:13px;font-weight:700}.nav-top progress{display:block;width:100%;height:6px;margin:8px 0 2px;accent-color:#fff}.walker.friend{position:relative;width:38px;height:60px}.walker.friend .wk-figure{stroke:#d9822b}.walker.friend .wk-head{fill:#d9822b}.friend-tag{position:absolute;bottom:100%;left:50%;transform:translate(-50%,-4px);white-space:nowrap;background:#fffffff2;color:#7a4a14;font-size:10px;font-weight:650;padding:3px 7px;border-radius:4px;box-shadow:0 1px 5px #0002}.friend-card{margin:0 0 22px;padding:16px;border-radius:var(--radius);background:#fbf3e8;border:1px solid #ecd6b8;display:flex;flex-direction:column;gap:6px}.friend-card strong{font-size:13px;line-height:1.45}.friend-card span{font-size:11px;color:#7a5a32}.friend-card .detail-actions{margin-top:10px}.meet-link{margin-top:14px}.panel-body .text-input{width:100%;border:1px solid #b7c7bd;border-radius:8px;color:var(--ink);padding:10px;background:white;font-size:13px}.share-box{margin-top:20px;padding:16px;border-radius:var(--radius);background:var(--tint);display:flex;flex-direction:column;gap:10px}.share-box p{font-size:12px}.share-actions{display:flex;flex-wrap:wrap;gap:8px}.share-actions>*{flex:1 1 120px}.share-box input{font-size:11px;color:var(--muted)}.panel-body .meet-section{margin-top:28px;padding-top:22px;border-top:1px solid var(--line)}.meet-section h2{margin-bottom:6px}.meet-section .primary-button,.meet-section .secondary-button{margin-top:14px}.welcome{position:fixed;inset:0;z-index:150;background:var(--canvas);overflow-y:auto;overscroll-behavior:contain}.welcome-inner{max-width:560px;margin:0 auto;padding:48px 16px 40px;display:flex;flex-direction:column}.welcome h1{font-size:34px;letter-spacing:-.04em}.welcome h1:focus{outline:0}.welcome-sub{color:var(--muted);font-size:15px;margin-top:8px}.welcome-search{display:flex;align-items:center;gap:12px;margin:28px 0 22px;padding:0 20px;height:60px;border-radius:999px;background:#e9efec;color:var(--muted)}.welcome-search:focus-within{outline:2px solid var(--accent)}.welcome-search input{flex:1 1;min-width:0;border:0;background:none;outline:0;font-size:16px;color:var(--ink)}.welcome-search button{min-height:32px;padding:0}.welcome-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.welcome-card{display:flex;align-items:center;gap:16px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:18px 16px;min-height:84px}button.welcome-card:hover{border-color:#acc4b9;background:#fbfdfc}.welcome-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:14px;background:var(--tint);color:var(--accent);flex-shrink:0}.welcome-copy{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:4px}.welcome-copy strong{font-size:15px;line-height:1.35;overflow:hidden;text-overflow:ellipsis}.welcome-copy span{font-size:12.5px;color:var(--muted);line-height:1.5}button.welcome-card .welcome-copy strong{white-space:nowrap}button.welcome-card .welcome-copy span{letter-spacing:.06em}.welcome-empty{color:var(--muted);text-align:center;padding:24px 8px}.welcome-go{margin-top:26px}.welcome-skip{align-self:center;margin-top:18px;min-height:44px;font-size:13px}.welcome-sub+.welcome-list{margin-top:24px}.welcome-email .welcome-search{margin:28px 0 14px}.welcome-email .fine-print{margin:0 4px}.welcome-email .status-message{margin:14px 0 0}.welcome-trap{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}.welcome-done{margin-top:28px}:root[data-theme=dark]{color-scheme:dark;--ink:#e2ece7;--muted:#9db3aa;--accent:#4fc1aa;--accent-dark:#7ad3c0;--tint:#1c2f29;--line:#26362f;--surface:#15211d;--canvas:#0f1916;--warning:#d9a066;--shadow:0 4px 20px #0006}:root[data-theme=dark] ::selection{background:#2d5a4e}:root[data-theme=dark] :is(button,a,input,select):focus-visible{outline-color:#7ad3c0}:root[data-theme=dark] :is(.brand-mark,.category-filters button.selected,.primary-button,.map-pin.selected .pin-dot,.nav-bottom .nav-end){color:#0c1714}:root[data-theme=dark] .primary-button:hover:not(:disabled){background:#7ad3c0}:root[data-theme=dark] :is(.skip-link,.map-tools,.map-message,select,.topbar nav,.panel-body .text-input,.secondary-button,.nav-hud .nav-alert,.nav-bottom,.nav-top .nav-preview,.walk-badge){background:var(--surface);color:var(--ink)}:root[data-theme=dark] :is(select,.panel-body .text-input,.secondary-button){border-color:#35473f}:root[data-theme=dark] .directory-scroll{scrollbar-color:#35473f transparent}:root[data-theme=dark] .search-box{border-color:#35473f;background:#13201c}:root[data-theme=dark] .search-box input::placeholder,:root[data-theme=dark] input::placeholder{color:#7e958c}:root[data-theme=dark] .category-filters button{color:var(--muted)}:root[data-theme=dark] :is(.category-filters button:hover:not(.selected),.voice-card:hover,button.welcome-card:hover){border-color:#3f5a4f;background:var(--tint)}:root[data-theme=dark] .place-row+.place-row{border-top-color:#1f2c27}:root[data-theme=dark] .place-icon{background:#1c2f29}:root[data-theme=dark] .place-icon.hostel{background:#2c2820;color:#d2b88e}:root[data-theme=dark] .place-icon.facility{background:#222934;color:#a9b6c9}:root[data-theme=dark] :is(.row-chevron,.voice-card:not(.selected) .voice-state){color:#6f857c}:root[data-theme=dark] .trust-footer{background:#121d19}:root[data-theme=dark] .map-region{background:#141e1b;border-bottom-color:#26362f}:root[data-theme=dark] :is(.map-caption,.map-legend,.map-status,.legend-toggle,.view-lever){background:#15211df0;border-color:#15211d;color:var(--muted)}:root[data-theme=dark] .map-caption-divider{background:#35473f}:root[data-theme=dark] .north-arrow{color:var(--muted)}:root[data-theme=dark] .maplibregl-ctrl-attrib{background:#15211df0!important;color:var(--muted)}:root[data-theme=dark] .maplibregl-ctrl-attrib a{color:var(--muted)}:root[data-theme=dark] .maplibregl-ctrl-scale{background:#15211db3!important;border-color:#7e958c!important;color:var(--ink)}:root[data-theme=dark] .pin-dot{background:#15211d;border-color:#4f8e7d;box-shadow:0 2px 6px #0007}:root[data-theme=dark] .pin-label{background:#15211df2;color:var(--ink)}:root[data-theme=dark] .map-pin.selected .pin-dot{border-color:#15211d}:root[data-theme=dark] .map-pin.hostel .pin-dot{color:#d2b88e;border-color:#8a7656}:root[data-theme=dark] .map-pin.facility .pin-dot{color:#a9b6c9;border-color:#66738a}:root[data-theme=dark] .user-location{border-color:#e2ece7}:root[data-theme=dark] .location-notice{background:#2a2419;color:#e2c79c}:root[data-theme=dark] .skeleton{background:#1a2924}:root[data-theme=dark] .walk-badge{border-color:#3e3426}:root[data-theme=dark] .walk-badge.warning{color:#e2a873}:root[data-theme=dark] :is(.legend-building,.legend-detected){background:#070a09;border-color:#52645b}:root[data-theme=dark] :is(.legend-height,.legend-height-estimated){background:#0e1312;border-color:#52645b;box-shadow:none}:root[data-theme=dark] .legend-green{background:#24402f;border-color:#36573f}:root[data-theme=dark] .legend-water{background:#1c3540;border-color:#2d5262}:root[data-theme=dark] .legend-route{background:#4fc1aa;box-shadow:0 0 0 1.5px #0d1513}:root[data-theme=dark] .legend-shortcut{border-top-color:#4fc1aa}:root[data-theme=dark] .legend-path{border-top-color:#7f9a8d}:root[data-theme=dark] .legend-direction{border-top-color:#d9a066}:root[data-theme=dark] .nav-top{background:#0b5146;color:#fff}:root[data-theme=dark] .wk-figure{stroke:#c9d6d0}:root[data-theme=dark] .wk-head{fill:#c9d6d0}:root[data-theme=dark] .walker{filter:drop-shadow(0 0 1.5px #0d1513) drop-shadow(0 0 1.5px #0d1513) drop-shadow(0 3px 3px #0008)}:root[data-theme=dark] .walker.friend .wk-figure{stroke:#f0a050}:root[data-theme=dark] .walker.friend .wk-head{fill:#f0a050}:root[data-theme=dark] .friend-tag{background:#2a2117f2;color:#f3c48f}:root[data-theme=dark] .friend-card{background:#251f17;border-color:#46392a}:root[data-theme=dark] .friend-card span{color:#d8b88c}:root[data-theme=dark] .welcome-search{background:#1a2924}:root[data-theme=dark] .voice-character.speaking{box-shadow:0 0 0 3px var(--surface),0 0 0 5px var(--accent)}.settings .meet-section>.secondary-button+.secondary-button{margin-top:10px}.settings .category-filters,.settings .voice-row,.settings .welcome-email .welcome-search{margin-top:12px}.settings .welcome-email .welcome-search{height:52px}.settings .welcome-done{margin-top:12px}.secondary-button.danger{color:#9b3b2a;border-color:#e2c3bb}:root[data-theme=dark] .secondary-button.danger{color:#f0a493;border-color:#5a3730}.mode-switch{display:flex;gap:4px;margin-top:18px;padding:4px;border-radius:10px;background:var(--canvas);border:1px solid var(--line)}.mode-switch button{flex:1 1;display:flex;align-items:center;justify-content:center;gap:7px;min-height:40px;border-radius:7px;font-size:12px;font-weight:600;color:var(--muted)}.mode-switch button[aria-pressed=true]{background:var(--surface);color:var(--accent);box-shadow:0 1px 4px #243b3218}.mode-switch button:hover:not([aria-pressed=true]){color:var(--accent)}.nav-bottom .nav-mode{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--tint);color:var(--accent);flex-shrink:0;margin-left:-6px}.walk-badge.no-route{color:#a32b20;border-color:#efc9c3}.walker.rider{width:40px;height:58px}.walker.driver{width:52px;height:42px}.fg-ink{stroke:#5b6662;fill:none;stroke-linecap:round;stroke-linejoin:round}.fg-glass{fill:#fff;opacity:.85}.fg-pillar{stroke:#5b6662;stroke-width:2}.fg-hub{fill:#fff}.fg-spoke{stroke:#fff;stroke-width:1.4}.fg-wheel{transform-box:fill-box;transform-origin:center}.walker.walking .fg-wheel{animation:fg-spin .6s linear infinite}.walker.walking .fg-knee-a{animation:fg-pedal .45s ease-in-out infinite alternate}.walker.walking .fg-knee-b{animation:fg-pedal .45s ease-in-out infinite alternate-reverse}.walker.driver.walking .fg-body{animation:fg-bob .35s ease-in-out infinite alternate}.walker.driver.walking svg,.walker.rider.walking svg{animation:none}@keyframes fg-spin{to{transform:rotate(1turn)}}@keyframes fg-pedal{0%{transform:translateY(-2px)}to{transform:translateY(2px)}}@keyframes fg-bob{0%{transform:translateY(0)}to{transform:translateY(-1.2px)}}@media (prefers-reduced-motion:reduce){.walker.driver.walking .fg-body,.walker.walking .fg-knee-a,.walker.walking .fg-knee-b,.walker.walking .fg-wheel{animation:none}}:root[data-theme=dark] .mode-switch button[aria-pressed=true]{background:var(--tint)}:root[data-theme=dark] .walk-badge.no-route{color:#ff8a7e;border-color:#4a2a26}:root[data-theme=dark] .legend-direction{border-top-color:#ff6f61}.report-intro{margin-top:12px}.report-kinds{margin-top:0}.report-note{width:100%;min-height:120px;border:1px solid #b7c7bd;border-radius:8px;color:var(--ink);padding:10px;background:white;font:inherit;font-size:13px;resize:vertical}.report-count{display:block;text-align:right;font-size:11px;color:var(--muted);margin-top:4px}.report-campus{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--muted);margin-top:18px}:root[data-theme=dark] .report-note{background:var(--surface);color:var(--ink);border-color:#35473f}.class-card{border:1px solid var(--line);border-radius:9px;padding:14px;margin-top:14px;background:var(--tint);display:flex;flex-direction:column}.class-card strong{font-size:14px;line-height:1.4}.class-card>span{font-size:12.5px;color:var(--muted);margin-top:3px}.class-card .class-leave{color:var(--ink);font-weight:600;font-size:13px;margin-top:8px}.class-card .primary-button{margin-top:12px;width:100%}.class-card .class-note{font-size:11px;margin-top:8px}.classes-section{margin:18px 0 20px}.classes-heading{padding:0 0 8px;border-top:0}.classes-section>.fine-print{margin:0 0 12px}.class-list{list-style:none;margin:0 0 14px;padding:0}.class-row{display:flex;align-items:center;gap:10px;padding:10px 2px;border-bottom:1px solid var(--line);font-size:13px}.class-row>div{display:flex;flex-direction:column;min-width:0;flex:1 1}.class-row>div span{overflow-wrap:anywhere}.class-row>div span,.class-when{font-size:12px;color:var(--muted)}.class-when{text-align:right}.class-remove{display:grid;place-items:center;min-width:44px;min-height:44px;color:var(--muted);border-radius:8px}.class-remove:hover{background:var(--canvas);color:var(--ink)}.classes-section .field-label{display:block;margin:12px 0 6px}.classes-section select{font-weight:500}.class-form .text-input{width:100%;border:1px solid #b7c7bd;border-radius:8px;color:var(--ink);padding:10px;background:white;font-size:13px}.class-form .class-days{margin-top:0}.class-times{display:flex;gap:10px}.class-times>div{flex:1 1;min-width:0}.class-form .status-message{margin:14px 0 0}.class-form .route-submit{margin-top:16px}.class-cancel{margin-top:6px}.class-add{margin-top:14px}.course-hint{padding:0 25px 8px}@media(min-width:1500px){.course-hint{padding:0 30px 8px}}@media(max-width:760px){.course-hint{padding:0 22px 8px}.class-form .text-input{font-size:16px}}:root[data-theme=dark] .class-form .text-input{background:var(--surface);color:var(--ink);border-color:#35473f}.fg-tyre{fill:#38413e}.fg-light{fill:#cf5a4c}:root[data-theme=dark] .fg-tyre{fill:#24302c}:root[data-theme=dark] .driver .fg-glass{fill:#1b2622;opacity:1}