@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;650;700;800&display=swap');
:root{font-family:Manrope,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:#202b42;background:#fff;font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,select{cursor:pointer}button{color:inherit}button:focus-visible,select:focus-visible,input:focus-visible,a:focus-visible{outline:3px solid #90a9ff;outline-offset:3px}header{height:84px;display:flex;align-items:center;padding:0 36px;border-bottom:1px solid #e7ebf1;gap:30px}.brand{color:#202b42;text-decoration:none;font-size:29px;font-weight:800;letter-spacing:-1.5px;display:flex;align-items:center}.brand-icon{font-size:28px;letter-spacing:0;background:#295bea;color:#fff;border-radius:12px;width:40px;height:40px;text-align:center;line-height:37px;margin-right:12px}.brand-dot{color:#295bea}.header-caption{font-size:14px;color:#8790a2}.demo{margin-left:auto;color:#54627c;background:#f0f3f8;border:1px solid #e3e8f0;border-radius:7px;padding:6px 10px;font-size:12px;font-weight:800;letter-spacing:1px}main{display:flex;height:calc(100dvh - 84px);min-height:680px}aside{width:330px;flex-shrink:0;padding:30px 24px 20px;display:flex;flex-direction:column;border-right:1px solid #e7ebf1;overflow:auto}h1{font-size:23px;letter-spacing:-.8px;margin:0 0 8px}.intro p{font-size:14px;color:#8992a2;margin:0 0 26px}.search-wrap{display:flex;align-items:center;gap:10px;border:1px solid #dce2ed;border-radius:12px;padding:0 12px;background:#f8f9fc;color:#8190a7;height:48px;flex-shrink:0}.search-wrap input{width:100%;border:0;background:transparent;outline:none;font-size:14px;min-width:0;color:#202b42}.search-wrap button{border:0;background:none;font-size:24px}.selection{margin-top:28px}label,.floor-label{display:block;font-size:12px;font-weight:800;letter-spacing:1.5px;color:#929aab;margin-bottom:12px}select{width:100%;border:1px solid #dfe5ee;background:white;border-radius:10px;padding:13px 9px;font-size:14px;font-weight:650;color:#253149}.floor-label{margin-top:23px}.floors{display:flex;gap:9px}.floors button{border:1px solid #e3e7ef;border-radius:10px;background:#fff;height:42px;flex:1;font-size:15px;font-weight:700}.floors button.active{background:#295bea;color:white;border-color:#295bea;box-shadow:0 4px 10px #295bea20}.side-details{margin-top:30px}.detail{border:1px solid #e0e6f0;border-radius:16px;padding:20px;background:white}.detail-eyebrow{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:#8490a5;font-weight:700;letter-spacing:.6px}.detail h3{font-size:22px;margin:14px 0 5px;letter-spacing:-.6px}.detail p{font-size:14px;line-height:1.7;color:#768298;margin:0}.detail .detail-loc{margin-top:18px;border-top:1px solid #eef1f6;padding-top:14px;font-size:13px;color:#4b5e7c}.detail-icon{background:#ebf0ff;color:#295bea;border-radius:10px;width:36px;height:36px;display:grid;place-items:center;font-size:19px}.empty-detail{background:#f7f9fc;border:1px dashed #dbe2ee;box-shadow:none}.empty-detail h3{font-size:17px}.side-bottom{margin-top:auto;padding-top:30px;display:flex;align-items:center;gap:10px}.side-bottom p{font-size:12px;line-height:1.7;color:#8b94a5}.small-icon{border:1px solid #b9c3d1;border-radius:50%;width:17px;height:17px;font-size:12px;display:grid;place-items:center;color:#8996aa}.workspace{position:relative;flex:1;min-width:0;background-color:#f5f7fa;background-image:radial-gradient(#dce3ee 1px,transparent 1px);background-size:20px 20px;overflow:hidden}.map-top{display:flex;justify-content:space-between;align-items:center;padding:25px 30px 0;position:relative;z-index:2}.view-toggle{display:flex;border-radius:11px;background:#e8edf4;padding:4px;gap:3px}.view-toggle button{background:none;border:0;padding:10px 18px;font-size:14px;font-weight:650;border-radius:8px;color:#78859b}.view-toggle button.active{background:#fff;color:#273850;box-shadow:0 2px 6px #2531490d}.map-status{font-size:12px;color:#8b97ab}.map-title{position:relative;z-index:1;padding:32px 34px 0;pointer-events:none}.map-title>span{font-size:11px;letter-spacing:1.8px;color:#8a96aa;font-weight:800}.map-title h2{font-size:32px;letter-spacing:-1px;margin:8px 0}.map-title p{font-size:14px;color:#8d97a8;margin:0}.filter-row{position:relative;z-index:2;display:flex;gap:7px;padding:22px 34px 0}.filter-row button{border:1px solid #e1e6ef;background:#fff;border-radius:20px;padding:8px 14px;color:#738098;font-size:13px;font-weight:650}.filter-row button.active{border-color:#c8d7ff;color:#295bea;background:#ecf1ff}.canvas{position:absolute;inset:235px 30px 90px;touch-action:none;cursor:grab}.canvas:active{cursor:grabbing}#map{width:100%;height:100%;overflow:visible;user-select:none}.room{cursor:pointer;transition:opacity .15s}.room rect{transition:fill .15s,stroke .15s}.room:hover rect{stroke:#295bea;stroke-width:3}.room:focus{outline:none}.room:focus rect{stroke:#295bea;stroke-width:4}.room text{pointer-events:none}.compass{position:absolute;right:35px;top:105px;display:flex;align-items:center;flex-direction:column;color:#8593a7;font-size:12px;gap:4px}.compass span{font-size:29px;color:#334968}.zoom-controls{position:absolute;right:27px;bottom:95px;display:flex;flex-direction:column;background:#fff;box-shadow:0 4px 18px #2033520a;border:1px solid #e1e7ee;border-radius:12px;overflow:hidden}.zoom-controls button{width:43px;height:43px;background:white;border:0;font-size:24px}.zoom-controls button+button{border-top:1px solid #eef1f5}.legend{position:absolute;left:34px;bottom:72px;display:flex;gap:20px;font-size:12px;color:#7e8b9e}.legend span{display:flex;align-items:center;gap:7px}.legend i{width:10px;height:10px;border-radius:3px;border:1px solid #bccde9}.blue{background:#dce7ff}.mint{background:#d9eee8}.gray{background:#e3e7ee}.map-footer{position:absolute;bottom:0;left:0;right:0;border-top:1px solid #e3e8f0;padding:15px 30px;display:flex;justify-content:space-between;font-size:12px;color:#94a0b3;background:#f5f7facc}.results{margin-top:8px;max-height:260px;overflow:auto;border:1px solid #e3e8f0;border-radius:10px;flex-shrink:0}.results button{display:block;width:100%;text-align:left;background:white;border:0;border-bottom:1px solid #eef1f6;padding:12px;font-size:14px}.results button:hover{background:#eff4ff}.results small{display:block;margin-top:5px;color:#8a96a8;font-size:12px}.results p{padding:0 12px;font-size:14px;color:#7f8b9e}#mobile-details{display:none}
@media(min-width:1500px){aside{width:370px;padding:36px 30px}.canvas{inset:220px 65px 90px}}
@media(max-width:1000px){.map-status{display:none}aside{width:290px;padding:25px 18px}.map-title h2{font-size:28px}.map-top{padding-left:22px}.map-title{padding-left:24px}.filter-row{padding-left:24px;gap:5px}.filter-row button{padding:8px 11px}.canvas{left:10px;right:10px}.legend{left:22px;gap:12px}}
@media(max-width:700px){header{height:65px;padding:0 19px}.brand{font-size:25px}.brand-icon{width:33px;height:33px;font-size:24px;line-height:31px;border-radius:10px}.header-caption{display:none}main{display:flex;flex-direction:column;height:auto;min-height:calc(100dvh - 65px)}aside{width:100%;padding:18px 18px 15px;border-right:0;border-bottom:1px solid #e6ebf3;display:grid;grid-template-columns:1fr 1fr;gap:12px;overflow:visible}.intro,.floor-label,.side-details,.side-bottom{display:none}.search-wrap{grid-column:1/-1;height:46px}.selection{margin:0;min-width:0}.selection label{display:none}select{height:42px;padding:8px;font-size:13px}.floors{gap:5px;align-items:center}.floors button{height:40px;min-width:0;font-size:14px}.results{grid-column:1/-1;margin:0;max-height:180px}.workspace{min-height:480px;flex:1}.map-top{padding:16px 18px 0}.view-toggle button{padding:8px 15px;font-size:13px}.map-title{padding:21px 20px 0}.map-title h2{font-size:24px;margin:6px 0}.map-title>span{font-size:10px}.map-title p{font-size:12px}.filter-row{padding:15px 18px 0;gap:6px}.filter-row button{font-size:12px;padding:7px 11px}.canvas{inset:185px 8px 67px}.compass{right:22px;top:76px}.zoom-controls{right:12px;bottom:79px}.zoom-controls button{width:35px;height:35px;font-size:22px}.legend{left:18px;bottom:47px;font-size:10px;gap:12px}.map-footer{padding:10px 18px;font-size:10px}#mobile-details{display:block;padding:14px 18px 20px;background:#fff}.detail{padding:16px}.detail h3{font-size:20px;margin:7px 0}.detail .detail-loc{margin-top:10px;padding-top:10px}.detail-eyebrow{font-size:11px}.detail-icon{width:29px;height:29px}.detail p{font-size:13px}.empty-detail{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.empty-detail .detail-eyebrow{display:none}.empty-detail h3{margin:0;font-size:15px}.empty-detail p{font-size:12px}.workspace{height:calc(100dvh - 350px)}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* Host insets keep Telegram controls clear of the app. */
html.in-telegram body{padding-top:max(env(safe-area-inset-top,0px),var(--host-safe-top,0px));padding-left:max(env(safe-area-inset-left,0px),var(--host-safe-left,0px));padding-right:max(env(safe-area-inset-right,0px),var(--host-safe-right,0px));padding-bottom:max(env(safe-area-inset-bottom,0px),var(--host-safe-bottom,0px))}
@media(max-width:700px){.search-wrap input{font-size:16px}.in-telegram main{min-height:calc(var(--tg-viewport-stable-height,100dvh) - 65px - var(--host-safe-top,0px) - var(--host-safe-bottom,0px))}}

:root[data-theme="dark"]{--map-354969:#d8e4f8;--map-4c6594:#c1d5ff;--map-507c70:#a4d5c3;--map-637a9e:#aabedc;--map-78869c:#b2bed2;--map-8090aa:#a1b1c9;--map-8c99ac:#a2afc3;--map-91a1bd:#96aed4;--map-94a1b5:#a4b3ca;--map-a0adbf:#9baac1;--map-a9b9d0:#607491;--map-b1c2df:#596f91;--map-bac9de:#516786;--map-d2dfd6:#3c594e;--map-dce7ff:#253d65;--map-deeee9:#234a40;--map-e0e5eb:#3b4b61;--map-e2eaff:#273e62;--map-e8eee9:#1d322b;--map-e9edf3:#2d384b;--map-f2f5fa:#192537;--map-f7f9fc:#1e2c41;}
/* Preferences use the same surfaces as the map and follow the selected theme. */
:root{--surface:#fff;--surface-soft:#f5f7fa;--ink:#202b42;--muted:#65758f;--line:#dfe5ee;color-scheme:light}
:root[data-theme="dark"]{--surface:#172133;--surface-soft:#111827;--ink:#e6edf8;--muted:#a5b3ca;--line:#34435b;color-scheme:dark;background:var(--surface);color:var(--ink)}
.settings-button{width:44px;height:44px;flex-shrink:0;display:grid;place-items:center;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink);font-size:28px}
.settings-button:hover{background:var(--surface-soft)}
#settings-dialog{width:min(440px,calc(100% - 32px));max-height:calc(100dvh - 64px);overflow:auto;padding:24px;border:1px solid var(--line);border-radius:22px;background:var(--surface);color:var(--ink);box-shadow:0 24px 80px #0005}
#settings-dialog::backdrop{background:#060c1bb3;backdrop-filter:blur(5px)}
.settings-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:16px}.settings-heading h2{font-size:23px;margin:0;letter-spacing:-.5px}
.setting-row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:22px 0;margin:0;border-top:1px solid var(--line);font-size:16px;line-height:1.5;color:var(--ink);font-weight:600;letter-spacing:0;cursor:pointer}.setting-row small{display:block;color:var(--muted);font-size:13px;font-weight:400;margin-top:6px;line-height:1.5}.setting-row input{position:absolute;right:0;width:48px;height:44px;opacity:0;cursor:pointer}.switch-track{width:48px;height:28px;flex-shrink:0;border-radius:20px;background:#8491a5;transition:background .18s;pointer-events:none}.switch-track:before{content:'';display:block;background:#fff;width:22px;height:22px;border-radius:50%;margin:3px;box-shadow:0 1px 3px #0003;transition:transform .18s}.setting-row input:checked+.switch-track{background:#456fff}.setting-row input:checked+.switch-track:before{transform:translateX(20px)}.setting-row input:focus-visible+.switch-track{outline:3px solid #90a9ff;outline-offset:4px}
[data-theme="dark"] header,[data-theme="dark"] aside{border-color:var(--line)}
[data-theme="dark"] .brand,[data-theme="dark"] select,[data-theme="dark"] .search-wrap input{color:var(--ink)}
[data-theme="dark"] .header-caption,[data-theme="dark"] .intro p,[data-theme="dark"] label,[data-theme="dark"] .floor-label,[data-theme="dark"] .detail p,[data-theme="dark"] .detail-eyebrow,[data-theme="dark"] .side-bottom p,[data-theme="dark"] .map-title>span,[data-theme="dark"] .map-title p,[data-theme="dark"] .map-status,[data-theme="dark"] .legend,[data-theme="dark"] .map-footer,[data-theme="dark"] .results small,[data-theme="dark"] .results p{color:var(--muted)}
[data-theme="dark"] .setting-row{color:var(--ink)}
[data-theme="dark"] .demo,[data-theme="dark"] .search-wrap,[data-theme="dark"] .empty-detail{background:var(--surface-soft);border-color:var(--line);color:var(--muted)}
[data-theme="dark"] .search-wrap input::placeholder{color:#9aaac2;opacity:1}
[data-theme="dark"] select,[data-theme="dark"] .floors button,[data-theme="dark"] .detail,[data-theme="dark"] .zoom-controls,[data-theme="dark"] .zoom-controls button,[data-theme="dark"] .results,[data-theme="dark"] .results button,[data-theme="dark"] #mobile-details{background:var(--surface);border-color:var(--line)}
[data-theme="dark"] .floors button.active{background:#456fff;border-color:#6486ff;color:white}
[data-theme="dark"] .detail .detail-loc{color:#b9c9e2;border-color:var(--line)}
[data-theme="dark"] .detail-icon{color:#a8c0ff;background:#293e63}
[data-theme="dark"] .workspace{background-color:var(--surface-soft);background-image:radial-gradient(#2a3549 1px,transparent 1px)}
[data-theme="dark"] .view-toggle{background:#222e43}
[data-theme="dark"] .view-toggle button{color:var(--muted)}
[data-theme="dark"] .view-toggle button.active{background:#364763;color:#fff}
[data-theme="dark"] .filter-row button{background:var(--surface);border-color:var(--line);color:var(--muted)}
[data-theme="dark"] .filter-row button.active{background:#273e65;border-color:#5374b0;color:#c3d5ff}
[data-theme="dark"] .compass,[data-theme="dark"] .compass span{color:#a9bad3}
[data-theme="dark"] .map-footer{background:#111827ed;border-color:var(--line)}
[data-theme="dark"] .zoom-controls button+button{border-color:var(--line)}
[data-theme="dark"] .results button:hover{background:#293e63}
[data-theme="dark"] .blue{background:#273e62}[data-theme="dark"] .mint{background:#234a40}[data-theme="dark"] .gray{background:#2d384b}[data-theme="dark"] .legend i{border-color:#607491}
[data-theme="dark"] #map rect[fill="#fff"]{fill:#152033}[data-theme="dark"] #map path[stroke="#fff"]{stroke:#29374b}
[data-theme="dark"] .room:hover rect,[data-theme="dark"] .room:focus rect{stroke:#91b2ff}
@media(max-width:700px){header{gap:12px}.settings-button{width:40px;height:40px;border-radius:10px}.demo{font-size:10px;padding:5px 7px}#settings-dialog{padding:20px}}
@media(prefers-reduced-motion:reduce){.switch-track,.switch-track:before{transition:none}}
/* Exterior campus diagram, traced from the supplied reference. */
[hidden]{display:none!important}
:root{--territory-road:#fff;--territory-road-edge:#d8e1ec;--territory-town:#e7ebf1;--territory-building:#d8e2f2;--territory-building-edge:#809cc5;--territory-available:#bed1fb;--territory-available-edge:#476fde;--territory-label:#3e5884;--territory-muted:#5d718e;--territory-boundary:#8c9fbd;--territory-path:#c9d2df}
:root[data-theme="dark"]{--territory-road:#263448;--territory-road-edge:#34455e;--territory-town:#1e2a3b;--territory-building:#2b3a51;--territory-building-edge:#657991;--territory-available:#294b81;--territory-available-edge:#88aefe;--territory-label:#7895c1;--territory-muted:#a5b8d2;--territory-boundary:#536a89;--territory-path:#3f526c}
.territory-base .town-building{fill:var(--territory-town)}
.street-outline{fill:none;stroke:var(--territory-road-edge);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.street-core{fill:none;stroke:var(--territory-road);stroke-width:12;stroke-linecap:round;stroke-linejoin:round}
.campus-boundary{fill:none;stroke:var(--territory-boundary);stroke-width:1.8;stroke-dasharray:6 5}.walking-path{fill:none;stroke:var(--territory-path);stroke-width:3;stroke-linecap:round}
.street-label{fill:var(--territory-muted);font-size:13px;font-weight:600;paint-order:stroke;stroke:var(--surface-soft);stroke-width:4;stroke-linejoin:round}
.metro-label{fill:var(--territory-muted);font-size:17px;font-weight:650}.entry-arrow{fill:none;stroke:#668fdb;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round}
.territory-building{cursor:pointer}.building-outline{fill:var(--territory-building);stroke:var(--territory-building-edge);stroke-width:1.7;stroke-linejoin:round;transition:fill .15s}.available .building-outline{fill:var(--territory-available);stroke:var(--territory-available-edge);stroke-width:2.3}.building-label-bg{fill:var(--territory-label)}.available .building-label-bg{fill:#456fff}.building-number{fill:#fff;font-size:21px;font-weight:700;pointer-events:none}
.territory-building:hover .building-outline,.territory-building:focus .building-outline{stroke:#9ebfff;stroke-width:4}.territory-building:hover .building-label-bg,.territory-building:focus .building-label-bg{fill:#456fff}.territory-building:focus{outline:none}.territory-building:focus .building-label-bg{stroke:#bad0ff;stroke-width:3}.campus-entry{pointer-events:none}.campus-entry circle{fill:#5aab94}.campus-entry path{stroke:#fff;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.territory-view .canvas{inset:172px 30px 60px}.territory-view .filter-row,.territory-view .compass{display:none}.territory-view .zoom-controls{bottom:70px}.territory-view #map{overflow:hidden}
#map-notice{position:absolute;z-index:4;bottom:70px;left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100% - 110px);padding:13px 18px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink);box-shadow:0 6px 24px #0003;font-size:15px;text-align:center;pointer-events:none}
@media(max-width:700px){.territory-view .canvas{inset:166px 4px 40px}.territory-view .map-title p{max-width:280px;line-height:1.6;font-size:13px}.territory-view{min-height:520px}.territory-view .zoom-controls{bottom:55px}#map-notice{bottom:55px;max-width:calc(100% - 80px);font-size:14px}.territory-view .map-title{padding-top:20px}}

/* Building 1 plans use the same map surfaces and zoom controls as the campus. */
.floors button[data-floor="0"]{flex:1.9;padding-inline:5px;font-size:13px}
.traced-plan .canvas{inset:174px 35px 97px}
.traced-plan .compass{display:none}
.traced-plan #map{overflow:hidden}
.traced-plan .zoom-controls{z-index:2}
.traced-shell{fill:var(--surface);stroke:var(--territory-building-edge);stroke-width:5;stroke-linejoin:round}
.traced-walls{fill:none;stroke:var(--map-a9b9d0,#758aa9);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}
.traced-stair rect{fill:var(--map-e9edf3,#e8edf5);stroke:var(--map-a9b9d0,#758aa9);stroke-width:2}
.traced-stair path{fill:none;stroke:var(--map-a9b9d0,#758aa9);stroke-width:2}
.traced-room rect{fill:var(--map-e2eaff,#e0ebff);stroke:var(--territory-building-edge);stroke-width:2.3}
.traced-room text{fill:var(--ink);font-weight:750}
.traced-room.review rect{stroke:var(--map-637a9e,#637a9e);stroke-dasharray:5 3}
.traced-room.selected rect{fill:#295bea;stroke:#a6bfff;stroke-width:4}
.traced-room.selected text{fill:#fff}
.legend .review-key{border:1px dashed var(--map-637a9e,#637a9e);background:var(--map-e2eaff,#e0ebff)}
@media(max-width:700px){
  .floors.has-basement{grid-column:1/-1}
  .traced-plan{min-height:525px}
  .traced-plan .canvas{inset:143px 5px 65px}
  .traced-plan .zoom-controls{bottom:60px}
}
