/* Typing tutor: lessons with a finger-colour keyboard and hands, plus kids' games (DOM + CSS only). Neubrutalist look from site.css. */
.tu{display:grid;gap:22px;--fp:#ffd3e3;--fpS:#ff7aa8;--fr:#efd9fb;--frS:#c97ff0;--fm:#c9f3df;--fmS:#3fcf8c;--fi:#ffe6bf;--fiS:#ffb547;--ft:#d6e4ff;--ftS:#7aa7ff}
.tu .hi,.tu [lang=hi]{font-family:"Nirmala UI","Mangal","Noto Sans Devanagari","Kohinoor Devanagari","Lohit Devanagari",var(--font)}
.tu-sec{display:grid;gap:22px}
.tu-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tu-tabs{display:flex;gap:10px;flex-wrap:wrap}
.tu-tab{font:800 15px var(--font);background:#fff;color:var(--ink);border:var(--bw) solid var(--ink);border-radius:var(--pill);padding:10px 18px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);min-height:44px}
.tu-tab[aria-pressed=true]{background:var(--ink);color:#fff;box-shadow:3px 3px 0 var(--sun)}
#tu-level{box-sizing:border-box;height:28px;line-height:20px}
#tu-level:not(:empty){visibility:visible}
.tu-lays{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.tu-lays .chip{min-height:42px}
.tu-next{display:flex;align-items:center;justify-content:space-between;gap:14px 18px;flex-wrap:wrap;background:var(--blue-soft);border:2px solid var(--ink);border-radius:var(--r-sm);padding:14px 16px;min-height:104px}
.tu-nx-t{display:grid;gap:2px;flex:1 1 260px;min-width:0}
.tu-nx-t b{font-size:20px;line-height:1.3}
.tu-k{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--blue-d)}
.tu-k2{font-size:13.5px;font-weight:600;color:var(--muted)}
.tu-pbar,.tu .mv-bar{display:block;height:10px;background:#fff;border:2px solid var(--ink);border-radius:var(--pill);overflow:hidden;margin-top:6px;max-width:360px}
.tu-pbar i{display:block;height:100%;background:var(--mint);transform-origin:0 50%;transform:scaleX(0)}
.tu-next .btn{margin:0}
.tu-rule{margin:-6px 0 14px}

/* lesson map */
.tu-map{min-height:300px}
.tu-stage{margin-top:14px}
.tu-stage:first-child{margin-top:0}
.tu-stage h3{font-size:15px;margin:0 0 8px;color:var(--ink-2);text-transform:uppercase;letter-spacing:.05em}
.tu-tiles{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.tu-tile{width:100%;height:100%;min-height:78px;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;gap:2px 8px;align-items:center;text-align:left;font:600 14px/1.3 var(--font);color:var(--ink);background:#fff;border:2px solid var(--ink);border-radius:14px;padding:9px 10px;cursor:pointer;transition:transform .12s,box-shadow .12s}
.tu-tile:hover{transform:translate(-1px,-1px);box-shadow:3px 3px 0 var(--ink)}
.tu-tile b{font-weight:800;font-size:14px;min-width:0;overflow-wrap:anywhere}
.tu-n{grid-row:1/3;display:grid;place-items:center;width:30px;height:30px;border-radius:50%;border:2px solid var(--ink);background:var(--soft);font-weight:800;font-size:13px}
.tu-tile.done{background:#e9fbf2}
.tu-tile.done .tu-n{background:var(--mint)}
.tu-tile.cur{background:#fff5e0;box-shadow:3px 3px 0 var(--sun)}
.tu-tile.cur .tu-n{background:var(--sun)}
.tu-tile.locked{background:var(--soft);color:var(--muted);border-style:dashed;cursor:not-allowed}
.tu-tile.locked:hover{transform:none;box-shadow:none}
.tu-lock{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2}
.tu-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.tu-stars{display:inline-flex;gap:2px}
.tu-stars i{width:15px;height:15px;background:#d5d9e6;clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)}
.tu-stars i.on{background:#f59e0b}

/* lesson player */
.tu-ph{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.tu-ph h2{margin:0}
.tu-ph .btn{margin:0;padding:8px 14px}
.tu-intro{font-size:14.5px;color:var(--ink-2);margin:0 0 12px}
.tu-intro kbd,.tu-hint kbd,.tu-weak kbd,.tu-caps kbd{display:inline-block;font:800 13px var(--font);border:2px solid var(--ink);border-radius:6px;padding:1px 7px;background:#fff;box-shadow:2px 2px 0 var(--ink);margin:0 2px}
.tu-intro .hi,.tu-hint .hi,.tu-weak .hi{font-weight:700;font-size:16px}
.tu-bar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:12px}
.tu-bar div{background:var(--soft);border:2px solid var(--ink);border-radius:var(--r-sm);padding:6px 8px;text-align:center}
.tu-bar b{display:block;font-size:22px;line-height:1.2;font-variant-numeric:tabular-nums}
.tu-bar span{font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.tu-box{position:relative;background:#fffdf5;border:2px solid var(--ink);border-radius:var(--r-sm);cursor:text}
.tu-box.focus{box-shadow:0 0 0 3px var(--sun)}
.tu-box{padding-bottom:22px}
.tu-play.fin .tu-now,.tu-play.fin .tu-hint{display:none}
.tu-play.fin .tu-box{margin-bottom:14px}
.tu-text{height:150px;overflow:hidden;padding:14px 16px;font:600 26px/1.75 ui-monospace,"Cascadia Mono",Consolas,"Liberation Mono",monospace;white-space:pre-wrap;word-break:break-word;color:var(--ink);scroll-behavior:smooth}
.tu-text.hi{font-family:"Nirmala UI","Mangal","Noto Sans Devanagari",var(--font);font-size:28px;line-height:1.85;font-weight:500}
.tu-text span{border-radius:5px}
.tu-text .ok{color:#7a8094}
.tu-text .bad{color:var(--err);text-decoration:underline wavy;text-underline-offset:4px}
.tu-text .cur{background:var(--sun);box-shadow:0 0 0 2px var(--ink);color:var(--ink)}
.tu-text .sp.cur{background:var(--sun)}
.tu-text .shake{animation:tu-shake .25s}
@keyframes tu-shake{25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}
.tu-text span{display:inline-block}
.tu-text .w{display:inline;white-space:nowrap}
.tu-text .sp{display:inline}
.tu-in{position:absolute;left:0;bottom:0;width:1px;height:1px;opacity:0;border:0;padding:0;font-size:16px;caret-color:transparent;pointer-events:none}
.tu-tap{position:absolute;right:10px;bottom:6px;margin:0;font-size:12.5px;font-weight:700;color:var(--muted);pointer-events:none}
.tu-box.focus .tu-tap{visibility:hidden}
.tu-now{display:flex;align-items:center;gap:14px;flex-wrap:wrap;min-height:64px;margin-top:12px}
.tu-big{display:inline-grid;place-items:center;min-width:56px;height:56px;padding:0 12px;border:var(--bw) solid var(--ink);border-radius:14px;background:var(--sun);font:800 30px/1 var(--font);box-shadow:3px 3px 0 var(--ink)}
.tu-big.sp{font-size:17px}
.tu-big.hi{font-weight:600;font-size:30px;background:#fff}
.tu-caps{display:flex;gap:4px;flex-wrap:wrap}
.tu-caps kbd.ok{background:var(--mint)}
.tu-caps kbd.nx{background:var(--sun);transform:translateY(-2px)}
.tu-hint{min-height:28px;margin:6px 0 12px;font-size:15px;color:var(--ink-2)}
.tu-tip{min-height:22px;margin:10px 0 0;font-size:13.5px;color:var(--muted);transition:opacity .3s}
.tu-tip.mv-fade{opacity:0}
.tu-hands{max-width:430px;margin:4px auto 6px}
.tu-hands svg{display:block;width:100%;height:auto}
.tu-hands .palm{fill:#fff;stroke:var(--ink);stroke-width:2.5}
.tu-hands .fg{stroke:var(--ink);stroke-width:2;transition:fill .15s,transform .15s}
.tu-hands .fg.on{stroke-width:3.5}
.tu-hands text{font:700 12px var(--font);fill:var(--muted);text-anchor:middle}
.fg.f-lp,.fg.f-rp{fill:var(--fp)}.fg.f-lr,.fg.f-rr{fill:var(--fr)}.fg.f-lm,.fg.f-rm{fill:var(--fm)}.fg.f-li,.fg.f-ri{fill:var(--fi)}.fg.f-th{fill:var(--ft)}
.fg.on.f-lp,.fg.on.f-rp{fill:var(--fpS)}.fg.on.f-lr,.fg.on.f-rr{fill:var(--frS)}.fg.on.f-lm,.fg.on.f-rm{fill:var(--fmS)}.fg.on.f-li,.fg.on.f-ri{fill:var(--fiS)}.fg.on.f-th{fill:var(--ftS)}

/* keyboard */
.tk-wrap{overflow-x:auto;padding:4px 2px 8px;-webkit-overflow-scrolling:touch}
.tk{display:grid;gap:5px;min-width:540px;max-width:820px;margin:0 auto;user-select:none;-webkit-user-select:none;touch-action:manipulation}
.tk-row{display:flex;gap:5px}
.tk button,.tk-x{flex:1 1 0;min-width:0;height:46px;border:2px solid var(--ink);border-radius:8px;background:#fff;color:var(--ink);font:800 15px/1 var(--font);padding:2px;position:relative;display:grid;place-items:center;cursor:pointer;transition:transform .08s}
.tk-x{background:var(--soft);color:var(--muted);font-size:11.5px;cursor:default}
.tk button small{position:absolute;left:4px;top:3px;font-size:10px;font-weight:700;color:var(--muted)}
.tk.hi button{grid-template-rows:1fr 1fr;align-items:end}
.tk.hi .tk-s{position:absolute;right:4px;top:2px;font-size:12px;font-weight:600}
.tk.hi .tk-h{grid-row:2;font-size:17px;font-weight:600;line-height:1.2}
.tk .bump::after{content:"";position:absolute;bottom:5px;left:50%;width:12px;height:3px;margin-left:-6px;border-radius:2px;background:var(--ink)}
.tk.hi .bump::after{bottom:2px}
.tk .f-lp,.tk .f-rp{background:var(--fp)}.tk .f-lr,.tk .f-rr{background:var(--fr)}.tk .f-lm,.tk .f-rm{background:var(--fm)}.tk .f-li,.tk .f-ri{background:var(--fi)}.tk .f-th{background:var(--ft)}
.tk .tk-space{flex:0 1 52%;margin:0 auto;font-size:13px}
.tk .tk-sh{font-size:12px}
.tk button.next{transform:translateY(-3px);box-shadow:0 0 0 3px var(--ink),3px 3px 0 3px var(--ink);z-index:1}
.tk .f-lp.next,.tk .f-rp.next{background:var(--fpS)}.tk .f-lr.next,.tk .f-rr.next{background:var(--frS)}.tk .f-lm.next,.tk .f-rm.next{background:var(--fmS)}.tk .f-li.next,.tk .f-ri.next{background:var(--fiS)}.tk .f-th.next{background:var(--ftS)}
.tk button.next::before{content:"";position:absolute;inset:-7px;border:3px solid var(--blue);border-radius:12px;animation:tk-pulse 1.1s ease-out infinite;pointer-events:none}
@keyframes tk-pulse{0%{opacity:.9;transform:scale(.92)}100%{opacity:0;transform:scale(1.15)}}
.tk button.bad{background:#ffb4a8!important;animation:tu-shake .25s}
.tk button.held{background:var(--ink);color:#fff}
.tk button:active{transform:translateY(1px)}

/* result */
.tu-res{margin:6px 0 14px;outline:none}
.tu-rcard{border:var(--bw) solid var(--ink);border-radius:var(--r-sm);padding:16px;background:#e9fbf2;box-shadow:4px 4px 0 var(--ink)}
.tu-rcard.fail{background:#fff5e0}
.tu-rcard h3{font-size:22px;margin:0 0 6px}
.tu-rcard .tu-stars i{width:30px;height:30px}
.tu-rcard .tu-stars i.on{animation:tu-star .5s var(--ease) backwards}
.tu-rcard .tu-stars i:nth-child(2){animation-delay:.12s}.tu-rcard .tu-stars i:nth-child(3){animation-delay:.24s}
@keyframes tu-star{0%{transform:scale(0) rotate(-40deg)}70%{transform:scale(1.25)}100%{transform:scale(1)}}
.tu-rstats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:12px 0}
.tu-rstats div{background:#fff;border:2px solid var(--ink);border-radius:10px;padding:6px;text-align:center}
.tu-rstats b{display:block;font-size:22px}
.tu-rstats span{font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase}
.tu-rcard p{margin:6px 0}
.tu-weak{font-size:14px}
.tu-rcard .actions{margin-top:10px}

/* kids */
.kg-games{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.kg-card{display:grid;justify-items:center;text-align:center;gap:6px;background:#fff;border:var(--bw) solid var(--ink);border-radius:18px;padding:14px 12px;cursor:pointer;font:600 14px/1.4 var(--font);color:var(--ink-2);box-shadow:3px 3px 0 var(--ink);transition:transform .12s}
.kg-card b{font-size:18px;color:var(--ink)}
.kg-card svg{width:56px;height:56px;fill:none;stroke:var(--ink);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.kg-card[aria-pressed=true]{background:#fff5e0;box-shadow:4px 4px 0 var(--sun),0 0 0 2px var(--ink);transform:translate(-1px,-1px)}
.kg-h{font-size:16px;margin:18px 0 8px}
.kg-sets{display:flex;flex-wrap:wrap;gap:8px}
.kg-sets .chip{min-height:44px;font-size:14.5px}
.kg-go{font-size:18px;padding:13px 30px}
.kg-hud{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px;min-height:66px}
.kg-hud div{background:var(--soft);border:2px solid var(--ink);border-radius:var(--r-sm);padding:6px 8px;text-align:center}
.kg-hud span{display:block;font-size:12px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.kg-hud b{font-size:24px;line-height:1.2;font-variant-numeric:tabular-nums}
.kg-lives b{display:flex;justify-content:center;gap:4px}
.kg-lives i{width:24px;height:24px}
.kg-lives svg{width:24px;height:24px;fill:#e3e5ee;stroke:var(--ink);stroke-width:1.6}
.kg-lives i.on svg{fill:var(--pink)}
.kg-box{position:relative}
.kg-stage{position:relative;height:380px;overflow:hidden;border:var(--bw) solid var(--ink);border-radius:var(--r-sm);background:linear-gradient(#bfe0ff,#e8f4ff 70%,#d8f5e6 70%,#c6efd9);cursor:pointer;contain:layout paint}
.kg-stage.nope{animation:tu-shake .25s}
.kg-bal{position:absolute;top:0;width:64px;height:78px;margin-left:-32px;will-change:transform}
.kg-bal::before{content:"";position:absolute;inset:0 0 8px;background:var(--c);border:2.5px solid var(--ink);border-radius:50% 50% 48% 48%/55% 55% 45% 45%}
.kg-bal::after{content:"";position:absolute;left:50%;bottom:-22px;width:2px;height:28px;background:var(--ink)}
.kg-bal b{position:absolute;inset:0 0 8px;display:grid;place-items:center;font:800 34px/1 var(--font);color:var(--ink);text-transform:uppercase}
.kg-bal.pop::before{animation:kg-pop .3s forwards}.kg-bal.pop b,.kg-bal.pop::after{opacity:0}
@keyframes kg-pop{to{transform:scale(1.6);opacity:0}}
.kg-word{position:absolute;top:0;padding:6px 14px;background:#fff;border:2.5px solid var(--ink);border-radius:var(--pill);font:800 26px/1.2 var(--font);box-shadow:3px 3px 0 var(--c);white-space:nowrap;will-change:transform}
.kg-word .t{color:var(--ok);text-decoration:underline}
.kg-word.act{background:#fff5e0}
.kg-word.pop{animation:kg-pop .3s forwards}
.kg-bal.miss,.kg-word.miss{opacity:.25;transition:opacity .3s}
.kg-msg{position:absolute;left:50%;top:40%;margin:0;transform:translate(-50%,-50%);font:800 30px var(--font);color:var(--ink);text-shadow:2px 2px 0 #fff;opacity:0;pointer-events:none;white-space:nowrap}
.kg-msg.show{animation:kg-msg 1.2s var(--ease)}
@keyframes kg-msg{0%{opacity:0;transform:translate(-50%,-30%) scale(.8)}20%{opacity:1;transform:translate(-50%,-50%) scale(1.1)}80%{opacity:1}100%{opacity:0;transform:translate(-50%,-70%)}}
.kg-rocket{position:absolute;left:50%;bottom:10px;width:60px;height:100px;margin-left:-30px;transition:transform .35s var(--ease)}
.kg-rocket svg{width:100%;height:100%;overflow:visible}
.kg-body{fill:#fff;stroke:var(--ink);stroke-width:3}
.kg-win{fill:#7cb4ff;stroke:var(--ink);stroke-width:3}
.kg-fin{fill:var(--pink);stroke:var(--ink);stroke-width:3}
.kg-flame{fill:var(--sun);stroke:var(--ink);stroke-width:2;transform-origin:30px 82px;animation:kg-flame .3s infinite alternate}
@keyframes kg-flame{to{transform:scaleY(1.3)}}
.kg-moon{position:absolute;right:12%;top:14px;width:70px;height:70px;border-radius:50%;background:#fff6c9;border:2.5px solid var(--ink);box-shadow:inset -10px -6px 0 #f3e39a}
.kg-path i{position:absolute;width:10px;height:10px;background:#fff;border:2px solid var(--ink);clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)}
.kg-stage.kg-g-rocket{background:linear-gradient(#24306b,#5a6fd0 75%,#8fd6b0 75%)}
.kg-target{position:absolute;left:14px;top:50%;transform:translateY(-50%);display:grid;justify-items:center;gap:2px;background:#fff;border:var(--bw) solid var(--ink);border-radius:18px;padding:8px 18px;box-shadow:4px 4px 0 var(--sun)}
.kg-target span{font-size:12px;font-weight:800;text-transform:uppercase;color:var(--muted)}
.kg-target b{font:800 56px/1 var(--font);text-transform:uppercase}
.kg-target b.pop{animation:tu-star .3s var(--ease)}
.kg-target b.nope{animation:tu-shake .25s;color:var(--err)}
.kg-kbd{margin-top:12px}
.tk-kids{min-width:0;max-width:640px}
.tk-kids button{height:52px;font-size:22px;border-radius:10px}
.tk-kids .tk-row{justify-content:flex-start}
.tk-kids .tk-row button{flex:0 1 9%}
.tk-kids .tk-space{flex:0 1 50%!important;font-size:15px}
.kg-res{margin-top:14px;outline:none}
.kg-end{border:var(--bw) solid var(--ink);border-radius:var(--r-sm);padding:16px;background:#fff5e0;box-shadow:4px 4px 0 var(--ink);text-align:center}
.kg-end h3{font-size:26px;margin:0 0 6px}
.kg-end .actions{justify-content:center}

@media (max-width:700px){
  .kg-games{grid-template-columns:1fr}
  .kg-card{grid-template-columns:48px 1fr;justify-items:start;text-align:left;column-gap:12px}
  .kg-card svg{grid-row:1/3;width:48px;height:48px}
  .tu-text{font-size:21px;height:140px;padding:10px 12px}
  .tu-text.hi{font-size:23px}
  .tu-bar{gap:6px}.tu-bar b{font-size:18px}.tu-bar span{font-size:10px}
  .tu-rstats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tu-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kg-stage{height:320px}
  .kg-bal{width:54px;height:66px;margin-left:-27px}.kg-bal b{font-size:28px}
  .kg-word{font-size:21px;padding:5px 10px}
  .kg-target b{font-size:44px}
  .tk-kids button{height:44px;font-size:18px}
}
@media (prefers-reduced-motion:reduce){.tk button.next::before,.kg-flame{animation:none}.tu-text{scroll-behavior:auto}}
