/* page base (kept from the original page wrapper) */
:root{color-scheme:light;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}html{scroll-padding-top:env(safe-area-inset-top,0px)}body{margin:0;padding:0;font:14px -apple-system,BlinkMacSystemFont,sans-serif;background:#fff;color:#000}img{max-width:100%}[hidden]:not([hidden=until-found i]){display:none!important}

/* Layout: one-screen primer. The hub lists twelve difficulty levels; each level is played in runs of 5/7/10 words,
   every finished run opens one random piece of that level's puzzle picture. In play the word (syllable chips) is the hero,
   the "?" picture card under it is the reward; top strip = run progress, bottom = one big "next". Single bright kid-safe look. */
:root{
  --bg:#F2F8FF; --bg-deep:#D9E9FF; --ink:#1E3350; --ink-soft:#60718C; --paper:#FFFFFF; --line:#C9DBF2;
  --coral:#FF6B6B; --sun:#FFC43D; --mint:#2EC4B6; --grape:#9B5DE5; --sky:#3FA2FF; --leaf:#6CC551;
  --sun-t:#FFF0C4; --sun-deep:#D59B10; --sky-deep:#2370C0;
  --f-display:'Marmelad','Nunito','Segoe UI',system-ui,sans-serif;
  --f-read:'Nunito','Segoe UI',system-ui,sans-serif;
  color-scheme:light;
}
html{height:100%;box-sizing:border-box}
*,*::before,*::after{box-sizing:inherit}
body{height:100%;margin:0;background:var(--bg);color:var(--ink);font-family:var(--f-read);overflow:hidden;
  -webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;touch-action:manipulation}
#app{height:100%;display:flex;flex-direction:column;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:8px;
  background:radial-gradient(130% 80% at 50% -10%,#FFFFFF 0%,var(--bg) 50%,var(--bg-deep) 100%);
  user-select:none;-webkit-user-select:none}
.screen{flex:1;min-height:0;display:flex;flex-direction:column;position:relative}

button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;padding:0}
button:focus-visible,[tabindex]:focus-visible{outline:4px solid var(--sky);outline-offset:4px}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4em;min-height:64px;padding:0 28px;border-radius:22px;
  font:900 24px/1 var(--f-read);color:#fff;background:var(--sky);box-shadow:0 7px 0 var(--sky-deep);transition:transform .08s,box-shadow .08s}
.btn:active{transform:translateY(5px);box-shadow:0 2px 0 var(--sky-deep)}
.btn.sun{background:var(--sun);color:var(--ink);box-shadow:0 7px 0 var(--sun-deep)}
.btn.sun:active{box-shadow:0 2px 0 var(--sun-deep)}
.btn.ghost{background:var(--paper);color:var(--ink);box-shadow:0 7px 0 var(--line)}
.btn.ghost:active{box-shadow:0 2px 0 var(--line)}
.btn.big{min-height:78px;font-size:28px;padding:0 36px;border-radius:28px;flex-direction:column;gap:4px}
.btn .sm{font:400 16px/1.1 var(--f-display);color:var(--ink-soft)}
.btn.ghost .sm{color:var(--ink-soft)}
.btn[disabled]{opacity:.5;box-shadow:0 3px 0 var(--line);transform:none;cursor:default}
.ib{width:52px;height:52px;flex:none;border-radius:50%;background:var(--paper);box-shadow:0 4px 0 var(--line);font-size:24px;line-height:1;display:grid;place-items:center;transition:transform .08s,box-shadow .08s}
.ib:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}
.ib.off{opacity:.55}

