@font-face{font-family:CampusMap;src:url(assets/campus.woff2) format('woff2');font-display:swap}
:root{--paper:#ffffff;--white:#ffffff;--ink:#203d39;--muted:#76847d;--line:#e3e7dc;--mint:#eaf0e5;--accent:#265d51;--edu:#6cabb2;--home:#c7ab7e;--food:#d8a54a;--admin:#cd917b;--sport:#9b9dbf;font-family:CampusMap,'Microsoft YaHei','PingFang SC',sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;overflow:hidden}button,input,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #79aa8e;outline-offset:3px}button{color:inherit}button:disabled{opacity:.4;cursor:default}[hidden]{display:none!important}a{color:inherit;text-decoration:none}.topbar{height:84px;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:0 30px;background:var(--white);border-bottom:1px solid var(--line);position:relative;z-index:20}.brand{display:flex;align-items:center;gap:12px;flex-shrink:0}.brand img{width:43px;height:43px}.brand strong{font-size:20px;letter-spacing:.06em;font-weight:500}.brand small{display:block;font:10px/1.5 Arial,sans-serif;letter-spacing:.22em;color:var(--muted);margin-top:5px}.layer-switch{display:flex;align-items:center;padding:5px;background:#eef1e9;border:1px solid #e6eadd;border-radius:13px;gap:4px}.layer-switch button{border:0;background:transparent;border-radius:9px;min-height:39px;min-width:88px;padding:8px 16px;display:flex;align-items:center;justify-content:center;gap:8px;font-size:14px;transition:background .15s,box-shadow .15s}.layer-switch button.active{background:var(--white);box-shadow:0 2px 7px #203d3910;color:var(--accent)}.layer-dot{width:7px;height:7px;border-radius:50%;background:#77a58b}.underground-dot{background:#819096}.header-end{display:flex;align-items:center;gap:14px}.header-hint{font-size:12px;color:#839088;letter-spacing:.04em}.app-shell{height:calc(100dvh - 84px);display:flex}.sidebar{width:294px;min-width:294px;background:var(--white);border-right:1px solid var(--line);display:flex;flex-direction:column;position:relative;z-index:10}.sidebar-heading{padding:30px 24px 0}.eyebrow{font:10px/1.5 Arial,sans-serif;letter-spacing:.2em;color:#849184}.sidebar h1{font-weight:500;font-size:25px;letter-spacing:.04em;margin:12px 0}.sidebar-heading p{font-size:12px;line-height:1.8;color:var(--muted);margin:0}.search-wrap{display:flex;align-items:center;gap:9px;background:#f4f5ee;border:1px solid #e9ecdf;border-radius:10px;margin:23px 20px 14px;padding:0 11px;height:45px}.search-wrap svg{width:17px;height:17px;color:#829084;display:block}.search-wrap input{background:transparent;border:0;min-width:0;width:100%;height:100%;outline:none;font-size:13px;color:var(--ink)}.search-wrap input::placeholder{color:#98a093}.search-wrap:focus-within{border-color:#85ac90;box-shadow:0 0 0 3px #dce9db}.search-wrap input:focus-visible{outline:0}.search-wrap kbd{color:#9aa594;border:1px solid #dae1d2;border-radius:3px;font:11px monospace;padding:1px 5px}.filter-row{display:flex;flex-wrap:wrap;gap:6px;padding:0 20px 20px}.filter-chip{border:1px solid transparent;border-radius:7px;font-size:11px;padding:6px 9px;background:#f5f5ef;color:#7c897d;white-space:nowrap}.filter-chip.active{color:var(--accent);background:#e8f0e4;border-color:#dbe8d4}.list-heading{padding:0 24px 11px;display:flex;justify-content:space-between;font-size:11px;letter-spacing:.04em;color:#91a08c;border-bottom:1px solid #f0f1e9}.building-list{padding:7px 12px 20px;overflow-y:auto;overscroll-behavior:contain;flex:1;scrollbar-width:thin;scrollbar-color:#dfe6d8 transparent}.building-row{width:100%;display:flex;gap:11px;align-items:center;text-align:left;border:1px solid transparent;background:transparent;border-radius:10px;padding:11px 10px;margin:2px 0;transition:background .15s}.building-row:hover{background:#f3f6ed}.building-row.selected{background:#edf4e7;border-color:#d8e5cf}.building-icon{width:33px;height:35px;display:grid;place-items:center;background:color-mix(in srgb,var(--kind) 16%,white);color:color-mix(in srgb,var(--kind) 65%,#203d39);border-radius:9px;flex-shrink:0}.building-icon svg{width:17px;height:17px}.row-text{min-width:0;flex:1}.row-text strong{display:block;font-size:13px;line-height:1.5;font-weight:400}.row-text small{display:block;color:#98a18e;font-size:10px;margin-top:4px;line-height:1.5}.row-arrow{color:#afbaaa;font-size:17px}.empty-results{padding:36px 10px;text-align:center;color:#81907d;line-height:1.9;font-size:13px}.empty-results button{margin-top:12px;border:1px solid var(--line);background:white;padding:7px 12px;border-radius:7px}.sidebar-footer{height:76px;display:flex;align-items:center;gap:13px;border-top:1px solid var(--line);padding:14px 24px;font-size:12px}.sidebar-footer small{font-size:10px;color:#8b9785;display:block;margin-top:4px}.small-compass{font:14px Arial,sans-serif;border:1px solid #dce3d3;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:#7b8d77}.sidebar-footer button{margin-left:auto;border:0;background:transparent;color:#90a088;padding:5px;display:flex}.sidebar-footer svg{width:18px;height:18px}.workspace{min-width:0;flex:1;display:flex}.map-area{position:relative;min-width:0;flex:1;background:#f0f3e9;overflow:hidden}.maps{width:100%;height:100%;display:flex;gap:1px;background:#dbe2d1}.map-pane{position:relative;flex:1;min-width:0;overflow:hidden;background:radial-gradient(ellipse at 50% 47%,#fafaf5,#edf2e6);touch-action:none}.map-pane[data-layer=underground]{background:radial-gradient(ellipse,#fff,#eff1e9)}.map-pane-header{position:absolute;z-index:2;top:20px;left:22px;pointer-events:none;display:flex;align-items:center;gap:9px}.map-pane-header .tag{padding:8px 11px;border-radius:8px;background:#fffefbea;border:1px solid #e3e7d7;box-shadow:0 2px 12px #203d3906;font-size:12px;letter-spacing:.05em}.map-pane-header .tag::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:#79a383;margin-right:8px}.map-pane[data-layer=underground] .tag::before{background:#89949b}.map-subtitle{font-size:10px;color:#97a18f}.map-content{position:absolute;top:0;left:0;transform-origin:0 0;line-height:0}.map-content>svg{display:block;overflow:visible}.map-pane.grabbing{cursor:grabbing}.map-pane{cursor:grab}.hit-target{fill:transparent;stroke:transparent;stroke-width:var(--hit-stroke,1.6px);cursor:pointer;transition:fill .15s,stroke .15s;outline:none}.hit-target:hover,.hit-target:focus-visible{fill:#58866b18;stroke:#4d7c5d;stroke-width:var(--hit-stroke,1.6px)}.hit-target.selected{fill:#437d5b25;stroke:#2e6849;stroke-width:var(--selected-stroke,2.4px)}.map-pane[data-layer=underground] .hit-target.selected{fill:#3c8e7528;stroke:#2f8067}.map-pane[data-layer=underground] .hit-target:hover{fill:#3c8e7520}.map-toolbar{position:absolute;right:21px;bottom:53px;background:#fffefbf5;box-shadow:0 5px 24px #233f3610;border:1px solid #dfe5d6;border-radius:11px;display:flex;flex-direction:column;z-index:3;padding:4px;cursor:default}.map-toolbar button{width:35px;height:35px;border:0;background:transparent;border-radius:7px;display:grid;place-items:center}.map-toolbar button:hover{background:#edf3e6}.map-toolbar svg{width:18px;height:18px}.tool-divider{height:1px;background:#e6eadd;margin:3px}.zoom-level{font:10px Arial,sans-serif;text-align:center;color:#8d9b84;padding:6px 0 4px}.map-caption{position:absolute;left:22px;right:70px;bottom:18px;font-size:10px;color:#96a18f;pointer-events:none;line-height:1.8}.map-caption span+span{margin-left:12px}.canvas-note{position:absolute;left:22px;top:65px;pointer-events:none;display:flex;gap:8px;align-items:center;font-size:11px;color:#8e9b84}.live-dot{width:5px;height:5px;border-radius:50%;background:#92ad81}.map-loading{position:absolute;inset:0;background:#f3f5edf5;display:flex;gap:12px;align-items:center;justify-content:center;color:#819577;font-size:14px;z-index:8}.spinner{width:20px;height:20px;border:2px solid #dce5d2;border-top-color:#62875c;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.map-error{position:absolute;inset:0;display:grid;align-content:center;justify-content:center;text-align:center;z-index:9;background:var(--paper)}.map-error h2{font-size:21px;font-weight:500}.map-error p{color:var(--muted);font-size:14px}.map-error button{justify-self:center}.detail-panel{width:314px;flex-shrink:0;background:var(--white);border-left:1px solid var(--line);overflow-y:auto;padding:24px;z-index:12}.detail-top{display:flex;justify-content:space-between;align-items:center}.detail-code{font:11px Arial,sans-serif;letter-spacing:.08em;color:#85947a}.icon-button{display:grid;place-items:center;width:34px;height:34px;border:1px solid #e5eadc;background:var(--white);border-radius:9px}.icon-button svg{width:17px;height:17px}.detail-hero{height:103px;border-radius:12px;background:linear-gradient(140deg,#edf3e5,#f9f9f2);display:flex;align-items:center;justify-content:center;margin:20px 0 23px;color:#65855f;border:1px solid #e8eddf;position:relative;overflow:hidden}.detail-hero::before,.detail-hero::after{content:'';position:absolute;width:120px;height:120px;border:1px solid #c3d4b84d;border-radius:50%;right:-30px;top:-35px}.detail-hero::after{width:170px;height:170px;right:-55px;top:-60px}.detail-hero svg{width:43px;height:43px;stroke-width:1.2}.detail-panel h2{font-size:25px;font-weight:500;line-height:1.45;letter-spacing:.03em;margin:0 0 13px}.badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:22px}.badge{font-size:10px;padding:5px 9px;border-radius:5px;background:#edf3e8;color:#6d895e}.badge.neutral{background:#f1f3ec;color:#98a08e}.detail-description{color:#7c8974;font-size:12px;line-height:1.9}.detail-section{border-top:1px solid #e8ecdf;padding-top:19px;margin-top:22px}.detail-section h3{font-size:12px;font-weight:500;margin:0 0 14px;color:#71856a}.detail-facts{display:grid;gap:13px}.detail-fact{display:flex;gap:12px;font-size:12px;line-height:1.8}.detail-fact dt{color:#a2ab98;flex-shrink:0;width:37px}.detail-fact dd{margin:0;color:#596f53}.service-tags{display:flex;flex-wrap:wrap;gap:6px}.service-tag{font-size:11px;color:#7d9074;padding:5px 8px;border:1px solid #e1e8d9;border-radius:5px}.placeholder-note{font-size:12px;line-height:1.9;color:#99a38e;margin:0}.related-button{width:100%;text-align:left;background:#f4f6ef;border:1px solid #e6ecde;padding:11px 12px;border-radius:8px;font-size:12px;line-height:1.6;margin:4px 0}.related-button:hover{border-color:#a8bea0}.primary-button{border:0;background:#2f614f;color:#fff;border-radius:9px;padding:11px 18px;font-size:13px}.detail-actions{display:flex;gap:8px;margin-top:23px}.detail-actions button{flex:1}.secondary-button{border:1px solid #dce5d3;border-radius:9px;background:#fff;font-size:12px;padding:10px}.detail-source{font-size:10px;color:#a5ad9b;line-height:1.8;margin-top:24px}.detail-photos img{width:100%;height:auto;border-radius:10px;margin-top:10px}dialog{width:min(480px,calc(100vw - 32px));border:1px solid #dce4d2;border-radius:18px;background:var(--white);color:var(--ink);padding:36px;box-shadow:0 24px 100px #18392e30}dialog::backdrop{background:#213b3350;backdrop-filter:blur(3px)}dialog h2{font-size:25px;font-weight:500;line-height:1.5;margin:14px 0 20px}dialog p,dialog li{font-size:13px;color:#7a8b71;line-height:1.9}dialog ul{padding-left:20px}.help-source{border-top:1px solid var(--line);padding-top:17px;font-size:11px!important}.dialog-close{position:absolute;top:14px;right:14px;font-size:21px}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.mobile{display:none}.loading-text{padding:30px 10px;color:#8d9c83;font-size:13px}.map-pane .map-content:focus{outline:0}.drawer-backdrop{position:fixed;inset:68px 0 0;z-index:28;background:#233e3455;border:0;backdrop-filter:blur(2px)}
@media(min-width:1500px){.sidebar{width:320px;min-width:320px}.sidebar-heading{padding:36px 28px 0}.search-wrap{margin-left:24px;margin-right:24px}.filter-row{padding-left:24px;padding-right:24px}.detail-panel{width:342px;padding:28px}}
@media(max-width:1150px){.header-hint{display:none}.topbar{padding:0 22px}.sidebar{width:264px;min-width:264px}.sidebar-heading{padding-left:20px}.detail-panel{width:280px;padding:20px}.map-subtitle{display:none}.maps.compare{flex-direction:column}.maps.compare .map-pane-header{top:12px;left:15px}.maps.compare .map-toolbar{right:12px;bottom:35px}.maps.compare .map-caption{bottom:8px;left:15px}.maps.compare .map-toolbar button{height:30px;width:31px}.maps.compare .map-pane-header .tag{padding:5px 9px}.maps.compare~.canvas-note{display:none}}
@media(max-width:760px){.topbar{height:68px;padding:0 13px;gap:10px}.desktop{display:none!important}.mobile{display:grid}.brand{gap:8px}.brand img{width:31px;height:31px}.brand strong{font-size:15px;letter-spacing:.02em}.brand small{font-size:7px;letter-spacing:.09em;margin-top:3px}.layer-switch{padding:3px;border-radius:10px;gap:0;margin-left:auto}.layer-switch button{min-width:44px;min-height:33px;padding:7px 9px;font-size:11px;border-radius:7px;gap:4px}.layer-dot{display:none}.header-end{gap:0}.icon-button{width:31px;height:33px}.app-shell{height:calc(100dvh - 68px)}.sidebar{position:fixed;top:68px;bottom:0;left:0;width:min(316px,85vw);min-width:0;z-index:30;transform:translateX(-101%);transition:transform .2s}.sidebar.open{transform:translateX(0)}.sidebar-heading{padding-top:26px}.detail-panel{position:fixed;left:10px;right:10px;bottom:10px;width:auto;border:1px solid #dce5d3;border-radius:15px;max-height:44dvh;padding:18px 20px;box-shadow:0 -4px 30px #203d3912;z-index:25;overscroll-behavior:contain}.detail-hero{display:none}.detail-panel h2{font-size:22px;margin:10px 0}.badges{margin-bottom:12px}.detail-section{padding-top:13px;margin-top:15px}.detail-description{font-size:12px;margin-bottom:0}.detail-top .icon-button{width:29px;height:29px}.detail-actions{margin-top:16px}.detail-source{margin-bottom:0}.map-pane-header{top:15px;left:14px}.map-pane-header .tag{padding:7px 10px;font-size:11px}.canvas-note{top:55px;left:16px;font-size:10px}.map-toolbar{right:14px;bottom:50px}.map-caption{left:14px;bottom:15px;font-size:9px}.map-caption .gesture-hint{display:none}.maps.compare .map-caption{font-size:8px}.maps.compare .map-pane-header .tag{font-size:10px}.map-error h2{font-size:19px}dialog{padding:28px}.detail-open .map-toolbar{bottom:47dvh}.maps.compare .map-toolbar{bottom:26px}.detail-open .maps.compare .map-pane:last-child .map-toolbar{display:none}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.overlay-controls{position:absolute;z-index:5;left:22px;top:100px;width:204px;background:#fffefaed;border:1px solid #dde5d7;border-radius:12px;box-shadow:0 4px 20px #203d3910;padding:12px;cursor:default}
.overlay-controls label{font-size:11px;display:flex;justify-content:space-between;gap:15px;color:#576e59}.overlay-controls output{font:11px Arial,sans-serif}.overlay-controls input{width:100%;margin:12px 0;accent-color:#527c98;cursor:pointer}.inspect-switch{display:flex;gap:4px}.inspect-switch button{flex:1;border:0;background:#f1f3ec;border-radius:6px;padding:8px 4px;font-size:11px;color:#71816c}.inspect-switch button.active{background:#e2ece5;color:#285949}.ug-label,.ug-exit{pointer-events:none}.hit-target[data-target-layer=underground].selected{fill:#4d7c9825;stroke:#345f89}.hit-target[data-target-layer=underground]:hover{stroke:#345f89}.map-content svg{font-family:CampusMap,SimHei,sans-serif}
@media(max-width:760px){.overlay-controls{left:14px;top:84px;width:174px;padding:10px}.overlay-controls input{margin:9px 0}.inspect-switch button{padding:7px 2px;font-size:10px}.layer-switch button{min-width:38px;padding:7px 6px}.brand strong{font-size:13px}.brand img{width:26px;height:26px}.brand small{font-size:6px}.topbar{gap:6px;padding:0 10px}.brand{gap:5px}.detail-open .overlay-controls{top:84px}}

.building-introduction{white-space:pre-line}.detail-references{display:grid;gap:7px;margin-top:18px;font-size:10px;line-height:1.7;color:#84917b}.detail-references a{color:#3d6b61;text-decoration:underline;text-underline-offset:3px}.detail-references small{font-size:10px;color:#8b9583}

/* White canvas for the campus overlay. */
body,.workspace,.map-area,.maps,.map-pane,.map-pane[data-layer=underground]{background:#fff;background-image:none}

.sidebar-heading{position:relative}.sidebar-hide{position:absolute;right:14px;top:20px}.topbar #explore-toggle{display:none}@media(min-width:761px){.sidebar-collapsed .sidebar{display:none}.sidebar-collapsed .topbar #explore-toggle{display:grid}}@media(max-width:760px){.topbar #explore-toggle{display:grid}.sidebar:not(.open){visibility:hidden}.sidebar-hide{top:18px}}

/* One navigation toggle remains in the same header position. */
.topbar #explore-toggle{display:grid}

.brand .university-logo{width:180px;height:54px;object-fit:contain;flex-shrink:0}.brand{gap:16px}@media(max-width:760px){.brand .university-logo{width:135px;height:41px}.brand{gap:10px}}


@media(max-width:760px){.overlay-controls label{display:block}.overlay-controls output{display:block;margin-top:5px;white-space:nowrap}}

/* Keep one toggle beside the navigation heading, open or closed. */
:root{--nav-width:294px}
#explore-toggle{position:fixed;left:calc(var(--nav-width) - 48px);top:104px;z-index:40;display:grid;box-shadow:0 2px 10px #203d3910}
@media(min-width:1500px){:root{--nav-width:320px}}
@media(max-width:1150px){:root{--nav-width:264px}}
@media(max-width:760px){:root{--nav-width:min(316px,85vw)}#explore-toggle{left:calc(var(--nav-width) - 44px);top:86px}}

.map-area,.map-area *{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none}body.map-dragging,body.map-dragging *{-webkit-user-select:none!important;user-select:none!important}

/* Stronger text and controls; map fills keep their existing blend settings. */
:root{--ink:#172E38;--muted:#455C66}
body{font-synthesis:weight}
.brand strong,.sidebar h1,.row-text strong,.detail-panel h2,.detail-section h3,dialog h2{font-weight:600;color:#172E38}
.sidebar-heading p,.row-text small,.list-heading,.eyebrow,.detail-description,.detail-fact dd,.detail-fact dt,.placeholder-note,.detail-code,.sidebar-footer small,.zoom-level,.map-caption,.canvas-note,dialog p,dialog li{color:#3E5661}
.filter-chip,.badge,.badge.neutral,.service-tag,.related-button,.inspect-switch button,.overlay-controls label,.overlay-controls output{color:#294650;font-weight:500}
.filter-chip.active,.inspect-switch button.active{color:#123D38;font-weight:600}
.search-wrap input{color:#172E38}.search-wrap input::placeholder{color:#566B74}
.building-row{color:#172E38}.row-arrow{color:#526B76}
.map-content svg text{font-synthesis:weight}
[data-ground-details],[data-underground-details]{pointer-events:none}
