:root{--paper: #f7f2ee;--card: #ffffff;--ink: #874442;--ink-soft: #a1736c;--chip: #fbf4ec;--green: #29ad2e;--heart: #f53f35;--shadow: none;--shadow-lg: none;color-scheme:light}*{box-sizing:border-box}*{touch-action:manipulation}html,body{height:100%;touch-action:manipulation}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.4 ui-rounded,SF Pro Rounded,Hiragino Maru Gothic ProN,Segoe UI Variable,Nunito,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;user-select:none;overscroll-behavior:none}#app{height:100%;display:flex;justify-content:center}button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;padding:0;touch-action:manipulation}button svg,button svg *{pointer-events:none}.screen{height:100%;width:min(100%,460px);display:flex;flex-direction:column}.screen.game{container-type:inline-size;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.topbar{display:grid;grid-template-columns:9.61cqw 1fr auto;align-items:center;padding:3.6cqw 4.2cqw 0;flex:none}.topbar h1{margin:0;text-align:center;font-size:4.68cqw;font-weight:800;letter-spacing:.01em;color:var(--ink)}.round{width:9.61cqw;height:9.61cqw;border-radius:50%;background:var(--card);box-shadow:var(--shadow);display:grid;place-items:center;color:var(--ink);transition:transform .12s ease}.round:active{transform:scale(.92)}.round svg{width:5.3cqw;height:5.3cqw;display:block}.statusRow{display:flex;align-items:center;justify-content:center;gap:5.11cqw;margin-top:7.8cqw;flex:none}.counter,.hearts{height:8.11cqw;border-radius:999px;background:var(--card);box-shadow:var(--shadow);display:flex;align-items:center}.counter{gap:.9cqw;padding:0 5cqw 0 3cqw;font-weight:800;font-size:4.75cqw;font-variant-numeric:tabular-nums;line-height:1}.counter svg{width:6.9cqw;height:6.9cqw;display:block}.counter.bumped svg{animation:counterPop .55s ease}@keyframes counterPop{45%{transform:scale(1.3)}}.counter.bumped{animation:counterBloom .55s ease}@keyframes counterBloom{45%{box-shadow:0 0 3cqw 1.6cqw #ffcd5c9e}}.counter .done{color:var(--green)}.counter .total{color:var(--ink)}.hearts{gap:1.55cqw;padding:0 2.45cqw}.hearts svg{width:5.3cqw;height:4.55cqw;display:block;transition:transform .25s ease}.hearts.hurt svg{animation:heartbreak .45s ease}@keyframes heartbreak{35%{transform:scale(1.35) rotate(-8deg)}}.chips{display:flex;gap:3cqw;width:91.6cqw;height:15.6cqw;margin:3.3cqw auto 0;padding:2.1cqw;background:var(--card);border-radius:2.4cqw;box-shadow:var(--shadow);flex:none}.chips span{flex:1 1 0;min-width:0;display:grid;place-items:center;background:var(--chip);border-radius:.75cqw;border:.45cqw solid transparent;padding:0 1.5cqw;text-align:center;white-space:pre-line;font-size:3.45cqw;font-weight:700;line-height:1.32;color:var(--ink);hyphens:manual}.chips span.on{border-color:var(--ink)}@keyframes introFade{0%{opacity:0}}@keyframes tileIn{0%{transform:scale(0);opacity:0}50%{transform:scale(1.18)}65%{transform:scale(1.18)}to{transform:scale(1);opacity:1}}.screen.game.intro .topbar,.screen.game.intro .statusRow{animation:introFade .167s linear both}.screen.game.intro .boardCard{animation:introFade .18s linear .2s both}.screen.game.staging .cell{animation:tileIn .333s linear calc(.23s + var(--d) * .0333s) both}.screen.game.intro .controlsBay{animation:introFade .217s linear .4s both}.screen.game.staging .boardWrap,.screen.game.staging .controlsBay{pointer-events:none}.screen.game.intro .chips{animation:introFade .183s linear .367s both,chipAttract .44s ease-in-out var(--introEnd) 2 backwards}@keyframes chipAttract{0%,to{box-shadow:0 0 #f7c93f00}50%{box-shadow:0 0 2.4cqw .9cqw #f7c93fbf}}.slackA{flex:1 1 0}.slackB{flex:3.2 1 0}.boardWrap{flex:none;display:grid;place-items:center;touch-action:none;padding:0 2cqw}.boardWrap *{touch-action:none}.boardCard{--card-w: min(91.3cqw, calc(12.8cqw * var(--k, 1)), calc(100dvh - 82cqw) );width:var(--card-w);aspect-ratio:1;max-width:100%;background:var(--card);border-radius:calc(var(--card-w) * .033);box-shadow:var(--shadow);padding:calc(var(--card-w) * .022)}.grid{display:grid;grid-template-columns:repeat(var(--n),1fr);grid-template-rows:repeat(var(--n),1fr);gap:calc(var(--card-w) * .0196);width:100%;height:100%;touch-action:none}.cell{position:relative;border-radius:7%;background:var(--fill);display:grid;place-items:center;transition:background-color .12s ease}.cell svg{width:100%;height:100%;display:block;pointer-events:none}.cell.excluded{color:#fff}.cell.excluded svg{animation:pop .14s ease}.cell.cat svg{position:relative;animation:catSeat .9s ease-in-out}.cell.cat{z-index:2}.cell.cat .face{transform-box:fill-box;transform-origin:50% 100%;animation:catTilt 5s linear infinite}.cell.cat .eye{transform-box:fill-box;transform-origin:50% 62%}.cell.cat .eye.l{animation:catEyeL 5s linear infinite}.cell.cat .eye.r{animation:catEyeR 5s linear infinite}.cell.cat .pupil{animation:catGaze 5s linear infinite}@keyframes catGaze{0%,29.4%{transform:translate(0)}29.5%,45.4%{transform:translate(-2px)}45.5%,72.4%{transform:translate(2px)}72.5%,to{transform:translate(0)}}@keyframes catTilt{0%,29.4%{transform:rotate(0)}29.5%,45.4%{transform:rotate(4.2deg)}45.5%,72.4%{transform:rotate(-4.2deg)}72.5%,to{transform:rotate(0)}}@keyframes catEyeL{0%,28%{transform:scale(1)}29.5%{transform:scale(1.03,0)}31.6%,44%{transform:scaleX(1.05)}45.5%{transform:scale(.96,0)}47.6%,71%{transform:scaleX(.86)}72.5%{transform:scale(.93,0)}74.6%,to{transform:scale(1)}}@keyframes catEyeR{0%,28%{transform:scale(1)}29.5%{transform:scale(.93,0)}31.6%,44%{transform:scaleX(.86)}45.5%{transform:scale(.96,0)}47.6%,71%{transform:scaleX(1.05)}72.5%{transform:scale(1.03,0)}74.6%,to{transform:scale(1)}}.cell.cat svg.sparkle{position:absolute;inset:-14%;width:128%;height:128%;pointer-events:none;animation:twinkle .7s ease forwards}@keyframes twinkle{0%{opacity:0;transform:scale(.5)}35%{opacity:1;transform:scale(1.05)}to{opacity:0;transform:scale(1.2)}}.cell.wrong{animation:wrong .4s ease}.cell.spotlit{z-index:16;box-shadow:0 0 0 4px #fff,0 0 26px 10px #ffffff8c}.cell.hintTarget:after{content:"";position:absolute;inset:12%;border:2.5px dashed rgba(255,255,255,.9);border-radius:9%}.cell.hinted{animation:glow 1.1s ease infinite}@keyframes pop{0%{transform:scale(.5);opacity:.3}}@keyframes catSeat{0%{transform:scale(0)}9.2%{transform:scale(1.63)}27.8%{transform:scale(1.39)}88.9%{transform:scale(1.39)}to{transform:scale(1)}}@keyframes wrong{0%,to{transform:translate(0)}20%{transform:translate(-5px)}45%{transform:translate(5px)}70%{transform:translate(-3px)}}@keyframes glow{0%,to{box-shadow:inset 0 0 0 3px #fffffff2}50%{box-shadow:inset 0 0 0 4px #fff2a8}}.controlsBay{flex:none}.controls{display:flex;align-items:center;justify-content:center;gap:6cqw;padding-top:10.8cqw;flex:none}.helper{position:relative;width:17.6cqw;height:17.6cqw;border-radius:50%;background:var(--card);box-shadow:var(--shadow-lg);display:grid;place-items:center;transition:transform .12s ease}.helper:active{transform:scale(.92)}.helper svg{width:12.6cqw;height:12.6cqw}.helper[data-hint=bulb] svg{width:10.5cqw;height:10.5cqw}.helper .badge{pointer-events:none;position:absolute;top:-.6cqw;right:-.6cqw;min-width:6.3cqw;height:6.3cqw;padding:0 1.5cqw;border-radius:999px;background:var(--heart);color:#fff;font-size:3.6cqw;font-weight:800;display:grid;place-items:center;box-shadow:0 1px 3px #0000002e}.helper:disabled,.mini:disabled{opacity:.4;cursor:default}.mini{width:12cqw;height:12cqw;border-radius:50%;background:var(--card);box-shadow:var(--shadow);display:grid;place-items:center;color:var(--ink-soft);transition:transform .12s ease}.mini:active{transform:scale(.92)}.mini svg{width:6.4cqw;height:6.4cqw}.home{overflow-y:auto;padding-inline:20px}.brand{text-align:center;padding:18px 0 4px;flex:none;position:relative}.brand .round.settings{position:absolute;inset:14px 0 auto auto;width:38px;height:38px}.brand .round.settings svg{width:21px;height:21px}.brand .mark{width:96px;height:96px;margin:0 auto}.brand h1{margin:6px 0 2px;font-size:34px;color:var(--ink);letter-spacing:1px}.brand p{margin:0 0 4px;color:var(--ink-soft);font-size:14px;font-weight:600}.chapters{display:flex;gap:8px;padding:6px 0 0;overflow-x:auto;scrollbar-width:none}.chapters::-webkit-scrollbar{display:none}.chapterPill{flex:1 0 auto;position:relative;padding:8px 9px;border-radius:999px;background:var(--card);box-shadow:var(--shadow);color:var(--ink-soft);font-size:12px;font-weight:800;letter-spacing:.2px;white-space:nowrap;transition:transform .12s ease}.chapterPill:active{transform:scale(.94)}.chapterPill.current{background:var(--ink);color:#fff}.chapterPill.done:after{content:"";position:absolute;inset:5px 8px auto auto;width:6px;height:6px;border-radius:50%;background:var(--green)}.levelGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;padding:16px 0 24px}.levelTile{aspect-ratio:1;border-radius:16px;background:var(--card);box-shadow:var(--shadow);display:grid;place-items:center;gap:0;font-weight:800;font-size:19px;color:var(--ink);position:relative;transition:transform .12s ease}.levelTile:active{transform:scale(.94)}.levelTile small{position:absolute;bottom:7px;font-size:9.5px;font-weight:700;color:var(--ink-soft);letter-spacing:.3px}.levelTile.locked{color:#d5bfb9;background:#f2e9e3;box-shadow:none}.levelTile.locked svg{width:20px;height:20px}.levelTile.done:after{content:"";position:absolute;inset:auto 6px 6px auto;width:9px;height:9px;border-radius:50%;background:var(--green)}.overlay{position:fixed;inset:0;background:#35222b9e;display:flex;flex-direction:column;justify-content:flex-end;padding:20px;z-index:20;animation:fade .18s ease}.overlay.centred{justify-content:center}@keyframes fade{0%{opacity:0}}.sheet{background:var(--card);border-radius:24px;padding:22px 20px;box-shadow:0 12px 40px #3c232d4d;text-align:center;animation:rise .24s cubic-bezier(.34,1.4,.64,1)}@keyframes rise{0%{transform:translateY(22px);opacity:0}}.sheet h2{margin:6px 0 8px;color:var(--ink);font-size:24px}.sheet p{margin:0 0 14px;color:#8a6f6a;font-size:15px;line-height:1.5}.sheet .art{width:108px;height:108px;margin:0 auto}.sheet ul{text-align:left;margin:0 0 16px;padding-left:20px;color:#8a6f6a;font-size:14.5px;line-height:1.6}.btnRow{display:flex;gap:10px}.btn{flex:1;padding:13px 16px;border-radius:15px;background:var(--ink);color:#fff;font-weight:800;font-size:15px;box-shadow:var(--shadow);transition:transform .12s ease}.btn:active{transform:scale(.97)}.btn.ghost{background:#f6efe9;color:var(--ink)}.sheet.settings{text-align:left;max-height:100%;overflow-y:auto;max-width:420px;margin-inline:auto;width:100%}.sheet.settings h2{text-align:center}.field{margin-bottom:16px}.field h3{margin:0 0 4px;color:var(--ink);font-size:16px;font-weight:800}.field p{margin:0 0 9px;font-size:13.5px;line-height:1.45}.fieldRow{display:flex;align-items:stretch;gap:8px;margin-top:8px}.entry{flex:1;min-width:0;padding:12px 13px;border:none;border-radius:14px;background:var(--chip);color:var(--ink);font:inherit;font-size:16px;font-weight:800}.entry::placeholder{color:#c4a9a3;font-weight:700}.entry:focus-visible{outline:2px solid var(--ink-soft);outline-offset:1px}.entry.code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:16px;font-weight:600;letter-spacing:.2px}.fieldRow .btn{flex:0 0 auto;padding-inline:16px}.sheet.settings>.btn{display:block;width:100%}.note{margin:0 0 14px;min-height:19px;font-size:13.5px;font-weight:700;line-height:1.4}.note.ok{color:#1f8423}.note.bad{color:#d02a20}.overlay.win{justify-content:center;align-items:center;background:#120b0feb;animation:fade 33ms linear;overflow:hidden}.overlay.win .rays{position:absolute;top:48%;left:50%;width:min(112vw,74vh);height:min(112vw,74vh);translate:-50% -50%;pointer-events:none;background:repeating-conic-gradient(from 0deg,#ffd65c57 0deg 3.4deg,#ffd65c00 3.4deg 12deg);-webkit-mask-image:radial-gradient(closest-side,rgba(0,0,0,.9) 0%,rgba(0,0,0,.5) 34%,transparent 64%);mask-image:radial-gradient(closest-side,rgba(0,0,0,.9) 0%,rgba(0,0,0,.5) 34%,transparent 64%);animation:raysOpen .1s ease-out .25s backwards,raysTurn 24s linear .35s infinite}@keyframes raysOpen{0%{opacity:0;scale:.4}}@keyframes raysTurn{to{rotate:360deg}}.overlay.win .winArt{position:relative;width:min(46vw,190px);height:min(46vw,190px);animation:winDrop .15s cubic-bezier(.22,.9,.3,1) .05s backwards}@keyframes winDrop{0%{transform:translateY(-110vh) rotate(-16deg) scale(1.15)}46%{transform:translateY(0) rotate(0) scale(1.15)}to{transform:translateY(0) rotate(0) scale(1)}}.overlay.win .winArt>div{position:absolute;inset:0}.overlay.win .winArt svg{display:block;width:100%;height:100%;overflow:visible}.overlay.win .sleeper{display:none}.overlay.win .dancer{animation:danceHop 2s ease-in-out .2s infinite}.overlay.win .dBody{transform-box:view-box;transform-origin:50% 93%;animation:danceSway 2s ease-in-out .2s infinite}.overlay.win .dTail{transform-box:view-box;transform-origin:64% 82%;animation:danceTail 2s ease-in-out .2s infinite}.overlay.win .dArm.l{transform-box:view-box;transform-origin:30% 66%;animation:danceArmL 2s ease-in-out .2s infinite}.overlay.win .dArm.r{transform-box:view-box;transform-origin:70% 66%;animation:danceArmR 2s ease-in-out .2s infinite}.overlay.win .dancer .face{transform-box:fill-box;transform-origin:50% 100%;animation:danceHead 2s ease-in-out .2s infinite}.overlay.win .dancer .eye{transform-box:fill-box;transform-origin:50% 62%;animation:danceEyes 2s ease-in-out .2s infinite}.overlay.win .dancer .pupil{animation:danceGaze 2s ease-in-out .2s infinite}@keyframes danceHop{0%{transform:translate(0)}12%{transform:translate(-2.5%,-7%)}25%{transform:translate(-4%)}37%{transform:translate(-1%,-6%)}50%{transform:translate(4%)}62%{transform:translate(2%,-7%)}75%{transform:translate(-4%)}87%{transform:translateY(-9.5%)}to{transform:translate(0)}}@keyframes danceSway{0%{transform:rotate(0) scale(1.05,.95)}12%{transform:rotate(-4deg) scale(.97,1.05)}25%{transform:rotate(-4.5deg) scale(1.06,.94)}37%{transform:rotate(0) scale(.97,1.05)}50%{transform:rotate(4.5deg) scale(1.06,.94)}62%{transform:rotate(4deg) scale(.97,1.05)}75%{transform:rotate(-4.5deg) scale(1.06,.94)}87%{transform:rotate(0) scale(.96,1.07)}to{transform:rotate(0) scale(1.05,.95)}}@keyframes danceHead{0%{transform:rotate(0) translateY(0)}12%{transform:rotate(5deg) translateY(-3px)}25%{transform:rotate(6deg) translateY(0)}37%{transform:rotate(0) translateY(-3px)}50%{transform:rotate(-6deg) translateY(0)}62%{transform:rotate(-5deg) translateY(-3px)}75%{transform:rotate(6deg) translateY(0)}87%{transform:rotate(0) translateY(-5px)}to{transform:rotate(0) translateY(0)}}@keyframes danceArmL{0%{transform:rotate(0)}12%{transform:rotate(18deg)}25%{transform:rotate(12deg)}37%{transform:rotate(-12deg)}50%{transform:rotate(-16deg)}62%{transform:rotate(12deg)}75%{transform:rotate(16deg)}87%{transform:rotate(22deg)}to{transform:rotate(0)}}@keyframes danceArmR{0%{transform:rotate(0)}12%{transform:rotate(12deg)}25%{transform:rotate(16deg)}37%{transform:rotate(-12deg)}50%{transform:rotate(-18deg)}62%{transform:rotate(12deg)}75%{transform:rotate(14deg)}87%{transform:rotate(-22deg)}to{transform:rotate(0)}}@keyframes danceTail{0%{transform:rotate(0)}12%{transform:rotate(9deg)}25%{transform:rotate(0)}37%{transform:rotate(-9deg)}50%{transform:rotate(0)}62%{transform:rotate(9deg)}75%{transform:rotate(0)}87%{transform:rotate(-11deg)}to{transform:rotate(0)}}@keyframes danceEyes{0%,30%{transform:scale(1)}36%,46%{transform:scaleY(0)}52%,80%{transform:scale(1)}86%,96%{transform:scaleY(0)}to{transform:scale(1)}}@keyframes danceGaze{0%,4%{transform:translate(0)}20%,29%{transform:translate(-1.6px)}45%,54%{transform:translate(1.6px)}70%,79%{transform:translate(-1.6px)}95%,to{transform:translate(0)}}.overlay.win .wordmark{position:relative;margin:0 0 2vh;font-size:min(13vw,54px);line-height:1.1;letter-spacing:.01em;color:#fff;text-shadow:0 0 1px #6b3b2c,0 3px 0 #6b3b2c,0 6px 18px rgba(0,0,0,.45);animation:winWord .32s linear .183s backwards}@keyframes winWord{0%{opacity:0;transform:scale(1.64)}21%{opacity:1}58%{transform:scale(1)}77%{transform:scale(.96)}to{opacity:1;transform:scale(1)}}.overlay.win .winLine{position:relative;margin:2vh 0 0;max-width:20em;text-align:center;color:#f4e2dc;font-size:15px;line-height:1.5;text-shadow:0 2px 8px rgba(0,0,0,.6);animation:introFade .33s linear .92s backwards}.overlay.win .btnRow{position:absolute;left:20px;right:20px;bottom:calc(20px + env(safe-area-inset-bottom));animation:introFade .33s linear .92s backwards}.overlay.win .btn{background:#f0a13a;color:#fff}.overlay.win .btn.ghost{background:#ffffff24;color:#fff}.overlay.win .confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden}.overlay.win .confetti i{position:absolute;top:-6%;left:var(--x);width:1.4%;height:2.6%;background:var(--c);border-radius:1px;animation:confettiFall var(--dur) linear var(--delay) infinite backwards}@keyframes confettiFall{0%{transform:translateY(0) rotate(0);opacity:0}6%{opacity:1}90%{opacity:1}to{transform:translateY(112vh) rotate(var(--spin));opacity:0}}.coach{position:fixed;inset:0;z-index:15;display:flex;flex-direction:column;justify-content:flex-end;padding:20px;background:#35222b94;animation:fade .18s ease}.coach .bubble{background:var(--card);border-radius:20px;padding:18px 18px 16px;box-shadow:0 12px 40px #3c232d4d;animation:rise .24s cubic-bezier(.34,1.4,.64,1)}.coach p{margin:0 0 14px;font-size:15.5px;line-height:1.5;color:#7a5f5a}.coach .dots{display:flex;gap:5px;justify-content:center;margin-bottom:12px}.coach .dots i{width:7px;height:7px;border-radius:50%;background:#ecdfd9}.coach .dots i.on{background:var(--ink)}.coach .btn{width:100%}.hand{position:fixed;left:var(--x);top:var(--y);width:0;height:0;z-index:17;pointer-events:none}.hand.travels{animation:handTravel 2.2s ease-in-out infinite}@keyframes handTravel{0%,14%{transform:translate(0)}64%,to{transform:translate(var(--dx),var(--dy))}}.hand .handArt{position:absolute;width:calc(var(--s) * .82);height:calc(var(--s) * 1.289);left:calc(var(--s) * -.146);top:calc(var(--s) * -.044);filter:drop-shadow(0 3px 7px rgba(0,0,0,.4))}.hand i{position:absolute;left:calc(var(--s) * -.5);top:calc(var(--s) * -.5);width:var(--s);height:var(--s);border:max(2px,calc(var(--s) * .045)) solid rgba(255,255,255,.92);border-radius:50%;animation:handTap 1.37s ease-out infinite backwards}.hand i.two{animation-delay:.37s}.hand.travels i{animation:none;opacity:.55;scale:.66}@keyframes handTap{0%{opacity:.95;scale:.3}27%{opacity:0;scale:1.5}to{opacity:0;scale:1.5}}.hintCard{position:fixed;left:14px;right:14px;bottom:calc(max(14px,env(safe-area-inset-bottom)) + 92px);max-height:40vh;overflow-y:auto;background:var(--card);border-radius:18px;padding:14px 16px;box-shadow:0 10px 30px #3c232d3d;z-index:12;animation:rise .22s cubic-bezier(.34,1.4,.64,1);display:flex;gap:12px;align-items:flex-start}.hintCard svg{width:26px;height:26px;flex:none;margin-top:1px}.hintCard h3{margin:0 0 3px;font-size:14.5px;color:var(--ink)}.hintCard p{margin:0;font-size:13.5px;line-height:1.45;color:#8a6f6a}.hintCard .close{margin-left:auto;color:var(--ink-soft);font-size:20px;line-height:1;padding:2px 4px;flex:none}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;animation-delay:0s!important}.cell.cat .face,.cell.cat .eye,.cell.cat .pupil{animation:none!important}.screen.game.staging .boardWrap,.screen.game.staging .controlsBay{pointer-events:auto}.overlay.win .confetti{display:none}.overlay.win .rays,.coach .hand,.hand i{animation:none!important}.overlay.win .dancer{display:none}.overlay.win .sleeper{display:block}}.topbarEnd{display:flex;align-items:center;gap:1.9cqw}.round.sound[data-muted=true]{color:var(--ink-soft)}
