:root{--cream:#faf6e8;--cream-border:#d9cfa8;--sage:#6b8258;--sage-dark:#546943;--ink:#3c3128;--ink-muted:#786a5c;--gold:#e2a84b}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}html,body,#root{width:100%;height:100%;color:var(--ink);background:#1b1518;margin:0;padding:0;font-family:Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif;overflow:hidden}.app-shell{background:radial-gradient(circle at 50% 35%,#3a262c 0%,#171115 100%);justify-content:center;align-items:center;width:100%;height:100%;display:flex}.mobile-frame{background:var(--cream);width:100%;max-width:430px;height:100%;max-height:900px;position:relative;overflow:hidden;box-shadow:0 24px 70px #0000008c}@media (width>=500px){.mobile-frame{border:6px solid #fff5e024;border-radius:32px;height:min(92vh,860px)}}.global-controls{z-index:40;pointer-events:none;justify-content:space-between;align-items:center;display:flex;position:absolute;top:14px;left:14px;right:14px}.global-right-ctrls{align-items:center;gap:8px;display:flex}.circle-ctrl-btn,.elevator-trigger-btn{pointer-events:auto;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--ink);cursor:pointer;background:#faf6e8e0;border:1.5px solid #ffffff80;justify-content:center;align-items:center;transition:transform .15s;display:inline-flex;box-shadow:0 4px 12px #00000024}.circle-ctrl-btn:active,.elevator-trigger-btn:active{transform:scale(.94)}.circle-ctrl-btn{border-radius:50%;width:38px;height:38px}.elevator-trigger-btn{border-radius:999px;gap:5px;height:38px;padding:0 12px;font-size:13px;font-weight:600}.entrance-screen{color:#fff6df;background:radial-gradient(circle at 50% 42%,#d1485e 0%,#9b2243 56%,#5d1229 100%);flex-direction:column;justify-content:space-between;align-items:center;width:100%;height:100%;padding:46px 20px 22px;display:flex;position:relative}.entrance-canvas{cursor:grab;touch-action:none;width:100%;height:360px}.entrance-canvas:active{cursor:grabbing}.entrance-content{text-align:center;flex-direction:column;align-items:center;width:100%;margin-top:-14px;display:flex}.entrance-script{color:#fff7dc;text-shadow:0 4px 20px #00000040;font-family:Caveat,cursive;font-size:50px;font-weight:700;line-height:1}.entrance-subtitle-tag{letter-spacing:.2em;color:#fff4d6c7;margin-top:6px;font-size:11px}.entrance-primary-btn{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#fff8e6;cursor:pointer;background:#fff5d61f;border:1.5px solid #fff5d6b8;border-radius:999px;margin-top:20px;padding:13px 38px;font-size:16px;font-weight:600;transition:all .2s}.entrance-primary-btn:hover{background:#fff5d638;transform:translateY(-1px)}.entrance-drag-hint{color:#fff0d2b3;margin-top:12px;font-size:12px}.entrance-quick-links{flex-wrap:wrap;justify-content:center;gap:10px 14px;margin-top:16px;display:flex}.entrance-link-item{color:#fff3d6;cursor:pointer;background:0 0;border:none;border-bottom:1px solid #fff0d273;padding:2px 1px;font-size:13px}.entrance-footer{color:#ffecc894;font-size:11px}.scene-container{cursor:pointer;width:100%;height:100%;position:relative;overflow:hidden}.scene-bg{object-fit:cover;width:100%;height:100%;display:block}.scene-floor-pill{z-index:15;color:#fffdf5;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#3a3127ad;border-radius:999px;padding:5px 12px;font-size:12px;font-weight:600;position:absolute;top:64px;left:14px}.scene-hint-pill{z-index:15;color:#fffdf5;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#3a312794;border-radius:999px;padding:5px 12px;font-size:11px;position:absolute;top:64px;right:14px}.hud-top-bar{z-index:25;justify-content:center;display:flex;position:absolute;top:12px;left:60px;right:118px}.hud-collect-pill{border:1.5px solid var(--cream-border);background:#faf6e8f0;border-radius:999px;align-items:center;gap:8px;padding:4px 10px;display:flex;box-shadow:0 4px 14px #00000024}.hud-collect-label{color:var(--ink-muted);flex-direction:column;font-size:10px;line-height:1.1;display:flex}.hud-collect-label strong{color:var(--ink);font-size:12px}.hud-slots{gap:4px;display:flex}.hud-slot{filter:grayscale();opacity:.45;background:#786a5c24;border-radius:6px;justify-content:center;align-items:center;width:24px;height:24px;font-size:13px;transition:all .25s;display:flex}.hud-slot.filled{filter:none;opacity:1;background:#fff3c4;border:1px solid #e2a84b;transform:scale(1.05)}.map-entity,.player-entity{z-index:12;background:0 0;border:none;flex-direction:column;align-items:center;padding:0;display:flex;position:absolute;transform:translate(-50%,-65%)}.map-entity{cursor:pointer}.player-entity{pointer-events:none;z-index:18;transition:left .5s cubic-bezier(.25,.8,.35,1),top .5s cubic-bezier(.25,.8,.35,1)}.chibi-walking{animation:.26s ease-in-out infinite alternate chibiHop}@keyframes chibiHop{0%{transform:translateY(0)}to{transform:translateY(-6px)}}.npc-badge{border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:12px;font-weight:700;display:flex;position:absolute;top:-14px;box-shadow:0 2px 6px #00000040}.npc-badge.todo{color:#4a3110;background:#ffcf56;animation:1.3s ease-in-out infinite gentleBob}.npc-badge.done{color:#fff;background:#6b8258}@keyframes gentleBob{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}.entity-nametag{color:var(--ink);white-space:nowrap;background:#faf6e8e6;border:1px solid #beaf9199;border-radius:999px;margin-top:-2px;padding:1px 7px;font-size:10px;font-weight:600}.star-tag{background:#fff3c4;border-color:#e2a84b}.drop-orb{background:radial-gradient(circle,#fff8dc 0%,#ffd166 100%);border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;font-size:20px;animation:1s ease-in-out infinite gentleBob;display:flex;box-shadow:0 0 18px #ffd166e6}.living-bunting{z-index:10;pointer-events:none;gap:8px;display:flex;position:absolute;top:104px;left:50%;transform:translate(-50%)}.bunting-flag{color:#7c4d3a;background:#fff6db;border:1.5px solid #e2b878;border-radius:4px 4px 12px 12px;justify-content:center;align-items:center;width:28px;height:32px;font-size:13px;font-weight:700;display:flex;box-shadow:0 3px 8px #00000029}.hotspot-pin{z-index:15;cursor:pointer;background:0 0;border:none;flex-direction:column;align-items:center;display:flex;position:absolute;transform:translate(-50%,-50%)}.hotspot-bubble{background:#faf6e8eb;border:2px solid #e2a84b;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;font-size:18px;animation:1.8s ease-in-out infinite gentleBob;display:flex;box-shadow:0 4px 12px #00000038}.hotspot-label{color:#fffdf5;white-space:nowrap;background:#3a3127c7;border-radius:999px;margin-top:3px;padding:2px 7px;font-size:10px}.bottom-quest-bar{z-index:25;border:1.5px solid var(--cream-border);background:#faf6e8f2;border-radius:18px;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;display:flex;position:absolute;bottom:14px;left:14px;right:14px;box-shadow:0 10px 26px #00000038}.quest-text{min-width:0}.quest-kicker{color:var(--ink-muted);font-size:10px}.quest-title{color:var(--ink);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.sage-btn{background:var(--sage);color:#fff;cursor:pointer;white-space:nowrap;box-shadow:0 3px 0 var(--sage-dark);border:none;border-radius:12px;padding:9px 15px;font-size:13px;font-weight:600;transition:transform .1s}.sage-btn:active{box-shadow:0 1px 0 var(--sage-dark);transform:translateY(2px)}.sage-btn.full-btn{width:100%;margin-top:12px;padding:11px 16px;font-size:14px}.ghost-btn{border:1.5px solid var(--cream-border);color:var(--ink);cursor:pointer;background:#fffdf6;border-radius:12px;padding:9px 14px;font-size:13px;font-weight:600}.ghost-btn:disabled{opacity:.45;cursor:not-allowed}.modal-backdrop,.dialogue-overlay{z-index:50;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1812107a;justify-content:center;align-items:center;padding:18px;display:flex;position:absolute;inset:0}.dialogue-overlay{align-items:flex-end;padding-bottom:18px}.cream-card{background:var(--cream);border:2px solid var(--cream-border);border-radius:22px;width:100%;padding:20px;position:relative;box-shadow:0 18px 42px #00000047}.card-close-btn{width:28px;height:28px;color:var(--ink);cursor:pointer;background:#786a5c1f;border:none;border-radius:50%;font-size:14px;position:absolute;top:12px;right:12px}.intro-modal{text-align:center}.intro-avatar{justify-content:center;margin-bottom:6px;display:flex}.intro-modal h3,.spot-modal h3{color:var(--ink);margin:4px 0 10px;font-size:19px}.intro-modal p,.spot-modal p{color:var(--ink-muted);margin:6px 0;font-size:13.5px;line-height:1.65}.intro-sub{color:#938372!important;font-size:12px!important}.dialogue-box{padding:16px 18px 18px}.dialogue-name-pill{color:#fff;background:#cbb282;border-radius:999px;padding:4px 14px;font-size:13px;font-weight:700;position:absolute;top:-13px;left:20px}.dialogue-body{align-items:center;gap:12px;padding-right:44px;display:flex}.dialogue-main{color:var(--ink);margin:0;font-size:14px;line-height:1.6}.dialogue-reward-note{color:var(--sage-dark);margin:6px 0 0;font-size:12px;font-weight:600}.dialogue-next-btn{color:#fff;cursor:pointer;background:#d8a956;border:2px solid #e2a84b;border-radius:999px;padding:8px 14px;font-size:13px;font-weight:700;position:absolute;bottom:14px;right:14px}.spot-modal{text-align:center}.spot-emoji-head{font-size:32px}.piano-keys{grid-template-columns:repeat(8,1fr);gap:4px;margin:14px 0 6px;display:grid}.piano-key-btn{height:76px;color:var(--ink-muted);cursor:pointer;background:#fffef9;border:1.5px solid #d5cab2;border-radius:0 0 8px 8px;justify-content:center;align-items:flex-end;padding-bottom:6px;font-size:11px;font-weight:600;display:flex;box-shadow:0 3px #dfd5be}.piano-key-btn:active{background:#fff3c4;transform:translateY(2px)}.timer-display{font-variant-numeric:tabular-nums;color:var(--ink);margin:10px 0 14px;font-size:40px;font-weight:700}.modal-btn-row{justify-content:center;align-items:center;gap:10px;margin-top:10px;display:flex}.notes-list{text-align:left;flex-direction:column;gap:8px;max-height:280px;margin-top:10px;display:flex;overflow-y:auto}.note-item{border:1px solid var(--cream-border);background:#fffdf6;border-radius:12px;padding:10px 12px}.note-from{color:var(--sage-dark);font-size:11px;font-weight:700}.note-item p{color:var(--ink);margin:3px 0 0;font-size:13px}.polaroid-frame{border:4px solid #fff;border-radius:14px;margin:10px 0;padding:16px;box-shadow:0 6px 16px #0000001f}.polaroid-art{justify-content:center;gap:8px;padding:10px 0;display:flex}.polaroid-title{color:var(--ink);font-size:14px;font-weight:700}.polaroid-cap{color:var(--ink-muted);margin-top:3px;font-size:12px}.photo-counter{color:var(--ink-muted);font-size:12px}.bar-puzzle-screen{background:#f5efe0;flex-direction:column;width:100%;height:100%;padding-top:60px;display:flex}.bar-top-bar{justify-content:space-between;align-items:center;padding:4px 14px 8px;font-size:13px;display:flex}.bar-scene-name{color:var(--ink);font-weight:700}.bar-wish-counter{color:var(--sage-dark);font-weight:700}.bar-mini-pill{border:1px solid var(--cream-border);cursor:pointer;background:#fffdf6;border-radius:999px;padding:3px 10px;font-size:12px}.bar-canvas-wrap{border:2px solid var(--cream-border);border-radius:18px;flex:1;min-height:240px;margin:0 12px;position:relative;overflow:hidden}.bar-canvas-img{object-fit:cover;width:100%;height:100%;display:block}.seat-node{cursor:pointer;background:0 0;border:none;padding:0;position:absolute;transform:translate(-50%,-50%)}.seat-empty-ring{color:#fff;background:#3a312773;border:2px dashed #fff8e0eb;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;font-size:18px;transition:transform .15s;display:flex}.seat-empty-ring:hover{transform:scale(1.1)}.seat-occupant{flex-direction:column;align-items:center;display:flex}.seat-char-tag{border:1px solid var(--cream-border);background:#faf6e8f0;border-radius:999px;margin-top:-4px;padding:1px 6px;font-size:10px;font-weight:700}.bar-toast{color:#fff8e6;text-align:center;background:#2d241ce0;border-radius:12px;padding:8px 12px;font-size:12px;position:absolute;bottom:10px;left:12px;right:12px}.bar-bottom-panel{flex-direction:column;gap:8px;padding:10px 12px 14px;display:flex}.bar-char-strip{grid-template-columns:repeat(5,1fr);gap:6px;display:grid}.bar-char-card{border:1.5px solid var(--cream-border);cursor:pointer;background:#fffdf6;border-radius:12px;flex-direction:column;align-items:center;padding:4px 2px;display:flex;position:relative}.bar-char-card.active{border-color:var(--sage);background:#e9f0df}.char-ok-dot{background:var(--sage);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:15px;height:15px;font-size:10px;display:flex;position:absolute;top:3px;right:3px}.bar-char-name{color:var(--ink);font-size:11px;font-weight:600}.bar-wish-box{border:1.5px solid var(--cream-border);background:#fffdf6;border-radius:14px;padding:10px 12px}.bar-wish-header{justify-content:space-between;align-items:center;margin-bottom:6px;font-size:13px;display:flex}.text-link-btn{color:var(--sage-dark);cursor:pointer;background:0 0;border:none;font-size:12px;font-weight:600;text-decoration:underline}.bar-wish-list{flex-direction:column;gap:4px;display:flex}.wish-row{color:var(--ink-muted);align-items:center;gap:6px;font-size:12px;display:flex}.wish-row.done{color:var(--sage-dark);font-weight:600}.wish-check{background:#ece6d6;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;display:inline-flex}.wish-row.done .wish-check{background:var(--sage);color:#fff}.bar-action-row{gap:8px;display:flex}.flex-1{flex:1}.fireworks-canvas{z-index:16;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.candle-flame-beacon{z-index:14;pointer-events:none;position:absolute;transform:translate(-50%,-50%)}.flame-glow{background:radial-gradient(circle,#fff3b0f2 0%,#ffa94d00 70%);border-radius:50%;width:22px;height:22px;animation:1.1s ease-in-out infinite alternate pulseFlame}@keyframes pulseFlame{0%{opacity:.75;transform:scale(.9)}to{opacity:1;transform:scale(1.35)}}.letter-modal{max-height:82%;overflow-y:auto}.letter-title{text-align:center;color:#845a4c;margin:0 0 12px;font-size:20px}.letter-body{color:var(--ink);text-align:left;font-size:14px;line-height:1.8}.letter-salutation{font-weight:700}.letter-sign{text-align:right;color:var(--sage-dark);margin-top:14px;font-weight:700}.elevator-header{text-align:center;margin-bottom:12px}.elevator-icon{font-size:28px}.elevator-header h3{margin:4px 0 2px;font-size:18px}.elevator-header p{color:var(--ink-muted);margin:0;font-size:12px}.elevator-stack{flex-direction:column;gap:8px;display:flex}.elevator-floor-btn{border:1.5px solid var(--cream-border);cursor:pointer;text-align:left;background:#fffdf6;border-radius:14px;justify-content:space-between;align-items:center;width:100%;padding:10px 12px;display:flex}.elevator-floor-btn.active{border-color:var(--sage);background:#e9f0df}.elevator-floor-left{align-items:center;gap:10px;display:flex}.elevator-floor-num{background:var(--sage);color:#fff;border-radius:10px;justify-content:center;align-items:center;width:34px;height:34px;font-size:13px;font-weight:700;display:flex}.elevator-floor-name{color:var(--ink);font-size:14px;font-weight:700}.elevator-floor-sub{color:var(--ink-muted);font-size:11px}.elevator-floor-prog{color:var(--sage-dark);font-size:11px;font-weight:600}.player-entity.raf-mover{transition:none!important}.tap-ripple{pointer-events:none;z-index:11;background:#fffae640;border:2px solid #fffae6e6;border-radius:50%;width:28px;height:28px;animation:.55s ease-out forwards tapRippleOut;position:absolute;transform:translate(-50%,-50%)scale(.4)}@keyframes tapRippleOut{0%{opacity:.95;transform:translate(-50%,-50%)scale(.4)}to{opacity:0;transform:translate(-50%,-50%)scale(1.65)}}.gift-banner-toast{z-index:35;background:#faf6e8f7;border:2px solid #e2a84b;border-radius:16px;align-items:center;gap:10px;padding:8px 16px;animation:.32s cubic-bezier(.22,1.3,.36,1) forwards giftPopIn;display:flex;position:absolute;top:108px;left:50%;transform:translate(-50%);box-shadow:0 10px 26px #00000038}.gift-banner-emoji{font-size:26px}.gift-banner-kicker{color:var(--sage-dark);font-size:10px;font-weight:700}.gift-banner-name{color:var(--ink);font-size:14px;font-weight:700}@keyframes giftPopIn{0%{opacity:0;transform:translate(-50%,-10px)scale(.85)}to{opacity:1;transform:translate(-50%)scale(1)}}.piano-key-btn.lit{background:#ffe08a;border-color:#d99b26;transform:translateY(2px);box-shadow:0 1px #c98c1e}.pot-steam-wrap{display:inline-block;position:relative}.steam-wisps{pointer-events:none;gap:6px;display:flex;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.steam-wisps span{background:#c8b496a6;border-radius:999px;width:5px;height:16px;animation:1.2s ease-out infinite steamRise}.steam-wisps span:nth-child(2){animation-delay:.35s}.steam-wisps span:nth-child(3){animation-delay:.7s}@keyframes steamRise{0%{opacity:0;transform:translateY(6px)scaleX(1)}40%{opacity:.8}to{opacity:0;transform:translateY(-16px)scaleX(1.3)}}.polaroid-pop{animation:.25s ease-out polaroidSlide}@keyframes polaroidSlide{0%{opacity:.5;transform:translateY(4px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.seat-occupant{animation:.28s cubic-bezier(.22,1.35,.36,1) seatDrop}@keyframes seatDrop{0%{opacity:.6;transform:translateY(-10px)scale(.85)}to{opacity:1;transform:translateY(0)scale(1)}}.candle-smoke-beacon{z-index:15;pointer-events:none;position:absolute;transform:translate(-50%,-50%)}.smoke-puff{filter:blur(2px);background:#ebf0ffbf;border-radius:999px;width:14px;height:24px;animation:.85s ease-out forwards smokeFloat;display:block}@keyframes smokeFloat{0%{opacity:.9;transform:translateY(0)scale(.7)}to{opacity:0;transform:translateY(-34px)scale(1.6)}}.elevator-ding-toast{z-index:38;color:#fff7dc;white-space:nowrap;pointer-events:none;background:#2d241cdb;border-radius:999px;padding:6px 14px;font-size:12px;font-weight:600;animation:.25s ease-out giftPopIn;position:absolute;top:62px;left:50%;transform:translate(-50%)}
