:root{
  --plum:#2a1045; --purple:#5b2a86; --pink:#e5329a; --ink:#2a1045; --muted:#6d5a85; --bg1:#f3ecfb; --bg2:#fbe9f4; --bg3:#e8f1ff;
  --text:#2a1045; --btn:#e5329a; --btn-text:#ffffff; --focus:#e5329a; --line:#2a1045; --cell-line:rgba(42,16,69,.22);
  --card:#ffffff; --card-border:rgba(42,16,69,.1); --good:#1f9d62;
  --r0:#f7a8d0; --r1:#b8a3f0; --r2:#9fd3f5; --r3:#a6e3a1; --r4:#fbe27a; --r5:#ffb87a; --r6:#ef8f8f; --r7:#78d9cb; --r8:#d6c3a1; --board-bg:rgba(255,255,255,.7);
  color-scheme:light dark;
}
@media (prefers-color-scheme:dark){:root{
  --bg1:#1b1030; --bg2:#2a1245; --bg3:#161a3a; --text:#f6f0ff; --muted:#b9a8d6; --card:#2a1d44; --card-border:rgba(255,255,255,.12); --focus:#ff7ac0; --line:#120a22; --cell-line:rgba(18,10,34,.4); --board-bg:rgba(255,255,255,.1);
}}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{font-family:"Nunito",system-ui,sans-serif;font-weight:700;color:var(--text);background:var(--bg1);overflow:hidden;-webkit-user-select:none;user-select:none;overscroll-behavior:none}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none;padding:0}
[hidden]{display:none!important}
.display{font-family:"Bagel Fat One","Arial Rounded MT Bold",system-ui,sans-serif;font-weight:400}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

