/* Codex维护：2026-09-05。仅翰林院3D游戏画面与操作叠层。 */
:root{--ink:#263b3b;--paper:#f9f6ee;--gold:#c5a265;--leaf:#668874;--deep:#233d3c}
#campusStage{position:fixed;inset:0;z-index:0;background:#b9ced0}
#campusStage canvas{display:block;width:100%;height:100%}
#campusLabels{position:fixed;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.scene-label{position:absolute;left:0;top:0;white-space:nowrap;background:rgba(250,249,241,.93);color:#294341;padding:7px 12px;border-radius:5px;box-shadow:0 3px 12px #20383121;border:1px solid #fff9;font-size:12px;font-weight:600;letter-spacing:.04em}
.scene-label[hidden]{display:none}.scene-label.is-target{background:#284d46;color:#fff8e7;border-color:#a9bfa0}
.scene-label::after{content:'';position:absolute;bottom:-4px;left:calc(50% - 3px);width:6px;height:6px;background:inherit;transform:rotate(45deg)}
.gate-label{font-size:15px;letter-spacing:.14em}
.intro{z-index:4;background:linear-gradient(90deg,rgba(16,40,40,.44),transparent 64%);grid-template-columns:1fr;place-items:center end;padding-right:7vw}
.intro video,.intro-poster,.intro-play-btn{display:none!important}
.login-card{width:370px;border-radius:14px;border:1px solid #fff9;padding:30px;background:rgba(248,248,238,.94);color:#29413d;box-shadow:0 20px 90px #1b343439;backdrop-filter:blur(18px)}
.login-title{font-weight:600;font-size:31px;letter-spacing:.13em}.login-subtitle{color:#6a7770;font-size:12px;line-height:1.8;margin-bottom:22px}
.field label{color:#455b53;font-size:12px}.field input,.field select{color:#2c4139;background:#fff9;border:1px solid #acb8aa80;border-radius:5px;height:41px}
.field input:focus,.field select:focus{border-color:#527462;box-shadow:0 0 0 3px #69887318}.field option{background:#faf9f0;color:#26392e}
.form-grid{gap:10px}.actions{grid-template-columns:1fr;margin-top:21px}.btn-primary{background:#30574b;color:#fffaf0;font-weight:600;border-radius:5px;height:43px;letter-spacing:.05em}.btn-primary:hover{background:#24473c}
.status{color:#6b6750;font-size:12px;margin-top:12px;min-height:17px}
.scene-story{position:fixed;z-index:5;left:6vw;top:28%;pointer-events:none;color:#fffdf3;text-shadow:0 2px 24px #233b3540}
.scene-story .eyebrow{font-size:12px;letter-spacing:.35em;font-weight:600;display:block;margin-bottom:22px;opacity:.9}
.scene-story h2{font-family:'SimSun','Songti SC',serif;font-size:clamp(42px,5.1vw,78px);font-weight:400;line-height:1.3;letter-spacing:.1em;margin:0 0 24px}
.scene-story p{font-size:14px;line-height:1.9;letter-spacing:.12em;color:#f0f4e6}
.scene-story .scene-line{width:52px;height:2px;background:#d9c492;margin:22px 0}
.scene-caption{position:fixed;z-index:5;left:6vw;bottom:32px;color:#f4f6e2bd;font-size:11px;letter-spacing:.17em;pointer-events:none}
.playing-3d .scene-story,.playing-3d .scene-caption{display:none}
.game,.map-shell{background:transparent;box-shadow:none}.game{z-index:2}.map-shell{touch-action:none}
.map-world{visibility:hidden;pointer-events:none}
.hud{top:max(22px,env(safe-area-inset-top));left:24px;right:auto;padding:13px 19px;max-width:calc(100vw - 135px);border:1px solid #ffffff90;background:rgba(250,249,239,.94);color:#426056;border-radius:7px;box-shadow:0 4px 22px #233f3721;font-size:12px;backdrop-filter:blur(12px);z-index:5}
.hud strong{font-size:15px;color:#244b3d;font-weight:600}
.game-exit{right:24px;top:max(22px,env(safe-area-inset-top));border-radius:6px;background:#f6f5eade;border:1px solid #fff9;color:#385345;padding:12px 17px;z-index:6;font-size:12px}
.ability-panel{top:83px;left:24px;right:auto;width:224px;background:#f9f8eee8;border:1px solid #fff9;padding:14px 15px 10px;border-radius:7px;box-shadow:0 3px 20px #213e331a;z-index:5;backdrop-filter:blur(10px)}
.ability-row{grid-template-columns:37px 1fr;font-size:11px;gap:8px;color:#496050;margin:0 0 9px}
.ability-track{height:5px;background:#d6ded280;border-radius:4px}.ability-fill{background:linear-gradient(90deg,#839e77,#3c7160);box-shadow:none;border-radius:4px}.ability-scale{font-size:9px;color:#879080;padding-left:45px}
.camera-controls{display:none;position:fixed;z-index:6;right:24px;bottom:30px;gap:6px;align-items:center}
.playing-3d .camera-controls{display:flex}.camera-controls button{height:36px;padding:0 13px;background:#f8f7edeb;border:1px solid #fff9;border-radius:5px;color:#405b4e;font-size:12px;cursor:pointer;box-shadow:0 2px 12px #27423017}
.camera-controls button.selected{background:#335c4e;color:#fff6dc;border-color:#557968}.camera-controls .zoom-control{width:35px;padding:0;font-size:19px}
.camera-hint{display:none;position:fixed;z-index:5;bottom:77px;right:25px;color:#354d40;background:#f9f7e9aa;padding:5px 8px;border-radius:4px;font-size:10px;pointer-events:none;letter-spacing:.04em}
.playing-3d .camera-hint{display:block}
.role-panel{display:none;position:fixed;bottom:28px;left:24px;z-index:5;align-items:center;gap:11px;background:#f8f7eced;border:1px solid #fff9;padding:9px 16px 9px 8px;border-radius:8px;box-shadow:0 3px 15px #183c2521}
.playing-3d .role-panel{display:flex}.role-panel img{width:39px;height:57px;object-fit:contain}.role-panel strong{font-size:13px;display:block;color:#2d4d3f;margin-bottom:5px}.role-panel span{font-size:11px;color:#718170}
.modal-backdrop{z-index:12;background:rgba(21,40,35,.2);backdrop-filter:blur(3px);padding:18px;touch-action:auto}
.game-modal{color:#2b4639;background:rgba(249,248,238,.98);border:1px solid #fff;border-radius:12px;box-shadow:0 22px 80px #183d343d;padding:28px}
.game-modal h2{color:#2e5344;font-size:23px;font-weight:600;margin:0 0 18px;letter-spacing:.04em}
.question-card{width:min(600px,calc(100vw - 40px))}.question-meta{color:#7c8875;font-size:11px;line-height:1.7;margin-bottom:15px}
.question-text{background:#eaeedfa6;border:0;border-left:3px solid #91a985;padding:14px 16px;color:#314e3f;font-size:16px;line-height:1.9}
.option-list{gap:10px}.option-item{border:1px solid #d2d8c6;border-radius:6px;min-height:53px;background:#fffef69c;padding:9px 12px;grid-template-columns:31px 1fr;font-size:14px;line-height:1.7;color:#344c3e}
.option-key{width:27px;height:27px;border-radius:5px;background:#e6ecdc;color:#54704d;font-size:12px}.option-item:hover{border-color:#819879;background:#edf2e3}.option-item.correct{background:#dbeed6;border-color:#65a263}.option-item.wrong{background:#f6ded4;border-color:#c6816a}
.answer-tip{font-size:12px;color:#708065;margin-top:14px}.score-total,.score-grid div,.score-analysis{background:#e9eedf;color:#3b573e;border-color:#d6dfcc}.leaderboard-list li{background:#edf0e3;color:#3e5940}
#sceneLoading{position:fixed;inset:0;z-index:40;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#e1e8df;color:#44604e;gap:12px;font-size:14px}
#sceneLoading::before{content:'';height:28px;width:28px;border:2px solid #a6b69d;border-top-color:#365849;border-radius:50%;animation:scene-spin 1s linear infinite}
#sceneLoading.scene-failed{padding:30px;text-align:center}#sceneLoading.scene-failed::before{display:none}#sceneLoading p{max-width:360px;line-height:1.9}#sceneLoading button{border:0;border-radius:5px;background:#345b4a;color:#fff;padding:12px 24px;cursor:pointer}
@keyframes scene-spin{to{transform:rotate(360deg)}}
@media(max-width:900px){.scene-story{left:5vw}.scene-story h2{font-size:47px}.intro{padding-right:4vw}.login-card{width:330px;padding:24px}.camera-controls{right:14px;bottom:20px}.role-panel{left:14px;bottom:18px}.camera-hint{right:15px;bottom:64px}}
@media(max-width:640px){.intro{padding:22px 15px;background:linear-gradient(0deg,#213e3266,transparent 85%);place-items:center}.scene-story{top:7%;left:24px}.scene-story .eyebrow{font-size:10px;margin-bottom:12px}.scene-story h2{font-size:33px;line-height:1.2}.scene-story h2 br{display:none}.scene-story p,.scene-story .scene-line,.scene-caption{display:none}.login-card{width:min(350px,100%);padding:22px;margin-top:40px;max-height:calc(100dvh - 130px);overflow-y:auto}.login-title{font-size:24px;margin-bottom:5px}.login-subtitle{font-size:11px;margin-bottom:15px}.field input,.field select{height:36px;font-size:13px}.form-grid{gap:7px}.field label{font-size:11px}.actions{margin-top:14px}.hud{left:12px;top:max(12px,env(safe-area-inset-top));padding:11px 12px;max-width:calc(100vw - 83px);font-size:10px}.hud strong{font-size:13px}.game-exit{top:max(12px,env(safe-area-inset-top));right:12px;padding:11px 13px;font-size:11px}.ability-panel{left:12px;top:66px;width:172px;padding:11px 11px 6px}.ability-row{font-size:10px;margin-bottom:7px;grid-template-columns:30px 1fr}.ability-scale{padding-left:38px}.role-panel{gap:7px;padding:6px 10px 6px 5px;bottom:max(15px,env(safe-area-inset-bottom))}.role-panel img{width:27px;height:43px}.role-panel strong{font-size:11px}.role-panel span{font-size:9px;max-width:130px;display:block}.camera-controls{gap:4px;bottom:21px}.camera-controls button{height:31px;padding:0 8px;font-size:10px}.camera-controls .zoom-control{width:27px;font-size:17px}.camera-hint{display:none!important}.scene-label{font-size:10px;padding:5px 8px}.game-modal{padding:20px;max-height:calc(100dvh - 35px);overflow:auto}.game-modal h2{font-size:20px;margin-bottom:12px}.question-meta{font-size:10px;display:block;margin-bottom:10px}.question-meta span{display:block}.question-text{font-size:14px;line-height:1.75;padding:11px 12px}.option-item{font-size:12px;line-height:1.6;min-height:46px;padding:8px;grid-template-columns:25px 1fr}.option-key{width:24px;height:24px;font-size:11px}.option-list{gap:7px}.answer-tip{font-size:11px}.question-card{width:calc(100vw - 28px)}}
@media(max-height:600px){.scene-story{top:10%}.scene-story h2{font-size:36px}.scene-story p{display:none}.intro{padding:12px 4vw;place-items:center end}.login-card{margin-top:0;width:330px;max-height:calc(100dvh - 24px);padding:16px 20px}.login-title{font-size:23px}.login-subtitle{margin-bottom:10px;font-size:11px}.field input,.field select{height:31px}.form-grid{gap:5px}.field{gap:3px}.actions{margin-top:10px}.status{margin-top:6px}.role-panel{bottom:10px}.camera-controls{bottom:12px}}
@media(prefers-reduced-motion:reduce){.login-card{transition:none}}
.game-exit{left:auto;bottom:auto;width:auto;min-width:60px;height:40px}
.ability-scale{display:flex;justify-content:space-between;gap:0;letter-spacing:0;margin-left:0}
.modal-open #campusLabels{visibility:hidden}
.modal-open .camera-controls,.modal-open .camera-hint{visibility:hidden;pointer-events:none}
/* Codex维护：场地探索提示与电脑/手机移动控制。 */
#explorePanel{position:fixed;right:24px;top:84px;z-index:8;width:246px;padding:17px 19px;border:1px solid #ffffffb0;border-radius:9px;background:#f9f8eef0;color:#365347;box-shadow:0 8px 32px #193b3320;backdrop-filter:blur(10px)}
#explorePanel[hidden],#walkJoystick[hidden],#venueTransition[hidden]{display:none!important}
.explore-heading>span{display:block;font-size:10px;color:#7a8975;letter-spacing:.2em;margin-bottom:6px}.explore-heading strong{font-size:19px;font-weight:600}.explore-progress{margin-top:14px;font-size:12px}.explore-progress>div{height:4px;background:#d9e1d1;margin-top:8px;border-radius:4px;overflow:hidden}.explore-progress i{display:block;width:0;height:100%;background:#537d60}
#explorePanel p{font-size:11px;color:#71816c;line-height:1.7;margin:12px 0 0}.touch-help{display:none}.visit-controls{display:flex;align-items:center;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid #dbe0d4}.visit-controls label{font-size:11px;white-space:nowrap}.visit-controls select,.visit-controls button{font:inherit;font-size:11px;background:#fffdf3;color:#42604d;border:1px solid #bdccb9;border-radius:5px;padding:7px;max-width:100%;cursor:pointer}
#venueTransition{position:fixed;inset:0;z-index:18;background:#233f36ed;display:grid;place-items:center;color:#f5f1dc;font-size:22px;letter-spacing:.15em;pointer-events:auto}
#walkJoystick{position:fixed;z-index:9;left:28px;bottom:45px;width:120px;height:120px;border-radius:50%;border:1px solid #ffffffc0;background:#f4f5e780;box-shadow:0 5px 30px #23443522;touch-action:none;user-select:none;display:none}
#walkJoystick i{position:absolute;left:50%;top:50%;width:48px;height:48px;border-radius:50%;background:#335b4bbd;border:1px solid #d8e2c8;transform:translate(-50%,-50%);pointer-events:none}#walkJoystick span{position:absolute;top:9px;width:100%;text-align:center;font-size:10px;color:#43624e}#walkJoystick b{position:absolute;bottom:-24px;width:100%;text-align:center;font-weight:400;font-size:11px;color:#36523e}
.inside-venue .camera-controls,.inside-venue .camera-hint{display:none!important}
@media(pointer:coarse){.inside-venue #walkJoystick{display:block}.inside-venue .role-panel{left:auto;right:14px;bottom:22px}.touch-help{display:block}.walk-help{display:none}}
@media(max-width:640px){#explorePanel{right:12px;top:66px;bottom:auto;width:184px;padding:12px}.explore-heading strong{font-size:16px}.explore-progress{font-size:11px;margin-top:10px}.visit-controls{margin-top:10px;padding-top:9px;gap:5px}.visit-controls select{width:91px}#explorePanel p{font-size:10px}#walkJoystick{left:23px;bottom:max(49px,env(safe-area-inset-bottom));width:112px;height:112px}}
@media(max-width:360px){.inside-venue .ability-panel{width:132px}.inside-venue #explorePanel{width:152px;padding:10px}.visit-controls label{display:none}}
@media(max-height:600px){#explorePanel{top:67px;right:14px;bottom:auto;width:220px;padding:11px 14px}.explore-heading>span{display:none}.explore-heading strong{font-size:15px}#explorePanel p{margin-top:6px}.visit-controls{margin-top:7px;padding-top:7px}.explore-progress{margin-top:8px}#walkJoystick{width:100px;height:100px;bottom:31px}}
/* Codex维护：手动入校复用现有键盘/摇杆，门外不显示室内计时与参观选项。 */
.gate-help{display:none}.gate-panel .gate-help{display:block}.gate-panel .explore-progress,.gate-panel .visit-controls{display:none}
.walking-gate .camera-controls,.walking-gate .camera-hint{display:none!important}
@media(pointer:coarse){.walking-gate #walkJoystick{display:block}.walking-gate .role-panel{left:auto;right:14px;bottom:22px}}
/* Codex维护：2026-09-06。卫星图校正后的校园地图，与实时3D共用坐标。 */
#campusMapPanel{position:fixed;right:24px;top:80px;bottom:84px;z-index:10;width:min(410px,calc(100vw - 28px));padding:15px;background:#f7f7ed;color:#385146;border:1px solid #fff;border-radius:10px;box-shadow:0 8px 36px #24403240;display:flex;flex-direction:column;touch-action:pan-y}
#campusMapPanel[hidden]{display:none}.map-heading{display:flex;justify-content:space-between;align-items:center;gap:10px}.map-heading strong{display:block;font-size:17px}.map-heading span{display:block;font-size:11px;margin-top:5px;color:#7b8775}.map-heading button{padding:7px 10px;border:1px solid #c5d1bd;border-radius:4px;background:#eef1e5;color:#3a5545;cursor:pointer}
#campusMapPanel svg{width:100%;min-height:0;flex:1;margin-top:12px}#campusMapPanel svg text{font:11px 'Microsoft YaHei',sans-serif;text-anchor:middle;fill:#2c4537;paint-order:stroke;stroke:#edf1e5;stroke-width:2.5px;stroke-linejoin:round}#campusMapPanel p{font-size:10px;color:#647763;margin:9px 0 0;text-align:center}
@media(max-width:640px){#campusMapPanel{right:14px;left:14px;top:65px;bottom:85px;padding:12px}.camera-controls{bottom:80px}.role-panel{max-width:calc(100vw - 28px)}.camera-controls button{padding:0 9px}}
