/* Locally hosted Google Fonts (SIL OFL): no third-party font request required. */
@font-face{font-family:'Fredoka';font-style:normal;font-weight:300 700;font-display:swap;src:url('assets/fredoka-latin.woff2') format('woff2')}
@font-face{font-family:'Nunito';font-style:normal;font-weight:200 1000;font-display:swap;src:url('assets/nunito-latin.woff2') format('woff2')}
:root{--bg:#ffe28a;--bg2:#ffd35a;--paper:#fffaf0;--text:#3b2314;--muted:#86654a;--line:#efd39c;--accent:#22b357;--accentdark:#15853e;--tint:#fff1c9;--tile:#fffaf0;--tileedge:#d6b483;--dirt:#7a4a2b;--dirtdark:#5a3318;--speck:#8f5c38;--red:#ee4444;--worm:#ff6f91;--wormdark:#d1446a;--orange:#ff9c1a;--orangedark:#d47a00;--purple:#8d5cf6;--purpledark:#6639cf;--blue:#2c7bd6;--gold:#c98700;--disp:'Baloo 2','Arial Rounded MT Bold','Trebuchet MS',sans-serif;--body:Nunito,'Segoe UI',system-ui,sans-serif}
body.dark{--bg:#25204b;--bg2:#2e2860;--paper:#332d66;--text:#fff3dc;--muted:#ddd7fa;--line:#463f82;--tint:#3b3478;--dirt:#4b2e1c;--dirtdark:#2f1b0e;--speck:#5c3a24}
*{box-sizing:border-box}
body{margin:0;background-color:var(--bg);background-image:radial-gradient(var(--bg2) 2.5px,transparent 3px);background-size:24px 24px;color:var(--text);font-family:var(--body);font-weight:600;font-size:16px}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none;-webkit-tap-highlight-color:transparent}
button:focus-visible{outline:3px solid var(--worm);outline-offset:4px}
button:disabled{cursor:default;opacity:.5}
#app{max-width:460px;margin:0 auto;min-height:100dvh;padding:26px 20px 30px}
h1,h2,h3,p{margin:0}
h1,h2,h3{font-family:var(--disp);font-weight:800}
h1{font-size:46px;line-height:1;letter-spacing:-.5px}
h2{font-size:30px;line-height:1.1}
h3{font-size:22px;line-height:1.1}
.sub{color:var(--muted);line-height:1.5;font-size:15px}
.muted{color:var(--muted)}
.eyebrow{font-size:14px;font-weight:800;color:var(--accentdark)}
.dark .eyebrow{color:var(--accent)}

/* header */
.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:26px}
.brand{font-family:var(--disp);font-size:27px;font-weight:800;display:flex;gap:10px;align-items:center;line-height:1;white-space:nowrap}
.brand img{width:42px;height:42px;border-radius:12px;border:3px solid var(--text);box-shadow:0 3px 0 var(--text);animation:wormhello 1.4s ease-in-out .3s 2}
.icons{display:flex;gap:10px}
.icon{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;font-size:19px;background:var(--paper);border:3px solid var(--text);box-shadow:0 3px 0 var(--text)}
.icon:active{transform:translateY(2px);box-shadow:0 1px 0 var(--text)}