/* top strip */
.top{display:flex;align-items:center;gap:12px;padding-block:2px 8px}
.top .mid{flex:1;min-width:0;text-align:center}
.lvl-name{font:400 19px/1.1 var(--f-display);color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lvl-name.big{font-size:26px;color:var(--ink)}
.pbar{height:9px;border-radius:5px;background:var(--line);overflow:hidden;margin:7px auto 0;max-width:240px}
.pbar i{display:block;height:100%;width:0;background:var(--sun);border-radius:5px;transition:width .35s}
.ptext{font:900 13px/1 var(--f-read);color:var(--ink-soft);margin-top:5px;font-variant-numeric:tabular-nums}
.ptext b{color:var(--sun-deep)}

/* stage */
.stage{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;overflow-y:auto;overflow-x:hidden;gap:10px}
.stage>.text{margin-block:auto}
.stage>.card{margin-block:0 auto}
.text{--fs:48px;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:12px 24px;width:100%;padding:8px 2px}
.text .br{flex-basis:100%;height:0}
.word{display:inline-flex;align-items:center;gap:3px;flex:none}
.syl{display:inline-block;font:900 var(--fs)/1.1 var(--f-read);letter-spacing:.02em;padding:.08em .26em .1em;border-radius:.32em;
  background:var(--tint);color:var(--ink);border:.07em solid var(--col);box-shadow:0 .1em 0 var(--col);
  transition:background .15s,color .15s}
.syl.on{background:var(--col)}
.syl.pop{animation:pop .38s cubic-bezier(.3,1.6,.5,1)}
@keyframes pop{0%{transform:scale(1)}50%{transform:scale(1.18) rotate(-2deg)}100%{transform:scale(1)}}
.dash{font:900 calc(var(--fs)*.6)/1 var(--f-read);color:var(--ink-soft);padding:0 .1em}
.punct{font:900 var(--fs)/1 var(--f-read);color:var(--ink-soft);padding-left:.08em}

/* picture card */
.card{width:min(60vw,240px,36vh);aspect-ratio:1;max-width:100%;perspective:1000px;flex:none;cursor:pointer}
.stage.long .card{width:min(48vw,200px,30vh)}
.card-in{position:relative;width:100%;height:100%;transition:transform .65s cubic-bezier(.4,.2,.2,1);transform-style:preserve-3d}
.card.snap .card-in{transition:none}
.card.open .card-in{transform:rotateY(180deg)}
.face{position:absolute;inset:0;border-radius:28px;backface-visibility:hidden;-webkit-backface-visibility:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;overflow:hidden}
.front{background:var(--paper);border:4px dashed var(--sky);color:var(--sky)}
.front .q{font:900 clamp(60px,22vw,120px)/1 var(--f-read);animation:wob 1.9s ease-in-out infinite}
.front .tap{font:400 18px/1 var(--f-display);color:var(--ink-soft)}
@keyframes wob{0%,100%{transform:rotate(-7deg) scale(1)}50%{transform:rotate(7deg) scale(1.06)}}
.back{background:var(--paper);border:4px solid var(--sun);transform:rotateY(180deg);box-shadow:0 8px 0 var(--sun-t);padding:6px}
.back .pic{font-size:100px;line-height:1.15;letter-spacing:-.02em;text-align:center;white-space:nowrap}
.pic svg,.dw .e svg,.pic img{width:1em;height:1em;display:inline-block;vertical-align:middle}
.dw .e img{width:60px;height:60px;display:block}
.back .whole{font:900 clamp(13px,4vw,19px)/1.15 var(--f-read);color:var(--ink-soft);letter-spacing:.04em;padding:0 8px;text-align:center}
.stage.long .back .whole{font-size:11px;letter-spacing:.02em}

/* bottom strip */
.bottom{display:flex;align-items:center;justify-content:center;gap:14px;padding-block:10px 4px}
.btn.next{flex:1;max-width:300px}
.btn.next.skip{background:var(--paper);color:var(--ink-soft);box-shadow:0 7px 0 var(--line);font-size:20px}
.btn.next.skip:active{box-shadow:0 2px 0 var(--line)}
.btn.next.ready{animation:nudge 1.1s ease-in-out infinite}
@keyframes nudge{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.ib.speak{width:64px;height:64px;font-size:28px}

/* hub */
.hub{overflow-y:auto;gap:14px;padding-block:4px 16px;align-items:center}
.hub-head{display:flex;align-items:center;gap:10px;width:100%}
.hub-head .mid{flex:1;min-width:0;text-align:center}
.hero{display:flex;align-items:center;justify-content:center;gap:4px;--fs:clamp(26px,8vw,46px);max-width:100%;padding-top:6px}
.hero .syl{animation:bob 2.4s ease-in-out infinite}
.hero .syl:nth-child(3){animation-delay:.3s}
.hero .syl:nth-child(5){animation-delay:.6s}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
h1{font:400 clamp(22px,6.4vw,34px)/1.1 var(--f-display);margin:0;text-wrap:balance;text-align:center}
.acts{display:flex;flex-direction:column;align-items:stretch;gap:12px;width:min(100%,360px)}
.hub .acts .btn.big{width:100%}
.lv-list{display:flex;flex-direction:column;gap:10px;width:min(100%,460px)}
.lv-h{font:400 19px/1 var(--f-display);color:var(--ink-soft);text-align:left;margin:8px 0 0}
.lv{display:grid;grid-template-columns:52px 1fr auto;align-items:center;gap:12px;padding:12px 14px;border-radius:22px;
  background:var(--paper);box-shadow:0 5px 0 var(--line);text-align:left;width:100%;border:3px solid transparent;transition:transform .08s}
.lv:active{transform:translateY(3px)}
.lv.cur{border-color:var(--sky)}
.lv.full{border-color:var(--sun)}
.lv .num{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;font:900 24px/1 var(--f-read);color:#fff;background:var(--col)}
.lv .info{display:flex;flex-direction:column;gap:5px;min-width:0}
.lv .nm{font:400 20px/1.1 var(--f-display)}
.lv .ex{font:900 13px/1 var(--f-read);color:var(--ink-soft);letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lv .bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden;width:100%}
.lv .bar i{display:block;height:100%;background:var(--col);border-radius:3px}
.lv .st{display:flex;flex-direction:column;align-items:flex-end;gap:5px;font:900 15px/1 var(--f-read);color:var(--ink-soft);white-space:nowrap;font-variant-numeric:tabular-nums}
.lv .st b{color:var(--sun-deep)}
.lv .st .v{font-size:12px;font-weight:800}
.note{font:700 13px/1.45 var(--f-read);color:var(--ink-soft);max-width:40ch;margin:0;text-align:center}

/* puzzle */
.pz-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;width:min(100%,440px)}
.pz{position:relative;width:100%;aspect-ratio:5/3;border-radius:18px;overflow:hidden;border:4px solid var(--paper);box-shadow:0 6px 0 var(--line);background:var(--line)}
.pz svg,.pz img{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover}
.pz-grid{position:absolute;inset:0;display:grid;grid-template-columns:repeat(var(--cols),1fr);grid-template-rows:repeat(3,1fr)}
.pz-c{background:var(--paper);background-image:radial-gradient(circle at 30% 30%,#fff 0,#fff 40%,#EEF4FC 41%,#EEF4FC 100%);border:1px solid var(--line);display:grid;place-items:center;color:var(--line);font:900 14px/1 var(--f-read);transition:opacity .7s,transform .7s}
.pz-c::after{content:"?"}
.pz-c.open{opacity:0;transform:scale(.5) rotate(12deg);pointer-events:none}
.pz-c.new{background:var(--sun-t);border-color:var(--sun);color:var(--sun-deep);animation:glow .8s ease-in-out infinite alternate}
@keyframes glow{0%{box-shadow:inset 0 0 0 2px var(--sun)}100%{box-shadow:inset 0 0 0 6px var(--sun)}}
.pz-cap{font:400 18px/1.2 var(--f-display);color:var(--ink-soft);text-align:center}
.pz-cap b{color:var(--sun-deep)}

/* dictionary */
.dict-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding-block:4px 16px}
.dict-h{font:400 19px/1 var(--f-display);color:var(--ink-soft);margin:6px 0 0}
.dict-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px}
.dw{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px 4px;border-radius:16px;background:var(--paper);box-shadow:0 3px 0 var(--line);min-height:84px;min-width:0}
.dw .e{font-size:30px;line-height:1.1;white-space:nowrap}
.dw .w{font:900 12px/1.15 var(--f-read);letter-spacing:.03em;text-align:center;color:var(--ink);max-width:100%;overflow-wrap:anywhere}
.dw.locked{opacity:.3;box-shadow:none;cursor:default}

/* settings */
.ib-space{width:52px;height:52px;flex:none}
.set-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding-block:4px 16px;width:min(100%,460px);align-self:center}
.row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-radius:18px;background:var(--paper);box-shadow:0 4px 0 var(--line);font:800 17px/1.2 var(--f-read);cursor:pointer}
.sw{appearance:none;-webkit-appearance:none;width:54px;height:32px;border-radius:16px;background:var(--line);position:relative;flex:none;transition:background .2s;margin:0;cursor:pointer}
.sw::after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:#fff;box-shadow:0 2px 4px rgba(30,51,80,.25);transition:transform .2s}
.sw:checked{background:var(--leaf)}
.sw:checked::after{transform:translateX(22px)}
.sw:focus-visible{outline:4px solid var(--sky);outline-offset:3px}
.set-stats{font:400 17px/1.4 var(--f-display);color:var(--ink-soft);text-align:center;padding:6px}
.danger{margin-top:6px;padding:16px;border-radius:18px;background:#FFF1F1;border:2px dashed var(--coral);display:flex;flex-direction:column;gap:10px}
.set-h{font:400 21px/1 var(--f-display);color:#C94747}
.set-p{margin:0;font:700 14px/1.45 var(--f-read);color:var(--ink-soft)}
.danger input{font:800 20px/1.2 var(--f-read);padding:12px 14px;border-radius:14px;border:2px solid var(--line);background:#fff;color:var(--ink);width:100%;user-select:text;-webkit-user-select:text}
.danger input:focus{outline:none;border-color:var(--sky)}
.btn.red{background:var(--coral);box-shadow:0 7px 0 #C94747}
.btn.red:active{box-shadow:0 2px 0 #C94747}
.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:#fff;font:800 16px/1.2 var(--f-read);padding:12px 20px;border-radius:16px;z-index:60;max-width:calc(100% - 32px);text-align:center}

/* run end & run picker */
.done{align-items:center;justify-content:center;text-align:center;gap:14px;overflow-y:auto;padding-block:8px}
.trophy{font-size:clamp(56px,16vw,84px);line-height:1;animation:bob 2s ease-in-out infinite}
.done h2{font:400 clamp(36px,10vw,56px)/1 var(--f-display);margin:0}
.cnt{font:400 20px/1.3 var(--f-display);color:var(--ink-soft);margin:0;text-wrap:balance;max-width:34ch}
.cnt b{color:var(--sun-deep)}
.pick{gap:12px;align-items:center;overflow-y:auto;padding-block:0 12px}
.pick .top{width:100%}
.tiers{display:flex;flex-direction:column;gap:10px;width:min(100%,360px)}
.tier{flex-direction:column;gap:4px;min-height:72px}
#confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:50}

@media (orientation:landscape) and (max-height:540px){
  .stage{flex-direction:row;justify-content:space-around;gap:16px}
  .stage>.text{margin-block:0;flex:1;min-width:0}
  .stage>.card{margin-block:0;width:min(40vh,220px)}
  .top{padding-block:0 4px}
  .bottom{padding-block:6px 0}
  .btn.next{min-height:56px}
  .hero{display:none}
  .pz-wrap{width:min(100%,300px)}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}
