:root{color-scheme:dark;--rose:#eed3ce;--gold:#f8dca6}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#21192b;font-family:Georgia,'Songti SC','SimSun',serif;color:#f9eddf}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:2px solid #fbe0af;outline-offset:5px}[hidden]{display:none!important}#world{position:relative;width:100%;height:100%;overflow:hidden;isolation:isolate}#backdrop{position:absolute;top:-25px;right:-25px;bottom:-25px;left:-25px;inset:-25px;background-position:center;background-size:cover;filter:blur(20px) brightness(.35);transform:scale(1.08)}#stage{height:100%;width:min(100%,calc(100vh * .666667));position:relative;margin:auto;overflow:hidden;background:#291b31;box-shadow:0 0 100px #160d21}#scene-art{position:absolute;width:100%;height:100%;object-fit:fill;user-select:none;transition:transform 2.2s cubic-bezier(.3,.05,.3,1),filter 1.5s;transform-origin:50% 48%;will-change:transform}#shade{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;pointer-events:none;background:linear-gradient(#140c2022,transparent 30%,transparent 65%,#160e2455);transition:background 1.8s}#stage.dark #shade{background:#120b3090}#stage.entering #scene-art{transform:scale(2.5)}#stage.cake-close #scene-art{transform:scale(1.7);transform-origin:50% 67%}#stage.balcony #scene-art{transform:scale(2.6);transform-origin:50% 30%;filter:brightness(.35)}#objects,#fx,#motes{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;pointer-events:none}.hotspot{position:absolute;transform:translate(-50%,-50%);border:0;border-radius:30%;background:transparent;pointer-events:auto;min-width:44px;min-height:44px}.hotspot:after{content:'';position:absolute;width:13px;height:13px;border:1px solid #ffe4acaa;border-radius:50%;left:50%;top:50%;margin:-6px;opacity:0;box-shadow:0 0 15px #ffe0a6;transition:opacity .4s}.hotspot:hover:after,.hotspot:focus-visible:after,#stage.show-hints .hotspot:after{opacity:.9;animation:signal 1.5s infinite}.hotspot .object-label{position:absolute;left:50%;top:100%;transform:translateX(-50%);white-space:nowrap;opacity:0;font-size:12px;letter-spacing:2px;text-shadow:0 2px 8px #000;background:#201526a0;padding:6px 9px;transition:opacity .3s;pointer-events:none}#stage.show-hints .hotspot .object-label{opacity:1}#controls{position:absolute;top:max(16px,env(safe-area-inset-top));right:20px;display:flex;gap:9px;z-index:7}#controls button{width:40px;height:40px;border:1px solid #f1dbc235;border-radius:50%;background:#251a2d55;box-shadow:0 3px 15px #0002;font-size:20px;color:#f4d9ba}#speech{position:absolute;bottom:8%;left:8%;width:84%;text-align:center;pointer-events:none;z-index:4;opacity:0;transform:translateY(5px);transition:opacity .55s,transform .55s;font-size:15px;letter-spacing:1.5px;line-height:1.9;text-shadow:0 2px 8px #1d1026,0 0 15px #180c25;padding:22px 9px;background:radial-gradient(ellipse,#22152cbb,transparent 72%)}#speech.visible{opacity:1;transform:none}#speech small{font-size:11px;color:#e8c5cc;display:block;margin-top:8px}#inventory{position:absolute;bottom:18px;left:18px;display:flex;gap:8px;z-index:5}#inventory button{width:45px;height:45px;border:1px solid #ebd5ad55;background:#291b3099;border-radius:50%;font-size:25px;color:#f6d69b;box-shadow:inset 0 0 16px #eac08b18}.mote{position:absolute;width:3px;height:3px;border-radius:50%;background:#ffe6b5;box-shadow:0 0 8px #ffd48c;animation:float 7s infinite ease-in-out;opacity:.7}#transition{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;background:#fbe3c2;opacity:0;pointer-events:none;transition:opacity .7s;z-index:9}#transition.cover{opacity:1}#loading{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;background:#251a30;z-index:15;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:13px;letter-spacing:3px}#loading>span{font-size:55px;color:#e7bf91;animation:signal 2s infinite}#loading button{border:1px solid #d7bcb1;background:#654452;padding:12px 20px}#overlay{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;z-index:12;background:#160d25b8;display:flex;align-items:center;justify-content:center;padding:70px 25px 35px;overflow:auto;-webkit-overflow-scrolling:touch}#close{position:fixed;top:18px;right:22px;width:44px;height:44px;background:#322037b0;border:1px solid #dec1b477;border-radius:50%;font-size:27px;z-index:2}#detail{width:100%;max-width:490px;max-height:100%;position:relative}.paper{color:#664455;background:#f3e2d5;border:1px solid #e4b9b4;box-shadow:0 20px 80px #0007,inset 0 0 65px #c7a19435;padding:40px 28px;animation:unfold .7s ease;line-height:2;letter-spacing:1px}.paper h2{font-size:23px;font-weight:400;text-align:center;margin:0 0 25px}.paper p{font-size:14px;white-space:pre-line}.paper small{font-size:11px;color:#94727b}.paper .signature{text-align:right;margin-top:25px}.paper .ornament{text-align:center;font-size:35px;color:#ad7385;margin-bottom:18px}.paper button,.soft-button{display:block;min-height:44px;margin:18px auto 0;padding:10px 18px;border:1px solid #bd889d70;background:#dfbdc0;color:#624252;font-size:13px;letter-spacing:1px}.paper button:disabled{opacity:.4;cursor:default}.memory-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;padding:8px}.memory-grid button{background:#eee1d4;border:0;color:#664557;padding:8px 8px 15px;transform:rotate(-3deg);box-shadow:0 6px 20px #0005}.memory-grid button:nth-child(even){transform:rotate(3deg)}.memory-grid img,.memory-blank{width:100%;aspect-ratio:4/5;object-fit:cover;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#bc9bac,#ddbfba);font-size:40px;color:#f4ded7}.memory-grid small{display:block;margin-top:10px;font-size:11px}.photo-view{background:#f1e5d9;color:#654458;padding:15px;text-align:center}.photo-view img{max-height:55vh;max-width:100%;object-fit:contain}.photo-view p{font-size:13px;line-height:1.8}.photo-nav{display:flex;justify-content:center;gap:15px}.photo-nav button{background:transparent;border:0;color:#765264;min-width:44px;min-height:44px;font-size:17px}.wish-view{text-align:center;line-height:2;text-shadow:0 2px 10px #1e0f2b}.wish-view .wish-light{font-size:80px;color:#fbdcaa;animation:signal 3s infinite;filter:drop-shadow(0 0 25px #f7bd78)}.wish-view p{font-size:15px;letter-spacing:2px}.wish-view button{background:#34223699;border:1px solid #e9c7ba77;color:#ffe7d8}.flames{position:absolute;left:43%;top:54%;width:14%;height:7%;display:flex;justify-content:space-around;pointer-events:none}.flames i{width:8px;height:18px;background:linear-gradient(#ffb45a,#fff2a3);border-radius:70% 30% 50% 50%;box-shadow:0 0 16px 7px #f7be6355;transform-origin:bottom;animation:flame .6s infinite alternate}.flames i:nth-child(2){animation-delay:.3s}.flames.extinguished i{animation:blow .7s forwards}.star-travel{position:absolute;left:20%;top:65%;font-size:34px;color:#ffe6af;text-shadow:0 0 20px #ffca7d;animation:star-rise 2.5s forwards}#fireworks{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;pointer-events:none}.light-pulse{position:absolute;left:10%;top:53%;width:23%;height:22%;background:radial-gradient(#ffe0a766,transparent 65%);animation:signal 3s infinite;pointer-events:none}.door-glow{position:absolute;left:49.5%;top:31%;width:1%;height:36%;background:#ffe7ab;box-shadow:0 0 18px 7px #ffdda0;animation:door-light 2s forwards}.gift-spark{position:absolute;left:78%;top:80%;font-size:30px;color:#f5d9a2;animation:star-rise 1.5s forwards}.scene-retry{position:absolute;top:35%;right:10%;bottom:35%;left:10%;inset:35% 10%;text-align:center}.scene-retry button{padding:15px;background:#e8c6d1;color:#55344c;border:0}#stage.show-hints #speech{bottom:2%}.small-options{display:grid;gap:10px}.small-options button{width:100%;margin:0}.fire-message{position:absolute;top:25%;width:100%;text-align:center;line-height:1.9;font-size:25px;color:#ffe2d1;text-shadow:0 2px 15px #22132d;animation:unfold 2s}.fire-message small{display:block;font-size:13px;margin-top:14px}.gate-time{position:absolute;top:24%;width:100%;text-align:center;color:#ffdfb1;font-size:17px;letter-spacing:2px;text-shadow:0 2px 8px #26152f;pointer-events:none}body.overlay-open #controls{visibility:hidden}@keyframes signal{50%{opacity:.45;transform:scale(.93)}}@keyframes float{50%{transform:translate(10px,-25px);opacity:.2}}@keyframes unfold{from{opacity:0;transform:translateY(15px) scale(.94)}to{opacity:1;transform:none}}@keyframes flame{to{transform:rotate(8deg) scale(.9)}}@keyframes blow{to{transform:rotate(65deg) scale(0);opacity:0}}@keyframes star-rise{to{left:50%;top:20%;transform:scale(.4);opacity:0}}@keyframes door-light{to{width:28%;left:36%;filter:blur(15px);opacity:.9}}@media(max-width:600px){#stage{width:100%;height:100%}#scene-art{object-fit:cover}#controls{right:12px;top:max(12px,env(safe-area-inset-top))}#controls button{width:36px;height:36px;font-size:18px}#speech{font-size:13px;bottom:8%}#overlay{padding:65px 20px 28px}.paper{padding:30px 23px}.paper p{font-size:13px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
/* 场景与点击区域始终共用2:3坐标，手机只裁去两侧，不拉伸画面。 */
#stage{position:absolute;left:50%;top:0;transform:translateX(-50%);width:calc(100vh * .666667);height:100%;margin:0}
#scene-art{object-fit:fill}
#speech{left:50%;width:min(84%,calc(100vw - 40px));transform:translate(-50%,5px)}
#speech.visible{transform:translate(-50%,0)}
#inventory{left:max(18px,calc((100% - 100vw)/2 + 18px))}
.flames{left:47.6%;top:45.4%;width:6.3%;height:2%}.flames i{width:4px;height:10px;box-shadow:0 0 10px 5px #f7be6355}
.light-pulse{left:8%;top:40%;width:22%;height:17%}
.door-inside{position:absolute;left:32%;top:28%;width:36%;height:35.5%;border-radius:48% 48% 0 0;background:linear-gradient(#f6d4aa55,#ffdfaa55),url('assets/salon-unlit.jpg') center/cover;box-shadow:0 0 12px #f9d3a5}
.door-leaf{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;background:url('assets/garden.jpg') center/100% 100%;transition:transform 1.8s ease;backface-visibility:hidden}
.leaf-left{clip-path:polygon(32% 29%,50% 28%,50% 63.5%,32% 63.5%);transform-origin:32% 48%}
.leaf-right{clip-path:polygon(50% 28%,68% 29%,68% 63.5%,50% 63.5%);transform-origin:68% 48%}
.doors-moving .leaf-left{transform:perspective(900px) rotateY(-75deg)}
.doors-moving .leaf-right{transform:perspective(900px) rotateY(75deg)}
.entering #fx{transform:scale(2.5);transform-origin:50% 48%;transition:transform 2.2s cubic-bezier(.3,.05,.3,1)}

.inspect-object{text-align:center;perspective:1000px}.inspect-caption{font-size:13px;letter-spacing:2px;margin-top:40px;text-shadow:0 2px 8px #201028}
.gift-object,.letter-object{position:relative;display:block;width:260px;height:200px;background:none;border:0;margin:20px auto;perspective:900px}
.object-base{position:absolute;top:20%;right:5%;bottom:0;left:5%;inset:20% 5% 0;background:linear-gradient(110deg,#d8a5b7,#efc8d1 45%,#b57e9b);box-shadow:0 25px 50px #160c2866;border:1px solid #efcad1}
.gift-object .object-base:after{content:'';position:absolute;left:45%;height:100%;width:11%;background:#925d82;box-shadow:inset 3px 0 8px #edbfcd55}
.object-lid{position:absolute;top:10%;right:0;bottom:65%;left:0;inset:10% 0 65%;background:linear-gradient(#f5d7dc,#cb97af);border:1px solid #efc8d2;box-shadow:0 10px 15px #7c426b55;transition:transform 1s,opacity 1s;z-index:2}
.object-seal{position:absolute;left:35%;top:-7%;width:30%;font-size:70px;color:#9b5f81;text-shadow:0 2px 1px #ebbad4;z-index:3;transition:transform .8s,opacity .8s}
.unsealed .object-lid{transform:translate(25px,-100px) rotate(-18deg);opacity:0}.unsealed .object-seal{transform:translateY(-100px) rotate(20deg);opacity:0}
.letter-object{height:175px}.letter-object .object-base{top:0;right:0;bottom:0;left:0;inset:0;background:linear-gradient(130deg,#f4e4d3,#d7b8bc);border:1px solid #e6c5c2}
.letter-object .object-lid{top:0;right:0;bottom:0;left:0;inset:0;clip-path:polygon(0 0,100% 0,50% 65%);background:#f3dcd1;transform-origin:top;border:0;box-shadow:none}
.letter-object .object-seal{font-size:22px;top:49%;left:43%;width:40px;height:40px;line-height:40px;background:#a95579;color:#edc4c7;border-radius:50%;box-shadow:0 3px 8px #87416599}
.letter-object.unsealed .object-lid{transform:rotateX(160deg);opacity:.6}.letter-object.unsealed .object-seal{transform:translate(30px,30px) rotate(40deg);opacity:0}
.cake-close #fx{transform:scale(1.7);transform-origin:50% 67%;transition:transform 2.2s cubic-bezier(.3,.05,.3,1)}
#stage.balcony #scene-art{transform:none;filter:none}
#gift .object-label,#garden-gift .object-label{left:auto;right:24px;transform:none} #frames .object-label{transform:translateX(-25%)}
/* 走近物件：场景和点击层同步移动，退回时恢复原来的空间位置。 */
#stage.looking #scene-art,#stage.looking #objects,#stage.looking #fx{transform:translate(var(--look-dx,0%),var(--look-dy,0%)) scale(var(--look-scale,1.6));transform-origin:var(--look-x) var(--look-y);transition:transform .75s cubic-bezier(.22,.6,.3,1)}
#objects,#fx{transition:transform .75s cubic-bezier(.22,.6,.3,1)}
#stage.looking.entering #scene-art,#stage.looking.entering #fx{transform:scale(2.5);transform-origin:50% 48%;transition:transform 2s}
#bag-toggle{position:absolute;right:18px;bottom:max(16px,env(safe-area-inset-bottom));z-index:8;width:62px;height:57px;background:transparent;border:0;color:#f6d8da;filter:drop-shadow(0 4px 8px #1c102b99)}
.bag-shape{position:absolute;top:12px;right:4px;bottom:0;left:4px;inset:12px 4px 0;background:linear-gradient(130deg,#e6b6c7,#a96691);border:2px solid #edced1;border-radius:12px 12px 16px 16px;font-size:27px;line-height:36px;color:#733c62}
.bag-shape:before{content:'';position:absolute;left:12px;top:-13px;width:23px;height:18px;border:3px solid #e3b6c6;border-radius:14px 14px 0 0}
#bag-selected{position:absolute;right:49px;bottom:4px;font-size:28px;text-shadow:0 1px 12px #f4be8f}
#bag-panel{position:absolute;bottom:84px;left:50%;transform:translateX(-50%);width:min(94%,440px);padding:13px;display:flex;justify-content:center;gap:8px;background:linear-gradient(120deg,#41253dee,#6b4559ed);border:1px solid #d5acb688;border-radius:16px;box-shadow:0 10px 35px #170c2544;z-index:8;animation:unfold .3s ease}
.bag-slot{position:relative;flex:1;max-width:100px;min-width:0}.bag-item{width:100%;background:#bc8a9b22;border:1px solid #d9afbd44;border-radius:10px;padding:10px 3px;min-height:74px}.bag-item>span{display:block;font-size:28px;color:#ffe0ad}.bag-item small{display:block;font-size:10px;white-space:nowrap;margin-top:5px;color:#efd7d9}.bag-item.selected{border-color:#ffe2a5;box-shadow:0 0 15px #ffe4ac33;background:#c38e9c55}.item-info{position:absolute;right:0;top:-7px;width:28px;height:28px;border:0;border-radius:50%;background:#5b3952;color:#f1cfd1;font-size:12px}.bag-empty{font-size:12px;color:#e6c9d1;line-height:2}.overlay-open #bag-toggle,.overlay-open #bag-panel{visibility:hidden}
#dialogue{position:absolute;bottom:10%;left:50%;transform:translateX(-50%);width:min(88%,460px);padding:22px 24px;background:linear-gradient(135deg,#352239e8,#583b51ed);border:1px solid #dcbbc075;border-radius:5px 25px 5px 25px;box-shadow:0 10px 50px #160c2444;z-index:10}#speaker{color:#e6b6c9;font-size:11px;letter-spacing:2px}#dialogue-line{font-size:15px;line-height:1.9;margin:14px 0}#dialogue-next{display:block;margin-left:auto;background:none;border:0;color:#eacdb7;min-height:44px;font-size:11px;letter-spacing:2px}
.unlock-key{position:absolute;left:55%;top:37%;font-size:35px;color:#edc389;text-shadow:0 0 8px #e8bd8b;animation:insert-key 2s both}.terrace-edge{position:absolute;left:50%;top:15%;width:1.2%;height:35%;background:linear-gradient(90deg,#f4d1a1,#795166);border:1px solid #d8ad86;transform-origin:left center;opacity:.7}.unlocking .terrace-edge{animation:door-unlock 2.2s both}@keyframes insert-key{0%{transform:translate(60px,20px) rotate(-45deg);opacity:0}35%{transform:translate(0,0) rotate(-20deg);opacity:1}65%{transform:rotate(70deg);opacity:1}100%{transform:translate(15px,15px) rotate(70deg);opacity:0}}@keyframes door-unlock{0%,60%{transform:scaleX(1)}100%{transform:translateX(28px) scaleX(2)}}
.terrace-unlocked{transform:translateX(28px) scaleX(2)} #bag-toggle:disabled{opacity:.65}
@keyframes bag-reveal{from{opacity:0}to{opacity:1}} #bag-panel{animation:bag-reveal .2s ease}
/* 物品本身就是入口，使用完从背包移除。 */
#bag-panel{background:linear-gradient(transparent,#261629dd);border:0;box-shadow:none;padding:8px 18px;border-radius:0;gap:16px;bottom:80px}
.bag-item,.bag-item.selected{border:0;background:transparent;box-shadow:none;padding:4px;min-height:90px}.bag-item img{width:74px;height:74px;max-width:100%;object-fit:contain;filter:drop-shadow(0 6px 5px #110a2288);transition:transform .2s,filter .2s}.bag-item.selected img{transform:translateY(-7px);filter:drop-shadow(0 0 10px #ffe5b2)}.bag-item small{font-size:10px;text-shadow:0 2px 5px #180c24}.item-info{background:transparent;color:#efc9cd;top:-5px;right:-5px;font-style:italic}.bag-shape{top:0;right:0;bottom:0;left:0;inset:0;background:transparent url('assets/bag.png') center/contain no-repeat;border:0;color:transparent;border-radius:0}.bag-shape:before{display:none}#bag-toggle{width:74px;height:74px}#bag-selected img{width:48px;height:48px;object-fit:contain}.gift-contents{display:flex;justify-content:center;gap:25px}.gift-contents button{background:transparent;border:0;font-size:11px;padding:0;flex:1}.gift-contents img{display:block;width:90px;height:90px;object-fit:contain;margin:auto}.unlock-key img{width:60px;height:60px;object-fit:contain}.bag-empty{color:#f0d3d7;text-shadow:0 1px 6px #170b22}
/* 背包固定在画内，包盖的开合和物品栏同一步更新。 */
#bag-toggle{right:max(12px,calc((100% - 100vw)/2 + 12px));bottom:14px;width:74px;height:74px}
#bag-toggle.bag-is-open .bag-shape{background-image:url('assets/bag-open.png')}
#bag-panel{width:min(86%,calc(100vw - 34px));bottom:90px;z-index:8}
.scene-character{position:absolute;transform:translate(-50%,-50%);max-height:34%;object-fit:contain;filter:drop-shadow(0 9px 8px #160c2433);pointer-events:none}
.placed-lantern{position:absolute;left:18%;top:54%;width:14%;height:16%;object-fit:contain}.placed-charm{position:absolute;left:50%;top:54%;width:9%;object-fit:contain}
.item-flight{position:absolute;left:88%;top:91%;width:64px;height:64px;object-fit:contain;z-index:11;pointer-events:none;animation:item-use 1s ease both}
@keyframes item-use{0%{left:88%;top:91%;transform:translate(-50%,-50%) scale(.7);opacity:.4}35%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{left:var(--item-x);top:var(--item-y);transform:translate(-50%,-50%) scale(.8);opacity:.8}}
@keyframes bag-bounce{50%{transform:translateY(-5px) rotate(-5deg)}}.bag-bounce{animation:bag-bounce .45s}
.moving-forward #scene-art{transform:scale(1.5);transform-origin:50% 40%;transition:transform 1s ease}.moving-up #scene-art{transform:scale(1.4) translateY(9%);transform-origin:65% 30%;transition:transform 1s ease}

.glass-open-state{position:absolute;left:55%;top:21%;width:7%;height:37%;border:5px ridge #d8c4a1;background:#f1dcba16;box-shadow:8px 2px 0 #6d4b5d,0 0 15px #f5d9ac44;transform:skewY(-8deg);pointer-events:none}
.scene-upstairs .unlock-key{left:72%;top:43%;width:60px;height:60px}.scene-upstairs .terrace-edge{left:72%;top:24%;height:36%}
.scene-sky:after{content:'';position:absolute;bottom:0;left:0;width:100%;height:15%;background:linear-gradient(transparent,#edc7f444);opacity:var(--sky-flash,0);pointer-events:none}
.sky-return{display:block;color:#edcfbb;font-size:12px;letter-spacing:3px;text-shadow:0 2px 6px #20102a}
.ribbon-removed .object-seal{display:none}.ribbon-removed .object-lid:after{display:none}.empty-gift{font-size:12px!important;color:#96707e}.item-mote{width:36px;height:36px;object-fit:contain}
.door-inside{border:8px ridge #c69988;box-shadow:inset 10px 0 5px #573348aa,inset -10px 0 5px #573348aa,0 0 10px #efc58c}
.scene-secret
.placed-lantern{left:19%;top:43%;width:14%;height:15%}.scene-upstairs .unlock-key{left:85%;top:36%}.scene-upstairs .terrace-edge{left:85%;top:19%}
.box-loot{position:absolute;width:10%;height:8%;object-fit:contain;top:40%;pointer-events:none;filter:drop-shadow(0 3px 3px #34203866)}.box-key{left:40%}.box-note{left:50%}
/* The floor is the return gesture; no separate return button. */
#stepback{display:none!important}#objects{z-index:2}#fx{z-index:3}#speech{z-index:4}#fireworks{z-index:3}.scene-character,.placed-lantern,.placed-charm,.terrace-edge{display:none!important}
#object-sheet{position:relative;width:100%;max-width:490px;max-height:90vh;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0}#detail{max-height:none;max-width:none}#close{position:absolute;top:7px;right:7px;width:38px;height:38px;min-height:38px;border:0;background:#eed2d4dd;color:#71485b;font-size:25px;box-shadow:0 2px 8px #21102533;border-radius:50%;z-index:5}#overlay{align-items:center;padding:25px 20px}#detail>.paper{padding-top:50px}
#scene-art{transition:transform .7s ease,opacity .45s ease,filter .7s ease}.arriving #scene-art{transform:scale(1.12);opacity:.35}.leaving #scene-art{opacity:.1;filter:blur(3px);transition:opacity .48s,filter .48s}#stage.looking #scene-art,#stage.looking #objects,#stage.looking #fx{transition:transform .7s cubic-bezier(.22,.6,.3,1)}.lamp-awakening #shade{background:#ffe8b733;transition:background .7s}.star-awakening #shade{background:#f8daaa25;transition:background .65s}
.collect-flight{position:fixed;width:70px;height:70px;object-fit:contain;transform:translate(-50%,-50%);pointer-events:none;z-index:40;animation:collect-to-bag .95s cubic-bezier(.3,.3,.6,1) forwards}@keyframes collect-to-bag{0%{transform:translate(-50%,-50%) scale(1);opacity:1}30%{transform:translate(-50%,-65%) scale(1.1);opacity:1}100%{left:var(--collect-x);top:var(--collect-y);transform:translate(-50%,-50%) scale(.2);opacity:.2}}
.frame-wall{display:grid;grid-template-columns:1fr 1fr;gap:30px 18px;padding:55px 15px 30px;background:linear-gradient(#8e57654d,#57384d55);border-radius:4px}.wall-frame{position:relative;display:block;width:100%;aspect-ratio:4/5;background:transparent;border:0;padding:0;transform:none;color:#f5ded1}.frame-carving{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;z-index:2}.frame-photo{position:absolute;top:14%;right:14%;bottom:15%;left:14%;inset:14% 14% 15%;display:flex;align-items:center;justify-content:center;background:#977080;overflow:hidden}.frame-photo>img{width:100%;height:100%;object-fit:cover}.frame-photo>span{display:block;font-size:13px;letter-spacing:1px;text-align:center;line-height:2}.frame-photo small{display:block;font-size:8px;color:#e6c6cc}.frame-caption{position:absolute;top:101%;left:0;right:0;font-size:10px;letter-spacing:1px;text-shadow:0 2px 5px #170c22}.framed-photo-detail{text-align:center;color:#f7e1d4;padding:50px 18px 20px}.large-frame{width:min(100%,320px);margin:auto}.framed-photo-detail p{font-size:13px;line-height:1.9;margin-top:25px}.framed-photo-detail>button{border:0;background:#e8c4ce;color:#684453;padding:12px 24px;min-height:44px}.wall-detail{background:linear-gradient(110deg,#624052,#8d5a6d 55%,#56354b);box-shadow:inset 0 0 70px #24122866}
.wish-comet{position:absolute;left:50%;top:51%;width:110px;height:110px;z-index:10;pointer-events:none;animation:wish-comet-flight 2.6s cubic-bezier(.4,.1,.3,1) forwards;filter:drop-shadow(0 0 15px #ffe6a4)}.wish-comet>img{position:absolute;width:100%;height:100%;object-fit:contain;z-index:2}.wish-comet:before{content:'';position:absolute;right:45%;top:48%;width:200px;height:30px;transform-origin:right center;transform:rotate(-28deg);background:linear-gradient(90deg,transparent,#e3b9ef66,#ffdf9dcc);filter:blur(5px);border-radius:50%}.wish-comet i{position:absolute;left:-20%;top:60%;width:5px;height:5px;background:#ffebbf;border-radius:50%;box-shadow:-25px 15px 3px #eec9ff,-60px 20px 3px #ffdcaa,-90px 45px 4px #f6d4ff;animation:signal .5s infinite}.wish-comet i:nth-child(2){left:-40%;top:80%;animation-delay:.2s}.wish-comet i:nth-child(3){left:-70%;top:95%;animation-delay:.4s}@keyframes wish-comet-flight{0%{left:45%;top:55%;transform:scale(.6) rotate(-15deg);opacity:0}20%{opacity:1;transform:scale(1.1) rotate(-8deg)}65%{left:56%;top:25%;opacity:1}100%{left:75%;top:-15%;transform:scale(.25) rotate(15deg);opacity:0}}
.scene-upstairs .unlock-key{left:85%;top:36%;width:70px;height:70px;transform-origin:85% 50%;animation:key-correct 2.2s ease forwards}.scene-upstairs .unlock-key img{width:70px;height:70px;transform:rotate(-45deg)}.lock-occluder{position:absolute;left:86%;top:36%;width:6px;height:24px;background:linear-gradient(90deg,#a77d5d,#ddc49a,#886249);border-radius:3px;z-index:4;pointer-events:none;opacity:.75}@keyframes key-correct{0%{transform:translate(-65px,22px) rotate(0);opacity:0}20%{opacity:1}40%{transform:translate(-37px,0) rotate(0);opacity:1}58%{transform:translate(-27px,0) rotate(0);opacity:1}76%{transform:translate(-27px,0) rotate(55deg);opacity:1}88%{transform:translate(-37px,0) rotate(0);opacity:.8}100%{transform:translate(-48px,0) rotate(0);opacity:0}}
/* Key bit faces the lock; the bow stays to the left of the lock plate. */
@keyframes key-correct{0%{transform:translate(-100px,22px) rotate(0);opacity:0}20%{opacity:1}40%{transform:translate(-70px,0) rotate(0);opacity:1}58%{transform:translate(-60px,0) rotate(0);opacity:1}76%{transform:translate(-60px,0) rotate(55deg);opacity:1}88%{transform:translate(-70px,0) rotate(0);opacity:.8}100%{transform:translate(-85px,0) rotate(0);opacity:0}}
.lock-occluder{left:85%;width:10px}
.paper{animation:none} #object-sheet{animation:unfold .45s ease}

/* Frontal wall views keep their own oval and rectangular painted frames. */
.painted-frame-hit{border-radius:0;background:transparent;min-height:0}.wall-inset,.wall-slot-placeholder{position:absolute;left:16%;top:13%;width:68%;height:74%;object-fit:cover;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#9b7b73;font-size:12px;letter-spacing:1px;line-height:2;pointer-events:none}.wall-inset.oval,.wall-slot-placeholder.oval{border-radius:50%}.wall-inset.rect{border-radius:1px}.wall-slot-placeholder small{font-size:9px;opacity:.6}.single-painted-frame{position:relative;width:min(100%,320px);margin:auto;background-repeat:no-repeat}.single-painted-frame .wall-inset{z-index:1}.scene-wall-left #objects,.scene-wall-right #objects{z-index:2}
.letter-object{background:transparent url('assets/note.png') center/contain no-repeat;width:min(90%,320px);height:230px;filter:drop-shadow(0 15px 24px #1a0d2866);transition:transform .55s,opacity .55s}.letter-object .object-base,.letter-object .object-lid,.letter-object .object-seal{display:none}.letter-object.unsealed{background-image:url('assets/note-open.png');transform:translateY(-5px) rotate(-1deg);opacity:1}
.silk-release #scene-art{filter:brightness(1.035);transition:filter .5s}.gift-reveal #scene-art{filter:brightness(1.05);transition:filter .65s}
#world{overflow:clip}