/* home */
.welcome{margin:6px 0 22px}
.welcome h1{margin:6px 0 10px}
.streak{display:flex;align-items:center;gap:12px;background:var(--paper);border:3px solid var(--text);box-shadow:0 5px 0 var(--text);border-radius:20px;padding:13px 15px;margin-bottom:28px}
.streak .flame{font-size:28px}
.streak strong{font-family:var(--disp);font-size:19px;font-weight:800}
.streak small{font-size:12px;color:var(--muted)}
.streak .days{margin-left:auto;display:flex;gap:4px}
.daydot{width:23px;height:23px;border:2px solid var(--line);border-radius:50%;display:grid;place-items:center;font-size:10px;font-weight:800}
.daydot.on{background:var(--accent);color:#fff;border-color:var(--accentdark)}
.sectionhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.sectionhead h3{font-size:25px}
.sectionhead span{font-size:13px;font-weight:800;color:var(--muted)}
.sectionhead button{font-family:var(--disp);font-size:28px;font-weight:800;padding:0 8px}
.daily{position:relative;width:100%;display:flex;align-items:center;text-align:left;color:#fff;border:3px solid var(--text);border-radius:22px;padding:17px 16px;gap:15px;margin-bottom:16px;box-shadow:0 6px 0 var(--text);transition:transform .1s,box-shadow .1s}
.daily:active{transform:translateY(4px);box-shadow:0 2px 0 var(--text)}
.daily.easy{background:var(--accent)}
.daily.medium{background:var(--orange)}
.daily.hard{background:var(--purple)}
.daily h3{font-size:27px;text-shadow:0 2px 0 rgba(0,0,0,.18)}
.daily .meta{font-size:13px;font-weight:800;color:#fff;margin-top:3px}
.daily .badge{margin-left:auto;font-family:var(--disp);font-size:17px;font-weight:800;color:#3b2314;background:#fffaf0;border:3px solid #3b2314;border-radius:14px;padding:6px 13px;box-shadow:0 3px 0 var(--text);white-space:nowrap}
.mini{display:grid;grid-template-columns:repeat(3,10px);gap:4px;width:38px;flex-shrink:0}
.mini i{width:10px;height:10px;border-radius:3px;background:rgba(255,255,255,.3)}
.mini i.on{background:#fff}
.reset{text-align:center;font-size:14px;font-weight:800;color:var(--muted);margin:10px 0 26px;font-variant-numeric:tabular-nums}
.modes{display:grid;grid-template-columns:1fr;gap:14px}
.mode{display:flex;gap:14px;align-items:center;background:var(--paper);border:3px solid var(--text);border-radius:20px;padding:16px;text-align:left;box-shadow:0 5px 0 var(--text)}
.mode:active{transform:translateY(3px);box-shadow:0 2px 0 var(--text)}
.mode .symbol{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:var(--worm);color:#fff;font-size:24px;flex-shrink:0;border:3px solid var(--text)}
.mode .symbol{background:var(--blue)}
.mode strong{font-family:var(--disp);font-size:21px;font-weight:800}
.mode .sub{font-size:13px;margin-top:2px}
.footer{display:flex;flex-wrap:wrap;justify-content:center;gap:12px 26px;margin-top:26px;padding-top:20px;border-top:3px dashed var(--line)}
.footer button{font-size:14px;font-weight:800;color:var(--muted)}
.bottomnote{text-align:center;margin-top:22px;color:var(--muted);font-family:var(--disp);font-size:17px;font-weight:700}

/* game */
.gameheading{display:flex;justify-content:space-between;align-items:center;margin:0 0 18px}
.back{font-family:var(--disp);font-size:32px;font-weight:800;padding:0 8px 0 0;line-height:1}
.pill{font-size:13px;font-weight:800;background:var(--text);color:var(--bg);padding:7px 13px;border-radius:20px}
.timer{font-size:15px;font-weight:800;color:var(--muted);font-variant-numeric:tabular-nums}
.score{display:grid;grid-template-columns:1fr 3px 1fr;align-items:center;text-align:center;background:var(--paper);border:3px solid var(--text);border-radius:24px;padding:12px 16px;margin-bottom:22px;box-shadow:0 5px 0 var(--text)}
.score .eyebrow{color:var(--muted)}
.score .divider{height:52px;background:var(--line);border-radius:2px}
.score .number{font-family:var(--disp);font-size:52px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.score .target{color:var(--accent)}
.score.over .current{color:var(--red);animation:shake .25s}

/* board: a patch of dirt the worm tunnels through */
.board{position:relative;display:grid;grid-template-columns:repeat(var(--n),1fr);gap:8px;padding:10px;border-radius:24px;border:3px solid var(--text);background-color:var(--dirt);background-image:radial-gradient(var(--speck) 2px,transparent 2.5px),radial-gradient(var(--dirtdark) 1.5px,transparent 2px);background-size:19px 19px,23px 23px;background-position:0 0,9px 11px;box-shadow:inset 0 5px 0 var(--dirtdark),0 6px 0 var(--text);touch-action:none;user-select:none;-webkit-user-select:none}
.tile{position:relative;aspect-ratio:1;display:flex;flex-direction:column;justify-content:center;align-items:center;background:var(--tile);color:#3b2314;border-radius:14px;box-shadow:0 5px 0 var(--tileedge);font-family:var(--disp);font-size:28px;font-weight:800;z-index:1;transition:transform .1s,background .12s}
.tile span{z-index:3;background:var(--tile);border-radius:50%;min-width:36px;text-align:center;line-height:38px}
.tile small{z-index:4;font-family:var(--body);font-size:9px;font-weight:800;letter-spacing:.5px;position:absolute;bottom:4px}
.tile.start{background:var(--accent);color:#fff;box-shadow:0 5px 0 var(--accentdark)}
.tile.start span{background:var(--accent)}
.tile.end{background:var(--orange);color:#fff;box-shadow:0 5px 0 var(--orangedark)}
.tile.end span{background:var(--orange)}
.tile.visited{background:rgba(0,0,0,.22);box-shadow:none;transform:translateY(4px)}
.tile.visited span{background:var(--tile);color:#3b2314;box-shadow:0 2px 0 var(--tileedge)}
.tile.start.visited{box-shadow:inset 0 0 0 3px var(--accent)}
.tile.end.visited{box-shadow:inset 0 0 0 3px var(--orange)}
.tile.start.visited small,.tile.end.visited small{color:#fff}
.tile.neg,.tile.neg span{color:var(--blue)}
.tile.mul,.tile.mul span{color:var(--gold)}
.tile.wall{background:radial-gradient(circle at 34% 28%,#cfc8bb,#9a9286 55%,#756e63);border-radius:44% 50% 40% 52%/48% 42% 54% 46%;box-shadow:0 5px 0 #4f4940;transform:scale(.9)}
.tile.star:not(.visited):after{content:'★';position:absolute;top:2px;right:5px;font-size:16px;color:#f2b300;text-shadow:0 1px 0 #a87a00;animation:pulse 1.6s infinite}
.tile.key:after,.tile.lock:after{position:absolute;top:2px;right:5px;font-size:14px}
.tile.key:after{content:'🔑'}
.tile.lock:after{content:'🔒'}
.tile.hint{animation:hint .9s infinite}
.board svg{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;overflow:visible}
.board svg.headlayer{z-index:2}
.board .wormbody{fill:none;stroke:var(--worm);stroke-linecap:round;stroke-linejoin:round}
.board .wormrings{fill:none;stroke:var(--wormdark);stroke-linecap:butt;stroke-linejoin:round;opacity:.45}
.wormhead{fill:var(--worm);stroke:var(--wormdark);stroke-width:1.5}
.board.solved{box-shadow:inset 0 5px 0 var(--dirtdark),0 6px 0 var(--text),0 0 0 6px var(--accent)}
.board.solved .wormbody{filter:drop-shadow(0 0 5px #fff6)}
.board.solved .wormface{animation:wiggle .32s ease-in-out 6;transform-box:fill-box;transform-origin:center}
.instruction{text-align:center;min-height:40px;font-size:15px;font-weight:800;color:var(--muted);margin-top:22px}
.actions{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:12px}
.btn{padding:13px 16px;border-radius:18px;border:3px solid var(--text);font-family:var(--disp);font-weight:800;font-size:18px;background:var(--paper);box-shadow:0 5px 0 var(--text);transition:transform .08s,box-shadow .08s}
.btn:active{transform:translateY(3px);box-shadow:0 2px 0 var(--text)}
.btn.primary{background:var(--worm);color:#fff;text-shadow:0 2px 0 rgba(0,0,0,.15)}
.wide{width:100%}
.hintsleft{text-align:center;font-size:13px;font-weight:700;color:var(--muted);margin-top:14px}

/* other screens */
.viewtitle{display:flex;gap:12px;align-items:center;margin-bottom:22px}
.statsgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:22px 0 28px}
.stat{background:var(--paper);border:3px solid var(--text);border-radius:20px;padding:16px 18px;box-shadow:0 5px 0 var(--text)}
.stat strong{display:block;font-family:var(--disp);font-size:38px;font-weight:800;line-height:1.1}
.stat span{font-size:13px;font-weight:700;color:var(--muted)}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin:16px 0}
.cal div{aspect-ratio:1;display:grid;place-items:center;font-size:14px;font-weight:800;border-radius:12px}
.cal .done{background:var(--accent);color:#fff;box-shadow:0 3px 0 var(--accentdark)}
.cal .today{border:3px solid var(--worm)}
.row{display:flex;justify-content:space-between;gap:12px;padding:15px 0;border-bottom:3px dashed var(--line);font-size:15px;font-weight:700}
.map{position:relative;margin:28px auto;width:240px;display:flex;flex-direction:column;align-items:center;gap:22px}
.node{display:flex;flex-direction:column;align-items:center;justify-content:center;width:64px;height:64px;border-radius:50%;background:var(--paper);border:3px solid var(--text);box-shadow:0 4px 0 var(--text);font-family:var(--disp);font-size:22px;font-weight:800;z-index:1;position:relative}
.node:nth-of-type(4n+1){margin-left:-120px}
.node:nth-of-type(4n+3){margin-left:120px}
.map .trail{position:absolute;top:0;left:0;width:240px;height:100%;z-index:0;overflow:visible}.map .trail polyline{fill:none;stroke:var(--dirt);stroke-width:14;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1 22}
.node.unlocked{background:var(--wc,var(--accent));color:#fff}
.node.current{background:var(--worm);color:#fff;box-shadow:0 4px 0 var(--text),0 0 0 6px var(--paper)}
.tutorialboard{max-width:270px;margin:20px auto}
.tutorialboard .tile{font-size:26px}
.attempt{font-family:var(--disp);font-size:20px;font-weight:800;min-height:28px;margin-top:6px}

/* dialogs */
.overlay{position:fixed;inset:0;background:rgba(40,20,5,.5);backdrop-filter:blur(4px);z-index:10;display:flex;align-items:center;justify-content:center;padding:22px}
.dialog{position:relative;background:var(--paper);border:3px solid var(--text);border-radius:28px;padding:28px 24px;max-width:370px;width:100%;text-align:center;box-shadow:0 8px 0 var(--text);animation:pop .3s cubic-bezier(.3,1.6,.6,1)}
.dialog h2{margin:10px 0}
.dialog p{color:var(--muted);font-size:15px;line-height:1.5;margin:10px 0 20px}
.bigicon{font-family:var(--disp);font-size:56px;font-weight:800;color:var(--worm);line-height:1}
.solvetime{font-family:var(--disp);font-size:66px;font-weight:800;line-height:1;margin:14px 0;color:var(--accent)}
.dialog .btn{margin-top:12px}
.close{position:absolute;top:13px;right:16px;font-size:23px;color:var(--muted)}
#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:var(--text);color:var(--paper);border-radius:16px;padding:13px 20px;font-size:15px;font-weight:800;z-index:30;opacity:0;pointer-events:none;transition:opacity .2s;width:max-content;max-width:90vw}
#toast.show{opacity:1}
.confetti{position:fixed;left:50%;top:45%;width:10px;height:14px;border-radius:3px;z-index:15;pointer-events:none;animation:burst 1.1s ease-out forwards}

@keyframes burst{to{transform:translate(var(--x),var(--y)) rotate(300deg);opacity:0}}
@keyframes pop{from{transform:scale(.85);opacity:0}}
@keyframes shake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
@keyframes wiggle{25%{transform:rotate(-22deg) scale(1.2)}75%{transform:rotate(22deg) scale(1.2)}}
@keyframes wormhello{20%{transform:rotate(-8deg)}40%{transform:rotate(8deg)}60%{transform:rotate(-4deg)}80%{transform:rotate(0)}}
@keyframes pulse{50%{transform:scale(1.25)}}
@keyframes hint{50%{box-shadow:0 0 0 5px var(--orange)}}
@media(max-width:370px){#app{padding:20px 14px}h1{font-size:40px}.tile{font-size:23px}.tile span{min-width:30px;line-height:32px}.board{gap:6px;padding:8px}.tile small{font-size:8px}.score .number{font-size:44px}.daily h3{font-size:23px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* levels */
.levelscard{margin:0 0 22px;background-color:var(--wc);background-image:radial-gradient(rgba(255,255,255,.13) 2.5px,transparent 3px);background-size:22px 22px;color:#fff;border:3px solid var(--text);border-radius:24px;padding:18px;box-shadow:0 6px 0 var(--text)}
.lvtop{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.lvlabel{font-size:14px;font-weight:800;opacity:.92}
.levelscard h3{font-size:38px;line-height:1.05;text-shadow:0 2px 0 rgba(0,0,0,.2)}
.lvworld{font-weight:800;font-size:15px}
.lvstars,.wstars{font-family:var(--disp);font-size:21px;font-weight:800;background:#fffaf0;color:#3b2314;border:3px solid var(--text);border-radius:14px;padding:3px 12px;box-shadow:0 3px 0 var(--text);white-space:nowrap}
.lvstars span,.wstars span{color:#f2b300}
.lvbar{height:16px;background:rgba(0,0,0,.25);border-radius:10px;margin:16px 0 6px;overflow:hidden}
.lvbar i{display:block;height:100%;min-width:16px;background:#fffaf0;border-radius:10px}
.lvsub{font-size:13px;font-weight:800;opacity:.92}
.lvbtns{display:grid;grid-template-columns:2fr 1fr;gap:12px;margin-top:16px}
.lvbtns .btn{background:#fffaf0;color:#3b2314}
.lvplay{font-size:20px}
.worldhead{display:grid;grid-template-columns:42px 1fr 42px;align-items:center;text-align:center;background-color:var(--wc);background-image:radial-gradient(rgba(255,255,255,.13) 2.5px,transparent 3px);background-size:22px 22px;color:#fff;border:3px solid var(--text);border-radius:24px;padding:16px 6px;box-shadow:0 6px 0 var(--text)}
.worldhead h2{font-size:34px;text-shadow:0 2px 0 rgba(0,0,0,.2)}
.worldhead p{font-size:14px;font-weight:700;margin:4px 0 10px}
.wstars{display:inline-block;font-size:18px}
.wnav{font-family:var(--disp);font-size:40px;font-weight:800;color:#fff;line-height:1}
.node b{font-size:22px;line-height:1}
.node small{font-size:12px;letter-spacing:1px;color:#ffd84a;text-shadow:0 1px 0 rgba(0,0,0,.45);line-height:1;margin-top:3px}
.node.current{background:#fffaf0;color:#3b2314;border-width:4px}
.wormmarker{position:absolute;width:40px;height:40px;top:-22px;right:-30px;border-radius:11px;border:3px solid var(--text);box-shadow:0 3px 0 var(--text);animation:bob 1.2s ease-in-out infinite}
.winstars{display:flex;justify-content:center;gap:6px;font-size:58px;line-height:1}
.winstars span{color:var(--line);animation:starpop .5s cubic-bezier(.3,1.8,.5,1) both}
.winstars span.on{color:#ffc21a;text-shadow:0 4px 0 #c98700}
.widestat{grid-column:1/-1}
@keyframes bob{50%{transform:translateY(-6px)}}
@keyframes starpop{from{transform:scale(0) rotate(-45deg)}}
.node:disabled{opacity:1;background:var(--line);box-shadow:0 4px 0 var(--muted);border-color:var(--muted)}
.daily .badge{box-shadow:0 3px 0 #3b2314}

/* sharing and challenges */
.vsbanner{text-align:center;font-weight:800;font-size:15px;background:var(--worm);color:#fff;border:3px solid var(--text);border-radius:16px;padding:9px 12px;margin:-4px 0 16px;box-shadow:0 4px 0 var(--text)}
.vsresult{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:6px 0 4px}
.vsresult div{border:3px solid var(--text);border-radius:16px;padding:8px;background:var(--bg)}
.vsresult div.lead{background:var(--accent);color:#fff}
.vsresult small{display:block;font-size:12px;font-weight:800;opacity:.9;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vsresult b{font-family:var(--disp);font-size:28px;font-weight:800}
.dialog p.vsline{color:var(--text);font-weight:800;font-size:17px;margin:10px 0 6px}
.sharerow{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.sharerow .btn{margin-top:0;font-size:17px;padding:12px 8px}
.sharepreview{font-family:var(--body);font-weight:700;font-size:13px;white-space:pre-wrap;word-break:break-word;text-align:left;background:var(--bg);border:2px dashed var(--line);border-radius:14px;padding:12px;margin:12px 0;max-height:140px;overflow:auto;user-select:text}
.sharegrid{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:14px 0 4px}
.sharebtn{width:calc(33.3% - 6px);display:flex;flex-direction:column;align-items:center;gap:4px;font-size:24px;text-decoration:none;color:var(--text);background:var(--bg);border:3px solid var(--text);border-radius:14px;padding:8px 2px;box-shadow:0 3px 0 var(--text)}
.sharebtn span{font-size:12px;font-weight:800;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.sharebtn:active{transform:translateY(2px);box-shadow:0 1px 0 var(--text)}
.nickinput{width:100%;font:800 20px var(--body);text-align:center;color:#3b2314;background:#fffaf0;border:3px solid var(--text);border-radius:14px;padding:12px;margin-top:4px}
.nickinput:focus{outline:3px solid var(--worm);outline-offset:2px}
.dialog p.nickerr{color:var(--red);font-size:13px;min-height:18px;margin:6px 0 0}
.dialog p.small{font-size:13px;margin-top:-8px}

/* leaderboards */
.boardbtn{background:var(--orange)!important;color:#fff;text-shadow:0 2px 0 rgba(0,0,0,.15)}
.boardtabs{display:flex;gap:8px;margin-bottom:8px}
.boardtabs button{flex:1;font-family:var(--disp);font-size:18px;font-weight:800;padding:9px 6px;border-radius:14px;border:3px solid var(--text);background:var(--paper);box-shadow:0 3px 0 var(--text)}
.boardtabs button.on{background:var(--accent);color:#fff}
.boardsub{text-align:center;font-size:13px;font-weight:800;color:var(--muted);margin-bottom:14px}
.boardsub a{color:var(--muted)}
.groupchips{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 8px;margin-bottom:10px}
.groupchips button{flex-shrink:0;font-size:14px;font-weight:800;padding:8px 13px;border-radius:20px;border:3px solid var(--text);background:var(--paper);white-space:nowrap}
.groupchips button.on{background:var(--text);color:var(--bg)}
.groupchips .addgroup{background:var(--worm);color:#fff}
.boardlist{background:var(--paper);border:3px solid var(--text);border-radius:22px;box-shadow:0 5px 0 var(--text);padding:8px 12px;margin-bottom:16px;min-height:120px}
.boardcount{font-size:12px;font-weight:800;color:var(--muted);text-align:right;margin:4px 2px 2px}
.brow{display:grid;grid-template-columns:40px 1fr auto;align-items:center;gap:8px;padding:10px 4px;border-bottom:2px dashed var(--line);font-weight:800}
.brow:last-child{border-bottom:0}
.brow .rk{font-family:var(--disp);font-size:20px;text-align:center}
.brow .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.brow .tm{font-family:var(--disp);font-size:20px;font-variant-numeric:tabular-nums}
.brow.me{background:var(--tint);border-radius:12px;border-bottom-color:transparent}
.gap{text-align:center;color:var(--muted);font-weight:800}
.boardmsg{text-align:center;color:var(--muted);font-weight:700;font-size:14px;padding:22px 8px}
.nickrow{display:flex;justify-content:space-between;align-items:center;gap:10px;background:var(--paper);border:3px solid var(--text);border-radius:18px;padding:10px 12px;box-shadow:0 4px 0 var(--text);font-weight:700}
.nickrow .btn{padding:7px 14px;font-size:15px}
.ordivider{margin:16px 0 8px;font-size:13px;font-weight:800;color:var(--muted)}
.dialog .nickinput+.btn{margin-top:10px}

/* save codes */
.savecard{background:var(--paper);border:3px solid var(--text);border-radius:20px;padding:14px 16px;box-shadow:0 5px 0 var(--text);margin-top:16px}
.savecard .lvlabel{color:var(--muted)}
.savecode{font-family:var(--disp);font-size:30px;font-weight:800;letter-spacing:1px;color:var(--accent);margin:2px 0;user-select:all}
.savecard p{font-size:13px;color:var(--muted);line-height:1.45}
.savecard .sharerow{margin-top:12px}
.savecard .btn{font-size:15px}
.savenudge{background:var(--tint);border:2px dashed var(--line);border-radius:14px;padding:10px 12px;font-size:13px;font-weight:700;line-height:1.5;margin-top:12px}
.savenudge b{white-space:nowrap}
.savenudge button{font-weight:800;text-decoration:underline;color:var(--accentdark)}

/* install + misc */
.installcard{display:flex;align-items:center;gap:12px;background:var(--paper);border:3px solid var(--text);border-radius:20px;padding:12px;box-shadow:0 5px 0 var(--text);margin-bottom:18px}
.installcard img{width:52px;height:52px;border-radius:14px;border:3px solid var(--text);flex-shrink:0}
.installcard strong{font-family:var(--disp);font-size:19px;font-weight:800}
.installcard p{font-size:12px;color:var(--muted);line-height:1.35}
.installbtns{display:flex;flex-direction:column;align-items:center;gap:4px;margin-left:auto}
.installbtns .btn{padding:8px 14px;font-size:16px}
.closex{font-size:14px;color:var(--muted);font-weight:800;padding:2px 8px}
.iossteps{text-align:left;margin:16px 0 8px;display:grid;gap:12px}
.iossteps div{display:flex;gap:12px;align-items:flex-start;font-size:15px;font-weight:700;line-height:1.45}
.iossteps b{flex-shrink:0;width:30px;height:30px;border-radius:50%;background:var(--worm);color:#fff;display:grid;place-items:center;font-family:var(--disp);font-size:17px;border:2px solid var(--text)}
.shareicon{display:inline-block;border:2px solid var(--text);border-radius:6px;padding:0 5px;font-size:13px}
.footer a{font-size:14px;font-weight:800;color:var(--muted);text-decoration:none}

/* story picture + seo section */
.igbtn{background:linear-gradient(135deg,#ffd76a,#ff6f91 55%,#8d5cf6)!important;color:#fff!important}
.storyprev{display:block;width:62%;margin:12px auto 0;border-radius:16px;border:3px solid var(--text);box-shadow:0 4px 0 var(--text)}
a.btn{display:block;text-align:center;text-decoration:none;color:var(--text);margin-top:12px}
a.btn.primary{color:#fff}
.seo{max-width:460px;margin:0 auto;padding:0 20px 40px}
.seo h2{font-size:26px;margin:8px 0 10px}
.seo h3{font-size:19px;margin:18px 0 4px}
.seo p{font-size:14px;line-height:1.6;color:var(--muted)}
.seo a{color:var(--accentdark);font-weight:800}
body.dark .seo a{color:var(--accent)}
.seo .card{background:var(--paper);border:3px solid var(--text);border-radius:20px;padding:18px;box-shadow:0 5px 0 var(--text)}
body:not([data-view="home"]) .seo{display:none}

/* ==================================================================
   NUMBER WORM V3 — soft, sunny adventure. Presentation overrides only.
   ================================================================== */
:root{--bg:#faf5e9;--bg2:#f0e8d5;--paper:#fffcf5;--text:#293e43;--muted:#63706a;--line:#e5e4d3;--accent:#287e50;--accentdark:#1f623f;--tint:#e9f1da;--tile:#fff9e9;--tileedge:#cdb997;--dirt:#94715c;--dirtdark:#6c5144;--speck:#a7866d;--red:#b93855;--worm:#e6759e;--wormdark:#b64775;--orange:#d89933;--orangedark:#a87123;--purple:#8862c7;--blue:#286eaa;--gold:#9f6b09;--disp:'Fredoka','Trebuchet MS',sans-serif;--body:'Nunito','Segoe UI',sans-serif;--softshadow:0 5px 0 #dcdcc9,0 12px 24px #40533508}
body{background:var(--bg);font-weight:600;background-image:radial-gradient(ellipse at 10% 5%,#e9eedc 0,transparent 50%),radial-gradient(ellipse at 90% 75%,#f7e6d8 0,transparent 45%);background-attachment:fixed}body.dark{--bg:#182735;--bg2:#243848;--paper:#233847;--text:#f5f1df;--muted:#bbc8c8;--line:#3a5058;--accent:#6dc994;--accentdark:#95d9b0;--tint:#2a4c48;--tile:#e5e7d8;--tileedge:#b0b9aa;--dirt:#665b58;--dirtdark:#434249;--speck:#7a6a63;--red:#ff95a6;--worm:#f291b3;--wormdark:#c15d85;--gold:#9f6b09;--softshadow:0 5px 0 #10222e,0 12px 24px #0b172222;background-image:radial-gradient(ellipse at 10% 5%,#243e48 0,transparent 50%),radial-gradient(ellipse at 90% 75%,#302e47 0,transparent 45%)}
#app{max-width:480px;padding:24px 24px 32px}h1,h2,h3{font-weight:600;letter-spacing:-.6px}h1{font-size:40px;line-height:1.05}h2{font-size:29px;line-height:1.1}h3{font-size:24px}.sub{font-size:15px}.eyebrow{letter-spacing:1.5px;font-size:12px;text-transform:uppercase;font-weight:800;color:var(--muted)}button,a.btn,.footer a,.back2{min-height:44px}button{touch-action:manipulation}.board button{touch-action:none}button:focus-visible,a:focus-visible{outline:3px solid var(--blue);outline-offset:5px}button:disabled{opacity:.55}.top{margin-bottom:24px;gap:10px}.brand{gap:7px;font-size:23px;line-height:.9;font-weight:600;letter-spacing:-.7px;padding:0;text-align:left}.brand-line{display:block}.brand-dot{color:var(--worm)}.brand-worm{width:51px;height:53px;display:block;overflow:visible}.brand-worm .wiggles{width:67px;height:58px;margin-left:-10px;margin-top:-3px}.icons{gap:8px}.icon{width:44px;height:44px;border:1px solid var(--line);border-radius:16px;box-shadow:0 3px 0 var(--line);font-size:21px}.icon:active{box-shadow:none}.wiggles{overflow:visible;width:100%;height:100%;color:#294448}.mascot-body{transform-origin:50% 90%;animation:wig-breathe 4s ease-in-out infinite}.mascot-head{transform-box:fill-box;transform-origin:center}.wig-eyes,.path-eyes{transform-box:fill-box;transform-origin:center;animation:wig-blink 6.5s infinite}.wig-pupils{animation:wig-look 8s infinite}.wig-wave{transform-box:fill-box;transform-origin:bottom left;animation:wig-wave 6s ease-in-out infinite}.wig-zzz{opacity:0}.wiggles.celebrate .mascot-body{animation:wig-dance .7s ease-in-out infinite}.wiggles.curious .mascot-body{animation:wig-breathe 2.5s ease-in-out infinite}.worm-hero{position:relative;height:213px;margin:0 -2px 22px;border-radius:29px;overflow:hidden;background:linear-gradient(135deg,#deede4,#c8e7dd 65%,#aed6bb);isolation:isolate;border:1px solid #c2d9c7}.worm-hero:after{content:'';position:absolute;bottom:-67px;right:-37px;width:260px;height:118px;background:#acd184;border-radius:50%;z-index:-1;box-shadow:0 -12px 0 #bddc96}.hero-copy{position:relative;padding:23px 21px;z-index:2;pointer-events:none}.hero-kicker{font-size:9px;font-weight:900;letter-spacing:1.4px;color:#416659}.hero-copy h1{font-size:32px;line-height:1.08;color:#284c40;margin:12px 0 9px;max-width:255px}.hero-copy p{font-size:13px;line-height:1.5;color:#49695a}.hero-mascot{position:absolute;width:178px;height:150px;right:-6px;bottom:5px;z-index:1}.hero-mascot .wiggles{width:178px;height:150px}.hello-bubble{position:absolute;top:-7px;right:4px;background:#fffcf0;color:#516645;padding:6px 11px;border-radius:12px 12px 12px 2px;font-size:11px;font-weight:800;transform:rotate(5deg);animation:hello-bubble 8s infinite}.hero-name{position:absolute;bottom:9px;right:22px;font-size:8px;color:#3f6a44;letter-spacing:2px;font-weight:900}.dark .worm-hero{background:linear-gradient(130deg,#2c5155,#385661);border-color:#4b6a69}.dark .hero-copy h1{color:#f5f3d8}.dark .hero-copy p,.dark .hero-kicker{color:#d3e1d3}.dark .worm-hero:after{background:#487454;box-shadow:0 -12px 0 #568264}.dark .hero-name{color:#d9efc7}.streak{border:1px solid #eadfc8;box-shadow:0 3px 0 #e8dfc9;background:#fff7e6;border-radius:20px;padding:12px 14px;margin-bottom:27px;gap:10px}.streak strong{font-size:18px;font-weight:600}.streak small{font-size:11px}.streak .flame{font-size:25px}.living-flame{animation:flame-sway 3s ease-in-out infinite;transform-origin:50% 90%}.daydot{width:22px;height:22px;font-size:10px;border:1px solid #dbd9b8;background:#fffdf2;color:#6c735f}.daydot.on{background:var(--accent);border-color:var(--accent);color:white}.dark .streak{background:#3c3b32;border-color:#595341;box-shadow:0 3px 0 #292d2b}.dark .daydot{background:#37463e;border-color:#62755b;color:#e3eacd}.dark .daydot.on{background:#38895e}.sectionhead h3{font-size:24px}.sectionhead span{font-size:12px}.sectionhead{margin-bottom:15px}.daily{background:var(--paper)!important;color:var(--text);border:1px solid var(--line);box-shadow:var(--softshadow);border-radius:21px;padding:16px;gap:14px;margin-bottom:14px;transition:transform .15s,box-shadow .15s}.daily h3{font-size:25px;text-shadow:none;font-weight:600}.daily .meta{color:var(--muted);font-size:12px;font-weight:700;margin-top:4px}.daily .badge{border:0;border-radius:12px;box-shadow:none;font-size:13px;letter-spacing:.5px;background:#e8f1dd;color:#376247;padding:8px 12px}.daily .mini{background:#dfebca;min-width:49px;height:52px;border-radius:15px;place-content:center;gap:3px;transform:rotate(-5deg);box-shadow:inset 0 -3px 0 #c7d7b3}.mini i{width:8px;height:8px;border-radius:3px;background:#b9d49b}.mini i.on{background:#518b42}.daily.medium .mini{background:#f9e5b2;box-shadow:inset 0 -3px 0 #ecd396;transform:rotate(4deg)}.daily.medium .mini i{background:#eacb80}.daily.medium .mini i.on{background:#bb8531}.daily.medium .badge{background:#fff0cd;color:#855c1e}.daily.hard .mini{background:#ebdff8;box-shadow:inset 0 -3px 0 #d7c8e9}.daily.hard .mini i{background:#d0b5eb}.daily.hard .mini i.on{background:#9262bb}.daily.hard .badge{background:#eee2fa;color:#755097}.daily:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}.reset{font-size:12px;margin:20px 0 28px;font-weight:700}.reset #countdown{font-weight:900;color:var(--text);padding-left:4px}.levelscard{position:relative;overflow:hidden;isolation:isolate;border:0;box-shadow:0 5px 0 #d7ddc6;background:#e7eed9;color:#294d3a;border-radius:24px;padding:22px;margin-bottom:24px}.level-art{position:absolute;inset:0;z-index:-1;background-size:100% auto;background-position:0 51%;opacity:.8}.level-art:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#ecf2de 10%,#ecf2deb8 50%,transparent)}.level-art>div{position:absolute;width:145px;height:125px;right:-13px;top:8px;z-index:1}.lvtop>div:first-child{z-index:2}.levelscard h3{font-size:38px;text-shadow:none;line-height:1.2;margin-top:5px}.levelscard .lvlabel{font-size:9px;letter-spacing:1.5px;font-weight:900}.lvworld{font-size:14px;font-weight:700}.lvstars{font-size:18px;border:0;border-radius:12px;box-shadow:0 3px 0 #ced8b9;padding:5px 10px;margin-top:6px;background:#fffbeb;z-index:3}.lvbar{height:8px;margin:24px 0 8px;background:#b7c7a6;position:relative;z-index:2}.lvbar i{min-width:0;background:#4f8b50}.lvsub{font-size:12px;position:relative;z-index:2}.lvbtns{position:relative;z-index:2;gap:10px}.btn{border:1px solid var(--line);border-radius:16px;font-size:17px;font-weight:500;padding:12px 17px;box-shadow:0 4px 0 var(--line);transition:transform .12s,box-shadow .12s;background:var(--paper);min-height:48px}.btn.primary,.lvbtns .lvplay{background:#39835a;color:white;border-color:#39835a;box-shadow:0 4px 0 #235e40;text-shadow:none}.btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}.btn.primary:active,.lvbtns .lvplay:active{box-shadow:0 1px 0 #235e40}.lvbtns .btn:not(.lvplay){background:#fff9e9;border-color:#e0e2ce;color:#355640;box-shadow:0 4px 0 #ccd4b9}.dark .levelscard{color:#edf0d6;background:#314b42;box-shadow:0 5px 0 #102b2a}.dark .level-art{opacity:.55}.dark .level-art:after{background:linear-gradient(90deg,#223d37 10%,#223d37ce 50%,#223d3755)}.dark .lvstars{background:#334b38;color:#f5edca;box-shadow:0 3px 0 #233a2c}.dark .lvbar{background:#657957}.dark .lvbar i{background:#bbe08c}.mode,.stat,.boardlist,.nickrow,.savecard,.installcard,.seo .card{border:1px solid var(--line);box-shadow:var(--softshadow);border-radius:22px}.mode{padding:17px;gap:15px}.mode strong{font-size:22px;font-weight:500}.mode .symbol{border:0;background:#dae9ed;color:#497a94;box-shadow:inset 0 -3px 0 #c4d9e0}.mode .sub{font-size:13px}.footer{border-top:1px solid var(--line);gap:2px 17px;margin-top:25px;padding-top:15px}.footer button,.footer a{font-size:12px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;min-height:44px}.bottomnote{font-family:var(--body);font-weight:800;font-size:10px;text-transform:uppercase;letter-spacing:2px;margin:18px 0}.installcard{padding:15px}.installcard img{border:0;box-shadow:none}.installcard p{font-size:12px}.closex{min-width:44px}.gameheading{gap:8px;margin-bottom:22px}.back{min-width:44px;min-height:44px;border-radius:14px;background:var(--paper);border:1px solid var(--line);font-size:29px;padding:0;font-weight:500}.pill{font-size:12px;background:var(--tint);color:var(--text);padding:9px 12px;white-space:nowrap}.timer{font-size:14px}.score{border:1px solid var(--line);box-shadow:var(--softshadow);border-radius:24px;padding:18px 12px;grid-template-columns:1fr 1px 1fr;margin-bottom:26px}.score .eyebrow{font-size:10px;letter-spacing:1.6px}.score .divider{height:45px}.score .number{font-size:54px;font-weight:600;line-height:1.12;margin-top:5px}.score .target{color:var(--accent)}.board{border:1px solid #715343;border-bottom-width:4px;box-shadow:inset 0 4px 0 #6c514440,0 6px 0 #d8c8ac;border-radius:23px;padding:11px;gap:9px;background-size:23px 23px,37px 37px}.tile{font-weight:600;border-radius:13px;box-shadow:0 4px 0 var(--tileedge),inset 0 2px 0 #ffffff88;font-size:28px}.tile span{line-height:35px;min-width:33px;background:transparent}.tile small{font-size:8px;letter-spacing:.7px;bottom:3px}.tile.start,.tile.end{color:#fff}.tile.start{background:#448d5e;box-shadow:0 4px 0 #2b603c}.tile.start span{background:transparent}.tile.end{background:#c58129;box-shadow:0 4px 0 #8f5b20}.tile.end span{background:transparent}.tile.visited{box-shadow:inset 0 3px 0 #49362c44;background:#71533f99;transform:translateY(3px)}.tile.visited span{background:var(--tile);box-shadow:0 2px 0 #78593b44;font-size:.95em;border-radius:50%;min-width:29px;line-height:29px}.tile.start.visited{box-shadow:inset 0 0 0 2px #8fcc8f}.tile.end.visited{box-shadow:inset 0 0 0 2px #e9be70}.tile.wall{box-shadow:0 4px 0 #64665d,inset 0 3px 0 #ffffff35;background:linear-gradient(140deg,#c5c9b9 5%,#9da494 45%,#7f8b81);transform:scale(.89)}.tile.neg span{color:#276c9b}.tile.mul span{color:#986707}.tile.key:after,.tile.lock:after{font-size:11px;top:0;right:2px}.tile.star:not(.visited):after{font-size:12px;right:3px;top:1px;animation:star-glint 2.5s ease-in-out infinite}.board.solved{box-shadow:inset 0 4px 0 #6c514440,0 6px 0 #5a995b,0 0 0 4px #b9db9a}.board.solved .wormface{animation:head-dance .65s ease-in-out 4}.board svg{inset:0;z-index:0}.board svg.headlayer{z-index:4}.crawl-segment{transform-box:fill-box;transform-origin:center;animation:segment-breathe 2s ease-in-out infinite}.wormface{transform-box:fill-box;transform-origin:center;animation:head-breathe 3s ease-in-out infinite}.worried .path-mouth{d:path('M4 -2Q1 0 4 2')}.worried .wormface{filter:saturate(.75)}.close-to-target .wormface{animation:head-dance .9s ease-in-out infinite}.close-to-target:after{content:'✦';position:absolute;right:7px;top:-23px;color:#a67614;font-size:23px;animation:star-glint 1s infinite;pointer-events:none}.oops .wormface{animation:shake .2s 1}.dozing .path-eyes{transform:scaleY(.12);animation:none}.dozing:after{content:'Z z z';position:absolute;right:15px;top:-24px;font-family:var(--disp);color:var(--muted);animation:zzz 3s infinite;pointer-events:none}.dirt-puff{position:absolute;width:7px;height:7px;left:50%;top:50%;z-index:5;background:#d8bb91;border-radius:50%;box-shadow:17px 4px #d1ad80,-19px 7px #c3a37c,6px -18px #e9cfa7,-11px -15px #c0a17d;pointer-events:none;animation:dust .4s ease-out forwards}.instruction{font-size:13px;font-weight:700;margin-top:22px;min-height:32px}.actions{gap:12px}.hintsleft{font-size:12px;font-weight:700}.vsbanner{background:#eee3f4;border:1px solid #ddd0e9;color:#6d4d89;box-shadow:0 3px 0 #d5c7df;font-size:13px;padding:12px}.dark .vsbanner{background:#423d55;color:#e4d5f2;border-color:#62516f;box-shadow:0 3px 0 #2d293d}.viewtitle h2{font-size:27px}.viewtitle{gap:13px}.boardtabs{background:var(--bg2);border-radius:18px;padding:5px;gap:3px}.boardtabs button{border:0;box-shadow:none;background:transparent;border-radius:13px;font-weight:500;font-size:17px}.boardtabs button.on{background:var(--paper);color:var(--text);box-shadow:0 2px 5px #233e4310}.groupchips button{border:1px solid var(--line);min-height:44px;font-size:13px}.groupchips .addgroup{background:var(--tint);color:var(--text)}.boardbtn{background:#f2dca0!important;color:#594623!important;border-color:#e6ca8a!important;text-shadow:none;box-shadow:0 4px 0 #cfb475!important}.boardlist{padding:14px;overflow:hidden}.brow{border-bottom:1px solid var(--line);padding:15px 5px;font-size:14px;gap:5px}.brow .tm{font-size:20px}.brow.me{background:var(--tint);box-shadow:inset 3px 0 0 var(--accent);padding-left:8px}.boardcount{font-size:11px;letter-spacing:.5px;margin-bottom:15px}.podium{display:grid;grid-template-columns:1fr 1.12fr 1fr;align-items:end;gap:7px;margin:35px 0 18px;min-height:170px}.podium-place{display:flex;flex-direction:column;border-radius:16px 16px 8px 8px;border:0!important;position:relative;padding:13px 4px!important;gap:5px;min-width:0;background:#eeeadd;color:#495348;min-height:111px;box-shadow:inset 0 -5px 0 #ddd8c8}.podium-place .nm{font-size:11px;max-width:100%;white-space:normal;text-align:center;overflow-wrap:anywhere;line-height:1.3}.podium-place .tm{font-size:19px}.podium-place .rk{font-size:26px}.podium-place.place-1{grid-column:2;grid-row:1;min-height:148px;background:#f5e3a9;box-shadow:inset 0 -5px 0 #e8ca80}.podium-place.place-2{grid-column:1;grid-row:1;min-height:124px;background:#dfebeb}.podium-place.place-3{grid-column:3;grid-row:1;background:#f2dfd2}.podium-worm{position:absolute;width:76px;height:65px;top:-61px;left:50%;transform:translateX(-50%)}.empty-worm{width:110px;height:90px;margin:0 auto 12px}.stat{padding:20px}.stat strong{font-size:38px;font-weight:600;margin-bottom:5px}.stat:nth-child(2){background:#fcf0da}.stat:nth-child(3){background:#ede7f7}.stat:nth-child(4){background:#e2eef0}.stat.widestat{background:#e5efd8}.dark .stat:nth-child(2){background:#403e35}.dark .stat:nth-child(3){background:#383a52}.dark .stat:nth-child(4){background:#2a4650}.dark .stat.widestat{background:#314b40}.stat span{font-size:12px}.nickrow{padding:12px 14px;font-size:13px}.savecard{padding:20px}.savecode{font-size:29px;color:var(--accent);letter-spacing:.8px}.savecard .lvlabel{font-size:11px;letter-spacing:1px}.savecard p{font-size:13px;line-height:1.6}.cal .done{position:relative;background:var(--tint);color:var(--text);box-shadow:0 2px 0 var(--line);padding-bottom:12px}.calendar-worm{position:absolute;width:27px;height:23px;bottom:-1px;left:50%;transform:translateX(-50%)}.calendar-worm .accessory,.calendar-worm .wig-wave{display:none}.cal .today{border:2px solid var(--worm)}.row{border-bottom:1px solid var(--line);font-size:14px}.overlay{align-items:flex-end;padding:15px 14px 0;background:#152c3a88;backdrop-filter:blur(5px)}.dialog{max-width:440px;border:1px solid var(--line);border-bottom:0;border-radius:29px 29px 0 0;box-shadow:0 -6px 50px #122d3822;padding:29px 25px calc(24px + env(safe-area-inset-bottom));max-height:92dvh;overflow-y:auto;overscroll-behavior:contain;animation:sheet-in .28s cubic-bezier(.2,.8,.3,1)}.dialog:before{content:'';position:absolute;top:10px;left:calc(50% - 20px);width:40px;height:4px;border-radius:3px;background:var(--line)}.dialog h2{font-size:29px}.dialog p{font-size:14px;line-height:1.6}.dialog .btn{font-weight:500}.dialog .bigicon{font-size:43px}.win-wiggles{width:140px;height:112px;margin:-6px auto 2px}.solvetime{font-size:61px;font-weight:600;color:var(--accent)}.winstars{font-size:49px;gap:10px;margin:7px 0 14px}.winstars span.on{text-shadow:0 3px 0 #bb9035;color:#edc55b}.vsresult div{border:1px solid var(--line);border-radius:17px;background:var(--bg);padding:15px}.vsresult div.lead{background:#dfeeca;color:#35513d;border-color:#bed5a3}.sharepreview{background:var(--bg);border:1px dashed var(--line);font-size:13px;line-height:1.6;padding:15px}.sharebtn{border:1px solid var(--line);box-shadow:0 3px 0 var(--line);border-radius:16px;padding:12px 3px;font-size:24px}.sharebtn span{font-size:12px}.nickinput{font-size:18px;font-weight:700;border:1px solid var(--line);border-radius:15px;min-height:52px;color:var(--text);background:var(--bg);padding:13px}.storyprev{width:52%;border:1px solid var(--line);box-shadow:0 4px 0 var(--line);border-radius:15px}.iossteps b{border:0;color:#fff;background:#a95078}.preview-worm{width:120px;height:100px;margin:auto}.preview-stars{font-size:37px;color:#b18120;margin:10px 0}.dark .preview-stars{color:#edc96b}#toast{border:1px solid #ffffff22;border-radius:18px;background:#2b4546;color:#fff9e9;box-shadow:0 5px 15px #1b293422;font-size:14px;font-weight:700;bottom:25px;transform:translate(-50%,15px) scale(.95);transition:opacity .2s,transform .25s}#toast.show{transform:translate(-50%,0) scale(1)}.seo{max-width:480px;padding:0 24px 36px}.seo .card{padding:24px}.seo h2{font-size:27px}.seo h3{font-size:21px}.seo p{font-size:14px}.loading-wiggles{text-align:center;padding:100px 20px}.loading-wiggles img{width:86px;animation:wig-breathe 2s infinite}.loading-wiggles h1{margin:25px 0 12px}.document-page .doc{border:1px solid var(--line);box-shadow:var(--softshadow);border-radius:25px;padding:24px;font-size:16px}.document-page .doc h2{font-size:25px;line-height:1.25}.document-page .back2{display:inline-flex;align-items:center;font-size:17px}.document-page .doc a{color:var(--accent)}
/* A single world is mounted at a time: no hidden maps or animated offscreen worlds. */
body[data-view="map"] #app{max-width:480px}.adventure{border-radius:26px;overflow:hidden;background:var(--paper);border:1px solid var(--line);box-shadow:var(--softshadow)}.adventure .worldhead{position:relative;z-index:5;grid-template-columns:44px 1fr 44px;background:var(--paper);color:var(--text);border:0;border-radius:0;box-shadow:0 5px 18px #20393b13;padding:15px 8px}.worldhead h2{font-size:28px;text-shadow:none;font-weight:600;margin:5px 0 8px}.worldhead .lvlabel{font-size:10px;letter-spacing:2px;color:var(--muted)}.wstars{font-size:14px;font-weight:500;border:0;box-shadow:none;background:var(--tint);color:var(--text);border-radius:20px;padding:6px 12px}.wnav{min-width:44px;height:44px;font-size:30px;color:var(--text);background:var(--bg);border-radius:14px}.adventure-scroll{height:min(68dvh,710px);min-height:380px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#90af80 transparent;position:relative;isolation:isolate}.adventure-land{height:1600px;position:relative;width:100%;overflow:hidden;background:#a4ca81}.map-scenery{position:absolute;inset:0;width:100%;height:1600px;object-fit:fill;pointer-events:none}.repeat-world .map-scenery{filter:brightness(.67) hue-rotate(17deg) saturate(.75)}.dark .map-scenery{filter:brightness(.7) saturate(.75)}.dark .repeat-world .map-scenery{filter:brightness(.55) hue-rotate(17deg) saturate(.75)}.adventure[data-world="2"] .adventure-land{background:#326f67}.adventure[data-world="3"] .adventure-land{background:#6bbbc9}.adventure[data-world="4"] .adventure-land{background:#4c476d}.adventure[data-world="5"] .adventure-land{background:#3b344c}.adventure[data-world="6"] .adventure-land{background:#26355f}.tunnel{position:absolute;inset:0;width:100%;height:1600px;pointer-events:none}.tunnel path{fill:none;stroke-linecap:round;stroke-linejoin:round}.tunnel-shadow{stroke:#3f593b33;stroke-width:44;transform:translateY(5px)}.tunnel-earth{stroke:#d5b58a;stroke-width:34}.tunnel-grain{stroke:#edcca1;stroke-width:23;stroke-dasharray:2 11;opacity:.75}.adventure[data-world="3"] .tunnel-earth{stroke:#bfd2b1}.adventure[data-world="4"] .tunnel-earth{stroke:#b39b9c}.adventure[data-world="5"] .tunnel-earth{stroke:#826471}.adventure[data-world="6"] .tunnel-earth{stroke:#7d80aa}.adventure-node{position:absolute;transform:translate(-50%,-50%);width:67px;height:64px;border-radius:42% 45% 40% 43%;padding:0;background:#c7c4ac;box-shadow:0 7px 0 #8b9677,0 11px 12px #233b4222;border:3px solid #ecebc8;color:#586956;z-index:2;display:flex;align-items:center;justify-content:center;overflow:visible;font:600 28px var(--disp)}.adventure-node.unlocked{background:linear-gradient(#fff9d6,#eee5bb);box-shadow:0 7px 0 #98a976,0 11px 12px #233b4222;color:#436340;border-color:#fff9de}.adventure-node.current{background:linear-gradient(#fee7a8,#f4d478);color:#755523;border:3px solid #fff6cc;box-shadow:0 7px 0 #b88e43,0 0 0 7px #fff4c76b,0 12px 20px #47542133}.adventure-node:active{transform:translate(-50%,calc(-50% + 4px));box-shadow:0 3px 0 #9fae82}.adventure-node.locked{opacity:1;background:#8f9b8055;border-color:#b3bc9855;box-shadow:0 5px 0 #4e6a4233;color:#3c563fc9}.node-top{line-height:1}.node-stars{position:absolute;bottom:-19px;font-size:17px;letter-spacing:1px;white-space:nowrap;color:#ffef9e;text-shadow:0 2px 0 #7b7848,0 0 3px #716647}.locked .node-stars{color:#c8d1b4;text-shadow:0 1px 0 #677651}.current-label{position:absolute;top:91px;font-family:var(--body);font-weight:900;letter-spacing:1px;font-size:9px;white-space:nowrap;background:#fffae6;color:#4d6445;padding:5px 9px;border-radius:10px;box-shadow:0 2px 0 #99b476}.map-wiggles{position:absolute;z-index:4;width:97px;height:84px;transform:translateX(-50%);pointer-events:none}.map-wiggles .wiggles{animation:bob 3s ease-in-out infinite}.adventure[data-world="1"] .adventure-node.unlocked{border-radius:49% 49% 28% 28%;background:linear-gradient(#ffe8e3,#f4a99a);border-color:#fff0db;color:#844941;box-shadow:0 7px 0 #b87569}.adventure[data-world="2"] .adventure-node.unlocked{border-radius:50% 50% 27% 27%;background:radial-gradient(circle at 24% 24%,#ffe3bb 0 8%,transparent 9%),radial-gradient(circle at 76% 33%,#ffe3bb 0 8%,transparent 9%),linear-gradient(#d87675,#ac5363);border-color:#efb3a0;color:#fff9df;box-shadow:0 7px 0 #783f53}.adventure[data-world="3"] .adventure-node.unlocked{border-radius:50% 42% 50% 45%;background:linear-gradient(#b5db97,#78b084);border-color:#c2dfa0;color:#2d5f4b;box-shadow:0 6px 0 #438676}.adventure[data-world="4"] .adventure-node.unlocked{background:linear-gradient(#d5bfd7,#a391b7);border-color:#e7d7dc;color:#594969;box-shadow:0 7px 0 #776b91}.adventure[data-world="5"] .adventure-node.unlocked{background:linear-gradient(#bd8e81,#906777);border-color:#efa879;color:#fff1c8;box-shadow:0 6px 0 #5b445a,0 0 14px #ff975733}.adventure[data-world="6"] .adventure-node.unlocked{border-radius:24% 42% 25% 40%;background:linear-gradient(135deg,#cbf7ec,#a9b8e5 60%,#90a1d4);border-color:#ddf9f0;color:#3b527e;box-shadow:0 7px 0 #6776b0,0 0 15px #b9fff533}.adventure .adventure-node.current{border-color:#fff8d6;outline:5px solid #fff8d633}.world-gate{position:absolute;top:20px;left:50%;transform:translateX(-50%) rotate(-2deg);z-index:2;width:225px;background:#ffefc9;border:5px solid #b69162;border-radius:21px;padding:15px 12px;color:#654d36;text-align:center;box-shadow:0 5px 0 #85674f,0 12px 20px #25442d30}.world-gate:before,.world-gate:after{content:'';position:absolute;width:12px;height:38px;background:#ac8359;bottom:-35px;border-radius:0 0 5px 5px;z-index:-1}.world-gate:before{left:28px}.world-gate:after{right:28px}.world-gate span{display:block;font-size:8px;letter-spacing:2px;font-weight:900}.world-gate strong{display:block;font:600 25px var(--disp);margin:7px 0}.world-gate small{font-size:11px;display:block}.world-gate .btn{font-size:14px;background:#fff9e7;min-height:44px;margin-top:8px;padding:8px 12px;border-color:#dcc69f;box-shadow:0 3px 0 #d4b688}.world-start{position:absolute;bottom:12px;left:30px;right:30px;text-align:center;color:#fff9e9;text-shadow:0 1px 3px #254539}.world-start strong{font:600 23px var(--disp);display:block}.world-start span{font-size:11px;display:block;line-height:1.4;max-width:290px;margin:5px auto}.map-caption{text-align:center;font-size:11px;letter-spacing:.2px;padding:15px;color:var(--muted)}.ambience{position:absolute;inset:0;pointer-events:none;z-index:1}.ambient{position:absolute;animation:ambient-float var(--dur) ease-in-out var(--delay) infinite;display:block}.sparkle{color:#b9fff2;font-size:18px;animation:star-glint var(--dur) ease-in-out var(--delay) infinite}.firefly,.glow{width:4px;height:4px;border-radius:50%;background:#edffc2;box-shadow:0 0 9px #dbff89;animation:star-glint var(--dur) infinite}.bubble{width:12px;height:12px;border:2px solid #d6ffff88;border-radius:50%;animation:bubble-up var(--dur) linear var(--delay) infinite}.ember{width:4px;height:6px;background:#ffbc68;border-radius:50%;box-shadow:0 0 7px #ff7c53;animation:bubble-up var(--dur) linear var(--delay) infinite}.leaf{width:16px;height:9px;border-radius:80% 0 80% 0;background:#e6bc67;animation:leaf-drift var(--dur) linear var(--delay) infinite}.drop{width:5px;height:8px;background:#b8e9ef;border-radius:50%;animation:bubble-up var(--dur) reverse var(--delay) infinite}.bee{width:13px;height:8px;border-radius:50%;background:repeating-linear-gradient(90deg,#e9bb48 0 4px,#5c684a 4px 7px);box-shadow:2px -5px 0 -1px #fff7d9,-3px -5px 0 -1px #fff7d9}.ladybug{width:11px;height:14px;background:radial-gradient(circle at 30% 30%,#53423e 0 1.5px,transparent 2px),radial-gradient(circle at 65% 66%,#53423e 0 1.5px,transparent 2px),linear-gradient(90deg,#d66664 45%,#523f39 46% 54%,#d66664 55%);border-radius:50%;animation:lady-crawl 12s linear var(--delay) infinite}.butterfly{width:5px;height:13px;background:#ae8663;border-radius:50%}.butterfly:before,.butterfly:after{content:'';position:absolute;width:10px;height:16px;border-radius:70% 30% 55% 45%;background:#ebbc7e;left:-8px;top:-4px;animation:wing .45s infinite alternate;transform-origin:right center}.butterfly:after{left:3px;background:#f6d79e;transform-origin:left center}.fish{width:20px;height:10px;background:#f6bd88;border-radius:60%;animation:fish-jump 8s var(--delay) infinite}.fish:after{content:'';position:absolute;left:-5px;top:0;border-right:8px solid #f6bd88;border-top:5px solid transparent;border-bottom:5px solid transparent}.bat{width:12px;height:7px;background:#c4acca;border-radius:50%;box-shadow:-8px -3px 0 1px #a18aa9,8px -3px 0 1px #a18aa9}.node-unlock{animation:node-open .6s ease-out}.world-arrival{animation:world-arrive .65s ease-out}.traveling .mascot-body{animation:wig-dance .3s infinite}.tutorialboard .tile{font-size:25px}.tutorialboard{margin:27px auto}.tutorialboard svg.headlayer{z-index:4}
@keyframes wig-breathe{50%{transform:translateY(-2px) scaleY(1.025)}}@keyframes wig-blink{0%,43%,47%,100%{transform:scaleY(1)}45%{transform:scaleY(.12)}}@keyframes wig-look{0%,30%,100%{transform:translateX(0)}40%,65%{transform:translateX(-3px)}}@keyframes wig-wave{0%,65%,100%{transform:rotate(0)}70%,80%{transform:rotate(-13deg)}75%,85%{transform:rotate(8deg)}}@keyframes wig-dance{25%{transform:rotate(-5deg) translateY(-5px)}75%{transform:rotate(5deg) translateY(-2px)}}@keyframes hello-bubble{0%,30%,100%{opacity:1;transform:rotate(5deg) translateY(0)}50%,80%{opacity:0;transform:rotate(5deg) translateY(4px)}}@keyframes flame-sway{0%,100%{transform:scale(var(--flame-scale)) rotate(-4deg)}50%{transform:scale(var(--flame-scale)) rotate(4deg)}}@keyframes segment-breathe{50%{transform:scale(1.065)}}@keyframes head-breathe{50%{transform:scale(1.04)}}@keyframes head-dance{25%{transform:translateY(-2px) rotate(-5deg)}75%{transform:translateY(1px) rotate(5deg)}}@keyframes star-glint{0%,100%{opacity:.55;transform:scale(.85)}50%{opacity:1;transform:scale(1.1)}}@keyframes zzz{from{opacity:0;transform:translateY(8px)}50%{opacity:1}to{opacity:0;transform:translateY(-10px)}}@keyframes dust{from{opacity:.8;transform:scale(.2)}to{opacity:0;transform:scale(1.8) translateY(-6px)}}@keyframes sheet-in{from{transform:translateY(70px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes ambient-float{50%{transform:translate(12px,-9px) rotate(10deg)}}@keyframes bubble-up{from{transform:translateY(15px);opacity:0}25%{opacity:.8}to{transform:translateY(-65px);opacity:0}}@keyframes leaf-drift{from{transform:translate(-5px,-20px) rotate(-20deg);opacity:0}20%{opacity:.7}to{transform:translate(22px,55px) rotate(90deg);opacity:0}}@keyframes lady-crawl{50%{transform:translate(16px,12px) rotate(20deg)}}@keyframes wing{to{transform:scaleX(.45)}}@keyframes fish-jump{0%,75%,100%{transform:translateY(10px) rotate(0);opacity:0}80%{opacity:1}86%{transform:translateY(-35px) rotate(-35deg);opacity:1}94%{transform:translate(15px,10px) rotate(45deg);opacity:0}}@keyframes node-open{0%{transform:translate(-50%,-50%) scale(.7)}60%{transform:translate(-50%,-50%) scale(1.15)}100%{transform:translate(-50%,-50%) scale(1)}}@keyframes world-arrive{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:650px){#app{padding-top:35px}.overlay{align-items:center;padding:24px}.dialog{border-radius:29px;border-bottom:1px solid var(--line);max-height:91dvh;padding-bottom:28px}.worm-hero{height:218px}.hero-copy h1{font-size:34px}.adventure-scroll{height:660px}}@media(max-width:380px){#app{padding:20px 16px 28px}.brand{font-size:21px}.brand-worm{width:44px}.icons{gap:6px}.hero-copy{padding:21px 17px}.hero-copy h1{font-size:29px}.hero-mascot{width:154px;height:135px;right:-12px}.hero-mascot .wiggles{width:154px;height:135px}.hero-kicker{font-size:8px}.daily{padding:14px 12px;gap:11px}.daily .meta{font-size:11px}.daily .badge{padding:7px 9px;font-size:12px}.board{padding:8px;gap:5px;border-radius:19px}.tile{border-radius:10px;font-size:25px;min-width:0}.tile span{min-width:26px;line-height:29px}.tile small{font-size:7px}.score .number{font-size:47px}.streak .days{gap:3px}.daydot{width:20px;height:20px}.streak small{font-size:10px}.sectionhead h3{font-size:22px}.levelscard{padding:19px}.hero-copy p{font-size:12px}.pill{font-size:11px;padding:9px}.timer{font-size:12px}.dialog{padding-left:20px;padding-right:20px}.adventure-node{width:61px;height:59px}.worldhead h2{font-size:25px}.worldhead .lvlabel{font-size:9px}}@media(max-width:340px){#app{padding-left:10px;padding-right:10px}.hero-copy h1{font-size:27px}.hero-mascot{opacity:.85}.daily .mini{min-width:41px;width:41px}.daily .meta{max-width:155px}.streak .days{gap:2px}.daydot{width:18px;height:18px}.tile{font-size:22px}.board{padding:5px;gap:4px}.tile span{min-width:24px;line-height:26px}.tile.visited span{min-width:23px;line-height:25px}.tile small{font-size:6px}.score .eyebrow{letter-spacing:1px}.adventure-node{width:58px;height:56px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.hello-bubble{opacity:1}.crawl-segment,.wormface{transform:none!important}.ambience{display:none}.map-scenery{transform:none!important}.wig-zzz{display:none}}
.score{position:relative}.score-mascot{position:absolute;left:50%;top:-24px;transform:translateX(-50%);width:62px;height:52px;pointer-events:none}.score-mascot .wig-wave{display:none}.score-mascot .wiggles{overflow:visible}.worm-dozing[data-view="game"] .score-mascot .wig-eyes{animation:none;transform:scaleY(.12)}.worm-dozing[data-view="game"] .score-mascot .wig-zzz{opacity:1;animation:zzz 3s infinite}.worm-dozing[data-view="game"] .score-mascot .wig-smile{transform:scaleX(.3);transform-box:fill-box;transform-origin:center}.score.worried .wig-smile{transform:rotate(180deg);transform-box:fill-box;transform-origin:center}.tile small{font-size:8px!important}.map-wiggles .wig-wave{display:none}@media(prefers-reduced-motion:reduce){.worm-dozing[data-view="game"] .score-mascot .wig-zzz{animation:none!important}}
.podium-place.me{outline:2px solid var(--accent);outline-offset:2px}.hero-mascot .wig-smile{animation:wig-yawn 14s infinite;transform-box:fill-box;transform-origin:center}@keyframes wig-yawn{0%,80%,95%,100%{transform:scale(1)}85%,90%{transform:scale(.45,1.45)}}@media(prefers-reduced-motion:reduce){.hero-mascot .wig-smile{animation:none!important}}
@keyframes segment-breathe{50%{transform:translateY(.7px) scale(1.055)}}