#app{position:fixed;inset:0;display:flex;justify-content:center;background:linear-gradient(160deg,var(--bg1) 0%,var(--bg2) 55%,var(--bg3) 100%)}
.bg{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.orb{position:absolute;border-radius:50%;filter:blur(46px);opacity:.55}
.o1{width:300px;height:300px;left:-90px;top:6%;background:radial-gradient(circle,#ff9fd2,transparent 70%)}
.o2{width:340px;height:340px;right:-120px;top:38%;background:radial-gradient(circle,#b9a2ff,transparent 70%)}
.o3{width:280px;height:280px;left:10%;bottom:-100px;background:radial-gradient(circle,#9fd8ff,transparent 70%)}
@media (prefers-color-scheme:dark){.orb{opacity:.35}}

#screens{position:relative;width:100%;max-width:520px;height:100%}
.screen{position:absolute;inset:0;display:none;flex-direction:column;padding:max(14px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
.screen.active{display:flex}

/* shared controls */
.iconbtn{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;flex:none}
.iconbtn svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 26px;border-radius:26px;background:var(--btn);color:var(--btn-text);font-size:19px;box-shadow:0 6px 18px rgba(229,50,154,.35)}
.btn.alt{background:var(--card);color:var(--text);box-shadow:inset 0 0 0 2px var(--card-border)}
.btn.big{min-height:60px;font-size:24px;padding:0 36px;border-radius:32px}
.btn .spin{width:18px;height:18px;border-radius:50%;border:3px solid rgba(255,255,255,.4);border-top-color:#fff;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* home */
#home{align-items:center;text-align:center;gap:6px}
.home-top{width:100%;display:flex;justify-content:flex-end;gap:10px}
.hero{display:flex;flex-direction:column;align-items:center;gap:4px;margin-top:2px}
.hero img{width:min(34vw,150px);height:auto;filter:drop-shadow(0 8px 12px rgba(42,16,69,.25));animation:bob 3s ease-in-out infinite;cursor:pointer;touch-action:manipulation}
.hero h1{margin:0;font-size:clamp(44px,13vw,64px);line-height:1;color:var(--purple);-webkit-text-stroke:0;letter-spacing:.5px}
.hero h1 span{color:var(--pink)}
@media (prefers-color-scheme:dark){.hero h1{color:#fff}}
.hero p{margin:0;font-size:17px;color:var(--muted)}
.home-actions{width:100%;display:flex;flex-direction:column;align-items:center;gap:14px;margin-top:14px}
.play-sub{font-size:14px;opacity:.9}
.cards{width:100%;display:grid;grid-template-columns:1fr 1fr;gap:12px}
.hcard{padding:14px 12px;text-align:left;display:flex;flex-direction:column;gap:3px;min-height:92px;justify-content:center}
.hcard b{font-size:17px}
.hcard small{font-size:14px;color:var(--muted);font-weight:700}
.hcard .tick{color:var(--good)}
.home-foot{margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:13px;color:var(--muted);position:relative;z-index:1}
.home-foot a{color:inherit}
.stickers{position:absolute;left:0;right:0;bottom:46px;display:flex;justify-content:space-between;padding:0 8px;pointer-events:none;z-index:0}
.stickers img{height:clamp(90px,16vh,150px);width:auto;opacity:.95;filter:drop-shadow(0 6px 8px rgba(42,16,69,.22))}
.stickers img:last-child{transform:scaleX(-1)}

/* top bars */
.bar{display:flex;align-items:center;gap:10px;padding:8px 10px;min-height:60px}
.bar h2{margin:0;font-size:22px;flex:1;text-align:center;line-height:1.05}
.bar h2 small{display:block;font:700 13px "Nunito",sans-serif;color:var(--muted);margin-top:2px}
.pill{min-width:70px;text-align:center;font-weight:900;font-size:17px;font-variant-numeric:tabular-nums}

/* levels */
#levels .scroll{flex:1;overflow-y:auto;margin:12px -6px 0;padding:0 6px 20px;-webkit-overflow-scrolling:touch}
.sect{margin:16px 4px 8px;font-size:15px;color:var(--muted);font-weight:900;letter-spacing:.3px}
.lgrid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.lvl{position:relative;aspect-ratio:1;border-radius:16px;background:var(--card);border:1px solid var(--card-border);display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:20px;font-weight:900;box-shadow:0 3px 10px rgba(42,16,69,.08)}
.lvl .st{display:flex;gap:1px;font-size:11px;line-height:1;color:#e8a317;margin-top:3px;min-height:11px}
.lvl .st i{font-style:normal}.lvl .st i.off{color:rgba(120,100,150,.35)}
.lvl.cur{box-shadow:0 0 0 3px var(--pink)}
.lvl[disabled]{opacity:.45;cursor:default}
.lvl[disabled]::after{content:"";position:absolute;right:7px;top:7px;width:10px;height:8px;border-radius:2px;background:var(--muted)}

/* game */
#game{align-items:center;gap:8px}
#game .bar{width:100%}
.hearts{display:flex;gap:8px;justify-content:center;height:30px;align-items:center}
.hearts svg{width:30px;height:28px;fill:var(--pink);filter:drop-shadow(0 2px 3px rgba(229,50,154,.35))}
.hearts svg.off{fill:rgba(120,100,150,.3);filter:none}
.hearts svg.lose{animation:heartLose .5s var(--ease)}
.relaxed{font-size:14px;color:var(--muted);height:30px;display:flex;align-items:center}
.msg{width:100%;min-height:54px;display:flex;align-items:center;justify-content:center;text-align:center;padding:8px 14px;font-size:15px;line-height:1.3;border-radius:18px}
.msg.empty{visibility:hidden}
.boardwrap{flex:1;display:flex;align-items:center;justify-content:center;width:100%;min-height:0}
.board{--bsz:max(240px,min(calc(100vw - 32px),470px,calc(100dvh - 350px)));width:var(--bsz);height:var(--bsz);display:grid;grid-template-columns:repeat(var(--n),1fr);grid-template-rows:repeat(var(--n),1fr);gap:3px;padding:4px;border-radius:20px;overflow:hidden;background:var(--board-bg);box-shadow:0 10px 28px rgba(42,16,69,.16);touch-action:none;-webkit-user-select:none;user-select:none}
.board.shake{animation:shake .38s var(--ease)}
.cell{position:relative;display:grid;place-items:center;border:0;border-radius:calc(var(--bsz) / var(--n) * .2);color:#2a1045;padding:0;min-width:0;min-height:0;touch-action:none;-webkit-tap-highlight-color:transparent;transition:filter var(--t-fast) var(--ease),opacity var(--t-med) var(--ease)}
.cell:active{filter:brightness(.94)}
.r0{background:var(--r0)}.r1{background:var(--r1)}.r2{background:var(--r2)}.r3{background:var(--r3)}.r4{background:var(--r4)}.r5{background:var(--r5)}.r6{background:var(--r6)}.r7{background:var(--r7)}.r8{background:var(--r8)}
.cell .al{width:82%;height:82%;object-fit:contain;animation:pop .34s var(--ease) both;pointer-events:none;filter:drop-shadow(0 2px 2px rgba(42,16,69,.3))}
.cell .mk{position:absolute;inset:30%;opacity:0;transform:scale(.4);transition:opacity var(--t-fast),transform var(--t-fast) var(--ease)}
.cell .mk::before,.cell .mk::after{content:"";position:absolute;left:50%;top:50%;width:100%;height:3px;border-radius:2px;background:rgba(42,16,69,.55)}
.cell .mk::before{transform:translate(-50%,-50%) rotate(45deg)}.cell .mk::after{transform:translate(-50%,-50%) rotate(-45deg)}
.cell.x .mk{opacity:1;transform:none}
.cell.auto:not(.x) .mk{opacity:.32;transform:none}
.letters .cell::after{content:attr(data-l);position:absolute;left:3px;top:1px;font-size:calc(var(--bsz) / var(--n) * .24);font-weight:900;color:rgba(42,16,69,.6);pointer-events:none}
.cell.hl{box-shadow:inset 0 0 0 3px var(--pink)}
.cell.tgt{box-shadow:inset 0 0 0 4px var(--pink),0 0 0 2px #fff;z-index:2;animation:ring .9s ease-out 3}
.cell.wrong{animation:shake .38s var(--ease);background-image:linear-gradient(rgba(220,40,60,.5),rgba(220,40,60,.5))}
.cell:focus-visible{outline:3px solid var(--pink);outline-offset:-3px;z-index:3}
.mini{--bsz:200px;pointer-events:none;margin:0 auto}


.dock{width:100%;display:flex;justify-content:space-around;gap:6px;padding:8px 10px}
.dbtn{flex:1;min-height:54px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;border-radius:16px;font-size:13px}
.dbtn svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.dbtn[disabled]{opacity:.4;cursor:default}
.dbtn .ct{position:absolute;margin:-4px 0 0 26px;background:var(--pink);color:#fff;border-radius:9px;font-size:11px;min-width:18px;height:18px;line-height:18px;text-align:center;padding:0 4px}
.dbtn{position:relative}

/* modal */
#modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;padding:20px;z-index:20;background:rgba(30,12,52,.45);animation:fade .2s ease both}
#modal.open{display:flex}
.sheet{width:100%;max-width:400px;max-height:90dvh;overflow-y:auto;padding:22px 20px;text-align:center;animation:sheetIn .3s var(--ease) both;display:flex;flex-direction:column;gap:12px;align-items:center}
.sheet h3{margin:0;font-size:32px;line-height:1.05;color:var(--purple)}
@media (prefers-color-scheme:dark){.sheet h3{color:#fff}}
.sheet p{margin:0;font-size:16px;line-height:1.4}
.sheet .sub{color:var(--muted);font-size:15px}
.sheet img.mascot{height:130px;width:auto;animation:pop .5s var(--ease) both;filter:drop-shadow(0 6px 8px rgba(42,16,69,.25))}
.stars{display:flex;gap:6px;font-size:44px;line-height:1}
.stars i{font-style:normal;color:#f2b01e;display:inline-block;animation:starPop .5s var(--ease) both;animation-delay:calc(var(--k) * 200ms + 200ms);text-shadow:0 2px 0 rgba(0,0,0,.12)}
.stars i.off{color:rgba(120,100,150,.35);animation:none}
.row{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;width:100%}
.rules{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;text-align:left;width:100%}
.rules li{display:flex;gap:10px;align-items:flex-start;font-size:15px;line-height:1.35}
.rules b{flex:none;width:26px;height:26px;border-radius:50%;background:var(--pink);color:#fff;display:grid;place-items:center;font-size:14px}
.setrow{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;text-align:left;font-size:16px}
.setrow small{display:block;color:var(--muted);font-size:13px;font-weight:700}
.sw{flex:none;width:52px;height:30px;border-radius:15px;background:rgba(120,100,150,.4);position:relative;transition:background-color var(--t-med) var(--ease)}
.sw::after{content:"";position:absolute;left:3px;top:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.3);transition:transform var(--t-med) var(--ease)}
.setrow[aria-checked="true"] .sw{background:var(--pink)}
.setrow[aria-checked="true"] .sw::after{transform:translateX(22px)}
.check{width:64px;height:64px}
.check circle,.check path{fill:none;stroke:var(--good);stroke-width:5;stroke-linecap:round;stroke-linejoin:round}
.check path{stroke-dasharray:50;stroke-dashoffset:50;animation:drawCheck .5s var(--ease) .15s forwards}

#toast{position:fixed;left:50%;bottom:calc(env(safe-area-inset-bottom) + 96px);transform:translate(-50%,16px);padding:10px 18px;font-size:15px;opacity:0;pointer-events:none;transition:opacity var(--t-med) var(--ease),transform var(--t-med) var(--ease);z-index:30;max-width:90%;text-align:center}
#toast.show{opacity:1;transform:translate(-50%,0)}
.cf{position:fixed;top:0;width:10px;height:14px;border-radius:3px;z-index:40;pointer-events:none;animation:fall 2.2s ease-in forwards;animation-delay:var(--d)}
.skel{background:linear-gradient(90deg,rgba(120,100,150,.15),rgba(255,255,255,.4),rgba(120,100,150,.15));background-size:200% 100%;animation:shimmer 1.2s linear infinite;border-radius:16px}
@keyframes shimmer{to{background-position:-200% 0}}
@media (max-height:700px){.hero img{width:min(26vw,110px)}.stickers{display:none}.home-actions{margin-top:8px}}
.d0{--i:0}.d1{--i:1}.d2{--i:2}.d3{--i:3}.d4{--i:4}.d5{--i:5}
.contents{display:contents}

/* stats row, boosts, rewards */
.stats{width:100%;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px}
.stats .hearts{grid-column:2}
.chip{min-width:64px;text-align:center;padding:5px 12px;border-radius:16px;background:var(--card);box-shadow:inset 0 0 0 1px var(--card-border);font-size:16px;font-weight:900}
#placed{justify-self:start}#score{justify-self:end}
.chip.bump{animation:pop .35s var(--ease)}
.cell.rip{animation:rip .55s var(--ease) both;animation-delay:var(--d,0ms)}
@keyframes rip{0%{transform:scale(1)}40%{transform:scale(.86);filter:brightness(1.18)}100%{transform:scale(1)}}
.fly{position:fixed;z-index:25;pointer-events:none;font-weight:900;font-size:20px;color:#fff;text-shadow:0 2px 0 rgba(42,16,69,.6),0 0 10px rgba(229,50,154,.8);animation:flyUp .95s var(--ease) forwards;transform:translate(-50%,-50%);white-space:nowrap}
@keyframes flyUp{0%{opacity:0;transform:translate(-50%,-30%) scale(.6)}20%{opacity:1;transform:translate(-50%,-70%) scale(1.15)}100%{opacity:0;transform:translate(-50%,-190%) scale(1)}}
.cell.gain{animation:gain .6s var(--ease)}
@keyframes gain{0%{box-shadow:0 0 0 0 rgba(255,255,255,.9)}100%{box-shadow:0 0 0 16px rgba(255,255,255,0)}}
.rays{position:relative;display:grid;place-items:center;width:100%}
.rays::before{content:"";position:absolute;width:230px;height:230px;border-radius:50%;background:repeating-conic-gradient(from 0deg,rgba(255,210,90,.55) 0 10deg,rgba(255,210,90,0) 10deg 20deg);-webkit-mask:radial-gradient(circle,#000 30%,transparent 70%);mask:radial-gradient(circle,#000 30%,transparent 70%);animation:spinOnce 2.4s var(--ease) both}
@keyframes spinOnce{from{transform:rotate(-60deg) scale(.4);opacity:0}to{transform:rotate(0) scale(1);opacity:1}}
.rays img{position:relative}
.pts{font-size:34px;font-weight:900;color:var(--pink);line-height:1}
.rewards{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.rewards span{background:var(--card);box-shadow:inset 0 0 0 1px var(--card-border);border-radius:14px;padding:4px 10px;font-size:14px;animation:pop .4s var(--ease) both}
.ribbon{background:var(--pink);color:#fff;border-radius:14px;padding:3px 12px;font-size:14px;font-weight:900;animation:pop .5s var(--ease) .3s both}
.dbtn{min-width:0}
