/* Extend the world past the existing bedroom without resizing its artwork. */
#roomWorld{--bedroom-width:max(112vw,177.68dvh);--passage-width:clamp(280px,32vw,500px);width:calc(var(--bedroom-width) + var(--passage-width))}
#roomCamera{width:var(--bedroom-width)}
.room-passage{position:absolute;left:var(--bedroom-width);top:0;width:var(--passage-width);height:100%;isolation:isolate;background:linear-gradient(90deg,#d4a28c,#b53629 17%,#8a211e 95%)}
.room-passage:before{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,#efc9b599,transparent 16%),linear-gradient(0deg,#58291e 0%,#a9714a 19%,transparent 19.3%);box-shadow:inset 18px 0 28px #54251e44}
.room-passage:after{content:'';position:absolute;inset:0 0 auto;height:5%;background:linear-gradient(#dbad95,#f7debc 35%,#c59d83 60%,#a87562);box-shadow:0 5px 7px #51191155;pointer-events:none}
.practice-door{position:absolute;left:13%;top:16%;width:74%;height:68%;padding:0;border:clamp(12px,1.6vw,23px) solid #eac9a2;border-bottom-width:5px;border-radius:48% 48% 2px 2px;overflow:hidden;background:#63392e;box-shadow:0 0 0 4px #b08566,inset 0 0 30px #28170c,0 10px 25px #3b1a1655;color:#fff1d3;touch-action:manipulation}
.practice-door:before{content:'';position:absolute;inset:0;background:linear-gradient(#4e231b33,#ba87472a 45%,#31170caa),url('practice/assets/practice-room/room.webp') 47% 50%/auto 100%;filter:brightness(.84);transition:filter .5s,scale 1s}
.practice-door:after{content:'';position:absolute;inset:0;box-shadow:inset 12px 0 18px #36200c88,inset -12px 0 18px #36200c55;pointer-events:none}
.practice-door:hover:before,.practice-door:focus-visible:before{filter:brightness(1.1);scale:1.035}
.practice-door small{position:absolute;left:0;right:0;top:30%;letter-spacing:.25em;font-size:10px;text-shadow:0 2px 5px #28120d}
.practice-door strong{position:absolute;left:0;right:0;top:39%;font:400 clamp(24px,2.4vw,38px) 'Songti SC',serif;letter-spacing:.2em;text-shadow:0 2px 8px #1d1009}
.practice-door span{position:absolute;left:0;right:0;bottom:13%;font:13px 'Songti SC',serif;letter-spacing:.1em;text-shadow:0 2px 8px #1d1009}
.next-room-hint{position:absolute;right:5%;bottom:8%;z-index:12;padding:12px 18px;border-radius:3px;background:#3c1d1859;backdrop-filter:blur(5px);font:15px 'Songti SC',serif;letter-spacing:.12em;color:#ffe8c9;animation:invitation-arrive 1s both}
#practiceRoot{z-index:6;background:#491723}
#practiceRoot .voice-caption{opacity:1;transform:none;max-width:none;border:0;backdrop-filter:none;margin:0;padding:8px}
#practiceRoot .voice-caption:empty{display:none}
#practiceRoot .scene-viewport{filter:none}
#practiceRoot .music-toggle,#practiceRoot .portrait-note{display:none}
#practiceRoot .return-room{position:absolute;left:max(22px,env(safe-area-inset-left));top:46%;z-index:22;padding:14px 12px;border:1px solid #efd6ad66;border-radius:3px;background:#381d17b5;backdrop-filter:blur(6px);font:13px 'Songti SC',serif;letter-spacing:.06em;color:#ffe8c9}
#practiceRoot:has(.hidden-viewer:not([hidden])) .return-room{visibility:hidden}
#experience[data-phase='practice']>#musicToggle{z-index:12}
#experience[data-phase='crossing']>#musicToggle{visibility:hidden}
.piano-intro-notes.name-tail>.intro-note{opacity:.38;translate:0 -32px;scale:.9;transition:opacity .5s,translate .5s,scale .5s}
.piano-chinese{position:absolute;left:12%;right:12%;bottom:3px;display:grid;grid-template-columns:repeat(4,1fr);color:#fff1d7;text-align:center;text-shadow:0 2px 5px #35180c,0 0 12px #e9bc79}
.piano-chinese span{font:400 clamp(22px,2.5vw,38px) 'Songti SC',serif;animation:chinese-name .45s ease-out both}
@keyframes chinese-name{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@media(max-height:500px){.practice-door{top:12%;height:74%}.next-room-hint{font-size:12px;padding:10px;bottom:8%}#practiceRoot .return-room{font-size:11px;left:12px;padding:10px 8px}.piano-chinese span{font-size:22px}}
@media(prefers-reduced-motion:reduce){.piano-chinese span{animation:none}.piano-intro-notes.name-tail>.intro-note{translate:0 -26px;transition:none}}
.piano-intro-notes.name-tail>.intro-note b{opacity:.4;transition:opacity .45s}

#auditionRoot{position:absolute;inset:0;z-index:15}#auditionRoot[hidden]{display:none!important}
#experience[data-phase='audition']>#musicToggle{visibility:hidden}
