:root{color-scheme:dark;font-family:"Helvetica Neue","Segoe UI","Microsoft YaHei",sans-serif;background:#111;color:#e5e5e5;font-size:16px}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}a:focus-visible{outline:2px solid white;outline-offset:5px}header{display:flex;justify-content:space-between;align-items:center;padding:26px 4vw 15px;font-size:13px;color:#aaa}.identity{font-size:17px;letter-spacing:.23em;color:#eee}.identity span{font-size:10px;color:#888;letter-spacing:.14em;margin-left:25px}main{max-width:1700px;margin:0 auto;padding:0 4vw}.heading{padding-top:15px}.overline{font-size:10px;letter-spacing:.17em;color:#909090}h1{font-size:clamp(23px,2.25vw,36px);font-weight:350;letter-spacing:.025em;margin:13px 0 0}.workspace{display:flex;align-items:center;gap:4%;margin-top:-10px}.scene{position:relative;width:75%;flex-shrink:0;isolation:isolate}.campus{display:block;width:100%;height:auto}.building{position:absolute;z-index:2;transition:background .2s}.building:hover,.building:focus-visible{background:#ffffff12;outline:1px solid #ffffff50}.b1{left:14%;top:26%;width:35%;height:32%;clip-path:polygon(0 44%,55% 0,98% 26%,100% 60%,48% 100%,0 74%)}.b2{left:47%;top:11%;width:17%;height:25%;clip-path:polygon(0 16%,40% 0,100% 29%,100% 82%,54% 100%,0 74%)}.b3{left:66%;top:34%;width:17%;height:22%;clip-path:polygon(0 23%,45% 0,100% 33%,100% 83%,58% 100%,0 70%)}.b4{left:43%;top:53%;width:22%;height:22%;clip-path:polygon(0 53%,63% 0,100% 30%,100% 64%,28% 100%,0 82%)}.label{position:absolute;z-index:3;background:#111e;padding:9px 13px;border-left:1px solid #626262;white-space:nowrap;transition:border-color .2s,background .2s}.label small{display:block;color:#999;font-size:9px;letter-spacing:.09em}.label span{display:block;margin-top:5px;color:#bbb;font-size:13px}.label.selected{border-color:#fff;background:#191919f2}.label.selected span{color:#fff}.l1{left:13%;top:59%}.l2{left:60%;top:15%}.l3{left:79%;top:52%}.l4{left:49%;top:78%}.preview{width:24%;padding-right:5px;min-width:0}.preview-media{margin-top:18px;aspect-ratio:16/9;background:#181818;border:1px solid #333;display:flex;align-items:center;justify-content:center}.preview-media img{width:100%;height:auto;display:block}.preview-media img[hidden],#empty-image[hidden]{display:none}#empty-image{font-size:13px;color:#777;letter-spacing:.1em}.preview h2{font-size:23px;font-weight:400;line-height:1.5;margin:24px 0 15px}.preview p{color:#aaa;font-size:14px;line-height:1.95}.preview .metadata{font-size:12px;color:#888;margin-top:22px}.enter{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px solid #777;font-size:13px;margin-top:20px}.note{display:block;font-size:11px;color:#888;line-height:1.7;margin-top:12px}.map-footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid #303030;padding:20px 0;font-size:11px;color:#888}footer{display:flex;justify-content:space-between;padding:10px 4vw 24px;font-size:11px;color:#777}.document{max-width:1000px;padding-top:60px;padding-bottom:80px;min-height:75vh}.document h1{margin-bottom:35px}.document p{color:#aaa;line-height:1.9}.document section{padding:24px 0;border-bottom:1px solid #333}.document h2{font-size:22px;font-weight:400}.document .status{font-size:13px;color:#777}.back{display:inline-block;margin-top:35px;border-bottom:1px solid #666;padding-bottom:8px;font-size:14px}
@media(min-width:1500px){.scene{max-width:1100px}.workspace{justify-content:space-between}}
@media(max-width:1000px){.workspace{gap:2%}.scene{width:70%}.preview{width:28%}.identity span{display:none}.preview h2{font-size:19px}.label{padding:7px 9px}.label span{font-size:11px}.label small{font-size:8px}}
@media(max-width:700px){header{padding:22px 5vw 12px}main{padding:0 5vw}.heading{padding-top:18px}h1{font-size:24px}.workspace{display:block;margin-top:18px}.scene{width:110%;margin-left:-5%;}.label{padding:5px 7px}.label span{font-size:10px}.label small{font-size:8px}.l3{left:74%;top:55%}.l2{left:61%;top:10%}.l1{left:10%;top:59%}.l4{top:79%}.preview{width:100%;display:grid;grid-template-columns:40% 1fr;gap:0 20px;margin:20px 0 28px;padding:0}.preview>.overline{grid-column:1/-1}.preview-media{grid-column:1;grid-row:2/5;margin-top:16px;align-self:start}.preview h2{grid-column:2;font-size:17px;margin:14px 0 7px}.preview p{grid-column:2;font-size:12px;margin:0}.preview .metadata{grid-column:2;margin-top:10px;font-size:11px}.enter{grid-column:1/-1;margin-top:18px}.note{grid-column:1/-1}.map-footer{font-size:10px}.map-footer>span:last-child{display:none}.document{padding-top:35px}.document h1{font-size:27px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
/* Timeline edition: keep the heading outside the scene's paint area. */
.heading{position:relative;z-index:2;padding:20px 0 24px;background:#111}
.workspace{margin-top:20px;position:relative;isolation:isolate;gap:4%}
.scene{overflow:visible}
.l3{left:76%;top:43%}
.construction-label{position:absolute;left:72%;top:71%;z-index:3;padding:8px 11px;background:#111d;border-left:1px dashed #626262;pointer-events:none;user-select:none;color:#888}
.construction-label small{display:block;font-size:9px;letter-spacing:.09em}
.construction-label span{display:block;font-size:12px;margin-top:5px}
.journey{display:grid;grid-template-columns:repeat(5,1fr);gap:24px;margin:8px 0 26px;border-top:1px solid #353535}
.journey>a,.journey>div{position:relative;padding-top:16px}
.journey>a:before,.journey>div:before{content:"";position:absolute;top:-3px;left:0;width:5px;height:5px;background:#888}
.journey small{display:block;font-size:10px;color:#818181;letter-spacing:.06em}
.journey span{display:block;font-size:13px;color:#aaa;margin-top:7px}
.journey .current:before{background:#eee}
.journey .current span{color:#eee}
.journey .future{pointer-events:none;user-select:none}
.journey .future:before{background:#111;border:1px solid #666}
.journey .future span{color:#666}
@media(max-width:700px){.heading{padding-top:18px;padding-bottom:16px}.workspace{margin-top:12px}.l3{left:72%;top:42%}.l3 span{font-size:9px}.construction-label{left:73%;top:72%;padding:5px 6px}.construction-label small{font-size:7px}.construction-label span{font-size:10px}.journey{gap:10px;margin-top:28px}.journey small{font-size:8px}.journey span{font-size:10px}.journey>a,.journey>div{padding-top:13px}}
/* Three elevation campus: hotspots follow the building silhouettes. */
.b1{left:14%;top:26%;width:33%;height:32%}
.b2{left:48%;top:6%;width:16%;height:22%;clip-path:polygon(0 19%,42% 0,100% 29%,100% 80%,52% 100%,0 76%)}
.b3{left:64%;top:24%;width:13%;height:18%;clip-path:polygon(0 23%,46% 0,100% 30%,100% 82%,52% 100%,0 70%)}
.b4{left:43%;top:53%;width:21%;height:22%}
.l1{left:12%;top:60%}.l2{left:59%;top:7%}.l3{left:68%;top:43%}.l4{left:46%;top:78%}
.construction-label{left:84%;top:27%;pointer-events:none;user-select:none}
@media(max-width:700px){.l1{left:9%;top:59%}.l2{left:59%;top:4%}.l3{left:67%;top:43%}.l4{left:44%;top:79%}.construction-label{left:82%;top:27%}.construction-label small{font-size:6px}}/* Project dioramas: hit areas match the open models, excluding connecting roads. */
.b1{left:7%;top:24%;width:42%;height:37%;clip-path:polygon(0 56%,57% 0,78% 12%,100% 55%,45% 100%,0 66%)}
.b2{left:41%;top:5%;width:24%;height:25%;clip-path:polygon(0 53%,34% 0,86% 27%,100% 70%,60% 100%,0 69%)}
.b3{left:60.5%;top:25%;width:20%;height:19%;clip-path:polygon(0 36%,47% 0,100% 42%,100% 71%,48% 100%,0 68%)}
.b4{left:37.5%;top:52%;width:29%;height:26%;clip-path:polygon(0 67%,69% 0,97% 22%,100% 44%,29% 100%,0 83%)}
.l1{left:12%;top:62%}.l2{left:65%;top:8%}.l3{left:72%;top:44%}.l4{left:45%;top:79%}
.construction-label{left:85%;top:28%}
@media(max-width:700px){.l1{left:8%;top:62%}.l2{left:65%;top:4%}.l3{left:68%;top:45%}.l4{left:43%;top:80%}.construction-label{left:84%;top:27%}}/* Neutral architectural render with pedestrian setbacks. */
.campus{filter:grayscale(1)}
.b1{left:5%;top:24%;width:43%;height:40%;clip-path:polygon(0 55%,57% 0,79% 13%,100% 53%,43% 100%,0 66%)}
.b2{left:40%;top:4%;width:25%;height:26%;clip-path:polygon(0 56%,33% 0,79% 20%,100% 69%,61% 100%,0 72%)}
.b3{left:60%;top:26%;width:18%;height:18%;clip-path:polygon(0 38%,44% 0,100% 46%,100% 71%,54% 100%,0 70%)}
.b4{left:37%;top:54%;width:28%;height:28%;clip-path:polygon(0 65%,70% 0,100% 20%,100% 50%,31% 100%,0 81%)}
.l1{left:10%;top:65%}.l4{left:44%;top:84%}
@media(max-width:700px){.l1{left:7%;top:65%}.l4{left:42%;top:84%}}/* Continuous route edition: keep project hit regions inside plots. */
.b1{left:4%;top:24%;width:42%;height:41%;clip-path:polygon(0 56%,59% 0,80% 16%,100% 53%,44% 100%,0 68%)}
.b2{left:39%;top:3%;width:24%;height:26%;clip-path:polygon(0 57%,40% 0,80% 22%,100% 65%,62% 100%,0 75%)}
.b3{left:58%;top:26%;width:19%;height:20%;clip-path:polygon(0 37%,45% 0,100% 46%,100% 72%,53% 100%,0 69%)}
.b4{left:37%;top:55%;width:26%;height:29%;clip-path:polygon(0 58%,69% 0,100% 23%,100% 48%,28% 100%,0 83%)}
/* Arena entrance now faces the road. */
.b3{left:58%;top:27%;width:19%;height:18%;clip-path:polygon(0 42%,47% 0,100% 48%,100% 75%,52% 100%,0 72%)}
/* Shallow terraces: the arena entrance follows the narrative-campus arrival. */
.b2{left:39%;top:3%;width:24%;height:26%;clip-path:polygon(0 57%,40% 0,80% 22%,100% 65%,62% 100%,0 75%)}
.b3{left:62%;top:26%;width:20%;height:21%;clip-path:polygon(0 42%,46% 0,75% 15%,100% 42%,100% 70%,53% 100%,0 73%)}
.l3{left:76%;top:48%}
@media(max-width:700px){.l3{left:70%;top:49%}}/* Three visible terraces and low planting: updated arena and cutaway silhouettes. */
.b3{left:61.5%;top:24%;width:21%;height:23%;clip-path:polygon(0 45%,48% 0,76% 17%,100% 46%,100% 74%,52% 100%,0 74%)}
.b4{left:37%;top:53%;width:26%;height:30%;clip-path:polygon(0 58%,69% 0,100% 23%,100% 48%,28% 100%,0 83%)}/* Information plaques placed in the negative space marked by the owner. */
.l2{left:24%;top:12%}
.l3{left:auto;right:2%;top:43%}
.construction-label{left:68%;top:3.5%;pointer-events:none}
.playground{left:53%;top:46%;width:15%;height:14%;clip-path:polygon(12% 0,100% 72%,85% 100%,0 24%)}
.l-other{left:66.5%;top:61%}
@media(max-width:700px){
.l2{left:23%;top:11%}.l3{left:auto;right:1%;top:43%}
.construction-label{left:69%;top:3.5%}
.l-other{left:65%;top:62%}.l-other span{font-size:10px}
}