/* Shared small-home styling for added scenes and the embedded salvage page. */
:root{--paper:#f5f2e8;--ink:#654e43;--warm-red:#c85f58;--warm-edge:#9e4741;--warm-mint:#85cbb8;--line:#aa9580;--soft-mint:#dfede2;--soft-red:#f1dbd0;--home-body:system-ui,-apple-system,'PingFang SC',sans-serif;--game-font:HomePixel,'PingFang SC',sans-serif;--home-shadow:inset 0 0 0 2px #fffaf0,1px 2px #77624c26}
.furnishing-hub,.travel-experience,.experience-result{color:var(--ink);font-family:var(--home-body)}
.furnishing-hub summary,.furnishing-hub h2,.furnishing-hub h3,.furnishing-hub button,.travel-experience summary,.travel-experience h2,.travel-experience h3,.travel-experience button,.food-shop-sign,.walk-place{font-family:var(--game-font);font-synthesis:none;font-weight:400;letter-spacing:0}
.furnishing-section,.furnishing-item,.travel-experience,.experience-result{background:var(--paper);border:1px solid var(--line);border-radius:0;box-shadow:var(--home-shadow)}
.furnishing-section{padding:12px;margin:12px 0}.furnishing-section>summary{font-size:14px;line-height:1.6;color:var(--ink)}.furnishing-section[open]>summary{border-bottom:1px dashed var(--line)}
.furnishing-hub h2,.travel-experience h2{font-size:16px;line-height:1.6}.furnishing-hub h3,.travel-experience h3{font-size:14px;line-height:1.6}.furnishing-state{color:#79674f}.furnishing-item .action{min-height:44px}
.quiet-snow,.quiet-shop,.quiet-walk,.food-visit,.retreat-scene{border:2px solid var(--line);border-radius:0;box-shadow:inset 0 0 0 2px #fffaf0}
.quiet-shop{background:var(--paper)}.shop-awning{background:repeating-linear-gradient(90deg,var(--soft-mint) 0 28px,#f7f2e6 28px 56px);border-color:#9fb6a0}.shop-shelf{border-color:#b19a81;color:#648b70}.quiet-shop .wrapping-gift{transform:none;box-shadow:2px 2px #77624c26;border-color:var(--line)}
.food-shop-sign{background:var(--soft-red);color:var(--ink);border:1px solid #c28a77;box-shadow:var(--home-shadow);font-size:14px}.walk-place{color:var(--ink);background:#f7f2e6e8;border:1px solid var(--line)}
#sea-salvage-dialog{background:var(--paper);border:3px solid var(--line);border-radius:0;box-shadow:4px 4px #77624c44}#sea-salvage-dialog iframe{background:var(--paper)}
body.salvage-page{background:var(--paper);color:var(--ink);font:14px/1.65 var(--home-body)}
.salvage-page main{gap:20px;padding:16px}.salvage-page h1,.salvage-page h2,.salvage-page button,.salvage-page a.exit,.salvage-page label,.salvage-page header small,.salvage-page .details>small{font-family:var(--game-font);font-weight:400;font-synthesis:none;letter-spacing:0}
.salvage-page h1{font-size:20px;line-height:1.6;margin:4px 0}.salvage-page #summary h2{font-size:18px}.salvage-page header small{font-size:12px;color:#79674f}.salvage-page header p{font-size:12px;color:#79674f}
.salvage-page .sea-panel{border:2px solid var(--line);box-shadow:3px 3px #77624c26;background:var(--paper)}.salvage-page .status{background:#f7f2e6;border-color:var(--line);color:var(--ink);font-family:var(--game-font);font-size:12px;min-height:62px}
.salvage-page .details{background:var(--paper);border:1px solid var(--line);border-radius:0;box-shadow:var(--home-shadow);padding:14px;margin:12px 0}.salvage-page .details>small{font-size:14px;color:var(--ink)}
.salvage-page button,.salvage-page a.exit{font-size:12px;min-height:44px;padding:9px 12px;background:#f7f2e6;border:1px solid var(--line);border-radius:0;color:var(--ink);box-shadow:var(--home-shadow)}.salvage-page button.primary{background:var(--soft-red);border-color:#c28a77;color:#8b4e57;box-shadow:inset 0 0 0 2px #fbf1e9,1px 2px #77624c26}
.salvage-page button:focus-visible,.salvage-page a:focus-visible,.salvage-page input:focus-visible{outline:2px solid var(--warm-red);outline-offset:3px}.salvage-page input{accent-color:#85b59d}.salvage-page .guide span,.salvage-page .basket span{background:var(--soft-mint);color:var(--ink);border-radius:0;border:1px solid #b4c8b5}.salvage-page .guide b{font-weight:400;color:#79674f}.salvage-page .hint,.salvage-page .controls-note,.salvage-page footer{color:#79674f}.salvage-page #summary{background:#f5f2e8f5}.salvage-page .skip{background:transparent;box-shadow:none;border-color:transparent;color:#79674f}
@media(max-width:720px){.salvage-page main{padding:12px;gap:12px}}
#frame-studio,#short-scene{background:var(--paper);color:var(--ink);border:3px solid var(--line);border-radius:0;box-shadow:3px 3px #77624c33;font:14px/1.65 var(--home-body);padding:16px}
#frame-studio h2,#short-scene h2{font:16px/1.6 var(--game-font)}
#frame-studio button,#short-scene button,#frame-studio label,#short-scene label{font-family:var(--game-font);font-size:12px;font-weight:400;font-synthesis:none;letter-spacing:0}
#frame-studio button,#short-scene button{border:1px solid var(--line);border-radius:0;background:#f7f2e6;color:var(--ink);box-shadow:var(--home-shadow);min-height:44px}
#frame-studio button[aria-pressed=true],#short-scene button[aria-pressed=true]{background:var(--soft-mint);border-color:#9fb6a0}
/* Birthday preparation and reminder cards share the home's typography and paper palette. */
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]){color:var(--ink);font-family:var(--home-body)}
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]) :is(h2,h3,h4,summary,button),.birthday-checklist strong{font-family:var(--game-font);font-weight:400;font-synthesis:none;letter-spacing:0}
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]) h2{font-size:16px;line-height:1.6}
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]) :is(h3,h4,summary),.birthday-checklist strong{font-size:14px;line-height:1.6}
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]) button{font-size:12px;min-height:44px}
.birthday-checklist article,.birthday-moments .postcard,.birthday-kitchen{border:1px solid var(--line);border-radius:0;background:var(--paper);box-shadow:var(--home-shadow);padding:12px;margin:12px 0}
.birthday-checklist summary{color:var(--ink);padding:10px 0}
.birthday-checklist details[open]>summary{border-bottom:1px dashed var(--line);margin-bottom:8px}
#modal[data-view="eventNotice"] .task-actions{background:var(--soft-mint);border:1px solid #a3b699;box-shadow:var(--home-shadow)}
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]) .sub{color:#79674f}
/* Include the birthday introduction and every preparation instruction, not only headings. */
#modal:is([data-view="birthday"],[data-view="eventNotice"],[data-view="visitors"]) #panel :is(p,li,small,label){font-family:var(--game-font);font-weight:400;font-synthesis:none;letter-spacing:0;font-size:12px;line-height:1.9}
#short-scene.practice-dance .practice-beat-lane{background:var(--soft-mint)}
#short-scene.practice-rap .practice-beat-lane{background:var(--soft-red)}
#short-scene.practice-dance .practice-beat-lane span{font-size:24px}
#short-scene.practice-rap .practice-beat-lane span{font-size:18px}
#scrapbook-dialog .memory-photo-set{font:12px/1.6 var(--game-font);min-height:44px;background:var(--soft-mint);color:var(--ink);border:1px solid var(--line);border-radius:0;padding:6px 12px;margin:6px 0}
/* Four small visit programmes use the same paper, mint and coral as the home. */
.visit-programme{border:1px solid var(--line);background:var(--paper);padding:12px;margin:12px 0;box-shadow:var(--home-shadow)}
.visit-programme p,.visit-programme small{font:12px/1.9 var(--game-font);font-synthesis:none}.visit-story{background:var(--soft-mint);padding:10px;border-left:3px solid #8ab29d}
.visit-stage{height:120px;position:relative;overflow:hidden;background:linear-gradient(#e6e8d9 0 65%,#d6bfa3 65%);border:2px solid var(--line)}
.visit-stage:before{content:'';position:absolute;left:22%;right:22%;height:22px;top:60px;background:#aa8060;box-shadow:0 4px #876a51}
.visit-prop{position:absolute;display:block;left:30%;top:43px;width:30px;height:18px;background:#85b39d;border:3px solid #688e7b;box-shadow:2px 2px #77624c33}.visit-prop.two{left:60%;background:#d29382;border-color:#b67565}
.visit-detail{position:absolute;bottom:8px;left:0;right:0;text-align:center;font:12px var(--game-font);color:var(--ink)}
.visit-game .visit-prop:before{content:'+';position:absolute;left:2px;top:-6px;color:#f5f2e8}.visit-game .visit-prop:after{content:'';position:absolute;right:3px;top:4px;width:4px;height:4px;background:#f5f2e8}
.visit-chat .visit-prop{width:18px;height:20px;background:#f5f2e8;border-color:#b29d7c}.visit-chat .visit-prop:before{content:'';position:absolute;right:-9px;top:2px;border:2px solid #b29d7c;width:6px;height:9px}.visit-chat .visit-prop:after{content:'';position:absolute;top:-18px;left:5px;width:2px;height:10px;background:#f5f2e8}
.visit-walk .visit-stage{background:linear-gradient(#dce9de 0 55%,#a9c4a2 55% 75%,#d9c7a7 75%)}.visit-walk .visit-stage:before{left:10%;top:20px;width:35px;height:35px;background:#82a987;box-shadow:155px 5px #99b996}
.visit-walk .visit-prop{top:65px;width:12px;height:15px;box-shadow:0 -9px #dfc5a4;border:0}.visit-walk .visit-prop.two{left:48%}
.visit-pets .visit-stage:before{top:64px;height:20px;background:#b4cab1;box-shadow:0 3px #91aa90}.visit-pets .visit-prop{width:25px;height:20px;background:#d9ba90;border-color:#ac8d6c;top:45px}.visit-pets .visit-prop:before{content:'';position:absolute;top:-8px;width:6px;height:9px;background:#ac8d6c;box-shadow:13px 0 #ac8d6c}.visit-pets .visit-prop:after{content:'';position:absolute;top:5px;left:4px;width:3px;height:3px;background:#665246;box-shadow:9px 0 #665246}
.playing .visit-prop{animation:visit-bounce 1s steps(3) infinite}.playing .visit-prop.two{animation-delay:.35s}.visit-chat.playing .visit-prop{animation:none}.visit-chat.playing .visit-prop:after{animation:visit-steam 1.4s steps(4) infinite}.visit-walk.playing .visit-prop{animation:visit-stroll 2s steps(5) infinite alternate}
@keyframes visit-bounce{50%{transform:translateY(-5px) rotate(-5deg)}}@keyframes visit-steam{to{transform:translateY(-8px);opacity:0}}@keyframes visit-stroll{to{transform:translate(18px,-3px)}}
@media(prefers-reduced-motion:reduce){.playing .visit-prop,.visit-chat.playing .visit-prop:after{animation:none}}
/* Touching poses share one atlas so the hand cannot drift away from Han's sleeve. */
.campus-actors .campus-touch{display:block;width:124px;height:88px;background-size:124px 88px;background-repeat:no-repeat;image-rendering:pixelated}
#memory-campus .campus-hand{display:none}
#memory-campus .campus-actors{transition:none;bottom:26px}
#memory-campus.pose-rail .campus-actors{bottom:20px}
#memory-campus.pose-rail .campus-pair{gap:8px}
#memory-campus .campus-camera{font-size:24px;right:10%;bottom:20px}
#memory-campus :is(h2,p,button,small){font-family:var(--game-font);font-synthesis:none;font-weight:400}

#memory-campus.pose-side .campus-pair{gap:8px}
/* Travel vignettes use the house palette and optional, non-blocking motion. */
.design-shop{height:245px}.souvenir-design-art{position:relative;width:230px;height:158px;margin:18px auto;background:var(--gift-paper,#f4e8cf);border:2px solid #bba68a;box-shadow:4px 5px #77695822}
.souvenir-miniature{position:absolute;left:29px;top:30px;width:76px;height:69px;background:var(--gift-base,#b18b65);border:3px solid #786653;border-bottom-width:9px;box-shadow:3px 4px #77695833}.souvenir-miniature:before{content:'';position:absolute;left:-8px;right:-8px;top:-12px;height:13px;background:var(--gift-trim,#84b5a1);border:2px solid #786653}.souvenir-miniature i{position:absolute;inset:12px 17px;background:var(--gift-paper,#f4e8cf);border:3px solid var(--gift-trim,#84b5a1)}.souvenir-miniature b{position:absolute;left:27px;top:21px;color:var(--gift-base,#b18b65);font:18px var(--game-font)}.souvenir-card{position:absolute;right:8px;top:47px;width:92px;font:13px/1.7 var(--game-font);padding:8px 3px;border-top:3px solid var(--gift-trim,#84b5a1);border-bottom:1px dashed var(--gift-base,#b18b65)}
.souvenir-colors{display:flex;gap:14px;flex-wrap:wrap;border:1px solid var(--line);padding:12px}.souvenir-colors label{display:grid;gap:6px;flex:1;min-width:60px}.souvenir-colors input{width:100%;height:38px;padding:2px;border:1px solid #b8a488;background:#f5eedb}.design-presets{display:flex;flex-wrap:wrap;gap:6px}
.retreat-scene{height:265px;background:linear-gradient(#eee3cc 0 64%,#c8b295 64%);isolation:isolate}.retreat-window{width:96px;height:83px;left:9%;top:24px;background:linear-gradient(#b8d9ce 0 60%,#91b4a2 60% 70%,#c5d7b0 70%)}.retreat-curtain{position:absolute;left:7%;top:20px;width:13px;height:100px;background:repeating-linear-gradient(90deg,#c38071 0 4px,#e0a895 4px 8px);box-shadow:104px 0 #c38071}.retreat-picture{position:absolute;right:12%;top:30px;width:44px;height:49px;border:5px solid #a58b67;background:#e7edda;color:#a7b988;text-align:center;padding-top:8px}.retreat-rug{position:absolute;bottom:7px;left:12%;width:76%;height:42px;background:#a6bea1;border:5px double #eee0c2;transform:skewX(-8deg)}.retreat-couch{left:25%;width:65%;height:66px;bottom:66px;border-radius:0;background:#afcbb3;border-color:#7f9b83;box-shadow:0 9px #91af95,0 14px #997f5d}.retreat-people{left:32%;bottom:98px;transform:none!important}.retreat-teatable{position:absolute;bottom:36px;left:20%;width:56%;height:30px;background:#d6b78d;border-top:6px solid #a78963;border-bottom:5px solid #af8b64}.retreat-cups{bottom:66px;left:33%;border:0;background:none;width:68px}.retreat-toy{left:75%;bottom:104px;width:18px;height:21px}.travel-emote{position:absolute;padding:5px 9px;background:#fff5de;border:2px solid #bca88b;color:#b67469;font:17px var(--game-font);z-index:5;animation:travel-bubble 7s infinite}.travel-emote:after{content:'';position:absolute;bottom:-5px;left:10px;width:5px;height:5px;background:#fff5de;border-right:2px solid #bca88b;border-bottom:2px solid #bca88b}.rest-emote{left:63%;top:72px}
.quiet-walk .walk-pair{left:40%;animation:stroll-pair 11s ease-in-out infinite alternate}.walk-pair .cast-travel{animation:stroll-step .85s steps(2,end) infinite}.walk-pair .han{animation-delay:-.4s}.walk-cloud{position:absolute;left:15%;top:45px;width:48px;height:8px;background:#f5eddb;box-shadow:12px -6px #f5eddb;animation:cloud-drift 24s linear infinite alternate}.walk-details{position:absolute;inset:0;pointer-events:none}.walk-details i{position:absolute;bottom:60px;width:24px;height:18px;background:#b88769;border-bottom:4px solid #a27c5e}.walk-details i:before{content:'';position:absolute;left:3px;bottom:15px;width:19px;height:17px;background:#8eae86;box-shadow:4px -4px #a9c291}.walk-details i:nth-child(1){left:7%}.walk-details i:nth-child(2){left:80%}.walk-details i:nth-child(3){left:89%;transform:scale(.7)}.city-macao .walk-distant{background:repeating-linear-gradient(90deg,#d9bc91 0 50px,#ba8978 50px 55px,#a9c4b2 55px 105px,#e6d7b8 105px 110px);border-top-color:#b58270}.city-macao .walk-distant:after,.city-beijing .walk-distant:after{content:'';position:absolute;inset:17px 10px 20px;background:repeating-linear-gradient(90deg,transparent 0 19px,#648f85 19px 34px,transparent 34px 55px);border-bottom:5px solid #b39270}.walk-emote{left:57%;bottom:121px;animation-delay:-3s}
.meal-scene{height:295px;isolation:isolate}.meal-scene .food-shop-sign{margin:12px;font-size:13px}.meal-window{position:absolute;left:7%;top:65px;width:58px;height:63px;border:6px solid #b39873;background:linear-gradient(90deg,#accabb 0 45%,#ede1c6 45% 53%,#accabb 53%)}.meal-menu{position:absolute;right:8%;top:70px;padding:8px 6px;border:3px solid #a88a65;background:#e4d8b6;color:#7c8d6d;font-size:12px}.meal-people{position:absolute;left:calc(50% - 85px);bottom:78px;display:flex;gap:30px}.meal-people .cast-travel{position:relative;left:auto;bottom:auto;animation:meal-nod 4s ease-in-out infinite}.meal-people .cast-travel.han{animation-delay:-2s}.meal-scene .food-table{height:66px;left:9%;right:9%;bottom:15px;border:4px solid #a98a64;background:#d5b78d;box-shadow:0 7px #9e825f}.meal-scene .food-serving{bottom:59px;width:96px;height:33px;border-radius:0;border:3px solid #c4b28f;background:#f3ead3;overflow:visible}.meal-food{position:absolute;bottom:3px;left:16px;animation:meal-eat 9s steps(3,end) forwards;transform-origin:center bottom}.meal-scene .food-steam{bottom:107px;animation:meal-eat 9s steps(3,end) forwards}.meal-cup{position:absolute;bottom:55px;width:16px;height:20px;border:2px solid #aa9473;background:#f2dfbb;z-index:3}.meal-cup.one{left:24%}.meal-cup.two{right:24%;background:#aac8b0}.meal-emote.one{left:26%;top:91px}.meal-emote.two{right:22%;top:88px;animation-delay:-3s}.meal-hand{position:absolute;bottom:94px;width:18px;height:9px;background:#f1d5b0;border:2px solid #b5997e;z-index:4;animation:meal-reach 4s ease-in-out infinite}.meal-hand.one{left:37%}.meal-hand.two{right:33%;animation-delay:-2s}
@keyframes meal-eat{0%,20%{clip-path:inset(0 0 0 0)}45%{clip-path:inset(0 30% 0 0)}75%{clip-path:inset(0 65% 0 0)}100%{clip-path:inset(0 100% 0 0)}}@keyframes meal-reach{0%,65%,100%{transform:translateY(-10px)}30%{transform:translateY(16px)}}@keyframes meal-nod{30%{transform:translateY(3px)}}@keyframes travel-bubble{0%,15%,85%,100%{opacity:0;transform:translateY(5px)}25%,70%{opacity:1;transform:translateY(0)}}@keyframes stroll-pair{to{transform:translateX(-35px)}}@keyframes stroll-step{50%{transform:translateY(-2px)}}@keyframes cloud-drift{to{transform:translateX(55px)}}
@media(prefers-reduced-motion:reduce){.meal-scene *,.quiet-walk *,.retreat-scene *{animation:none!important}.travel-emote{opacity:1}}
/* Calm, grounded gestures: the plate stays on the table and hands take turns. */
.meal-scene .meal-food svg{animation:none!important;transform:none!important}
.meal-people .cast-travel{animation:meal-breathe 7s ease-in-out infinite;transform-origin:center bottom}.meal-people .cast-travel.han{animation-delay:-3.5s}
.meal-hand{width:14px;height:7px;animation:meal-taste 7s ease-in-out infinite;transform-origin:left center}.meal-hand.two{animation-delay:-3.5s;--reach:-9px}.meal-hand.one{--reach:9px}.meal-hand:after{content:'';position:absolute;left:8px;top:-5px;width:17px;height:2px;background:#a68058;transform:rotate(-22deg);box-shadow:0 3px #a68058}
@keyframes meal-taste{0%,12%,75%,100%{transform:translate(0,0) rotate(0)}25%,34%{transform:translate(var(--reach),10px) rotate(12deg)}48%,61%{transform:translate(0,-7px) rotate(-18deg)}}
@keyframes meal-breathe{0%,42%,70%,100%{transform:rotate(0)}50%,60%{transform:rotate(1deg)}}
.retreat-people .cast-travel{animation:quiet-listen 9s ease-in-out infinite;transform-origin:center bottom}.retreat-people .han{animation-delay:-4.5s}@keyframes quiet-listen{0%,30%,70%,100%{transform:rotate(0)}42%,56%{transform:rotate(-2deg)}}
.walk-fence{position:absolute;left:0;right:0;bottom:63px;height:21px;background:repeating-linear-gradient(90deg,transparent 0 14px,#efe4c9 14px 18px,transparent 18px 28px);border-top:3px solid #e5d4b3;border-bottom:3px solid #b6a080}
.walk-flowers{position:absolute;inset:0;pointer-events:none}.walk-flowers i{position:absolute;left:6%;bottom:36px;width:4px;height:10px;background:#759767;box-shadow:8px 4px #7b9e6d,17px -2px #78996c}.walk-flowers i:before{content:'';position:absolute;left:-3px;top:-4px;width:9px;height:6px;background:#e5a492;box-shadow:8px 4px #f8e8b7,17px -2px #d98277}.walk-flowers i:nth-child(2){left:22%;bottom:53px}.walk-flowers i:nth-child(3){left:81%;bottom:41px}.walk-flowers i:nth-child(4){left:92%;bottom:20px}.walk-lantern{position:absolute;right:9%;bottom:68px;width:4px;height:70px;background:#887253}.walk-lantern:before{content:'';position:absolute;left:-6px;top:-4px;width:16px;height:19px;background:#f5d68f;border:3px solid #917353;box-shadow:0 0 13px #f5d68f66}.walk-variant-1 .walk-lantern:before{background:#ffe7a3;box-shadow:0 0 22px #ffe7a399}.walk-path{background:repeating-linear-gradient(0deg,transparent 0 20px,#baad8c66 20px 21px),#e3d6b6}.walk-pair{z-index:3}.walk-emote{z-index:4}
@media(prefers-reduced-motion:reduce){.meal-scene *,.retreat-scene *,.quiet-walk *{animation:none!important}}
/* Every game panel, including nested travel cards and form controls, shares the same typeface. */
:root{--home-body:HomePixel,'PingFang SC',sans-serif}
body,body :is(p,small,strong,b,em,span,div,section,article,aside,summary,label,legend,li,button,input,select,textarea,h1,h2,h3,h4,h5,a,td,th,figcaption){font-family:var(--game-font)!important;font-synthesis:none;letter-spacing:0}
body :is(strong,b,h1,h2,h3,h4,button){font-weight:400}
.personal-card-preview{position:relative;width:100%;aspect-ratio:600/384;overflow:hidden;border:6px solid #eee0c7;box-shadow:1px 3px #aa927544;margin:12px 0}.personal-card-preview>*{position:absolute;height:auto;max-width:none;object-fit:contain}.personal-card-preview img{border:3px solid #fff8eb}.personal-card-preview span{text-align:center;font-size:20px}.frame-upload{display:block;padding:12px;border:1px dashed #9ab69f;background:#e6eee0}.frame-upload input{display:block;width:100%;margin-top:8px}
.night-chapter{position:relative;background:#edf0e3;border:1px solid #b3baa2;padding:18px;line-height:1.9}.night-pair{position:relative;min-height:150px;overflow:hidden;background:linear-gradient(#718d96 0 66%,#d5be96 66%);border:3px solid #bda482;isolation:isolate}.night-pair:before{content:'';position:absolute;left:9%;top:14px;width:54px;height:59px;border:5px solid #e9d9b9;background:linear-gradient(90deg,transparent 46%,#e9d9b9 46% 53%,transparent 53%),linear-gradient(0deg,#a5b8ae 0 27%,#597783 27%);box-shadow:-8px 0 #c78371,8px 0 #c78371}.night-pair:after{content:'';position:absolute;left:28%;right:13%;bottom:16px;height:32px;background:#9db9a1;border:5px solid #7f9d86;border-bottom:8px solid #b48b64;z-index:-1}.night-pair .cast-travel{animation:quiet-listen 10s ease-in-out infinite;transform-origin:bottom center}.night-pair .han{animation-delay:-5s}.night-pair>span{color:#ffdf98}.morning-chapter{line-height:1.9}
@media(prefers-reduced-motion:reduce){.night-pair .cast-travel{animation:none!important}}
.night-chapter,.night-chapter h2,.night-chapter>small{color:#685b4d}.night-pair{padding-bottom:27px;box-sizing:border-box}.personal-card-preview{display:block;height:auto}
.travel-photo-canvas{display:block;width:100%;height:auto;border:5px solid #c1a885;image-rendering:pixelated;background:#e9ddbf}.photo-design-tools{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}.photo-design-tools label{display:grid;gap:6px}.photo-design-tools select{width:100%;font-size:12px}.travel-saved-photo{display:block;width:100%;max-width:480px;margin:12px 0;border:5px solid #f5e5c7}
/* A short shared first-bite story: approach, reach together, hesitate, then taste in turn. */
.meal-people .cast-travel.jimi{animation:first-bite-jimi 12s ease-in-out both}.meal-people .cast-travel.han{animation:first-bite-han 12s ease-in-out both;animation-delay:0}.meal-hand.one{animation:first-reach 12s ease-in-out both}.meal-hand.two{animation:first-reach 12s ease-in-out both;animation-delay:.3s}.meal-emote.one{animation:travel-bubble 7s 1.5s both}.meal-emote.two{animation:travel-bubble 7s 3s both}.meal-food{animation-duration:14s}
@keyframes first-bite-jimi{0%{transform:translate(-18px,3px)}12%{transform:translate(0,0)}23%{transform:translate(5px,0) rotate(4deg)}32%{transform:translate(0,0) rotate(-2deg)}44%{transform:rotate(2deg)}60%,100%{transform:none}}
@keyframes first-bite-han{0%{transform:translate(20px,3px)}14%{transform:translate(0,0)}24%{transform:translate(-5px,0) rotate(-4deg)}34%{transform:translate(2px,0)}57%{transform:rotate(-2deg)}75%,100%{transform:none}}
@keyframes first-reach{0%,12%{opacity:0;transform:translateY(0)}16%{opacity:1}25%{transform:translate(var(--reach),13px)}34%{transform:translate(0,2px)}46%{transform:translate(0,-8px) rotate(-12deg)}60%,100%{transform:translateY(0)}}
.walk-festoon{position:absolute;left:5%;right:5%;top:42px;height:29px;border-bottom:2px solid #a49171;border-radius:0 0 50% 50%;display:flex;justify-content:space-around;transform:rotate(-3deg)}.walk-festoon i{width:8px;height:11px;margin-top:23px;background:#f4d794;box-shadow:0 0 12px #f4d79480;animation:coastal-lights 9s infinite alternate}.walk-festoon i:nth-child(even){animation-delay:-4s}.walk-festoon i:nth-child(3){animation-delay:-7s}.walk-star-tree{position:absolute;left:7%;bottom:74px;width:7px;height:48px;background:#9c805f}.walk-star-tree:before{content:'';position:absolute;left:-27px;bottom:18px;width:61px;height:67px;background:#92bca0;clip-path:polygon(50% 0,62% 31%,98% 35%,73% 57%,81% 95%,50% 76%,18% 95%,26% 57%,1% 35%,37% 31%)}.walk-star-tree:after{content:'';position:absolute;left:1px;bottom:52px;width:5px;height:5px;background:#ffe2a0;box-shadow:-15px 17px #f3d299,17px 15px #efd6b0;animation:coastal-lights 9s infinite alternate}.walk-glints{position:absolute;left:30%;right:10%;bottom:84px;height:2px;background:#f8e6ad88;box-shadow:25px -11px #fff2cf88,-30px 10px #ead4c488;animation:coastal-reflection 8s ease-in-out infinite alternate}.city-beijing .walk-glints,.city-macao .walk-glints{display:none}
@keyframes coastal-lights{0%,20%{background:#f5d99b;box-shadow:0 0 10px #f5d99b66}55%{background:#dca7ad;box-shadow:0 0 14px #dca7ad66}100%{background:#a9d7c3;box-shadow:0 0 12px #a9d7c366}}@keyframes coastal-reflection{to{opacity:.35;transform:translateX(12px)}}
@media(prefers-reduced-motion:reduce){.meal-scene *,.quiet-walk *{animation:none!important}}
.hotspot[data-open="bedroomFrame"] span{display:block}.hotspot[data-open="bedroomFrame"]{background:transparent;border-color:transparent;box-shadow:none}.hotspot[data-open="bedroomFrame"]:focus-visible{outline:2px solid #bc7664}
.hotspot[data-open="bedroomFrame"]>*{visibility:visible}.hotspot[data-open="bedroomFrame"]::before,.hotspot[data-open="bedroomFrame"]::after{display:none}
#game .wall-photo-original{position:absolute;z-index:2;pointer-events:none;image-rendering:auto;max-width:none;border:0;box-shadow:none}
#game .wall-photo-original[hidden]{display:none!important}
/* Shared paper surfaces: warm cream, mint sections, coral actions. */
#modal{background:#fff8eb;border:3px solid #a58b75;box-shadow:inset 0 0 0 3px #fffdf4,4px 5px #4f62533b}
#modal .modal-head{background:#c97668;color:#fff8e9;border-bottom:3px solid #ecd5b9;padding:12px 14px;gap:12px}
#modal .modal-head h1{font-size:18px;line-height:1.5}
#modal .modal-head button{background:#fff1dc;border:1px solid #a97865;color:#885c50;box-shadow:0 2px #a65e53;flex-shrink:0}
#modal #tabs{background:#e6efdf;border-bottom:1px solid #b6c8ad}
#modal #tabs button{background:#e6efdf;color:#587260;line-height:1.5;padding:11px 5px}
#modal #tabs button.active{background:#c8dfca;color:#476450;box-shadow:inset 0 -3px #7f9d7c}
#modal #panel{padding:16px;scrollbar-color:#c5b69c #fff8eb}
#modal :is(.event,.tile,.review){background:#f7f0df;border-color:#d1bda1}
#modal :is(.event,.tile){box-shadow:inset 0 0 0 2px #fffbf0}
#modal .action{background:#edf2e5;border:1px solid #9eb499;color:#526c57;box-shadow:0 2px #c1cdb4;line-height:1.6}
#modal .action.primary{background:#c97668;border-color:#a35d51;color:#fff9eb;box-shadow:0 2px #a35d51}
#modal .actions{gap:10px;margin:16px 0}
#modal #feedback:not(:empty){background:#e2eddc;border-color:#b4c7a6;color:#53664c;padding:11px 14px}
#modal #feedback.error{background:#f5ded1;color:#924f42}
:is(#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene){background-color:#fff8eb;border-color:#a58b75;box-shadow:inset 0 0 0 2px #fffdf5,4px 5px #4f62533b}
:is(#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene)::backdrop{background:#344d426b}
:is(#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene) button:focus-visible{outline:3px solid #bc7161;outline-offset:3px}
.review-classroom.fixed-day-art{position:relative;isolation:isolate;height:208px;overflow:hidden;background:linear-gradient(#f0ebd8 0 67%,#d5be99 67%);border:3px solid #a98f72;margin:14px 0;padding:0}
.review-board{position:absolute;left:7%;top:14px;width:55%;height:65px;background:#628e79;border:5px solid #bba078;color:#fff2d9;padding:7px;text-align:center;font-size:12px;line-height:1.7;box-shadow:0 3px #cab18a}
.review-board span{font-size:9px;color:#deead7}
.review-window{position:absolute;right:7%;top:16px;width:22%;height:60px;border:5px solid #e7cfaa;background:linear-gradient(90deg,transparent 45%,#fff4dc 45% 55%,transparent 55%),linear-gradient(0deg,#abc9a4 0 25%,#c5e6dd 25%);box-shadow:-4px 0 #ca8070,4px 0 #ca8070}
.review-students{position:absolute;bottom:39px;left:calc(50% - 68px);width:136px;height:88px}
.review-students .campus-pair{display:flex;gap:0;position:relative;width:136px;height:88px;transform:none}
.review-students .campus-figure{display:block;width:68px;height:88px;flex:0 0 68px;animation:review-write 2.8s ease-in-out infinite}
.review-students .han{animation-delay:-1.4s}
.review-desks{position:absolute;bottom:32px;left:calc(50% - 77px);display:flex;gap:10px}
.review-desks i{width:72px;height:25px;background:#b78c65;border-top:6px solid #e6c79a;box-shadow:inset 7px 0 #d7b588,inset -7px 0 #d7b588}
.review-desks i:before{content:'';display:block;width:26px;height:9px;background:linear-gradient(90deg,#fff7de 48%,#bfab8a 48% 52%,#fff7de 52%);margin:-14px auto 0;transform:skewX(-10deg)}
.review-classroom>small{position:absolute;bottom:4px;left:0;right:0;font-size:10px;text-align:center;color:#715d48;background:#f9ecd6dd;padding:3px}
@keyframes review-write{50%{transform:translateY(2px)}}
@media(prefers-reduced-motion:reduce){.review-students .campus-figure{animation:none}}
@media(max-height:700px){#modal .modal-head{padding:7px 12px}#modal #panel{padding:12px}.review-classroom.fixed-day-art{height:190px}}
/* Firm pixel edges keep the warm paper panels from feeling weightless. */
:is(#modal,#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene) button{border:2px solid #90785f;border-radius:0;box-shadow:inset 1px 1px #fff8e7,0 3px #a28a6d;min-height:44px}
#modal .action{border:2px solid #7d947a;box-shadow:inset 1px 1px #fff9e8,0 3px #91a488}
#modal .action.primary{border:2px solid #94564b;box-shadow:inset 1px 1px #e9a894,0 3px #94564b}
#modal .modal-head button{border:2px solid #986a57;box-shadow:inset 1px 1px #fff9e8,0 3px #a65e53}
#modal #tabs{gap:6px;padding:8px}
#modal #tabs button{border:2px solid #91a88a;box-shadow:inset 1px 1px #fff9e8,0 2px #a5b79a}
#modal #tabs button.active{border-color:#658769;box-shadow:inset 0 -2px #8cae8b,0 2px #829b78}
:is(#modal,#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene) button:active:not(:disabled){box-shadow:inset 1px 2px #78634b33;translate:0 2px}
/* Short reading panels fit their content; long content remains scrollable. */
#modal.content-sized:not(.onboarding){top:50%;bottom:auto;transform:translateY(-50%);height:auto;max-height:calc(100% - 220px)}
#modal.content-sized #panel{flex:0 1 auto;min-height:0}
#modal #panel{font-size:14px;line-height:1.65}
#modal #panel :is(p,li){font-size:14px;line-height:1.65;margin-top:7px;margin-bottom:9px}
#modal #panel .sub{font-size:13px;line-height:1.6}
#modal #panel h2{font-size:16px;line-height:1.5;margin-top:4px}
#modal #panel h3{font-size:14px;line-height:1.5}
#modal #panel .action{font-size:13px;white-space:normal}
#modal #feedback{font-size:14px;line-height:1.75;max-height:110px}
#modal #panel>.action:last-child{margin-bottom:5px}
.care-conversation{margin:10px 0;padding:8px;background:#edf0e2;border:2px solid #b7c4a5;outline-offset:3px}
.care-chat{display:flex;align-items:flex-start;gap:8px;margin:10px 0}
.care-chat.han{flex-direction:row-reverse}
.care-chat-avatar{width:44px;height:48px;flex:0 0 44px;overflow:hidden;background:#fff1dc;border:2px solid #a59072;position:relative}
.care-chat-avatar .campus-pair{position:absolute;top:0;left:-14px;display:flex;width:136px;height:88px;gap:0;transform:none}
.care-chat-avatar .campus-figure{display:block;width:68px;height:88px;flex:0 0 68px;background-repeat:no-repeat}
.care-chat.han .care-chat-avatar .campus-pair{left:-82px}
.care-chat-content{max-width:calc(100% - 52px);min-width:0}
.care-chat-content strong{display:block;font-size:12px;color:#74644e;margin-bottom:3px}
.care-chat.han strong{text-align:right}
#modal #panel .care-chat-content p{position:relative;margin:0;padding:8px 10px;background:#f4d8cf;border:2px solid #b9796c;box-shadow:0 2px #d4a293;color:#68473f;font-size:14px;line-height:1.6;overflow-wrap:anywhere}
#modal #panel .care-chat.han p{color:#425d45;background:#dcead5;border-color:#99b28f;box-shadow:0 2px #b4c5a3}
.care-chat-content p:before{content:'';position:absolute;left:-7px;top:12px;width:8px;height:8px;background:#f4d8cf;border-left:2px solid #b9796c;border-bottom:2px solid #b9796c;transform:rotate(45deg)}
.care-chat.han p:before{left:auto;right:-7px;background:#dcead5;border:0;border-top:2px solid #99b28f;border-right:2px solid #99b28f}
@media(max-height:700px){#modal.content-sized:not(.onboarding){max-height:calc(100% - 150px)}}

#modal[data-view="care"] .postcard{padding:12px}
#modal[data-view="care"] .care-chat.jimi .care-chat-avatar{background:#f4d8cf;border-color:#b9796c}
#modal[data-view="care"] .care-chat.han .care-chat-avatar{background:#dcead5;border-color:#99b28f}
#modal[data-view="care"] .care-chat.jimi strong{color:#9b584d}
#modal[data-view="care"] .care-chat.han strong{color:#587a55}
/* Give reading and choices the usable screen instead of reserving space for inert navigation. */
#modal:not(.onboarding):not([data-view="arcade"]){top:max(52px,calc(env(safe-area-inset-top) + 12px));bottom:max(18px,env(safe-area-inset-bottom))}
#modal.content-sized:not(.onboarding){top:50%;bottom:auto;max-height:calc(100% - 80px);transform:translateY(-50%)}
#modal .modal-head{padding:7px 12px}
#modal #panel{padding:12px}
#modal #panel :is(h2,h3){margin-bottom:7px}
#modal #panel :is(.postcard,.event,.tile){padding:10px;margin-top:8px;margin-bottom:10px}
#modal #panel .actions{margin:10px 0;gap:8px}
#modal #panel .action{padding:7px 10px;min-height:44px}
#modal #tabs{padding:5px 7px;gap:5px}
#modal #tabs button{padding:6px 4px}
#modal #panel .row{padding:8px 0}
#modal #panel .panel-secondary{margin:8px 0;border:1px solid #c5c8af;background:#f1f1e3;padding:7px 9px}
#modal #panel .panel-secondary>summary{cursor:pointer;font-size:13px;line-height:1.65;min-height:28px;display:list-item}
#modal #panel .panel-secondary[open]>summary{margin-bottom:6px}
@media(max-height:600px){#modal:not(.onboarding):not([data-view="arcade"]){top:max(12px,env(safe-area-inset-top));bottom:max(12px,env(safe-area-inset-bottom))}#modal.content-sized:not(.onboarding){top:50%;bottom:auto;max-height:calc(100% - 28px)}}
/* The camera fits a phone: preview, compact controls, and shutter stay together. */
#short-scene.short-photo{width:min(96vw,520px);max-height:calc(100dvh - 20px);padding:10px;overflow:auto}
#short-scene.short-photo header{gap:8px;margin-bottom:6px}
#short-scene.short-photo h2{font-size:15px}
#short-scene.short-photo .travel-photo-canvas{position:static;width:100%;height:auto;max-height:24dvh;object-fit:contain;border-width:3px}
#short-scene.short-photo p{font-size:12px;line-height:1.5;margin:6px 0}
#short-scene.short-photo .photo-design-tools{gap:6px 10px;margin:8px 0}
#short-scene.short-photo .photo-design-tools label{font-size:12px;gap:2px}
#short-scene.short-photo :is(select,input){min-width:0;width:100%;margin:0;min-height:30px;padding:3px}
#short-scene.short-photo .short-actions{position:sticky;bottom:0;background:#fff8eb;padding-top:6px;gap:6px;z-index:2}
#short-scene.short-photo .short-actions button{flex:1;padding:6px;font-size:12px}
#short-scene.short-photo [data-short=shutter]{background:#c97668;color:#fff8eb;border-color:#94564b}
.destination-scenery{position:absolute;left:0;bottom:0;width:100%;height:100%;pointer-events:none}
.quiet-walk>.destination-scenery{top:63px;bottom:auto;height:105px;z-index:1}
.quiet-walk .walk-star-tree{display:none}.quiet-walk.city-singapore .walk-star-tree{display:block}
.quiet-walk.city-beijing{background:#d9e1d3}.quiet-walk.city-beijing .walk-path{background:repeating-linear-gradient(0deg,#d5d0bd 0 18px,#b5b6aa 18px 20px)}
.quiet-walk.city-macao .walk-path{background:repeating-linear-gradient(135deg,#f1e5c9 0 12px,#a4aba0 12px 15px,#f1e5c9 15px 27px)}
.quiet-walk.city-hainan{background:linear-gradient(#bde3dc 0 52%,#77b8b3 52% 73%,#ecd9ad 73%)}
.quiet-walk.city-singapore{background:linear-gradient(#d8e9d6 0 55%,#9fbf9c 55%)}
.quiet-walk.city-shenzhen{background:linear-gradient(#c8e2de 0 54%,#7caeb5 54% 73%,#d4d7c6 73%)}
.retreat-window,.meal-window{overflow:hidden}.retreat-window .destination-scenery{height:70%;z-index:0}
.retreat-scene.city-hainan{background:linear-gradient(#e8efd8 0 70%,#d8c698 70%)}
.retreat-scene.city-hainan .retreat-couch{background:#c7d7aa;border-color:#9bab80}.retreat-scene.city-hainan .retreat-curtain{background:#d8ae83}
.retreat-scene.city-singapore{background:linear-gradient(#dce8dc 0 70%,#d5c4a5 70%)}
.retreat-scene.city-singapore .retreat-couch{background:#89b4a7;border-color:#70988b}
.retreat-scene.city-macao{background:repeating-linear-gradient(90deg,#f1e5d1 0 24px,#e6d5c0 24px 26px)}
.retreat-scene.city-macao .retreat-couch{background:#d6a095;border-color:#b57e72}
.retreat-scene.city-beijing{background:linear-gradient(#e6e0cf 0 70%,#baa68a 70%)}
.retreat-scene.city-beijing .retreat-window{border-color:#916a57}.retreat-scene.city-beijing .retreat-couch{background:#c98d7c;border-color:#a97665}
.retreat-scene.city-shenzhen .retreat-window{width:37%;background:#bad9da}.retreat-scene.city-qingdao .retreat-couch{background:#9fbfc2;border-color:#7c9e9b}
.retreat-cups i:first-child,.meal-scene .meal-cup.one{background:#cd786b;border-color:#a46054}
.retreat-cups i:last-child,.meal-scene .meal-cup.two{background:#98cbb6;border-color:#749e89}
.meal-scene{height:340px}.meal-scene .food-shop-sign{margin:8px 12px;font-size:12px}
.meal-scene .meal-dialogues{position:absolute;top:43px;left:7%;right:7%;display:flex;gap:12px;z-index:6;align-items:flex-start}
#modal #panel .meal-dialogues p{position:relative;flex:1;min-width:0;margin:0;padding:7px 8px;font-size:12px;line-height:1.5;background:#f4d8cf;border:2px solid #b9796c;color:#68473f;box-shadow:0 2px #bd8e75}
#modal #panel .meal-dialogues .han{background:#dcead5;border-color:#99b28f;color:#425d45}
.meal-dialogues b{display:block;font-size:11px;margin-bottom:3px}.meal-dialogues p:after{content:'';position:absolute;bottom:-7px;left:40%;width:9px;height:9px;background:inherit;border-right:2px solid #b9796c;border-bottom:2px solid #b9796c;transform:rotate(45deg)}.meal-dialogues .han:after{border-color:#99b28f}
.meal-scene .meal-window{top:177px;height:49px;width:22%}.meal-scene .meal-menu{top:180px;font-size:10px;padding:5px}
.meal-scene.city-singapore{background:linear-gradient(#ecddbf 0 74%,#bdc9b1 74%)}
.meal-scene.city-singapore .food-shop-sign{background:repeating-linear-gradient(90deg,#d9b396 0 20px,#f8e7c6 20px 40px)}
.meal-scene.city-hainan{background:linear-gradient(#e1edd1 0 74%,#d5c391 74%)}.meal-scene.city-hainan .food-table{background:#d6bc86}
.meal-scene.city-macao{background:repeating-linear-gradient(90deg,#f3e2cb 0 24px,#d5e3d3 24px 26px)}.meal-scene.city-macao .food-table{background:repeating-linear-gradient(90deg,#d6a295 0 13px,#f0c6ae 13px 26px)}
.meal-scene.city-beijing{background:linear-gradient(#e6dbca 0 74%,#b4a38b 74%)}.meal-scene.city-beijing .food-shop-sign{background:#c68170;color:#fff3d7}
.meal-scene.city-qingdao{background:linear-gradient(#d5e6e0 0 74%,#c5c6ac 74%)}.meal-scene.city-shenzhen{background:linear-gradient(#e7eee0 0 74%,#b9cdc0 74%)}
.meal-noodles .meal-hand{animation:noodle-lift 6s ease-in-out infinite}.meal-noodles .meal-hand.two{animation-delay:-3s}
.meal-noodles .meal-hand:before{content:'';position:absolute;left:12px;top:1px;width:5px;height:15px;border-left:2px solid #e5c787;border-right:2px solid #e5c787;animation:noodle-strand 6s infinite}
.meal-spoon .meal-hand{animation:soup-taste 7s ease-in-out infinite}.meal-spoon .meal-hand.two{animation-delay:-3.5s}
.meal-spoon .meal-hand:after{width:14px;height:3px;background:#d3c7a4;box-shadow:none;transform:rotate(-15deg)}.meal-spoon .meal-hand:before{content:'';position:absolute;left:19px;top:-6px;width:6px;height:5px;background:#f4e3ba;border:1px solid #bba782}
.meal-share .meal-hand{animation:share-bite 8s ease-in-out infinite}.meal-share .meal-hand.two{animation-delay:-4s}.meal-share .meal-hand:after{width:8px;height:6px;background:#e9bd75;border:1px solid #b28a56;box-shadow:none}
@keyframes noodle-lift{0%,75%,100%{transform:translateY(5px)}35%,55%{transform:translateY(-13px)}}
@keyframes noodle-strand{0%,75%,100%{height:4px}35%{height:19px}55%{height:5px}}
@keyframes soup-taste{0%,80%,100%{transform:translate(0,10px)}35%{transform:translate(var(--reach),7px)}55%,65%{transform:translate(0,-5px) rotate(-15deg)}}
@keyframes share-bite{0%,15%,85%,100%{transform:translate(0,3px)}35%{transform:translate(var(--reach),11px)}55%,65%{transform:translate(0,-9px)}}
@media(prefers-reduced-motion:reduce){.meal-scene *,.meal-scene *:before{animation:none!important}}
/* A shared room for greetings, conversation and goodbyes, using the resident atlas. */
.visit-group-scene{position:relative;height:292px;overflow:hidden;isolation:isolate;background:linear-gradient(#f0ead7 0 66%,#dbc49f 66%);border:3px solid #a58b70;margin:10px 0}
.visit-room-window{position:absolute;left:10%;top:18px;width:54px;height:51px;background:linear-gradient(90deg,transparent 45%,#f7e7ca 45% 54%,transparent 54%),linear-gradient(#b6dcd2 70%,#a4bd95 70%);border:5px solid #c29e7b;box-shadow:-5px 0 #c97d6d,5px 0 #c97d6d}
.visit-room-door{position:absolute;right:6%;top:17px;width:47px;height:90px;background:#9ab59b;border:5px solid #b59b77;box-shadow:inset 0 0 0 3px #cad7b7}
.visit-room-door:after{content:'';position:absolute;right:5px;top:44px;width:4px;height:4px;background:#f0d199}
.visit-room-sofa{position:absolute;left:18%;right:18%;bottom:54px;height:55px;background:#a9cbb3;border:5px solid #779f88;box-shadow:0 6px #b58d69}
.visit-room-sofa:before{content:'';position:absolute;left:12px;top:8px;width:22px;height:21px;background:#cc8272;box-shadow:105px 0 #eaddb8}
.visit-room-rug{position:absolute;bottom:13px;left:9%;right:9%;height:52px;background:#c6d6b5;border:4px double #fff0cf}
.visit-room-table{position:absolute;bottom:20px;left:35%;width:30%;height:25px;background:#d9b88c;border-top:5px solid #efd6b1;z-index:3;box-shadow:0 4px #aa8665}
.visit-room-table i{position:absolute;left:18%;top:-13px;width:10px;height:10px;background:#ca796c;border:1px solid #a65f54}.visit-room-table i+i{left:auto;right:18%;background:#99cbb5;border-color:#759d87}
.visit-person{position:absolute;left:calc(2% + var(--person)*24%);bottom:48px;width:23%;height:88px;z-index:2}
.visit-person-sprite{display:block;width:68px;height:88px;position:absolute;left:50%;bottom:0;transform:translateX(-50%);background-repeat:no-repeat;background-size:408px 88px;image-rendering:pixelated}
.visit-speech{position:absolute;bottom:94px;left:0;right:0;padding:6px 5px;background:#f5e9d1;border:2px solid #ba9e7f;font-size:11px;line-height:1.55;box-shadow:0 2px #b69c7d;animation:visit-say .4s both;animation-delay:calc(var(--person)*.45s)}
.visit-speech b{display:block;font-size:10px;margin-bottom:3px}.visit-speech:after{content:'';position:absolute;bottom:-6px;left:40%;width:8px;height:8px;background:inherit;border-right:2px solid #ba9e7f;border-bottom:2px solid #ba9e7f;transform:rotate(45deg)}
.visit-person.jimi .visit-speech{background:#f4d8cf;border-color:#b9796c;color:#754c42}.visit-person.han .visit-speech{background:#dcead5;border-color:#99b28f;color:#425d45}
.phase-arrival .guest{animation:visit-enter 2.3s ease-out both}.phase-ending .guest .visit-person-sprite{animation:visit-leave 2.8s ease-in-out both}
.phase-arrival .visit-room-door,.phase-ending .visit-room-door{background:#70877b;box-shadow:inset 8px 0 #abc3a6}
.phase-chat .visit-person-sprite{animation:visit-listen 4s ease-in-out infinite;animation-delay:calc(var(--person)*-.8s)}
.theme-walk.phase-chat .visit-room-rug{background:#b1c69b}
@keyframes visit-enter{from{transform:translateX(130px);opacity:0}20%{opacity:1}to{transform:none;opacity:1}}
@keyframes visit-leave{0%,45%{transform:translateX(-50%);opacity:1}100%{transform:translateX(100px);opacity:0}}
@keyframes visit-say{from{opacity:0;translate:0 3px}to{opacity:1;translate:0 0}}
@keyframes visit-listen{50%{transform:translate(-50%,2px)}}
@media(prefers-reduced-motion:reduce){.visit-group-scene *{animation:none!important}}
/* Separate distant skyline, water and foreground path; no buildings floating on hills. */
.quiet-walk .walk-distant,.quiet-walk .walk-landmark{display:none}
.quiet-walk>.destination-scenery{top:auto;bottom:116px;height:84px;opacity:.85}
.quiet-walk:before{content:'';position:absolute;left:0;right:0;bottom:80px;height:40px;background:#a8c9b8;border-top:3px solid #d9e4c7}
.quiet-walk.city-qingdao>.destination-scenery{left:3%;width:53%;height:54px;bottom:120px;opacity:.7}
.quiet-walk.city-qingdao:before{background:repeating-linear-gradient(0deg,#83b9bc 0 10px,#a2cbd0 10px 12px);height:55px}
.quiet-walk.city-shenzhen>.destination-scenery{height:70px;bottom:125px;opacity:.65}
.quiet-walk.city-shenzhen:before{background:#8bbec4;height:53px}
.quiet-walk.city-hainan>.destination-scenery{height:118px;bottom:88px;opacity:1}
.quiet-walk.city-hainan:before{height:60px;background:linear-gradient(#84c8c4 60%,#e5e8c7 60% 66%,#edd8aa 66%)}
.quiet-walk.city-macao>.destination-scenery{height:96px;bottom:95px;opacity:1}
.quiet-walk.city-macao:before{background:#d4ccb2;border-color:#b8b6a2}
.quiet-walk.city-beijing>.destination-scenery{height:84px;bottom:99px;opacity:1}
.quiet-walk.city-beijing:before{background:#c8c8b8;border-color:#a2afa2}
.quiet-walk.city-singapore>.destination-scenery{height:92px;bottom:115px}
.quiet-walk.city-singapore:before{background:#a4bf93;border-color:#cadbb4}
.quiet-walk .walk-festoon{z-index:2}.quiet-walk .walk-fence{z-index:2}.quiet-walk .walk-details{z-index:2}
/* Speech follows the first taste and stays readable, close to each speaker. */
.meal-scene .meal-dialogues{top:auto;bottom:174px;left:11%;right:11%;gap:10px}
#modal #panel .meal-dialogues p{border-radius:12px 12px 12px 4px;box-shadow:0 3px #9d816c30;animation:meal-speech-pop .45s 1s both;transform-origin:center bottom}
#modal #panel .meal-dialogues p.han{border-radius:12px 12px 4px 12px;animation-delay:2.2s}
.meal-dialogues p:after{left:45%;width:7px;height:7px;bottom:-6px}
@keyframes meal-speech-pop{from{opacity:0;transform:translateY(5px) scale(.92)}70%{opacity:1;transform:translateY(-1px) scale(1.02)}to{opacity:1;transform:none}}
/* A lamp-lit sofa nook: they settle together and drift off under a blanket. */
.night-pair{height:205px;min-height:205px;padding-bottom:38px;gap:1px;background:linear-gradient(#7f9992 0 68%,#c8b390 68%);align-items:end}
.night-pair:before{left:8%;top:16px;width:68px;height:64px;background:linear-gradient(#485f75 70%,#687f7b 70%);border-color:#dcc8a4}
.night-window-view{position:absolute;left:calc(8% + 5px);top:22px;width:68px;height:59px;overflow:hidden;opacity:.55}
.night-window-view .destination-scenery{height:65%;filter:brightness(.6)}
.night-pair:after{left:22%;right:18%;bottom:24px;height:65px;background:#b1c6a8;border:5px solid #789780;border-bottom:9px solid #a58a69}
.night-lamp{position:absolute;right:12%;top:44px;width:5px;height:94px;background:#9b7d5d;box-shadow:0 0 35px 14px #ffde9d25}
.night-lamp:before{content:'';position:absolute;left:-15px;top:-3px;width:35px;height:24px;background:#f6dfa6;border:3px solid #d4b985;box-shadow:0 0 28px 13px #ffdf9e45;clip-path:polygon(18% 0,82% 0,100% 100%,0 100%)}
.night-lamp:after{content:'';position:absolute;bottom:0;left:-10px;width:25px;height:5px;background:#9b7d5d}
.night-books{position:absolute;left:9%;bottom:26px;width:29px;height:30px;background:repeating-linear-gradient(90deg,#cd8d7a 0 6px,#e8d5ae 6px 10px,#9eb99c 10px 15px);border:4px solid #b29876;border-top-width:7px}
.night-tea{position:absolute;bottom:9px;right:12%;width:62px;height:17px;background:#b79a75;border-top:4px solid #e2c6a0}
.night-tea i{position:absolute;left:10px;top:-13px;width:9px;height:9px;background:#ce8574;border:1px solid #a66959}.night-tea i+i{left:34px;background:#9bc6b0;border-color:#739884}
.night-pair .cast-travel{z-index:2;transform-origin:50% 60%}
.night-pair .jimi{animation:night-lean-jimi 8s ease-in-out both}
.night-pair .han{animation:night-lean-han 8s ease-in-out both;animation-delay:0}
.night-blanket{position:absolute;left:calc(50% - 56px);bottom:33px;width:112px;height:31px;z-index:3;background:repeating-linear-gradient(90deg,#bf887b 0 13px,#dca99a 13px 16px);border:3px solid #ad786b;border-bottom:5px solid #e7c3a5;border-radius:5px 5px 0 0}
.night-pair .night-sleep{right:28%;top:38px;font-size:14px;animation:night-sleep-in 8s both}
@keyframes night-lean-jimi{0%,25%{transform:none}70%,100%{transform:translateX(6px) rotate(10deg)}}
@keyframes night-lean-han{0%,30%{transform:none}75%,100%{transform:translateX(-6px) rotate(-10deg)}}
@keyframes night-sleep-in{0%,65%{opacity:0}100%{opacity:1}}
@media(prefers-reduced-motion:reduce){.night-pair .cast-travel,#modal #panel .meal-dialogues p,.night-pair .night-sleep{animation:none!important}.night-pair .jimi{transform:translateX(6px) rotate(10deg)}.night-pair .han{transform:translateX(-6px) rotate(-10deg)}}
#modal[data-view="trip"] .cast-travel{background-image:var(--outing-atlas,var(--resident-atlas));background-size:var(--outing-atlas-width,408px) 88px}
#modal[data-view="trip"] .cast-travel.jimi{background-position:var(--outing-jimi,-68px) 0}
#modal[data-view="trip"] .cast-travel.han{background-position:var(--outing-han,0px) 0}
#modal[data-view="trip"] .night-pair .cast-travel{background-image:var(--resident-atlas);background-size:408px 88px}
#modal[data-view="trip"] .night-pair .jimi{background-position:-68px 0}#modal[data-view="trip"] .night-pair .han{background-position:0 0}
.night-pair:after{background:#cfbdac;border-color:#a88f7b;border-bottom-color:#937b65}
.night-blanket{background:repeating-linear-gradient(90deg,#f0dfc5 0 13px,#dbbea3 13px 16px);border-color:#c2a589;border-bottom-color:#f6e7ce}
.light-boat .light-support{display:none!important}.light-boat .light-actors{animation:none!important;transform:none}
.light-seaShoot .light-backdrop{background:linear-gradient(#c9e6e5 0 45%,#8fc6cf 45% 68%,#c7dfd5 68% 72%,#ead8b5 72%)}
.light-seaShoot .light-playground:before{content:'';position:absolute;left:0;right:0;bottom:0;height:32%;background:repeating-linear-gradient(0deg,#d6bd95 0 20px,#bea480 20px 22px);border-top:5px solid #eee2c6}
.light-seaShoot .light-playground:after{content:'';position:absolute;left:5%;bottom:21%;width:30px;height:18px;background:#c38b72;box-shadow:0 -10px #93b49a,5px -17px #a7c4a2;pointer-events:none}
.light-seaShoot .coast-sail{left:72%;top:37%;transform:scale(.7);opacity:.75}
.light-seaShoot .light-frame{border:0!important}.light-seaShoot .light-star{display:none}
#modal #panel .journey-today{background:#e4eddb;border:2px solid #97ae8c;border-left:6px solid #c68070;padding:12px;text-align:left;margin:10px 0}
#modal #panel .journey-today h2{margin:5px 0;color:#597552}
#modal #panel .journey-today p{font-size:12px;margin:4px 0;color:#75664e}
#modal .travel-days{display:flex;gap:6px;margin:10px 0}
#modal .travel-days span{flex:1;text-align:center;padding:7px 4px;background:#eee5d4;border:1px solid #c7b89b;font-size:12px}
#modal .travel-days .today{background:#c67c6d;color:#fff8eb;border-color:#a86154}
#modal #panel .journey-option{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px;margin:8px 0;background:#fff7e7;border:2px solid #c7b493;box-shadow:0 2px #d9c9ac}
#modal .journey-option>div{min-width:0}.journey-option small{display:block;font-size:11px;color:#88765b;margin-top:4px}
#modal #panel .journey-option .action{flex-shrink:0;padding:6px 9px}
/* A furnished resting corner, shared by the experience and its keepsake. */
.retreat-scene{height:280px;background:linear-gradient(#f2e9d9 0 67%,#ddc6a6 67%);box-shadow:inset 0 0 0 4px #fff5e4}
.retreat-scene:before{content:"";position:absolute;inset:67% 0 0;background:repeating-linear-gradient(0deg,transparent 0 17px,#b79a7826 18px 19px);pointer-events:none}
.retreat-couch:after{content:"";position:absolute;inset:10px 10px 3px;border-top:2px solid #ffffff65;background:linear-gradient(90deg,transparent 49%,#617f7333 50%,transparent 51%)}
.retreat-memory .rest-emote{top:78px;bottom:auto;left:43%;font-size:12px;border-radius:12px 12px 12px 3px;padding:6px 9px}
.retreat-lamp{position:absolute;right:8%;top:88px;width:5px;height:104px;background:#937358;box-shadow:0 0 35px 19px #ffe4a542}
.retreat-lamp:before{content:"";position:absolute;left:-17px;top:0;width:39px;height:27px;background:#f6ddb0;border:2px solid #bba07a;clip-path:polygon(16% 0,84% 0,100% 100%,0 100%)}
.retreat-lamp:after{content:"";position:absolute;bottom:0;left:-10px;width:26px;height:5px;background:#937358}
.retreat-pillow{position:absolute;left:27%;bottom:91px;width:25px;height:24px;background:repeating-linear-gradient(90deg,#cb7f73 0 5px,#e4a899 5px 7px);border:2px solid #ad6b60;border-radius:5px;transform:rotate(-8deg)}
.retreat-blanket{position:absolute;right:14%;bottom:65px;width:28px;height:36px;background:repeating-linear-gradient(0deg,#eedcc2 0 6px,#c78a7b 6px 8px);border-bottom:4px dashed #d2b391}
.retreat-plant{position:absolute;left:6%;bottom:55px;width:23px;height:24px;background:#cb8670;border:3px solid #a96858;border-top:5px solid #e7b296}
.retreat-plant:before,.retreat-plant:after{content:"";position:absolute;bottom:20px;width:20px;height:30px;background:#83a98a;border:2px solid #648a70;border-radius:75% 0 75% 0}
.retreat-plant:before{left:-8px;transform:rotate(-35deg)}.retreat-plant:after{left:8px;transform:rotate(20deg)}
.retreat-book{position:absolute;bottom:61px;left:52%;width:37px;height:13px;background:repeating-linear-gradient(0deg,#f7efd9 0 3px,#d4c3a5 3px 4px);border:2px solid #bd776d;transform:skewX(-12deg)}
.retreat-book:after{content:"";position:absolute;left:17px;top:0;height:10px;border-left:2px solid #c7b79b}
.retreat-memory .retreat-people .jimi{animation:rest-keepsake-jimi 8s ease-in-out infinite}.retreat-memory .retreat-people .han{animation:rest-keepsake-han 8s ease-in-out infinite}
@keyframes rest-keepsake-jimi{0%,20%,100%{transform:rotate(0)}45%,80%{transform:translateX(3px) rotate(5deg)}}
@keyframes rest-keepsake-han{0%,20%,100%{transform:rotate(0)}45%,80%{transform:translateX(-3px) rotate(-5deg)}}
@media(prefers-reduced-motion:reduce){.retreat-memory .retreat-people .cast-travel{animation:none}}
/* Invitation, practice and performance share the same warm paper palette. */
.concert-next,.travel-invitation{margin:10px 0;padding:13px;border:3px solid #8caa97;background:#f4eddc;box-shadow:3px 3px 0 #d4c5ab}
.concert-next small,.travel-invitation small{color:#a35f55}.concert-next h3,.travel-invitation h3{margin:6px 0}
.invitation-keepsakes{display:flex;flex-wrap:wrap;gap:5px}.invitation-keepsakes span{padding:5px 7px;background:#e2eadb;border:1px solid #a3bba5;font-size:12px}
.practice-prizes{padding:10px;margin:10px 0;border:2px solid #b49c79;background:#f9eed9}.practice-prizes summary{color:#865b4d}.practice-prizes .action{margin:4px}
.practice-rewards{padding:8px;background:#e2ecdd;border-left:3px solid #8bab92;font-size:12px!important;line-height:1.5}
.practice-perfect .short-photo-pair{animation:practice-celebrate .8s ease-in-out 2}.practice-perfect .practice-short-room:after{content:"✦  默契满满  ✦";position:absolute;left:0;right:0;top:14px;text-align:center;color:#b8695e}
@keyframes practice-celebrate{0%,100%{transform:translate(-50%,0)}50%{transform:translate(-50%,-5px)}}
.prep-vignette{height:235px;position:relative;overflow:hidden;border:3px solid #93a993;background:linear-gradient(#dce6d8 0 65%,#ddc5a5 65%);margin:10px 0}
.prep-mirror{position:absolute;left:14%;top:18px;width:72%;height:125px;border:7px double #b7a27f;background:linear-gradient(120deg,#bfd5cc 0 40%,#f2f2dc 41% 48%,#c7ded3 49%);box-shadow:4px 5px #9eac93}
.prep-vignette .stage-outfit-pair,.prep-vignette .light-pair{position:absolute;left:50%;bottom:34px;transform:translateX(-50%);display:flex;gap:22px}
.prep-cue{position:absolute;bottom:8px;left:0;right:0;text-align:center;font-size:12px;color:#70594b}
.fitting .stage-figure{animation:prep-fit 5s ease-in-out infinite}.fitting .stage-figure.han{animation-delay:.8s}
.rehearsing .stage-figure.jimi{animation:prep-jimi 7s ease-in-out infinite}.rehearsing .stage-figure.han{animation:prep-han 7s ease-in-out infinite}
@keyframes prep-fit{0%,100%{transform:rotate(0)}30%{transform:rotate(-4deg)}60%{transform:rotate(4deg)}}
@keyframes prep-jimi{0%,100%{transform:translateX(0)}30%{transform:translateX(20px) translateY(-7px)}60%{transform:translateX(70px)}80%{transform:translateX(15px)}}
@keyframes prep-han{0%,100%{transform:translateX(0)}30%{transform:translateX(-20px) translateY(7px)}60%{transform:translateX(-70px)}80%{transform:translateX(-15px)}}
.formation-choices .action{font-size:12px}.blocking-cell.walk-trace{box-shadow:inset 0 0 0 3px #e2b47a}.blocking-stage .stage-figure{position:relative;z-index:3}
.rhythm-cast.choreographed{position:absolute;inset:0 0 auto;height:120px;display:block}
.choreographed-actor{position:absolute;top:8px;left:16%;transform:translateX(-50%);animation:follow-rehearsal 9s ease-in-out both}
@keyframes follow-rehearsal{0%,20%{left:var(--x0);top:var(--y0)}42%,62%{left:var(--x1);top:var(--y1)}82%,100%{left:var(--x2);top:var(--y2)}}
.rhythm-cast.rose-lights{background:radial-gradient(ellipse at 25% 0,#f1a6aa88,transparent 50%),radial-gradient(ellipse at 75% 0,#e8bac388,transparent 50%)}
.wave-encore.stage .stage-figure{animation:encore-bow 2.4s ease-in-out infinite;transform-origin:center bottom}
@keyframes encore-bow{0%,100%{transform:rotate(0)}30%,60%{transform:rotate(7deg) translateY(3px)}}
.lace-ticket.stage{border:5px dotted #c58679;background:#fbefd9;box-shadow:inset 0 0 0 4px #fff9ed}
.concert-travel-dialogue{display:grid;gap:7px;margin:10px 0}.concert-travel-dialogue p{padding:8px 10px;margin:0;max-width:90%;border:2px solid #ba8276;border-radius:10px 10px 10px 2px;background:#f4dfd8}
.concert-travel-dialogue .han{justify-self:end;border-color:#8da996;background:#deeddf;border-radius:10px 10px 2px 10px}.concert-travel-dialogue b{display:block;font-size:12px;margin-bottom:4px}
.concert-day-purpose{padding:8px;border-left:3px solid #bb7869;background:#f4e5d5}
@media(prefers-reduced-motion:reduce){.prep-vignette *,.choreographed-actor,.wave-encore.stage .stage-figure,.practice-perfect .short-photo-pair{animation:none!important}.choreographed-actor{left:var(--x2);top:var(--y2)}}
.postcard.earned-ticket{border:4px dotted #c28e7f;background:repeating-linear-gradient(90deg,#fff5de 0 20px,#f8ecd6 20px 22px);box-shadow:inset 0 0 0 3px #fffaf0;padding:14px}
#short-scene.short-preparation{width:min(520px,calc(100% - 20px));max-height:calc(100dvh - 24px);overflow:auto;background:#fff7e6;border:4px solid #a47b67;padding:12px;color:#70594b}
#short-scene.short-preparation header{display:flex;justify-content:space-between;align-items:center;gap:8px}
#short-scene.short-preparation h2{font-size:16px;margin:0}
#short-scene.short-preparation button{font:inherit;font-size:13px;border:2px solid #a77864;background:#e7efdf;padding:8px;box-shadow:0 2px #bfa386}
#short-scene.short-preparation [data-short=finishPrep]{background:#c87c6b;color:#fff8e7}
#short-scene.short-preparation p{font-size:13px;line-height:1.6}
.panel-help{display:flex;justify-content:flex-end;margin:0 0 6px}
.panel-help .action{font-size:12px;padding:5px 9px;min-height:34px;background:#e7eddf}
#play-guide{box-sizing:border-box;width:min(480px,calc(100% - 24px));max-height:calc(100dvh - 32px);overflow:auto;padding:14px;border:4px solid #a37463;background:#fff6e5;color:#70574b;font-family:var(--game-font);box-shadow:6px 6px 0 #4d443c55}
#play-guide::backdrop{background:#34473b80}
#play-guide header{display:flex;justify-content:space-between;align-items:center;gap:10px}
#play-guide h2{font-size:17px;margin:0}#play-guide h3{font-size:15px;margin:12px 0 8px}
#play-guide button{font-family:inherit;font-size:12px;padding:6px 8px;border:2px solid #aa8971;background:#edf0df;color:#70574b}
#play-guide nav{display:flex;flex-wrap:wrap;gap:5px;margin-top:12px}
#play-guide nav [aria-pressed=true]{background:#c67d6e;color:#fff7e6;border-color:#925a50}
#play-guide .play-guide-rows{display:grid;gap:8px}
#play-guide section{padding:9px 10px;background:#f2ebdb;border-left:3px solid #94b29e}
#play-guide strong{font-size:13px}#play-guide p{font-size:13px;line-height:1.65;margin:4px 0 0}
#play-guide .play-guide-error:empty{display:none}
#play-guide .primary{margin-top:12px;background:#c67d6e;color:#fff7e6;width:100%;min-height:40px}
@media(max-height:600px){#play-guide{padding:10px}#play-guide section{padding:6px 8px}#play-guide nav{margin-top:8px}}
/* Scene actors share a floor, without the wardrobe preview's card behind them. */
.prep-vignette .stage-outfit-pair,.backstage-vignette .stage-outfit-pair{background:none;border:0;padding:0;margin:0;min-height:0;z-index:3;filter:drop-shadow(0 4px 1px #51655438)}
.practice-decor{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.prep-mirror{left:31%;width:37%;height:104px;top:16px;border:4px solid #7d9e93;box-shadow:3px 3px #bed0bc}
.prep-spotlights{position:absolute;inset:0;pointer-events:none;z-index:2;background:conic-gradient(from 150deg at 25% 0,transparent 0 8deg,#ffe3a044 9deg 29deg,transparent 30deg),conic-gradient(from 160deg at 77% 0,transparent 0 10deg,#efb2b744 11deg 31deg,transparent 32deg);animation:rehearsal-lights 8s ease-in-out infinite alternate;mix-blend-mode:soft-light}
@keyframes rehearsal-lights{0%{opacity:.55;transform:translateX(-8px)}50%{opacity:1;filter:hue-rotate(24deg)}100%{opacity:.75;transform:translateX(8px);filter:hue-rotate(-20deg)}}
.prep-vignette .stage-figure{transform-origin:50% 100%}.fitting .stage-figure{animation:none}.fitting[data-move=turn] .stage-figure.jimi{animation:fit-turn 2s ease-in-out}.fitting[data-move=turn] .stage-figure.han{animation:fit-turn 2s .25s ease-in-out}
@keyframes fit-turn{35%{transform:scaleX(.65) rotate(-3deg)}65%{transform:scaleX(.85) rotate(3deg)}}
.rehearsing.style-fresh .stage-figure.jimi,.rehearsing.style-fresh .stage-figure.han{animation:sing-cue 4s ease-in-out infinite}.rehearsing.style-fresh .stage-figure.han{animation-delay:2s}
.rehearsing.style-sweet .stage-figure.jimi,.rehearsing.style-sweet .stage-figure.han{animation:dance-cue 2.4s ease-in-out infinite}.rehearsing.style-sweet .stage-figure.han{animation-direction:reverse}
.rehearsing.style-dream .stage-figure.jimi,.rehearsing.style-dream .stage-figure.han{animation:dream-cue 6s ease-in-out infinite}.rehearsing.style-dream .stage-figure.han{animation-delay:1s}
.rehearsing.style-bold .stage-figure.jimi,.rehearsing.style-bold .stage-figure.han{animation:rap-cue 1.6s steps(4,end) infinite}.rehearsing.style-bold .stage-figure.han{animation-delay:.4s}
@keyframes sing-cue{25%,45%{transform:translateX(6px) rotate(3deg)}}@keyframes dance-cue{25%{transform:translateX(12px) rotate(5deg)}50%{transform:translateX(12px) scaleY(.94)}75%{transform:translateX(-8px) rotate(-4deg)}}@keyframes dream-cue{50%{transform:rotate(-5deg) translateX(-5px)}}@keyframes rap-cue{25%,75%{transform:scaleY(.95) rotate(3deg)}50%{transform:translateX(-7px)}}
.backstage-vignette{position:relative;height:235px;overflow:hidden;border:3px solid #8da99b;margin:12px 0}.backstage-vignette .stage-outfit-pair{position:absolute;bottom:34px;left:50%;transform:translateX(-50%);gap:22px}
.check-signal{position:absolute;bottom:98px;width:15px;height:15px;border:3px solid #fff1cc;border-radius:50%;opacity:0;z-index:4}.check-signal.jimi{left:calc(50% - 50px);background:#cf7b72}.check-signal.han{left:calc(50% + 40px);background:#86b7a1}
.checked-jimi .check-signal.jimi,.checked-han .check-signal.han{opacity:1;animation:signal-ring 1s ease-out 2}.checked-jimi .stage-figure.jimi,.checked-han .stage-figure.han{animation:sing-cue 1.4s ease-in-out}
.promise.checked-jimi .stage-figure.jimi{transform:translateX(10px) rotate(4deg)}.promise.checked-han .stage-figure.han{transform:translateX(-10px) rotate(-4deg)}.promise.checked-jimi.checked-han:after{content:'♡';position:absolute;bottom:110px;left:calc(50% - 10px);color:#bf6c66;font-size:26px;z-index:5;animation:signal-ring 1s ease-out}
@keyframes signal-ring{from{box-shadow:0 0 0 0 #edb78d88}to{box-shadow:0 0 0 14px #edb78d00}}
.rhythm-stage{position:relative}.rhythm-cast.choreographed{position:relative;inset:auto;height:166px;background:radial-gradient(ellipse at 25% 0,#f2cd8d55,transparent 55%),radial-gradient(ellipse at 80% 0,#a3cdb755,transparent 55%),linear-gradient(#56666a 0 61%,#81968a 61% 63%,#a3b1a0 63%);border-bottom:7px solid #586d65}
.rhythm-cast:after{content:'';position:absolute;left:5%;right:5%;bottom:8px;height:3px;background:#d6deba;box-shadow:0 -24px #c5d0b766;pointer-events:none}.choreographed-actor{z-index:2;filter:drop-shadow(0 3px 1px #304d4866)}.choreographed-actor .stage-figure{animation:stage-grounded-beat 1.4s ease-in-out infinite;transform-origin:center bottom}
@keyframes stage-grounded-beat{50%{transform:scaleY(.96) rotate(2deg)}}
.blocking-stage{position:relative;perspective:none;background:#67837b;border-color:#7c9a8b}.blocking-cell{background:#c3d4bf;color:#53685e}.blocking-cell.target{background:#f3e2b5;border-color:#a97b5f}.blocking-cell small{color:#53685e;text-shadow:none}.blocking-cell.walking-cell{overflow:visible;z-index:5}.blocking-stage .stage-figure{position:absolute}
.leisure-scene{height:250px;position:relative;overflow:hidden;border:3px solid #89a698;margin:12px 0;background:linear-gradient(#c3e3df 0 50%,#abc995 50% 69%,#e5d2b0 69% 87%,#99bb8e 87%)}
.leisure-scene .light-pair{position:absolute;display:flex;gap:13px;left:32%;bottom:28px;z-index:3;transform:none;background:none;border:0}
.leisure-scene.pet .light-pair{animation:pet-follow 7s ease-in-out infinite}.running-pet{position:absolute;width:60px;height:46px;bottom:25px;left:72%;z-index:4;animation:pet-run 7s ease-in-out infinite}
@keyframes pet-run{0%,100%{transform:translateX(-30px)}30%{transform:translateX(20px) rotate(-5deg)}50%{transform:translateX(20px) scaleX(-1)}75%{transform:translateX(-30px) scaleX(-1)}}@keyframes pet-follow{0%,100%{transform:translateX(-18px)}35%,55%{transform:translateX(20px)}70%{transform:translateX(5px) rotate(-2deg)}}
.park-tree{position:absolute;top:25px;left:25px;width:70px;height:70px;background:#76a685;border-radius:40%;box-shadow:18px 8px #8eb594,-10px 18px #609579}.park-tree:after{content:'';position:absolute;top:60px;left:30px;width:9px;height:75px;background:#a88862}.park-tree.tree-two{left:auto;right:28px;top:15px;transform:scale(.8)}.park-bench{position:absolute;left:35%;top:112px;width:100px;height:33px;background:repeating-linear-gradient(#be8970 0 7px,#ebd5b3 7px 10px);border:3px solid #8d775a}.park-flowers{position:absolute;left:10px;right:10px;bottom:12px;height:7px;background:repeating-linear-gradient(90deg,#d68683 0 5px,transparent 5px 31px,#f4dca1 31px 36px,transparent 36px 62px)}
.leisure-scene.rest{background:linear-gradient(#e9dfcc 0 70%,#ddc9ac 70%)}.rest-window{position:absolute;left:25px;top:20px;width:92px;height:86px;background:linear-gradient(#718ca1 65%,#567d77 65%);border:6px solid #b0c7ae;box-shadow:-8px 0 #c78275,8px 0 #c78275}.rest-window:after{content:'';position:absolute;left:42px;top:0;height:100%;width:4px;background:#e9e4c9}.rest-sofa{position:absolute;left:14%;right:14%;bottom:35px;height:78px;background:#9bbca9;border:8px solid #7c9d8b;border-radius:14px 14px 3px 3px;box-shadow:0 8px #786a55}.rest-sofa:after{content:'';position:absolute;left:10px;bottom:4px;width:35px;height:30px;border-radius:5px;background:#c98177;box-shadow:180px 0 #e1c996}.rest-rug{position:absolute;left:10%;right:10%;bottom:8px;height:24px;border:4px double #f4e5c6;background:#c28b78}.rest-lamp{position:absolute;right:20px;top:40px;width:42px;height:40px;background:#f1d398;clip-path:polygon(20% 0,80% 0,100% 100%,0 100%);filter:drop-shadow(0 0 18px #ffdc87)}.rest-book{position:absolute;left:30%;top:20px;width:64px;height:6px;background:#a98166;box-shadow:0 8px #c38373}.rest .light-pair{left:50%;bottom:62px;transform:translateX(-50%);gap:2px}.rest .light-pair .jimi{animation:sofa-jimi 7s ease-in-out forwards;transform-origin:center bottom}.rest .light-pair .han{animation:sofa-han 7s ease-in-out forwards;transform-origin:center bottom}@keyframes sofa-jimi{0%,20%{transform:none}60%,100%{transform:rotate(17deg) translateY(6px)}}@keyframes sofa-han{0%,35%{transform:none}75%,100%{transform:rotate(-13deg) translateY(8px)}}.sleep-bubbles{position:absolute;top:75px;left:50%;font-size:20px;color:#7b9589;opacity:0;animation:sleep-soft 7s 2s infinite}@keyframes sleep-soft{50%,85%{opacity:1;transform:translateY(-8px)}}
.journey-cottages{position:absolute;left:10%;bottom:28%;width:27px;height:22px;background:#f2dfba;border-top:7px solid #c17b68;box-shadow:90px 8px #efdbb8,180px 0 #d5dfc3}.journey-trees{position:absolute;left:20%;bottom:18%;width:24px;height:33px;border-radius:45% 45% 30% 30%;background:#719e87;box-shadow:65px -8px #88af91,185px -3px #719e87}.journey-fence{position:absolute;left:0;right:0;bottom:14%;height:18px;border-top:3px solid #f4e5ca;background:repeating-linear-gradient(90deg,transparent 0 25px,#f4e5ca 25px 29px)}
@media(prefers-reduced-motion:reduce){.prep-spotlights,.rehearsing .stage-figure,.leisure-scene *,.backstage-vignette *,.choreographed-actor .stage-figure{animation:none!important}.rest .light-pair .jimi{transform:rotate(12deg)}.rest .light-pair .han{transform:rotate(-10deg)}}
.backstage-vignette.promise .stage-figure:after{content:'';position:absolute;top:57px;width:11px;height:7px;background:#edc8a5;border:1px solid #cfaa88;opacity:0}.promise.checked-jimi .stage-figure.jimi:after{right:-4px;opacity:1;transform:rotate(-15deg)}.promise.checked-han .stage-figure.han:after{left:-4px;opacity:1;transform:rotate(15deg)}
.dress.checked-jimi .check-signal.jimi,.dress.checked-han .check-signal.han{bottom:75px;border-radius:0;width:7px;height:7px;transform:rotate(45deg)}
.leisure-scene.rest .light-figure{clip-path:inset(0 0 18px);margin-bottom:-18px}.leisure-scene.rest:after{content:'';position:absolute;left:calc(50% - 52px);bottom:42px;width:104px;height:23px;background:repeating-linear-gradient(90deg,#e2bea1 0 10px,#efdbc0 10px 13px);border:2px solid #d0a98d;z-index:4;border-radius:4px}
/* Feedback belongs to the panel, never a second fixed story footer. */
.inline-feedback #feedback{display:none!important}.panel-inline-status{margin:12px 0 0;padding:8px 10px;border-left:3px solid #8eae99;background:#edf0df;font-size:13px;line-height:1.6}.panel-inline-status.error{border-color:#b9675e;background:#f4dfd4;color:#8c463e}.date-letter{padding:16px;border:3px solid #b88470;background:#fff3dc}.date-letter-day{font-size:20px;color:#a95e54;margin:14px 0}
.prep-vignette .stage-outfit-pair,.backstage-vignette .stage-outfit-pair{filter:none}.prep-vignette .stage-figure{filter:drop-shadow(0 2px 0 #90a68d55)}
@keyframes fit-turn{0%,100%{transform:translateX(0) rotate(0)}35%,65%{transform:translateX(5px) rotate(4deg)}}
@keyframes dance-cue{0%,100%{transform:translateX(0)}25%,40%{transform:translateX(8px) rotate(2deg)}65%,80%{transform:translateX(-6px) rotate(-2deg)}}@keyframes rap-cue{0%,100%{transform:none}35%{transform:translateX(-4px) rotate(-2deg)}70%{transform:translateX(3px) rotate(2deg)}}
.rehearsing.style-sweet .stage-figure{animation-duration:3.2s}.rehearsing.style-bold .stage-figure{animation-timing-function:ease-in-out;animation-duration:2.8s}
.backstage-vignette{height:300px}.backstage-talk{position:absolute;top:10px;width:43%;box-sizing:border-box;font-size:12px;line-height:1.55;padding:8px 9px;margin:0;border:2px solid #bd8075;border-radius:12px 12px 3px 12px;background:#f9e5dc;color:#665247;z-index:5;animation:dialogue-arrive .25s ease-out}.backstage-talk.jimi{left:4%}.backstage-talk.han{right:4%;top:74px;border-color:#86ab99;background:#e4efdf;border-radius:12px 12px 12px 3px}.backstage-talk[hidden]{display:none}.backstage-vignette .stage-outfit-pair{bottom:28px}.backstage-vignette .check-signal{display:none}
@keyframes dialogue-arrive{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.backstage-vignette.promise .stage-figure:after{width:7px;height:6px;border:0;border-radius:3px;background:#efccac;top:59px;box-shadow:0 1px #d7b28c}.promise.checked-jimi .stage-figure.jimi:after{right:0;transform:rotate(-10deg)}.promise.checked-han .stage-figure.han:after{left:0;transform:rotate(10deg)}.promise.checked-jimi .stage-figure.jimi{transform:translateX(11px) rotate(1deg)}.promise.checked-han .stage-figure.han{transform:translateX(-11px) rotate(-1deg)}
.pet-route-board{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;padding:10px;border:3px solid #8aa68a;background:#bcd4a7;margin:10px 0}.pet-route-board .pet-route-cell{position:relative;min-width:0;padding:0;aspect-ratio:1;height:auto;min-height:48px;border:2px solid #d3bf98;border-bottom-width:4px;border-radius:4px;background:#efe1c1;overflow:visible;opacity:1!important}.pet-route-board .pet-route-cell.reachable{border-color:#bb7e69;background:#fff0d0;cursor:pointer}.pet-route-board .pet-route-cell.flowerbed{background:#86af85;border-color:#739974}.route-flowers{color:#e9b1a3;font-size:26px;text-shadow:9px 5px #f5ddb0,-10px 6px #c9817c}.route-home{color:#b27761;font-size:26px}.grid-actors{position:absolute;left:50%;bottom:3px;width:34px;height:44px;transform:translateX(-50%);z-index:3;pointer-events:none}.grid-actors .light-pair{display:block;transform:scale(.5);transform-origin:0 0}.grid-actors.jimi .han,.grid-actors.han .jimi{display:none}.pet-route-cell .running-pet{width:38px;height:32px;left:50%;bottom:4px;transform:translateX(-50%);animation:none;z-index:4}.route-toy{position:absolute;right:5px;bottom:5px;font-size:13px;color:#bc7067}.route-checkpoints{display:flex;justify-content:space-around;gap:6px;font-size:12px;margin-bottom:12px}.route-checkpoints .done{color:#5d8872}
.practice-conversation{position:absolute;inset:8px 7px auto;display:flex;gap:12px;z-index:8;pointer-events:none}.practice-conversation p{width:50%;margin:0;padding:7px;font-size:12px;line-height:1.5;border:2px solid #bc8275;border-radius:10px;background:#f7e3d8;color:#604d43}.practice-conversation b{display:block;font-size:11px;margin-bottom:3px}.practice-conversation .han{background:#e3eedc;border-color:#8aaa94;margin-top:26px}.practice-count-in{position:absolute;bottom:17px;left:35%;font-size:15px;color:#a56c59;letter-spacing:5px;opacity:0}.light-step-1 .practice-count-in,.light-step-2 .practice-count-in{animation:count-in 3s steps(4,end) infinite}@keyframes count-in{0%,100%{opacity:.25}50%{opacity:1}}
.practice-speaker{position:absolute;bottom:24px;right:15px;width:29px;height:46px;background:#79968c;border:3px solid #59796c}.practice-speaker:after{content:'';position:absolute;left:5px;bottom:4px;width:15px;height:15px;border-radius:50%;border:3px solid #bfd0b7;box-sizing:border-box}.practice-record-shelf{position:absolute;left:15px;bottom:32px;width:35px;height:37px;border:4px solid #ba9270;background:repeating-linear-gradient(90deg,#cc8777 0 5px,#f1ddae 5px 9px,#91b9a1 9px 14px)}
.light-practiceBlue .light-support{display:none!important}.light-practiceBlue .light-figure{animation:none!important;transform:none}.light-practiceBlue.light-step-1.light-choice-near .jimi,.light-practiceBlue.light-step-1.light-choice-han .han,.light-practiceBlue.light-step-2 .light-figure{animation:count-sway 3s ease-in-out infinite!important}@keyframes count-sway{30%,65%{transform:rotate(2deg) translateX(3px)}}
@media(prefers-reduced-motion:reduce){.practice-count-in,.light-practiceBlue .light-figure,.backstage-talk{animation:none!important}}

.backstage-vignette .stage-figure{position:relative}

.action[data-action="chooseConcertStage"][aria-pressed="true"]{background:#c57768;color:#fff7e6;border-color:#945b50;box-shadow:0 3px 0 #855346}

/* Settled visits keep the bubbles visible instead of replaying their entrance. */
.visit-programme.conversation-complete .visit-speech{animation:none;opacity:1;transform:none}

.pet-route-board.pet-maze{grid-template-columns:repeat(7,minmax(0,1fr));gap:2px;padding:7px;background:#b7cfa5}.pet-maze .pet-route-cell{min-height:0;border-width:1px;border-bottom-width:2px;border-radius:2px}.pet-maze .flowerbed{background:#689e7d;border-color:#619275;box-shadow:inset 0 3px #99bf8e;opacity:1}.maze-hedge{position:absolute;inset:6px;background:#7bac84;box-shadow:2px 2px #528c70}.pet-maze .flowerbed:nth-child(3n) .maze-hedge:after{content:'✿';color:#e8aaa0;font-size:14px}.pet-maze .grid-actors{width:24px;height:32px;bottom:1px}.pet-maze .grid-actors .light-pair{transform:scale(.36)}.pet-maze .running-pet{width:29px;height:25px}.pet-maze .route-toy{font-size:21px;right:25%;bottom:10%;color:#c87065;text-shadow:2px 2px #f5dcaa}.maze-follow-pet{position:absolute;bottom:0;right:0;width:18px;height:18px;z-index:5}.maze-follow-pet .running-pet{width:20px;height:18px;bottom:0}.pet-maze .route-home{color:#b16d5a;font-size:22px}

/* Compact room navigation leaves more height for the room itself. */
#scene-back{width:94px;min-height:34px;height:34px;padding:3px 6px;font-size:11px}
#scene-back .ui-icon{width:13px;height:15px}
.hotspot[data-action="followRoomSignal"]{min-height:34px}
.hotspot[data-action="followRoomSignal"] span{max-height:34px;padding:4px 6px;font-size:11px;line-height:14px}
.hotspot[data-action="followRoomSignal"] span:after{display:none}

/* Keep the birthday action in the navigation strip, outside the room artwork. */
.room-birthday-entry{right:15px;max-width:112px}
.room-birthday-entry button{height:34px;min-height:34px;margin:0;padding:4px 7px;font-size:11px;white-space:nowrap}
.pet-route-board.pet-maze{grid-template-columns:repeat(var(--maze-size,7),1fr)}

.furniture-style{padding:8px 0;border-bottom:2px solid #cdbb9f}.furniture-sample{height:36px;border:3px solid #987b62;background:var(--fabric)}.furniture-sample.stripe{background:repeating-linear-gradient(90deg,var(--fabric) 0 10px,var(--fabric-light) 10px 13px)}.furniture-sample.check{background:repeating-conic-gradient(var(--fabric) 0 25%,var(--fabric-light) 0 50%) 0/18px 18px}.furnishing-hub button[aria-pressed="true"]{background:#c57869;color:#fff5df;border-color:#98554d}

.beginner-guide{border:2px solid #b9aa8b;background:#fff5df;padding:8px;margin-bottom:10px}.beginner-guide .festival-chat{margin:0}.beginner-guide p{font-size:13px;line-height:1.5}.beginner-guide .festival-bubble{margin:5px 0;padding:7px 10px}

/* Let every ordinary panel use the viewport before introducing scrolling. */
#game #modal:not([data-view="arcade"]){top:50%;bottom:auto;height:auto;max-height:calc(100% - 32px);transform:translateY(-50%)}
#game #modal:not([data-view="arcade"]) #panel{flex:0 1 auto;min-height:0;padding:10px 12px 12px;overflow-y:auto}
#game #modal .modal-head{min-height:48px;padding:5px 10px}
#game #modal .modal-head h1{font-size:17px}
#game #modal.onboarding .panel-help{display:none}
#game #modal .festival-chat{gap:9px;margin:10px 0}
#game #modal .festival-bubble{padding:8px 11px;max-width:92%}
#game #modal .festival-bubble p{margin:0;font-size:13px;line-height:1.55}
#game #modal .festival-bubble small{margin-bottom:4px}
#game #modal.onboarding .tour-speaker{font-size:12px}
#game #modal.onboarding h2{font-size:16px;margin:6px 0}
#game #modal .actions{margin:9px 0 2px;gap:7px}
#game #modal .festival-bubble.han,
#game #modal #panel .care-chat.han p,
#game #modal #panel .meal-dialogues .han,
.concert-travel-dialogue .han,.backstage-talk.han,.practice-conversation .han,
.visit-person.han .visit-speech{background:#d9f1e8;border-color:#7eaf9d;color:#355f52;box-shadow:2px 2px 0 #b7d9cd}
#game #modal .festival-bubble.han small{color:#377c67}
#game #modal #panel .care-chat.han p:before{background:#d9f1e8;border-color:#7eaf9d}
@media(max-height:600px){#game #modal:not([data-view="arcade"]){max-height:calc(100% - 16px)}#game #modal .festival-chat{gap:7px;margin:8px 0}}

/* Names follow the rendered sprite rather than the room’s old coordinates. */
#hotspots .resident-tag{align-items:flex-start;min-width:0;min-height:0}
#hotspots .resident-tag span{position:absolute;top:70%;bottom:auto;left:50%;right:auto;transform:translate(-50%,-50%);margin:0;white-space:nowrap;font-size:10px;line-height:1.2;padding:1px 4px;pointer-events:none}

/* Keep the bedroom frame label above the picture, clear of the lamp below. */
.hotspot[data-open="bedroomFrame"] span{position:absolute;bottom:calc(100% + 3px)}

/* A furnished evening corner for the shared sofa rest. */
.leisure-scene.rest{height:280px;isolation:isolate;background:#cddfd1}
.rest-decor{position:absolute;inset:0;width:100%;height:100%;z-index:-1}
.rest-window{overflow:hidden;background:linear-gradient(#526e88,#9eb9bb);box-shadow:none}
.rest-window:before{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent 46%,#eee3c9 46% 52%,transparent 52%),linear-gradient(transparent 48%,#eee3c9 48% 54%,transparent 54%);z-index:2}
.rest-moon{position:absolute;right:12px;top:10px;width:13px;height:13px;border-radius:50%;background:#f5dfab;box-shadow:0 0 15px #f5dfab66}
.rest-skyline{position:absolute;left:3px;bottom:0;width:22px;height:18px;background:#6a8c84;box-shadow:20px -6px #78988a,42px 1px #64867e,58px -9px #7d9b90}
.rest-curtains{position:absolute;left:17px;top:16px;width:12px;height:96px;background:repeating-linear-gradient(90deg,#bd756b 0 4px,#dfa293 4px 8px);box-shadow:99px 0 #c48275}
.rest-side-table{position:absolute;right:10px;bottom:42px;width:46px;height:36px;border-top:7px solid #b28a65;border-left:5px solid #a17f5f;border-right:5px solid #a17f5f;background:#e0c59e}
.rest-tea{position:absolute;right:35px;bottom:79px;width:11px;height:13px;border:2px solid #f5e7cc;background:#c7786b;box-shadow:3px 2px #a16b5b}
.rest-tea.han{right:15px;background:#8abfa9;box-shadow:3px 2px #6f9e8c}
.rest-book{left:auto;right:12px;top:22px;width:63px;box-shadow:0 7px #d48f7e,0 12px #f1dfb9}
.rest-lamp{top:58px;right:14px;width:40px;height:34px;filter:drop-shadow(0 0 12px #ffdc8777)}
.rest-rug{background:repeating-linear-gradient(90deg,#c98275 0 12px,#dfb09a 12px 15px);height:32px;bottom:5px}

#halloween-room{position:absolute;inset:0;pointer-events:none;z-index:7}#halloween-room[hidden]{display:none}
.halloween-speech{position:absolute;transform:translate(-50%,-100%);width:200px;max-width:52%;padding:8px 10px;border:2px solid #bf796f;border-radius:12px;background:#f9e1da;color:#68483e;font:13px/1.5 var(--game-font);box-shadow:2px 3px #815b4420}
.halloween-speech:after{content:'';position:absolute;bottom:-7px;left:47%;width:10px;height:10px;transform:rotate(45deg);background:inherit;border-right:2px solid #bf796f;border-bottom:2px solid #bf796f}
.halloween-speech.han{background:#d9f1e8;border-color:#7eaf9d;color:#355f52}.halloween-speech.han:after{border-color:#7eaf9d}.halloween-speech small{font-size:11px}.halloween-speech p{margin:3px 0 0}.halloween-speech.narration:after{display:none}
.halloween-room-options{position:absolute;left:8%;width:84%;padding:7px;background:#fff4e6ed;border:2px solid #b49473;pointer-events:auto;font:12px/1.4 var(--game-font)}.halloween-room-options>div{display:flex;gap:5px;flex-wrap:wrap}.halloween-room-options .action{font-size:12px;min-height:34px;padding:5px 8px;margin:3px 0;flex:1 1 110px}
#game.halloween-room-active #hotspots .hotspot{visibility:hidden}#game.halloween-room-active #bubble{visibility:hidden}
#hotspots .hotspot[data-open="festivals"] span{white-space:normal;max-width:100%;font-size:10px;padding:2px 4px;text-align:center}

.visit-preparation{display:grid;gap:10px;margin:12px 0}.visit-step{padding:10px 12px;border:2px solid #b3bba2;background:#f4f0df}.visit-step strong{display:block;margin-bottom:7px;color:#557b68}.visit-step p{margin:5px 0}.visit-plan-options{display:grid;grid-template-columns:1fr 1fr;gap:7px}.visit-plan-options .action{margin:0;width:100%}.visit-date,.visit-ready{color:#597d69}.visit-reschedule{margin:10px 0}.visit-reschedule summary,.visit-step summary{font-size:12px;cursor:pointer;padding:5px 0}

/* Small destinations: detail stays inside existing scene bounds. */
.pond-art{height:100px;border:3px solid #9caa8b;background:#a6c6b0}
.pond-scenery{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.pond-art .bobber{z-index:2;top:44%;text-shadow:0 2px #f5ebcc}
.pond-art .pond-fish{left:38%;bottom:16%;color:#5c9084;opacity:.7}
.pond-art .cast-rod{z-index:3}
.design-shop{background:repeating-linear-gradient(90deg,#f3ead7 0 29px,#e8dec9 29px 31px);isolation:isolate}
.design-shop .shop-awning{background:repeating-linear-gradient(90deg,#c48272 0 28px,#faeed6 28px 56px);border-bottom-color:#a77260;box-shadow:0 5px #bda88b33}
.souvenir-shelves{position:absolute;inset:86px 12px auto;display:grid;grid-template-columns:repeat(3,22px);justify-content:space-between;gap:32px 0;pointer-events:none;z-index:-1}
.souvenir-shelves i{height:25px;border:3px solid #b59472;background:linear-gradient(90deg,#8eb3a0 0 36%,#f3d9af 36% 64%,#c98070 64%);box-shadow:0 5px #a88a68,0 8px #d1bea0}
.souvenir-counter{position:absolute;bottom:0;left:0;right:0;height:31px;background:repeating-linear-gradient(90deg,#cfad87 0 36px,#bf9b76 36px 38px);border-top:7px solid #a6805e;z-index:-1;pointer-events:none}
.design-shop .souvenir-design-art{box-shadow:4px 5px #77695822,0 14px 0 -10px #9f7b58}
.festival-room-preparation p{margin:5px 0 10px;font-size:13px;color:#725c47}.festival-room-preparation .action{min-height:44px}.festival-countdown{position:absolute;left:50%;transform:translateX(-50%);text-align:center;pointer-events:none;color:#fff2be;text-shadow:2px 3px #6f5948}.festival-countdown small{display:block;background:#725f50;padding:4px 12px;font-size:13px}.festival-countdown strong{display:block;font-size:68px;line-height:1.25;animation:festival-number .9s ease-out}.festival-cheer{position:absolute;transform:translateX(-50%);padding:8px 12px;background:#f7ddd5;border:2px solid #b97268;box-shadow:3px 3px #76574533;white-space:nowrap;animation:festival-cheer .5s ease-out}.festival-cheer.han{background:#e0efdd;border-color:#8ba88b}.festival-cheer small{font-size:11px}.festival-cheer p{font-size:16px;margin:4px 0;color:#a14d43}.festival-cheer.han p{color:#4d7d65}@keyframes festival-number{from{transform:scale(1.2);opacity:.4}to{transform:scale(1);opacity:1}}@keyframes festival-cheer{from{opacity:0;margin-top:10px}to{opacity:1;margin-top:0}}@media(prefers-reduced-motion:reduce){.festival-countdown strong,.festival-cheer{animation:none}}

/* Keep celebration actions comfortable to tap without changing their identity. */
.halloween-room-options .action{min-height:44px;touch-action:manipulation}
.halloween-room-options .action[hidden]{display:none}

/* Birthday names sit below the characters, leaving the banner unobstructed. */

.room-birthday-entry button{min-height:44px;height:44px}

/* The flower surprise uses the existing residents, in the living room. */
.resident-map-sprite[data-birthday-beat]{transform-origin:50% 85%}
.resident-map-sprite.jimi[data-birthday-beat="flowers"] .birthday-bouquet{display:block;left:48px;top:47px;width:15px;height:24px;background:linear-gradient(70deg,transparent 35%,#78935e 36%,#78935e 47%,#ebd9b1 48%,#ebd9b1 80%,transparent 81%);transform:rotate(-15deg)}
.birthday-bouquet b{position:absolute;top:0;left:-3px;width:10px;height:10px;background:#e9a4aa;box-shadow:2px -3px #f2c5c4,-2px 3px #d48b92}
.birthday-bouquet b:nth-child(2){left:7px;top:3px;background:#f4cfaa}.birthday-bouquet b:nth-child(3){left:3px;top:-7px;background:#efb9c2}
#game.birthday-playing #hotspots,#game.birthday-playing #moment-marker,#game.birthday-playing #scene-back{visibility:hidden}

.resident-map-sprite.han[data-birthday-beat="received"] .birthday-bouquet{display:block;left:40px;top:53px;width:15px;height:24px;background:#ebd9b1;transform:rotate(-15deg)}

/* Birthday controls share one row; the room keeps its full height. */
#game[data-birthday-who]:not([data-birthday-who=""]) #scene-back{width:40px;min-width:40px;padding:6px}
#game[data-birthday-who]:not([data-birthday-who=""]) #scene-back span{display:none}
#game[data-birthday-who]:not([data-birthday-who=""]) .room-birthday-entry{right:12px;width:112px;max-width:112px}
#game[data-birthday-who]:not([data-birthday-who=""]) .room-birthday-entry button{width:100%;margin:0}
#game[data-birthday-who]:not([data-birthday-who=""]) #moment-marker{left:58px;right:130px;max-width:none;width:auto;height:44px;min-height:44px;padding:3px 4px;font-size:10px;line-height:1.3}
.birthday-bouquet{display:none;position:absolute;pointer-events:none}

.short-preparation .prep-vignette{height:300px}
.prep-talk{position:absolute;top:12px;width:44%;margin:0;padding:10px;border:2px solid #bc8176;border-radius:12px;background:#fff1e8;color:#674d43;font-size:14px;line-height:1.6;z-index:6}
.prep-talk.jimi{left:4%}.prep-talk.han{right:4%;border-color:#85a68e;background:#e9f1e1}
.prep-talk:after{content:'';position:absolute;bottom:-9px;left:50%;width:14px;height:14px;background:inherit;border-right:2px solid #bc8176;border-bottom:2px solid #bc8176;transform:rotate(45deg)}
.prep-talk.han:after{border-color:#85a68e}.prep-talk[hidden]{display:none}
.prep-next{display:block;margin:8px auto;min-height:44px;padding:8px 22px}.prep-next[hidden]{display:none}

/* Keep speech tails immediately above the matching 68 x 88 character. */
.short-preparation .prep-talk{top:auto;bottom:134px;width:min(190px,64%);transform:translateX(-50%)}
.short-preparation .prep-talk.jimi{left:calc(50% - 45px);right:auto}
.short-preparation .prep-talk.han{left:calc(50% + 45px);right:auto}
.prep-talk:after{left:calc(50% - 7px)}
.quiet-walk .walk-pair{left:50%;transform:translateX(-50%);animation:none;overflow:visible}
.scene-speech{position:absolute;bottom:100px;left:34px;transform:translateX(-50%);width:190px;max-width:56vw;z-index:8;padding:8px 10px;background:#fff1e8;border:2px solid #bc8176;border-radius:12px;color:#674d43;font:14px/1.5 system-ui,sans-serif;text-align:left}
.scene-speech.han{left:107px;background:#e9f1e1;border-color:#85a68e}
.scene-speech:after{content:'';position:absolute;bottom:-8px;left:calc(50% - 6px);width:12px;height:12px;background:inherit;border-right:2px solid #bc8176;border-bottom:2px solid #bc8176;transform:rotate(45deg)}
.scene-speech.han:after{border-color:#85a68e}.scene-speech.direction{left:70px;background:#fff7e8}.scene-speech.direction:after{display:none}
.scene-speech p{margin:0}.scene-speech button{display:block;margin:3px 0 0 auto;min-height:44px;border:0;background:transparent;color:inherit;font:12px/1.3 system-ui,sans-serif;padding:8px}

/* Speech stays still; only character sprites receive rehearsal motion. */
.short-preparation .prep-talk{animation:none!important;transition:none!important;transform:translateX(-50%)!important}
.walk-dialogue-controls{display:flex;justify-content:flex-end;margin:8px 0}
.walk-dialogue-controls button{min-height:44px;min-width:100px;padding:8px 18px;background:#edf2e3;border:2px solid #89a28a;color:#506750;font:inherit}

.meal-scene,.retreat-scene:not(.retreat-memory){height:340px}
.meal-people,.retreat-scene:not(.retreat-memory) .retreat-people{left:50%;transform:translateX(-50%)!important;gap:16px;display:flex;overflow:visible;z-index:5}
.meal-people .scene-speech,.retreat-people .scene-speech{bottom:100px;left:34px;font-style:normal}
.meal-people .scene-speech.han,.retreat-people .scene-speech.han{left:118px}
.meal-people .scene-speech.direction,.retreat-people .scene-speech.direction{left:76px}
.retreat-scene:not(.retreat-memory) .rest-emote{display:none}

/* Keep conversation anchored to the seated pair; dishes stay on the tabletop. */
.meal-people .cast-travel.jimi,.meal-people .cast-travel.han{animation:none;transform:none}
.meal-people .scene-speech,.retreat-people .scene-speech{animation:none!important;transition:none!important;z-index:12}
.meal-scene .food-table{z-index:6;height:66px;background:repeating-linear-gradient(0deg,#d9bb91 0 20px,#c9a87e 21px 22px);overflow:visible}
.meal-scene .food-serving{z-index:8;bottom:53px;left:calc(50% - 48px)}
.meal-scene .meal-food{animation:none}
.meal-scene .food-steam{z-index:9;pointer-events:none}
.meal-scene .meal-cup{z-index:8;bottom:44px}
.meal-scene .meal-cup.one{left:15%}.meal-scene .meal-cup.two{right:15%}
.table-mat{position:absolute;top:8px;width:64px;height:40px;background:#b1b9a0;border:2px solid #e8ddbd}.table-mat.one{left:15%}.table-mat.two{right:15%}
.table-bowl{position:absolute;top:9px;width:30px;height:16px;background:#f7ecd4;border:3px solid #ac997d;border-radius:3px 3px 12px 12px}.table-bowl.one{left:20%}.table-bowl.two{right:20%}
.table-chopsticks{position:absolute;top:13px;width:3px;height:30px;background:#785e45;box-shadow:5px 0 #785e45;transform:rotate(15deg)}.table-chopsticks.one{left:34%}.table-chopsticks.two{right:34%}
.table-napkins{position:absolute;right:3%;top:6px;width:25px;height:17px;background:#fff5dd;box-shadow:2px 3px #c4b39b;transform:rotate(-8deg)}
.meal-scene:before{content:'';position:absolute;left:0;right:0;bottom:90px;height:12px;background:#a3b29a;border-top:5px solid #e4d7b9;border-bottom:4px solid #8e9b83;z-index:-1}
.recipe-eggTart .food-table{background:repeating-linear-gradient(90deg,#f1d6ba 0 18px,#dfb5a0 18px 22px)}
.recipe-coconutChicken .food-serving{background:#927663;border:5px solid #615849;border-radius:8px 8px 18px 18px;box-shadow:-8px 0 #615849,8px 0 #615849}
@media(prefers-reduced-motion:reduce){.meal-scene *{animation:none!important}}

.quiz-image{display:block;width:100%;max-height:36vh;object-fit:contain;margin:12px auto;background:#f3eddf;border-radius:8px}

.quiz-multiple-option{display:flex;gap:10px;align-items:center;padding:14px;border:2px solid #a7b39a;background:#fff8e9;cursor:pointer}.quiz-multiple-option:has(input:checked){background:#e3eddd;border-color:#668d74}.quiz-multiple-option input{width:20px;height:20px;flex-shrink:0;accent-color:#668d74}

/* Cream-white paper, mint sections and red accents; scene artwork keeps its palette. */
#game #modal{background:#fffdf9;border-color:#a9beb4;box-shadow:inset 0 0 0 2px #fff,4px 5px #405b5033;color:#4d5751}
#game #modal .modal-head{background:#bd6265;border-bottom:3px solid #e7b8b8;box-shadow:inset 0 2px #da9193}
#game #modal .modal-head h1{color:#fffdf9}
#game #modal .modal-head button{background:#fffdf9;border-color:#a45c60;color:#a34f55;box-shadow:inset 0 0 0 2px #fff,2px 2px #894a5033}
#game #modal #panel{background:#fffdf9;scrollbar-color:#a3c7b7 #f4f8f5}
#game #modal :is(.event,.tile,.review,.postcard,.destination,.inventory-card,.birthday-checklist article,.task-checklist article,.backstage-card){background:#f7faf7;border-color:#b8cdc2;box-shadow:inset 0 0 0 2px #fffdf9}
#game #modal #panel :is(.panel-secondary,.journey-option){background:#f5faf7;border-color:#bbd1c5;box-shadow:0 2px #d9e6df}
#game #modal #panel .journey-today{background:#e3f3ec;border-color:#97c2af;border-left-color:#c16a6c}
#game #modal #panel .journey-today h2{color:#427764}
#game #modal #panel .journey-today p,#game #modal .sub{color:#68766d}
#game #modal .concert-day-purpose{background:#fff9f8;border-color:#c7797a;color:#79575a}
#game #modal .travel-days span{background:#eef6f1;border-color:#b8cec1;color:#5c7567}
#game #modal .travel-days .today{background:#bd6265;border-color:#a75055;color:#fffdf9}
#game #modal #tabs,#game #modal #tabs button{background:#ecf6f0;border-color:#bed3c7;color:#527563}
#game #modal #tabs button.active{background:#d7eee2;color:#376c55;box-shadow:inset 0 -3px #83af99}
#game #modal .action{background:#e7f4ed;border-color:#92b6a3;color:#426d59;box-shadow:0 2px #b7d1c2}
#game #modal .action.primary{background:#bd6265;border-color:#a75157;color:#fffdf9;box-shadow:0 2px #9d4c53}
#game #modal #feedback:not(:empty){background:#ecf7f1;border-color:#b8d2c3;color:#4e6e5c}
:is(#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene){background-color:#fffdf9;border-color:#a9beb4}
/* The live stage occupies the panel directly, with all three pads in reach. */
#game #modal.performance-focused{height:auto;max-height:calc(100% - 12px)}
#game #modal.performance-focused .panel-help{display:none}
#game #modal.performance-focused #panel{padding:8px;overflow-anchor:none}
#game #modal.performance-focused .rhythm-show{margin:0;padding:8px;background:#f5faf7;border-color:#a3c5b5}
#game #modal.performance-focused .rhythm-show h3{margin:0 0 6px;font-size:13px}
#game #modal.performance-focused .rhythm-cast{height:clamp(42px,11dvh,90px)}
#game #modal.performance-focused .rhythm-lanes{height:clamp(100px,23dvh,207px)}
#game #modal.performance-focused .rhythm-hit-line{top:62%;height:32px;background:#baded252;border-color:#c3eddd}
#game #modal.performance-focused .rhythm-pads{margin-top:7px}
#game #modal.performance-focused .rhythm-pads .action{min-height:50px;margin:0;padding:6px 2px;font-size:11px}
#game #modal.performance-focused .rhythm-pads .action:first-child{background:#f9e9e9;border-color:#c88789;color:#a45258}
#game #modal.performance-focused .rhythm-status{padding:5px;margin:5px 0;background:#e8f4ee;color:#507362;font-size:11px}
#game #modal.performance-focused .actions{margin:5px 0 0}
/* Live feedback must never change the stage height or move the hit targets. */
#game #modal.performance-focused #feedback{display:none}

/* Reserve the full 88px sprite height; compact the lane, never crop the cast. */
#game #modal.performance-focused .rhythm-cast.choreographed{height:112px;min-height:112px;flex-shrink:0}
#game #modal.performance-focused .rhythm-cast .choreographed-actor{top:auto;bottom:10px;height:88px;line-height:0}
#game #modal.performance-focused .rhythm-cast .stage-figure{display:block;width:68px;height:88px}
@media(max-height:650px){
 #game #modal.performance-focused .rhythm-cast.choreographed{height:104px;min-height:104px}
 #game #modal.performance-focused .rhythm-cast .choreographed-actor{bottom:8px}
 #game #modal.performance-focused .rhythm-lanes{height:88px}
 #game #modal.performance-focused .rhythm-show{padding:5px}
 #game #modal.performance-focused .rhythm-show h3{display:none}
 #game #modal.performance-focused .rhythm-pads .action{min-height:44px}
 #game #modal.performance-focused #feedback{display:none}
}
/* Match remaining instruction cards to the shared paper surfaces. */
#game #modal :is(.context-notes,.packed,.task-actions,.birthday-kitchen,.inventory-summary,.place-hint){background:#edf7f2;border-color:#b4cebf;color:#536f60}
#game #modal :is(.task-checklist article,.birthday-checklist article){background:#fffdf9;border-color:#b7cec1}
#game #modal :is(.task-checklist article.done,.task-actions){background:#e4f3eb;border-color:#9cbeab}
#game #modal .occasion-steps li.current{background:#f8e8e9;color:#a6545b}

/* Outfit-specific light rigs stay behind the performers and outside note lanes. */
.rhythm-stage{--stage-top:#514253;--stage-floor:#827184;--stage-lane:#342d3b;--stage-edge:#b99ba9;--light-one:#ffd2db;--light-two:#c7f4df;--light-three:#ffe6b6}
.rhythm-stage[data-outfit="candy"]{--stage-top:#574151;--stage-floor:#a97a91;--stage-lane:#3c303e;--stage-edge:#c995aa;--light-one:#ffc9de;--light-two:#b9f3df;--light-three:#ffe4b8}
.rhythm-stage[data-outfit="cozy"]{--stage-top:#514a64;--stage-floor:#8c7c97;--stage-lane:#353044;--stage-edge:#b7a5c4;--light-one:#ffe1a3;--light-two:#ffd4b0;--light-three:#bce5dd}
.rhythm-stage[data-outfit="circus"]{--stage-top:#552e45;--stage-floor:#966278;--stage-lane:#382b3b;--stage-edge:#c58d9b;--light-one:#ffc6cd;--light-two:#b9ead9;--light-three:#ffe097}
.rhythm-stage[data-outfit="glory"]{--stage-top:#253947;--stage-floor:#527780;--stage-lane:#252e3a;--stage-edge:#7faab3;--light-one:#8fe9ef;--light-two:#b8b9ff;--light-three:#e3f8ff}
.rhythm-stage[data-outfit="patchwork"]{--stage-top:#514265;--stage-floor:#8f7d9c;--stage-lane:#342e45;--stage-edge:#b8a0cb;--light-one:#e8beff;--light-two:#ffd2e4;--light-three:#d8e2ff}
.rhythm-stage[data-outfit="sailor"],.rhythm-stage[data-outfit="blueSuit"]{--stage-top:#28475d;--stage-floor:#6a9eac;--stage-lane:#293a4c;--stage-edge:#96bacb;--light-one:#e3f9ff;--light-two:#a3dceb;--light-three:#c5f1de}
.rhythm-stage[data-outfit="mint"]{--stage-top:#33594f;--stage-floor:#7aa38c;--stage-lane:#2c403b;--stage-edge:#99c3ad;--light-one:#c7f5dc;--light-two:#f5e7bd;--light-three:#d5e9ff}
.rhythm-stage[data-outfit="silver"]{--stage-top:#354254;--stage-floor:#7d8c9f;--stage-lane:#2b3342;--stage-edge:#a6b8c9;--light-one:#f5fbff;--light-two:#bdd8f8;--light-three:#ddd2ff}
.rhythm-stage[data-outfit="noir"]{--stage-top:#292c3a;--stage-floor:#625b75;--stage-lane:#252635;--stage-edge:#8b859e;--light-one:#e4ddff;--light-two:#accde9;--light-three:#ffe3c7}
.rhythm-stage[data-outfit="scarlet"],.rhythm-stage[data-outfit="retro"]{--stage-top:#583346;--stage-floor:#9d697c;--stage-lane:#3b2d3d;--stage-edge:#c18a99;--light-one:#ffd3d8;--light-two:#ffe0af;--light-three:#c1e9db}
#game #modal.performance-focused .rhythm-stage{border-color:var(--stage-edge);background:var(--stage-lane)}
#game #modal.performance-focused .rhythm-cast.choreographed{background:linear-gradient(var(--stage-top) 0 66%,var(--stage-floor) 67%);border-bottom-color:var(--stage-edge)}
#game #modal.performance-focused .rhythm-lanes{background-color:var(--stage-lane);border-top-color:var(--stage-edge)}
#game #modal.performance-focused .rhythm-cast:after{background:#ecf7f244;box-shadow:0 -20px #ecf7f21a}
.stage-ambience{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.stage-wash{position:absolute;inset:0;background:radial-gradient(ellipse at 20% 0,var(--light-one),transparent 55%),radial-gradient(ellipse at 85% 10%,var(--light-two),transparent 55%);opacity:.12;animation:stage-wash-breathe 7s ease-in-out infinite alternate}
.stage-light-rig{position:absolute;inset:0;opacity:.45}
.stage-light-rig i{position:absolute;left:calc(8% + var(--beam-index)*34%);top:-9px;width:27%;height:155%;background:linear-gradient(var(--light-one),transparent);clip-path:polygon(42% 0,58% 0,100% 100%,0 100%);opacity:.24;transform-origin:50% 0;animation:stage-beam-sweep 6s ease-in-out infinite alternate}
.stage-light-rig i:nth-child(2){background:linear-gradient(var(--light-two),transparent);animation-direction:alternate-reverse}
.stage-light-rig i:nth-child(3){background:linear-gradient(var(--light-three),transparent)}
.stage-sparkles{position:absolute;inset:0}
.stage-sparkles i{position:absolute;width:6px;height:6px;background:var(--light-one);clip-path:polygon(33% 0,66% 0,66% 33%,100% 33%,100% 66%,66% 66%,66% 100%,33% 100%,33% 66%,0 66%,0 33%,33% 33%);opacity:.25;animation:stage-star-shimmer 3.8s ease-in-out infinite alternate}
.stage-sparkles i:nth-child(even){background:var(--light-two);width:4px;height:4px}
.stage-ambience[data-kind="beams"] .stage-light-rig{opacity:.8}
.stage-ambience[data-kind="beams"] .stage-light-rig i{animation-duration:3.8s}
.stage-ambience[data-kind="glow"] .stage-light-rig{opacity:.25}
.stage-ambience[data-kind="waves"] .stage-wash{inset:40% -10% -30%;background:repeating-radial-gradient(ellipse at 50% 100%,transparent 0 12px,#d2f3f82e 14px 16px,transparent 18px 28px);opacity:.4;animation:stage-wave-drift 6s ease-in-out infinite alternate}
.stage-ribbons{position:absolute;inset:0}
.stage-ribbons i{position:absolute;top:-16px;width:4px;height:12px;background:var(--light-one);opacity:0;animation:stage-ribbon-fall var(--ribbon-time) linear infinite}
.stage-ribbons i:nth-child(3n){background:var(--light-two)}
.stage-ribbons i:nth-child(3n + 1){background:var(--light-three);height:8px}
@keyframes stage-wash-breathe{to{opacity:.24;transform:translateX(8%)}}
@keyframes stage-beam-sweep{from{transform:rotate(-19deg);opacity:.14}to{transform:rotate(19deg);opacity:.3}}
@keyframes stage-star-shimmer{to{opacity:.75;transform:scale(1.25)}}
@keyframes stage-wave-drift{to{transform:translate(12px,-6px);opacity:.6}}
@keyframes stage-ribbon-fall{0%{opacity:0;transform:translate(0,-10px) rotate(0)}15%{opacity:.65}85%{opacity:.55}100%{opacity:0;transform:translate(24px,160px) rotate(210deg)}}
@media(prefers-reduced-motion:reduce){.stage-ambience *{animation:none!important}.stage-ribbons i{top:35%;opacity:.35}.stage-wash{opacity:.16}.stage-sparkles i{opacity:.45}}

/* Live performers use a separate layout, independent of rehearsal coordinates. */
#game #modal.performance-focused .rhythm-cast.choreographed{display:grid;grid-template-rows:1fr;align-items:end;height:124px;min-height:124px;padding:8px 12px 14px;box-sizing:border-box}
#game #modal.performance-focused .live-stage-pair{position:relative;inset:auto;display:flex;align-items:flex-end;justify-content:center;gap:clamp(28px,12vw,72px);height:88px;min-height:88px;width:100%;margin:0;padding:0;z-index:2;transform:none;line-height:0}
#game #modal.performance-focused .live-stage-person{position:static;display:block;flex:0 0 68px;width:68px;height:88px;margin:0;padding:0;transform:none;animation:none}
#game #modal.performance-focused .live-stage-person>.stage-figure{position:static;display:block;inset:auto;width:68px;height:88px;margin:0;padding:0;transform:none;zoom:1;animation:none}
@media(max-height:650px){#game #modal.performance-focused .rhythm-cast.choreographed{height:112px;min-height:112px;padding:4px 8px 8px}}

/* Match the room's solid pixel furniture: layered edges, flat colour and crisp shadows. */
#game #modal{border:3px solid #788d80;background:#f6f3e9;box-shadow:inset 0 0 0 1px #fffef9,3px 3px 0 #7c8c7e;color:#4b564d;border-radius:0}
#game #modal .modal-head{background:#bf6259;border-bottom:3px solid #8d4947;box-shadow:inset 0 3px #df9390,inset 0 -2px #ad5352}
#game #modal .modal-head button{border:2px solid #8d514d;background:#f6f3e9;box-shadow:inset 2px 2px #fff,inset -2px -2px #d7dfd2,2px 2px #854744;border-radius:0}
#game #modal #panel{background:#f6f3e9;font-family:var(--game-font);font-synthesis:none}
#game #modal #panel :is(button,select,summary,h2,h3,h4,small){font-family:var(--game-font);font-weight:400;font-synthesis:none}
#game #modal #panel :is(.event,.tile,.review,.postcard,.destination,.inventory-card,.panel-secondary,.journey-option,.task-checklist article,.birthday-checklist article,.birthday-kitchen,.inventory-summary){border:2px solid #829f8d;border-radius:0;background:#e2efe5;box-shadow:inset 1px 1px #fffef9,0 2px #b4cbbc}
#game #modal #panel .journey-today{background:#d7ebdf;border:2px solid #7e9f8b;border-left:6px solid #bb6862;box-shadow:inset 2px 2px #ecf6e9,2px 2px #a2b9a5}
#game #modal .action{border:2px solid #729582;background:#d9eddf;color:#3e6650;box-shadow:inset 2px 2px #f2faed,inset -2px -2px #b2d0ba,2px 3px #6e8b77;border-radius:0;clip-path:var(--pixel-cut)}
#game #modal .action.primary{background:#bf6259;border-color:#92504b;color:#f6f3e9;box-shadow:inset 2px 2px #e4a198,inset -2px -2px #ac5752,2px 3px #884a46}
#game #modal .action:active:not(:disabled){box-shadow:inset 2px 2px #a6bda9;transform:translateY(1px)}
#game #modal .action.primary:active:not(:disabled){box-shadow:inset 2px 2px #914b49}
#game #modal .travel-days span{border:2px solid #97ad9b;background:#e5eee0;box-shadow:inset 2px 2px #f6f3e9}
#game #modal .travel-days .today{background:#bd6861;border-color:#97574f;box-shadow:inset 2px 2px #dc9b8d;color:#f6f3e9}
#game #modal .rhythm-show{border:2px solid #839e8c;box-shadow:inset 2px 2px #fffef9,2px 2px #b1c8b5}
#game #modal.performance-focused .rhythm-pads .action:first-child{background:#eed4d0;border:2px solid #b37570;box-shadow:inset 2px 2px #fff3ea,inset -2px -2px #ddb3ad,2px 3px #9c6860}
#game #modal.performance-focused .rhythm-status{border:1px solid #a0bba8;background:#e0ede1}
#game #modal .rhythm-stage{border-width:4px;box-shadow:inset 0 0 0 2px #ffffff24}
#game #modal .rhythm-cast.choreographed{background:linear-gradient(var(--stage-top) 0 66%,var(--stage-edge) 66% 69%,var(--stage-floor) 69%);border-bottom-width:6px}
.stage-wash{background:linear-gradient(90deg,var(--light-one) 0 32%,transparent 32% 68%,var(--light-two) 68%);opacity:.06;animation:none}
.stage-light-rig i{background:var(--light-one);clip-path:polygon(44% 0,56% 0,56% 18%,64% 18%,64% 38%,74% 38%,74% 62%,86% 62%,86% 82%,100% 82%,100% 100%,0 100%,0 82%,14% 82%,14% 62%,26% 62%,26% 38%,36% 38%,36% 18%,44% 18%);animation-timing-function:steps(10,end)}
.stage-light-rig i:nth-child(2){background:var(--light-two)}
.stage-light-rig i:nth-child(3){background:var(--light-three)}
.stage-sparkles i{animation:pixel-star-glimmer 4s steps(3,end) infinite alternate;transform:none}
.stage-ribbons i{animation-timing-function:steps(18,end)}
.stage-ambience[data-kind="waves"] .stage-wash{inset:60% 0 0;background:repeating-linear-gradient(0deg,transparent 0 12px,#c2e6e83d 12px 15px,transparent 15px 24px);animation:pixel-wave-shift 6s steps(8,end) infinite alternate}
@keyframes pixel-star-glimmer{from{opacity:.25}to{opacity:.7}}
@keyframes pixel-wave-shift{to{transform:translateY(-8px)}}
body #music-review{background:#dbece1;border-bottom:3px solid #7b9b88;color:#4a6554;box-shadow:inset 0 2px #f7fbed}
body #music-review select,body #music-review button{clip-path:var(--pixel-cut);border:2px solid #7f9e8c;background-color:#f6f3e9;color:#4a6754;box-shadow:inset 2px 2px #fff,inset -2px -2px #d8e4d5,2px 2px #8aa08b}
body #music-review button{background:#efd9d2;border-color:#ac7770;color:#9a514f;box-shadow:inset 2px 2px #fff0e8,inset -2px -2px #d8aca3,2px 2px #9c7166}
@media(prefers-reduced-motion:reduce){.stage-ambience *{animation:none!important}}

/* Three musical parts have distinct, consistent colours in pads and falling notes. */
#game #modal.performance-focused .rhythm-pads .action:nth-child(2){background:#dedbd5;border:2px solid #928d83;color:#57544d;box-shadow:inset 2px 2px #f8f7f3,inset -2px -2px #c4bfb6,2px 2px #827d74}
#game #modal.performance-focused .rhythm-pads .action:nth-child(3){background:#d9eddf;border:2px solid #729582;color:#3e6650;box-shadow:inset 2px 2px #f2faed,inset -2px -2px #b2d0ba,2px 3px #6e8b77}
#game #modal.performance-focused .rhythm-pads .action:disabled{opacity:.72}
#game #modal.performance-focused .rhythm-pads .action.beat-flash{outline:2px solid #fffdf2;outline-offset:-5px;filter:brightness(1.08)}
.falling-note[data-rhythm-lane="0"]{color:#f4aaa9;text-shadow:2px 2px #54343b}
.falling-note[data-rhythm-lane="1"]{color:#e3e0da;text-shadow:2px 2px #45443f}
.falling-note[data-rhythm-lane="2"]{color:#b3e2cd;text-shadow:2px 2px #293e39}
/* Rehearsal uses character colours; the checkmark and inset edge indicate selection. */
#game #modal .action[data-action="selectRehearsal"][data-who="jimi"]{background:#eed4d0;border-color:#b37570;color:#9d514e;box-shadow:inset 2px 2px #fff3ea,inset -2px -2px #ddb3ad,2px 3px #9c6860}
#game #modal .action[data-action="selectRehearsal"][data-who="han"]{background:#d9eddf;border-color:#729582;color:#3e6650;box-shadow:inset 2px 2px #f2faed,inset -2px -2px #b2d0ba,2px 3px #6e8b77}
#game #modal .action[data-action="selectRehearsal"].primary{outline:2px solid currentColor;outline-offset:-6px}

/* A small pixel sign shares the room's wood trim, paper and mint icon. */
#game .hotspot.journey-open{height:48px;min-width:152px;padding:0 14px;gap:10px;background:#f6f3e9;border:2px solid #977e65;border-radius:0;clip-path:var(--pixel-cut);box-shadow:inset 2px 2px #f6f3e9,inset -2px -3px #d7c9b6;align-items:center;color:#6b5847;font:12px var(--game-font);text-shadow:none}
#game .hotspot.journey-open svg{width:20px;height:22px;fill:#618b75;stroke:none;shape-rendering:crispEdges;flex:none}
#game .hotspot.journey-open b{display:block;width:6px;height:10px;background:#ab6258;clip-path:polygon(0 0,2px 0,2px 2px,4px 2px,4px 4px,6px 4px,6px 6px,4px 6px,4px 8px,2px 8px,2px 10px,0 10px,0 8px,2px 8px,2px 6px,4px 6px,4px 4px,2px 4px,2px 2px,0 2px);font-size:0}
#game .hotspot.journey-open:hover{background:#f6f3e9;border-color:#80664f}
#game .hotspot.journey-open:active{box-shadow:inset 2px 2px #d2c4b1,inset -1px -1px #f6f3e9;transform:translate(-50%,2px)}

/* Shared interface frames: room-like edges without stacking decorative frames. */
#game #scene-back{border:2px solid #977e65;border-radius:0;background:#f6f3e9;color:#6b5847;box-shadow:inset 2px 2px #f6f3e9,inset -2px -2px #d7c9b6;font-family:var(--game-font);min-height:44px}
#game #modal #panel :is(.programme-card,.style-outfit-card,.visit-programme){border:2px solid #829f8d;border-radius:0;background:#e9f2e9;box-shadow:inset 1px 1px #fffef9,0 2px #b4cbbc}
#game #modal #panel .style-outfit-card.chosen{border-color:#60866f;background:#e3eee3;box-shadow:inset 0 -3px #a8c6ae,0 2px #8da693}
#game #modal #panel .outfit-preview{border:0;box-shadow:none;background:transparent;clip-path:none}
#game #modal #panel .context-notes{border:2px solid #a2b6a6;background:#e2efe5;box-shadow:inset 1px 1px #fffef9}
#game #modal #panel .outfit-material-needs{background:#edece5;border-left:3px solid #9a9386}
:is(#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene),#short-scene.short-preparation{background:#f6f3e9;color:#4b564d;border:3px solid #788d80;border-radius:0;box-shadow:inset 0 0 0 1px #fffef9,3px 3px #7c8c7e}
:is(#short-scene,#frame-studio,#memory-video-prompt,#memory-campus,#memory-light-scene) button,#short-scene.short-preparation button{border:2px solid #829a87;border-radius:0;background:#f2f6ed;color:#4a6554;box-shadow:inset 2px 2px #fffef9,inset -2px -2px #cbdacb;clip-path:var(--pixel-cut);font-family:var(--game-font)}
:is(#short-scene,#frame-studio) button[aria-pressed=true]{background:#d9eddf;border-color:#60866f;box-shadow:inset 2px 2px #eef8ea,inset -2px -2px #aec8b2}
#short-scene.short-preparation [data-short=finishPrep],#short-scene.short-photo [data-short=shutter]{background:#bf6259;border-color:#92504b;color:#f6f3e9;box-shadow:inset 2px 2px #e4a198,inset -2px -2px #ac5752}
#game #modal #panel :is(.esports-invite,.esports-pair,.coop-pad,#arcade-canvas){border-radius:0}
#game #modal #panel .esports-invite{border:2px solid #829f8d;background:#e2efe5;box-shadow:inset 1px 1px #fffef9,0 2px #b4cbbc}
#game #modal #panel :is(.arcade-controls,.coop-pad) button{border:2px solid #829a87;border-radius:0;clip-path:var(--pixel-cut);box-shadow:inset 2px 2px #fffef9,inset -2px -2px #cbdacb}
#game #modal #panel .coop-pad:not(.han) button{border-color:#b37570;background:#eed4d0;color:#8d4b47;box-shadow:inset 2px 2px #fff3ea,inset -2px -2px #ddb3ad}
#game #modal #panel .coop-pad.han button{border-color:#729582;background:#d9eddf;color:#3e6650;box-shadow:inset 2px 2px #f2faed,inset -2px -2px #b2d0ba}

/* New piano stages retain crisp pixel lighting and each outfit's own palette. */
.rhythm-stage[data-outfit="white"]{--stage-top:#394b43;--stage-floor:#83978a;--stage-lane:#2d3934;--stage-edge:#a9b8a7;--light-one:#f6f3e9;--light-two:#c5e5d1;--light-three:#dcd8cf}
.rhythm-stage[data-outfit="retro"]{--stage-top:#60403f;--stage-floor:#ab7d75;--stage-lane:#3c3032;--stage-edge:#c89989;--light-one:#f4d3c5;--light-two:#c5e5d1;--light-three:#eee8d9}
.rhythm-stage[data-outfit="scarlet"]{--stage-top:#4f2f34;--stage-floor:#98585a;--stage-lane:#34292d;--stage-edge:#ba7c76;--light-one:#f5ddd5;--light-two:#d9e4dc;--light-three:#eeb3a6}
.rhythm-stage[data-outfit="mint"] .stage-sparkles i{width:8px;height:8px;background:#f4f5df}

/* Quiet overhead lighting: narrow, low-contrast bands, never large stair towers. */
.stage-light-rig{opacity:.36}
.stage-ambience[data-kind="beams"] .stage-light-rig{opacity:.48}
.stage-light-rig i,.stage-light-rig i:nth-child(2),.stage-light-rig i:nth-child(3){top:0;left:calc(12% + var(--beam-index)*32%);width:16%;height:100%;background:linear-gradient(to bottom,#f2f5ee24 0 24%,#f2f5ee1c 24% 50%,#f2f5ee14 50% 75%,#f2f5ee0c 75%);clip-path:polygon(36% 0,54% 0,78% 100%,6% 100%);transform:none;opacity:.65;animation:stage-light-drift 9s steps(16,end) infinite alternate}
.stage-light-rig i:nth-child(2){animation-direction:alternate-reverse;animation-duration:11s}
.stage-light-rig i:nth-child(3){animation-duration:13s}
.stage-ambience[data-kind="beams"] .stage-light-rig i{animation-duration:9s}
.stage-wash{opacity:.035}
@keyframes stage-light-drift{from{transform:translateX(-6px);opacity:.45}to{transform:translateX(6px);opacity:.75}}
@media(prefers-reduced-motion:reduce){.stage-light-rig i{animation:none!important;opacity:.55}}

/* Touch-down timing: the pads are game controls, not scrolling surfaces. */
#game #modal.performance-focused .rhythm-pads .action{touch-action:none;user-select:none;-webkit-user-select:none}

.bgm-settings{margin-top:16px;padding:12px;border:2px solid #91aa99;background:#f2f7ef;color:#4b6454}.bgm-settings h3{font-family:var(--game-font)}.bgm-settings label{display:block;margin:12px 0}.bgm-settings input{width:150px;max-width:65%;accent-color:#789b84}.bgm-settings small{display:block;margin-top:8px}

#bgm-start{position:fixed;z-index:100;left:50%;bottom:86px;transform:translateX(-50%);padding:10px 14px;min-height:44px;max-width:90vw;border:2px solid #729582;background:#e0eee1;color:#42634f;font:12px var(--game-font);box-shadow:2px 3px #6e8b77;clip-path:var(--pixel-cut)}#bgm-start[hidden]{display:none}

#global-sound{position:static;min-height:32px;padding:6px 8px;border:2px solid #729582;background:#edf5e9;color:#42634f;font:11px var(--game-font);clip-path:var(--pixel-cut);box-shadow:inset 1px 1px #fffef9,2px 2px #6e8b77}#global-sound[aria-pressed="false"]{background:#e4e0d8;color:#655c52;border-color:#968878}.stage-sound-hint{padding:8px;border-left:3px solid #839e8c;background:#edf5e9;font:12px/1.7 var(--game-font);color:#526957}

/* A dedicated row keeps audio controls away from the letter lamp and modal close. */
#sound-dock{height:42px;width:min(100vw,480px);margin:0 auto;padding:3px 10px;display:flex;align-items:center;justify-content:space-between;background:#dbece1;border-bottom:2px solid #7b9b88;color:#4a6554;font:11px var(--game-font)}#sound-dock #global-sound{position:static;min-height:32px;transform:none}body:has(#sound-dock) #game{height:calc(100dvh - 42px)}body:has(#music-review):has(#sound-dock) #game{height:calc(100dvh - 88px)}

#bgm-start{background:#b95e59;border-color:#8d4947;color:#fffaf0;box-shadow:inset 2px 2px #df9589,inset -2px -2px #a64f4b,2px 3px #82433f}



/* Shared small controls use the same stepped edge as the room buttons. */
#game #modal #panel :is(select,input[type=text],input[type=number]){border:2px solid #829f8d;border-radius:0;background:#f6f3e9;color:#4b564d;box-shadow:inset 2px 2px #fffdf5,inset -2px -2px #c5d7c9;font-family:var(--game-font)}
#game #modal :is(.modal-head button,.panel-help button){clip-path:var(--pixel-cut);border-radius:0;font-family:var(--game-font)}
#game #modal #panel :is(.birthday-checklist article,.task-checklist article,.panel-secondary,.context-notes){box-shadow:inset 2px 2px #f6f8ef,inset -2px -2px #c5d8ca,0 2px #96b29e}
#game #modal #panel .birthday-checklist details .action{display:block;width:100%;text-align:left;white-space:normal;line-height:1.7;margin-top:10px}

/* Travel dialogue shares one pixel bubble above the speaking character. */
.scene-speech.concert-travel-dialogue{display:block;margin:0;border-radius:0;font-family:var(--game-font);box-shadow:2px 2px #75665a}
.scene-speech.concert-travel-dialogue p{padding:0;border:0;background:transparent;border-radius:0;max-width:none;font:inherit}

/* Reserve a speech area above the full 88px sprites, within the scene edges. */
.quiet-walk,.meal-scene,.retreat-scene:not(.retreat-memory){container-type:inline-size;min-height:320px}
.quiet-walk .walk-pair .scene-speech,.meal-people .scene-speech,.retreat-people .scene-speech{left:50%!important;bottom:104px;width:min(220px,calc(100cqw - 24px));max-width:calc(100vw - 100px);box-sizing:border-box;overflow-wrap:anywhere;font-size:13px;line-height:1.6;margin:0}
.quiet-walk .scene-speech:after,.meal-people .scene-speech:after,.retreat-people .scene-speech:after{left:calc(50% - 43px)}
.quiet-walk .scene-speech.han:after,.meal-people .scene-speech.han:after,.retreat-people .scene-speech.han:after{left:calc(50% + 31px)}

/* Keep daily conversation controls reachable as the chat grows. */
.daily-dialogue{display:flex;flex-direction:column;border-radius:0;box-shadow:2px 2px #829989}
.daily-dialogue-log{height:min(32dvh,240px);max-height:min(32dvh,240px);min-height:0;overflow-y:auto;flex-shrink:1}
.daily-dialogue-heading,.daily-dialogue>.daily-continue.action{flex-shrink:0}
.daily-dialogue>.daily-continue.action{min-height:48px;border-radius:0;position:sticky;bottom:0}

/* Short dialogue and fishing controls stay within the visible panel. */
.walk-dialogue-controls,#panel .actions:has([data-action="nextHalloweenLine"]),#panel .actions:has([data-action="nextBirthdayInterlude"]){position:sticky;bottom:0;z-index:8;padding:8px 0;background:#f6f3e9;border-top:2px solid #96b5a5}
.walk-dialogue-controls button{min-height:48px;flex:1}
#modal[data-view="fishing"] #panel{display:flex;flex-direction:column;min-height:0;overflow-y:auto}
#modal[data-view="fishing"] .panel-help{display:none}
.fishing-play{display:flex;flex-direction:column;min-height:0;flex:1}
.fishing-status{flex-shrink:0}.fishing-status h3,.fishing-status p{margin:4px 0}
.fishing-status .calibration-feedback{min-height:22px;margin:4px 0}
.fishing-visual{flex:1;min-height:80px;overflow:auto}
.fishing-visual .pond-art{height:clamp(90px,20dvh,180px);min-height:0;margin:4px 0}
.fishing-visual .calibration-dial{width:min(180px,28dvh);height:min(180px,28dvh);margin:8px auto}
.fishing-controls{position:sticky;bottom:0;z-index:9;display:grid;grid-template-columns:1fr;gap:6px;padding:8px 0;background:#f6f3e9;border-top:2px solid #96b5a5;flex-shrink:0}
.fishing-controls .action{margin:0;min-height:48px;width:100%}
.fishing-extras{flex-shrink:0;margin-top:6px}.fishing-extras summary{min-height:36px;padding:6px}

#sound-dock #open-sound-settings{position:static;min-height:32px;padding:4px 10px;margin-left:8px;font:inherit;color:#526b5c;background:#fffdf5;border:2px solid #8da997;border-radius:0;box-shadow:2px 2px #7e9487}
#sound-dock>span{margin-right:auto}
#sound-mixer{position:fixed;z-index:10000;top:50%;left:50%;transform:translate(-50%,-50%);width:min(360px,calc(100vw - 28px));max-height:calc(100dvh - 32px);overflow:auto;box-sizing:border-box;padding:16px;background:#f6f3e9;border:3px solid #819989;box-shadow:4px 4px #526b5c;color:#4b564d;font:14px var(--game-font)}
#sound-mixer>[data-bgm="close"]{float:right;min-width:44px;min-height:44px}
.bgm-settings label{display:block;margin:16px 0}.bgm-settings input[type="range"]{display:block;width:100%;min-height:36px;margin:4px 0;accent-color:#b95f58;touch-action:pan-y}
.bgm-settings output{float:right}.bgm-settings button,#sound-mixer>[data-bgm="close"]{font:inherit;border:2px solid #829989;border-radius:0;background:#deeee3;color:#4b564d;min-height:40px;padding:6px 10px;box-shadow:2px 2px #829989}.bgm-settings p,.bgm-settings small{font-size:12px;line-height:1.6}

/* Keep optional plans off the room until the player asks for them. */
#planning-bell{position:relative;flex:0 0 44px;margin-left:auto;width:44px;height:34px;min-height:34px;padding:5px 10px;border:2px solid #829989;border-radius:0;background:#f6f3e9;box-shadow:2px 2px #637e70;color:#ab5953;touch-action:manipulation}
#planning-bell svg{display:block;width:20px;height:20px;fill:currentColor;shape-rendering:crispEdges}
#planning-bell[aria-expanded="true"]{background:#deeee3}
.hud .planning-ribbon{position:absolute;top:calc(100% + 8px);right:0;width:min(260px,calc(100vw - 40px));margin:0;padding:8px;display:flex;flex-direction:column;gap:8px;z-index:20;pointer-events:auto;border:2px solid #829989;background:#f6f3e9;box-shadow:3px 3px #637e70}
.hud .planning-ribbon .action{font-size:12px;min-height:44px;margin:0;padding:6px 8px}
.hud .planning-ribbon[hidden]{display:none}

.home-notices{position:relative;display:flex;align-items:center;gap:8px;margin-top:6px}
.home-notices:not(:has(>button:not([hidden]))){display:none}
.home-notices #request-callout{flex:1;min-width:0;width:auto;margin:0;height:34px;min-height:34px;padding:3px 8px;border-width:2px;border-left-width:4px}
.home-notices #planning-bell[hidden]{display:none}
