:root{--ink:#3a2a20;--ink-soft:#7a6555;--paper:#fff8ee;--paper-2:#f6ead8;--coral:#ff7a59;--coral-dark:#e85d3c;--mint:#5cc28a;--gold:#f4b740;--shadow:0 10px 30px #1e0f0547, 0 2px 6px #1e0f052e;--radius:18px;--safe-b:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box}html,body{overscroll-behavior:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;height:100%;color:var(--ink);-webkit-tap-highlight-color:transparent;background:#2a1d14;margin:0;font-family:Fredoka,ui-rounded,system-ui,sans-serif;overflow:hidden}body{transition:background .8s}#app{position:fixed;inset:0}#scene{touch-action:none;outline:none;width:100%;height:100%;display:block;position:absolute;inset:0}button{touch-action:manipulation;color:inherit;cursor:pointer;border:none;font-family:inherit}#topbar{padding:calc(12px + env(safe-area-inset-top,0px)) 16px 12px;pointer-events:none;justify-content:space-between;align-items:center;gap:12px;display:flex;position:absolute;top:0;left:0;right:0}#topbar>*{pointer-events:auto}.brand{color:#fff;text-shadow:0 2px 8px #00000059;align-items:center;gap:10px;font-size:20px;font-weight:700;display:flex}.logo{filter:drop-shadow(0 2px 5px #0000004d);width:38px;height:38px;display:inline-flex}.logo .svg-ic{width:100%;height:100%}.chip{color:var(--ink);text-shadow:none;background:#fff8eeeb;border-radius:99px;padding:4px 12px;font-size:15px;font-weight:600;box-shadow:0 2px 8px #0000002e}.room-title{color:#fff;text-shadow:0 2px 8px #0006;white-space:nowrap;font-size:18px;font-weight:600;position:absolute;left:50%;transform:translate(-50%)}.top-right{align-items:center;gap:8px;display:flex}.timer{font-variant-numeric:tabular-nums;text-align:center;min-width:64px}.icon-btn{background:#fff8eeeb;border-radius:50%;place-items:center;width:38px;height:38px;font-size:17px;font-weight:700;transition:transform .15s,background .15s;display:grid;box-shadow:0 2px 8px #0003}.icon-btn:hover{background:#fff;transform:scale(1.08)}.icon-btn:active{transform:scale(.94)}.icon-btn.big{width:46px;height:46px;font-size:22px}#progress{background:#fff8eee6;border-radius:99px;align-items:center;gap:7px;padding:7px 14px;display:flex;position:absolute;top:62px;left:50%;transform:translate(-50%);box-shadow:0 2px 8px #0000002e}#progress .dot{background:#e2d3bf;border-radius:99px;width:14px;height:14px;transition:background .3s,transform .3s cubic-bezier(.3,1.8,.5,1),width .3s}#progress .dot.on{background:var(--mint);width:22px}#progress .dot.on.hinted{background:var(--gold)}#progress .dot.pop{transform:scale(1.5)}#progress .count{color:var(--ink-soft);font-variant-numeric:tabular-nums;margin-left:4px;font-size:14px;font-weight:600}.life{vertical-align:middle;background:linear-gradient(160deg,#ff7a6b,#e8363a 70%);width:20px;height:18px;transition:all .3s;display:inline-block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 22'%3E%3Cpath d='M12 21.5C5.6 16.6 0.5 12.3 0.5 6.9 0.5 3.4 3.2 0.5 6.6 0.5c2.2 0 4.1 1.1 5.4 2.9C13.3 1.6 15.2 0.5 17.4 0.5c3.4 0 6.1 2.9 6.1 6.4 0 5.4-5.1 9.7-11.5 14.6z'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 22'%3E%3Cpath d='M12 21.5C5.6 16.6 0.5 12.3 0.5 6.9 0.5 3.4 3.2 0.5 6.6 0.5c2.2 0 4.1 1.1 5.4 2.9C13.3 1.6 15.2 0.5 17.4 0.5c3.4 0 6.1 2.9 6.1 6.4 0 5.4-5.1 9.7-11.5 14.6z'/%3E%3C/svg%3E") 50%/contain no-repeat}.life.lost{opacity:.5;background:#cdbfb2;transform:rotate(-14deg)scale(.82)}.life.pop{animation:.7s crack}@keyframes crack{0%{opacity:1;background:#ff3b30;transform:scale(1.5)}30%{transform:scale(1.2)rotate(15deg)}60%{transform:rotate(-30deg)translateY(4px)}}#lives{white-space:nowrap;background:#fff8eee6;border-radius:99px;align-items:center;gap:6px;padding:5px 12px;display:flex;position:absolute;top:104px;left:50%;transform:translate(-50%);box-shadow:0 2px 8px #0000002e}#lives .lbl{color:var(--ink-soft);margin-right:2px;font-size:12px;font-weight:600}#lives.danger{animation:1.2s ease-in-out infinite pulse;box-shadow:0 0 0 2px #ff3b30,0 2px 8px #0000002e}#lives.danger .lbl{color:#d62d22}#lives.hit{animation:.45s shake}@keyframes pulse{50%{box-shadow:0 0 0 5px #ff3b3059,0 2px 8px #0000002e}}.flash{pointer-events:none;background:radial-gradient(#0000 45%,#ff281e80);animation:.7s forwards flashOut;position:fixed;inset:0}@keyframes flashOut{0%{opacity:1}to{opacity:0}}body.failed #scene{filter:saturate(.25)brightness(.85);transition:filter 1.6s}#inventory{left:50%;bottom:calc(14px + var(--safe-b));box-shadow:var(--shadow);background:#fff8eeeb;border-radius:22px;gap:8px;max-width:calc(100vw - 24px);padding:8px;display:flex;position:absolute;overflow-x:auto;transform:translate(-50%)}.slot{background:var(--paper-2);border-radius:15px;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:2px;width:64px;height:64px;transition:transform .15s,box-shadow .15s,background .15s;display:flex;position:relative;box-shadow:inset 0 2px 4px #50321424}.slot.full{background:#fff;box-shadow:0 2px 6px #5032142e}.slot.full:hover{transform:translateY(-3px)}.slot.sel{box-shadow:0 0 0 3px var(--gold), 0 6px 14px #50321440;background:#fff1d6;transform:translateY(-4px)}.slot .ic{font-size:28px;line-height:1}.slot .nm{color:var(--ink-soft);white-space:nowrap;text-overflow:ellipsis;max-width:60px;font-size:10px;font-weight:600;overflow:hidden}.slot.incoming .ic,.slot.incoming .nm{visibility:hidden}.slot.land{box-shadow:0 0 0 3px var(--gold), 0 6px 14px #50321440;animation:.5s cubic-bezier(.3,1.8,.5,1) slotIn}@keyframes slotIn{0%{transform:scale(1.35)}}#inventory.bump{animation:.45s ease-out invBump}@keyframes invBump{40%{transform:translate(-50%)scale(1.06)}}.fly-item{z-index:60;pointer-events:none;filter:drop-shadow(0 6px 10px #50321459);background:radial-gradient(circle,#fff 0 45%,#fff0c8d9 60%,#ffdc8c00 72%);border-radius:50%;place-items:center;width:84px;height:84px;font-size:54px;line-height:1;display:grid;position:fixed;top:0;left:0}#rotate-ctrls{left:16px;bottom:calc(22px + var(--safe-b));gap:8px;display:flex;position:absolute}#zoom-ctrls{left:16px;bottom:calc(150px + var(--safe-b));background:var(--paper);box-shadow:var(--shadow);border-radius:14px;flex-direction:column;display:flex;position:absolute;overflow:hidden}#zoom-ctrls button{width:46px;height:44px;color:var(--ink);cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;background:0 0;border:0;font:700 26px/1 system-ui,sans-serif}#zoom-ctrls button+button{border-top:1.5px solid #0000001a}#zoom-ctrls button:active{background:#00000014}#zoom-ctrls button:disabled{opacity:.3;cursor:default}#turn-sign{white-space:nowrap;pointer-events:none;background:var(--paper);color:var(--ink);box-shadow:var(--shadow);border-radius:12px;flex-direction:column;gap:1px;padding:7px 11px;font-size:13px;line-height:1.25;transition:opacity .6s;animation:2.4s ease-in-out infinite signBob;display:flex;position:absolute;bottom:calc(100% + 10px);left:0}#turn-sign:after{content:"";border:7px solid #0000;border-top-color:var(--paper);position:absolute;top:100%;left:34px}#turn-sign .gest{color:var(--ink-soft);font-size:11.5px}#turn-sign.quiet{opacity:.55;animation:none}@keyframes signBob{50%{transform:translateY(-3px)}}.hint-btn{right:16px;bottom:calc(22px + var(--safe-b));background:var(--gold);color:#3a2a10;box-shadow:var(--shadow);border-radius:99px;padding:12px 18px;font-size:16px;font-weight:700;transition:transform .15s;position:absolute}.hint-btn:hover{transform:translateY(-2px)scale(1.04)}#bubble{max-width:260px;color:var(--ink);box-shadow:var(--shadow);opacity:0;pointer-events:none;text-align:center;background:#fff;border-radius:16px;padding:10px 14px;font-size:15px;font-weight:500;line-height:1.3;transition:opacity .18s,transform .25s cubic-bezier(.3,1.6,.5,1);position:absolute;top:0;left:0;transform:translate(-50%,calc(-100% - 14px))scale(.6)}#bubble:after{content:"";border:9px solid #0000;border-top-color:#fff;border-bottom:0;margin-left:-9px;position:absolute;bottom:-8px;left:50%}#bubble.show{opacity:1;transform:translate(-50%,calc(-100% - 14px))scale(1)}#tooltip{pointer-events:none;color:#fff;opacity:0;white-space:nowrap;background:#28190fd9;border-radius:10px;padding:5px 10px;font-size:13px;font-weight:500;transition:opacity .12s;position:absolute;transform:translate(14px,14px)}#tooltip.show{opacity:1}#tooltip b{color:var(--gold);font-weight:600}#cursor-item{pointer-events:none;filter:drop-shadow(0 3px 4px #00000059);font-size:30px;display:none;position:absolute;transform:translate(8px,-36px)}#cursor-item.show{display:block}#toast{left:50%;bottom:calc(104px + var(--safe-b));background:var(--ink);color:#fff;opacity:0;pointer-events:none;white-space:nowrap;border-radius:99px;padding:9px 16px;font-size:15px;font-weight:600;transition:all .3s cubic-bezier(.3,1.5,.5,1);position:absolute;transform:translate(-50%)translateY(20px)}#toast.show{opacity:1;transform:translate(-50%)translateY(0)}.ripple{pointer-events:none;border:3px solid #ffffffd9;border-radius:50%;width:30px;height:30px;margin:-15px 0 0 -15px;animation:.5s ease-out forwards ripple;position:absolute}@keyframes ripple{0%{opacity:1;transform:scale(.2)}to{opacity:0;transform:scale(1.4)}}.modal-back{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:50;background:#190e0873;place-items:center;padding:16px;animation:.2s fadeIn;display:grid;position:fixed;inset:0}.modal-back.out{animation:.2s forwards fadeOut}@keyframes fadeIn{0%{opacity:0}}@keyframes fadeOut{to{opacity:0}}.modal{background:var(--paper);box-shadow:var(--shadow);border-radius:24px;width:min(440px,100%);max-height:calc(100vh - 32px);padding:26px 24px 22px;animation:.35s cubic-bezier(.3,1.5,.5,1) popIn;position:relative;overflow-y:auto}.modal.wide{width:min(560px,100%)}@keyframes popIn{0%{opacity:0;transform:scale(.85)translateY(20px)}}.modal h2{text-align:center;margin:0 0 10px;font-size:24px;font-weight:700}.modal p{color:var(--ink);margin:8px 0;line-height:1.45}.modal .muted{color:var(--ink-soft);font-size:14px}.modal-x{background:var(--paper-2);border-radius:50%;width:32px;height:32px;font-size:18px;font-weight:700;position:absolute;top:12px;right:12px}.modal-actions{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:18px;display:flex}.btn{background:var(--paper-2);border-radius:99px;padding:12px 22px;font-size:16px;font-weight:700;transition:transform .12s,filter .12s}.btn:hover{filter:brightness(1.04);transform:translateY(-2px)}.btn:active{transform:scale(.96)}.btn:disabled{opacity:.5;filter:grayscale(.6);cursor:default;transform:none}.btn.primary{background:var(--coral);color:#fff;box-shadow:0 4px 0 var(--coral-dark)}.btn.gold{background:var(--gold);color:#3a2a10;box-shadow:0 4px #c98e1c}.inspect-img{border-radius:12px;width:100%;margin:6px 0 10px;display:block;box-shadow:0 4px 14px #0003}.caption{text-align:center;color:var(--ink-soft);font-size:15px}.pip-badge{justify-content:center;margin:4px 0 8px;animation:2s ease-in-out infinite bob;display:flex}.pip-badge i{background:linear-gradient(90deg, var(--coral) 50%, #fff3e0 50%);border-radius:99px;width:64px;height:34px;box-shadow:0 4px 10px #0000002e,inset 0 0 0 2px #0000000f}.pip-badge.sad{margin:12px 0 14px;animation:none}.pip-badge.sad i{box-shadow:none;background:#cfc6bb;transform:rotate(-18deg)}@keyframes bob{50%{transform:translateY(-6px)rotate(4deg)}}.intro .kicker{text-align:center;letter-spacing:.08em;text-transform:uppercase;color:var(--coral-dark);font-size:13px;font-weight:600}.intro .say{background:#fff;border-radius:16px;margin:14px 0 6px;padding:12px 14px;position:relative;box-shadow:0 2px 6px #00000014}.intro .say b{color:var(--coral-dark)}.howto{color:var(--ink-soft);gap:7px;margin:12px 0 0;padding:0;font-size:14px;list-style:none;display:grid}.howto li{align-items:flex-start;gap:10px;display:flex}.howto li span:first-child{text-align:center;flex:none;width:22px}.howto .n{background:var(--paper-2);height:22px;color:var(--ink-soft);border-radius:50%;place-items:center;font-size:12px;font-weight:700;display:grid}.howto li.rule{color:var(--ink);background:#fff;border-radius:12px;padding:9px 10px;box-shadow:0 0 0 2px #ffd9cc}.howto .life{width:16px;height:14px}.lock{text-align:center}.lock-sub{color:var(--ink-soft);font-style:italic}.dials{justify-content:center;gap:10px;margin:16px 0 6px;display:flex}.dial{flex-direction:column;align-items:center;gap:4px;display:flex}.dial-label{margin-bottom:2px;font-size:26px;line-height:1}.dial .arrow{background:var(--paper-2);width:54px;height:30px;color:var(--ink-soft);border-radius:10px;font-size:13px}.dial .arrow:hover{background:#efe0c8}.dial .face{color:#ffe7b0;cursor:pointer;background:linear-gradient(#3b3530,#24201c);border-radius:12px;place-items:center;width:54px;height:66px;font-size:34px;font-weight:700;display:grid;box-shadow:inset 0 3px 8px #0009,0 2px #fff6}.dial .face.roll{animation:.18s roll}@keyframes roll{0%{opacity:.3;transform:translateY(-8px)}}.lock.bad .dials{animation:.4s shake}.lock-msg{min-height:1.4em;margin:4px 0 2px;font-weight:600}.lock-msg.bad{color:#d62d22}.lock-msg.good{color:#2f8f5b}.lock-msg.info{color:var(--ink-soft)}.lock-lives{color:var(--ink-soft);justify-content:center;align-items:center;gap:6px;font-size:13px;font-weight:600;display:flex}.lock-lives span:last-child{margin-left:4px}.lock-lives.danger span:last-child{color:#d62d22}.lock.dead .face{color:#ffd0c8;background:linear-gradient(#8a2a22,#5a1a14)}.modal-actions .btn:disabled{opacity:.5}.lock.ok .face{color:#fff;background:linear-gradient(#3e8a5e,#2a6a45)}@keyframes shake{20%,60%{transform:translate(-9px)}40%,80%{transform:translate(9px)}}.hint-list{gap:8px;margin:10px 0;display:grid}.hint-item{border-left:4px solid var(--gold);background:#fff;border-radius:12px;padding:10px 12px;animation:.3s popIn}#holding{left:50%;bottom:calc(100px + var(--safe-b));white-space:nowrap;background:var(--ink);color:#fff;box-shadow:var(--shadow);opacity:0;pointer-events:none;border-radius:99px;align-items:center;gap:10px;padding:7px 8px 7px 16px;font-size:14px;transition:all .25s cubic-bezier(.3,1.5,.5,1);display:flex;position:absolute;transform:translate(-50%)translateY(10px)}#holding.show{opacity:1;pointer-events:auto;transform:translate(-50%)}#holding b{color:var(--gold);font-weight:600}#holding button{color:#fff;background:#ffffff29;border-radius:50%;width:28px;height:28px;font-size:13px}.results .kicker{text-align:center;color:var(--coral-dark);letter-spacing:.08em;text-transform:uppercase;font-size:13px;font-weight:600}.results h2{margin-bottom:2px;font-size:30px}.results.lost h2{color:#b8352b}.results .summary{text-align:center;color:var(--ink-soft);margin:8px 0 0;font-size:14px}.solution{background:#fff;border-radius:12px;margin:10px 0 0;padding:10px 14px;font-size:14px}.solution summary{cursor:pointer;color:var(--coral-dark);font-weight:600}.solution ol{margin:8px 0 2px;padding-left:20px;line-height:1.45}.tiles{perspective:400px;justify-content:center;gap:6px;margin:14px 0 8px;display:flex}.tiles .tile{width:min(34px, calc((min(100vw, 460px) - 120px) / var(--n) - 6px));aspect-ratio:1;border-radius:6px;height:auto;margin:0;animation:.55s cubic-bezier(.3,1.4,.5,1) both flip}.tile{vertical-align:-1px;border-radius:3px;width:11px;height:11px;margin-right:4px;display:inline-block}.tile.g{background:#4caf50}.tile.y{background:#f2c230}.tile.o{background:#f28a2c}.tile.r{background:#d9443a}.tile.k{background:#3a3530}@keyframes flip{0%{opacity:0;transform:rotateX(90deg)scale(.6)}}.legend{color:var(--ink-soft);flex-wrap:wrap;justify-content:center;gap:4px 12px;font-size:12px;display:flex}.share-box{background:#fff;border:2px dashed #e6d6bf;border-radius:14px;margin:12px 0 4px;padding:10px 14px}.share-box pre{white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text;margin:0;font-family:inherit;font-size:15px;line-height:1.45}.stats{grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0;display:grid}.stat{text-align:center;background:#fff;border-radius:14px;padding:10px 4px;box-shadow:0 2px 5px #0000000f}.stat b{font-variant-numeric:tabular-nums;font-size:24px;display:block}.stat span{text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);font-size:11px;font-weight:600}.next{text-align:center;color:var(--ink-soft);font-size:14px}.next b{color:var(--ink);font-variant-numeric:tabular-nums}.cards{background:#2f6b45;border-radius:14px;justify-content:center;gap:10px;margin:6px 0 10px;padding:18px 8px;display:flex}.card{color:#1d1d1d;background:#fdfbf4;border-radius:8px;width:64px;height:90px;font-family:Georgia,serif;position:relative;box-shadow:0 3px 8px #0000004d}.card.red{color:#c8322b}.card:nth-child(odd){transform:rotate(-4deg)}.card:nth-child(2n){transform:rotate(3deg)}.card b{font-size:18px;position:absolute;top:5px;left:7px}.card span{place-items:center;padding-top:12px;font-size:34px;display:grid;position:absolute;inset:0}.books{background:linear-gradient(#6b4428,#4c2f1b);border-bottom:12px solid #3a2213;border-radius:12px 12px 0 0;justify-content:center;align-items:flex-end;gap:6px;height:190px;margin:12px 0 8px;padding:12px 14px 0;display:flex}.book{cursor:pointer;border-radius:5px 5px 2px 2px;justify-content:center;align-items:center;width:52px;transition:transform .3s cubic-bezier(.3,1.6,.5,1);display:flex;position:relative;box-shadow:inset -6px 0 #00000026,inset 0 6px #ffffff1f}.book span{writing-mode:vertical-rl;color:#ffffffeb;letter-spacing:.03em;font-size:12px;font-weight:600;transform:rotate(180deg)}.book:hover{transform:translateY(-6px)}.book.pulled{transform:translateY(-28px)rotate(-6deg)}.pull-count{text-align:center;color:var(--ink-soft);font-weight:600}#fx{pointer-events:none;z-index:40;position:fixed;inset:0;overflow:hidden}.confetti{width:10px;height:14px;animation:fall var(--d) cubic-bezier(.25,.6,.4,1) forwards;border-radius:3px;position:absolute;top:-20px}@keyframes fall{to{transform:translate(var(--x), 110vh) rotate(var(--r))}}@media (width<=640px){.brand{gap:8px;font-size:17px}.brand-name{display:none}.icon-btn{width:36px;height:36px;font-size:16px}.room-title{top:calc(58px + env(safe-area-inset-top,0px));font-size:15px}#progress{top:calc(84px + env(safe-area-inset-top,0px));padding:6px 12px}#lives{top:calc(120px + env(safe-area-inset-top,0px));padding:4px 10px}#progress .dot{width:12px;height:12px}#progress .dot.on{width:18px}#inventory{bottom:calc(10px + var(--safe-b));border-radius:18px;gap:6px;padding:6px}.slot{border-radius:12px;width:min(56px,20vw - 12.8px);height:min(56px,20vw - 12.8px)}.slot .ic{font-size:24px}.slot .nm{display:none}#rotate-ctrls{left:10px;bottom:calc(86px + var(--safe-b))}#zoom-ctrls{left:10px;bottom:calc(206px + var(--safe-b))}.hint-btn{right:10px;bottom:calc(88px + var(--safe-b));padding:10px 14px;font-size:15px}#holding{bottom:calc(146px + var(--safe-b));font-size:13px}#toast{bottom:calc(196px + var(--safe-b))}#bubble{max-width:210px;padding:8px 12px;font-size:14px}.modal{border-radius:20px;padding:22px 16px 18px}.modal h2{font-size:21px}.dial .face{width:48px;height:60px;font-size:30px}.dial .arrow{width:48px;height:34px}.book{width:46px}.tiles{gap:4px;font-size:30px}.stat b{font-size:20px}.stats{gap:6px}.modal-actions .btn{flex:auto}}@media (height<=520px) and (orientation:landscape){.room-title{display:none}#progress{top:calc(10px + env(safe-area-inset-top,0px));left:auto;right:210px;transform:none}#lives{top:calc(52px + env(safe-area-inset-top,0px));left:auto;right:210px;transform:none}.slot{width:46px;height:46px}.slot .nm{display:none}#holding{bottom:calc(74px + var(--safe-b))}#zoom-ctrls{top:50%;bottom:auto;transform:translateY(-50%)}}.inspect-img.round{border:8px solid #d2a24c;border-radius:50%;width:70%;margin:6px auto 10px}.svg-ic{vertical-align:middle;width:1em;height:1em;display:inline-block}.slot .ic{place-items:center;display:grid}#btn-sound .svg-ic{width:20px;height:20px}.dial .face .swatch{border-radius:50%;width:30px;height:30px;box-shadow:0 0 0 3px #ffffff40}
