:root{--cream:#fff9ec;--gold:#ffcf70;--ink:#101612;--glass:rgba(10,18,15,.58);--line:rgba(255,255,255,.18)}
*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0;overflow:hidden;background:#08120e;color:var(--cream);font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif}button,input,textarea{font:inherit}button{color:inherit}
#panorama,#scene{position:absolute;inset:0;width:100%;height:100%}#panorama{overflow:hidden;background:linear-gradient(#408dba,#153c2a);touch-action:none}#scene{display:block;cursor:grab}#scene.dragging{cursor:grabbing}#panorama:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(3,10,8,.34),transparent 28%,transparent 62%,rgba(3,9,7,.54)),radial-gradient(circle at center,transparent 45%,rgba(0,0,0,.18));z-index:2}
.loading{position:absolute;z-index:30;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#0b1712;transition:opacity .6s,visibility .6s}.loading.hide{opacity:0;visibility:hidden}.loading-mark{width:58px;height:58px;border:1px solid rgba(255,207,112,.65);display:grid;place-items:center;border-radius:50%;font:italic 32px Georgia;color:var(--gold)}.loading p{font-size:13px;letter-spacing:.25em;margin:22px 0 10px}.loading-line{width:150px;height:1px;background:#33443d;overflow:hidden}.loading-line i{display:block;width:5%;height:100%;background:var(--gold);transition:width .25s}
.topbar{position:absolute;z-index:5;left:0;right:0;top:0;display:flex;align-items:center;justify-content:space-between;padding:calc(20px + env(safe-area-inset-top)) 28px 20px;pointer-events:none}.brand,.actions{display:flex;align-items:center;gap:12px;pointer-events:auto}.brand-monogram{width:38px;height:38px;border:1px solid rgba(255,207,112,.75);display:grid;place-items:center;border-radius:50%;color:var(--gold);font:9px Georgia;letter-spacing:.08em;box-shadow:0 0 18px rgba(255,207,112,.2)}.brand b{display:block;font-family:STKaiti,KaiTi,serif;letter-spacing:.1em;font-size:17px}.brand small{display:block;font-size:8px;letter-spacing:.22em;margin-top:2px;opacity:.65}.glass-btn,.round-btn{border:1px solid var(--line);background:var(--glass);backdrop-filter:blur(14px);height:42px;border-radius:22px;cursor:pointer}.glass-btn{padding:0 16px;display:flex;gap:9px;align-items:center}.round-btn{width:42px;font:italic 18px Georgia}.music-bars{height:14px;display:flex;gap:2px;align-items:end}.music-bars i{display:block;width:2px;height:6px;background:var(--gold)}.music-bars i:nth-child(2){height:12px}.music-bars i:nth-child(3){height:9px}.playing .music-bars i{animation:bars .7s ease-in-out infinite alternate}.playing .music-bars i:nth-child(2){animation-delay:.2s}.playing .music-bars i:nth-child(3){animation-delay:.4s}@keyframes bars{to{height:3px}}
.hero{position:absolute;z-index:4;left:7vw;top:50%;transform:translateY(-50%);max-width:560px;pointer-events:none;transition:opacity .4s}.hero.dim{opacity:0}.eyebrow{color:var(--gold);font:11px/1.2 Arial,sans-serif;letter-spacing:.3em;text-transform:uppercase}.hero h1{font-family:STKaiti,KaiTi,"Songti SC",serif;font-weight:400;font-size:clamp(42px,5.5vw,76px);line-height:1.16;margin:15px 0 22px;text-shadow:0 3px 24px rgba(0,0,0,.32)}.hero h1 em{color:var(--gold);font-style:normal}.intro{font-size:14px;line-height:2;letter-spacing:.08em;text-shadow:0 2px 8px #000}
.music-player{position:absolute;z-index:8;right:28px;top:78px;width:min(360px,calc(100vw - 36px));padding:20px;border:1px solid rgba(255,255,255,.18);border-radius:22px;background:rgba(8,18,14,.88);box-shadow:0 20px 60px rgba(0,0,0,.35);backdrop-filter:blur(22px);opacity:0;visibility:hidden;transform:translateY(-8px);transition:.25s}.music-player.open{opacity:1;visibility:visible;transform:translateY(0)}.player-close{position:absolute;right:12px;top:10px;width:30px;height:30px;border:0;background:transparent;color:rgba(255,255,255,.65);font-size:22px;cursor:pointer}.record{float:left;width:58px;height:58px;margin-right:13px;border-radius:50%;background:repeating-radial-gradient(circle,#1e2c26 0 3px,#0d1713 4px 6px);border:1px solid #425149;display:grid;place-items:center}.record:after{content:"";width:13px;height:13px;border-radius:50%;background:var(--gold);border:3px solid #26332d}.record i{position:absolute;color:transparent}.music-player.playing .record{animation:spin 5s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.track-meta{min-height:63px;padding:3px 28px 0 0;overflow:hidden}.track-meta small{display:block;color:var(--gold);font-size:8px;letter-spacing:.23em;margin-bottom:6px}.track-meta b,.track-meta span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.track-meta b{font:18px STKaiti,KaiTi,serif}.track-meta span{font-size:10px;opacity:.58;margin-top:4px}.music-progress{width:100%;height:3px;margin:18px 0 4px;accent-color:var(--gold);cursor:pointer}.music-time{display:flex;justify-content:space-between;font-size:9px;opacity:.55}.player-controls{display:flex;justify-content:center;align-items:center;gap:20px;margin:9px 0 14px}.player-controls button{border:0;background:transparent;font-size:28px;cursor:pointer}.player-controls .play-track{width:42px;height:42px;border-radius:50%;background:var(--cream);color:#1e3028;font-size:15px;padding-left:4px}.track-list{display:grid;gap:3px;border-top:1px solid rgba(255,255,255,.1);padding-top:10px}.track-list button{display:flex;align-items:center;gap:9px;width:100%;border:0;border-radius:8px;background:transparent;padding:7px 9px;color:rgba(255,255,255,.68);font-size:11px;text-align:left;cursor:pointer}.track-list button:before{content:attr(data-number);font:9px Georgia;color:rgba(255,255,255,.35)}.track-list button.active{background:rgba(255,207,112,.1);color:var(--gold)}
.bottom-controls{position:absolute;z-index:5;left:50%;bottom:calc(30px + env(safe-area-inset-bottom));transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:13px}.primary-btn{white-space:nowrap;border:0;border-radius:28px;background:var(--cream);color:#263127;padding:14px 24px;font-weight:700;letter-spacing:.08em;box-shadow:0 8px 30px rgba(0,0,0,.25);cursor:pointer}.primary-btn span{color:#9d6a15;font-size:19px}.primary-btn.active{background:var(--gold);box-shadow:0 0 0 7px rgba(255,207,112,.2)}.hint{font-size:11px;letter-spacing:.1em;opacity:.72;text-shadow:0 1px 5px #000}.hint span{font-size:17px;margin-right:5px}.zoom-controls{position:absolute;z-index:5;right:28px;bottom:34px;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:22px;overflow:hidden;background:var(--glass);backdrop-filter:blur(12px)}.zoom-controls button{width:40px;height:39px;border:0;background:transparent;font-size:20px;cursor:pointer}.zoom-controls button+button{border-top:1px solid var(--line)}
#markers{position:absolute;inset:0;z-index:3;pointer-events:none}.marker{position:absolute;width:30px;height:38px;transform:translate(-50%,-100%);pointer-events:auto;border:0;background:none;padding:0;cursor:pointer;filter:drop-shadow(0 3px 6px rgba(0,0,0,.5))}.marker:before{content:"";position:absolute;left:6px;top:3px;width:18px;height:18px;background:var(--marker);border:3px solid #fff;border-radius:50% 50% 50% 0;transform:rotate(-45deg);animation:pulse 2.4s infinite}.marker:after{content:"";position:absolute;left:13px;top:10px;width:5px;height:5px;background:#fff;border-radius:50%}@keyframes pulse{50%{box-shadow:0 0 0 8px rgba(255,255,255,.1)}}
.toast{position:absolute;z-index:40;left:50%;bottom:105px;transform:translate(-50%,20px);background:rgba(10,16,13,.88);border:1px solid var(--line);padding:11px 18px;border-radius:24px;font-size:13px;opacity:0;visibility:hidden;transition:.25s;white-space:nowrap}.toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
dialog{color:var(--ink)}dialog::backdrop{background:rgba(4,9,7,.64);backdrop-filter:blur(6px)}.sheet{width:min(92vw,460px);max-height:90vh;border:0;border-radius:24px;padding:28px;background:#fffaf0;box-shadow:0 30px 80px rgba(0,0,0,.4)}.sheet[open]{animation:rise .28s ease-out}@keyframes rise{from{opacity:0;transform:translateY(20px)}}.sheet .close{position:absolute;right:17px;top:14px;width:34px;height:34px;border:0;border-radius:50%;background:#eee6d8;color:#504a40;font-size:23px;cursor:pointer}.sheet h2{font:400 28px STKaiti,KaiTi,serif;margin:8px 0 22px}.sheet label{display:block;font-size:13px;font-weight:700;margin:14px 0}.sheet label small{color:#968f82;font-weight:400}.sheet input,.sheet textarea{display:block;width:100%;margin-top:7px;border:1px solid #ded6c7;background:#fffdf7;border-radius:11px;padding:11px 12px;outline:none}.sheet input:focus,.sheet textarea:focus{border-color:#c18d32;box-shadow:0 0 0 3px rgba(193,141,50,.12)}.sheet textarea{height:105px;resize:none;line-height:1.65}.counter{display:block;text-align:right;font-size:10px;color:#948c7f;margin-top:-18px;margin-right:9px;position:relative}.sheet fieldset{border:0;padding:0;margin:16px 0}.sheet legend{font-size:13px;font-weight:700}.colors{display:flex;gap:14px;margin-top:10px}.colors label{margin:0}.colors input{position:absolute;opacity:0;width:1px}.colors i{display:block;width:27px;height:27px;border-radius:50%;background:var(--c);border:4px solid #fff;box-shadow:0 0 0 1px #d5ccbd}.colors input:checked+i{box-shadow:0 0 0 2px #6a5b3d;transform:scale(1.08)}.submit-btn{width:100%;border:0;border-radius:13px;padding:14px;background:#1e3a2e;color:white;font-weight:700;cursor:pointer}.submit-btn:disabled{opacity:.5}.privacy{text-align:center;font-size:10px;color:#999184;margin:10px 0 0}.trap{position:absolute!important;left:-9999px!important}.detail-sheet{text-align:center}.detail-pin{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;margin:6px auto 20px;background:var(--pin);color:#fff}.detail-sheet blockquote{font:23px/1.7 STKaiti,KaiTi,serif;margin:0}.detail-sheet>p{color:#8f8779;font-size:12px}.info-sheet p{line-height:1.8;color:#615b50}.info-sheet .eyebrow{color:#9b6b21}.wenya-seal{width:76px;height:76px;border:1px solid #c9963c;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8a5d18;font:18px Georgia;letter-spacing:.12em;margin:4px auto 20px}.wenya-seal small{font:10px STKaiti,KaiTi,serif;letter-spacing:.2em;margin-top:4px}
@media(max-width:640px){.topbar{padding-left:18px;padding-right:18px}.brand-monogram{width:32px;height:32px;font-size:8px}.brand b{font-size:14px}.brand small{display:none}.glass-btn{width:42px;padding:0;justify-content:center}.glass-btn>span:last-child{display:none}.hero{left:25px;right:25px;top:46%}.hero h1{font-size:39px}.intro{font-size:13px}.zoom-controls{display:none}.bottom-controls{bottom:calc(22px + env(safe-area-inset-bottom))}.sheet{padding:25px 21px}.actions{gap:8px}.music-player{right:18px;top:72px;max-height:calc(100vh - 90px);overflow:auto}}
@media(max-height:650px){.hero .intro{display:none}.hero h1{font-size:38px;margin:8px 0}.sheet{max-height:96vh;overflow:auto}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.school-mark{height:42px;min-width:102px;padding:7px 10px;border:1px solid rgba(255,255,255,.2);border-radius:10px;background:rgba(7,18,14,.52);backdrop-filter:blur(12px);display:flex;align-items:center}.school-mark img{display:block;width:100px;max-height:27px;object-fit:contain}.brand-monogram{display:none}
.music-search{height:38px;margin:3px 0 8px!important;padding:0 10px;border:1px solid rgba(255,255,255,.12);border-radius:10px;background:rgba(255,255,255,.06);display:flex!important;align-items:center;gap:8px}.music-search span{opacity:.55;font-size:19px}.music-search input{width:100%;margin:0!important;padding:0!important;border:0!important;background:transparent!important;color:#fff!important;box-shadow:none!important;font-size:12px}.music-search input::placeholder{color:rgba(255,255,255,.4)}.library-hint{display:block;color:rgba(255,255,255,.4);font-size:9px;letter-spacing:.12em;margin:9px 3px 5px}.track-list{max-height:190px;overflow:auto}
.submit-btn,.move-btn{width:100%;border:0;border-radius:13px;padding:13px;font-weight:700;cursor:pointer}.move-btn{margin-bottom:8px;background:#eee5d4;color:#594f3e}.memory-actions{display:flex;gap:8px;margin-top:22px}.memory-actions button{flex:1;border:0;border-radius:11px;padding:11px;background:#e9e1d2;color:#40392f;cursor:pointer}.memory-actions .danger{background:#f7dfdc;color:#a23d32}
@media(max-width:640px){.school-mark{min-width:72px;height:36px;padding:6px 8px}.school-mark img{width:72px;max-height:23px}.brand{gap:8px}.music-player{max-height:calc(100vh - 90px);overflow:auto}}
.info-sheet{width:min(92vw,720px);padding:0;overflow:hidden;border-radius:28px;background:#f9f2e5;display:grid;grid-template-columns:38% 62%;text-align:left}.info-sheet:not([open]){display:none}.info-sheet .close{z-index:3;background:rgba(255,255,255,.75);backdrop-filter:blur(8px)}.info-cover{min-height:430px;padding:30px 25px;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;position:relative;overflow:hidden;background:linear-gradient(155deg,rgba(8,32,24,.12),rgba(8,32,24,.88)),url('assets/campus-web.jpg') center/cover;color:#fff}.info-cover:after{content:"XWY";position:absolute;left:-14px;bottom:30px;font:88px Georgia;color:rgba(255,255,255,.07);letter-spacing:-.06em}.info-cover img{width:150px;max-height:50px;object-fit:contain;position:relative;z-index:1}.info-cover p{font:9px Arial;letter-spacing:.3em;position:relative;z-index:1}.info-number{font:9px Arial;letter-spacing:.18em;color:var(--gold);position:relative;z-index:1}.info-content{padding:52px 46px 36px;position:relative}.info-content .eyebrow{color:#a77327}.info-content h2{font-size:34px;line-height:1.25;margin:15px 0 20px;color:#263229}.info-content h2 em{font-style:normal;color:#b27d2d}.info-lead{font:16px STKaiti,KaiTi,serif!important;color:#6d6458!important}.info-steps{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:27px 0}.info-steps span{padding:13px 12px;border-top:1px solid #cdbb9d;font-size:12px;color:#4f4a42}.info-steps b{display:block;color:#b77d27;font:10px Georgia;margin-bottom:7px}.info-steps small{display:block;color:#9a9184;margin-top:5px;font-size:10px}.info-content blockquote{margin:24px 0 0;padding:17px 0 0;border-top:1px solid #e1d4c0;color:#82786b;font:14px/1.8 STKaiti,KaiTi,serif}
@media(max-width:640px){.info-sheet{display:block;width:min(92vw,430px);max-height:86vh;overflow:auto}.info-sheet:not([open]){display:none}.info-cover{min-height:150px;padding:21px;background-position:center 48%}.info-cover img{width:120px}.info-cover p{margin:0}.info-content{padding:27px 23px 25px}.info-content h2{font-size:28px}.info-steps{margin:20px 0}}
