@font-face{font-family:"DM Sans";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/dm-sans-400.ttf") format("truetype")}
@font-face{font-family:"DM Sans";font-style:normal;font-weight:500;font-display:swap;src:url("fonts/dm-sans-500.ttf") format("truetype")}
@font-face{font-family:"DM Sans";font-style:normal;font-weight:600;font-display:swap;src:url("fonts/dm-sans-600.ttf") format("truetype")}
@font-face{font-family:"DM Sans";font-style:normal;font-weight:700;font-display:swap;src:url("fonts/dm-sans-700.ttf") format("truetype")}
@font-face{font-family:"Outfit";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/outfit-400.ttf") format("truetype")}
@font-face{font-family:"Outfit";font-style:normal;font-weight:500;font-display:swap;src:url("fonts/outfit-500.ttf") format("truetype")}
@font-face{font-family:"Outfit";font-style:normal;font-weight:600;font-display:swap;src:url("fonts/outfit-600.ttf") format("truetype")}
@font-face{font-family:"Outfit";font-style:normal;font-weight:700;font-display:swap;src:url("fonts/outfit-700.ttf") format("truetype")}
@font-face{font-family:"Outfit";font-style:normal;font-weight:800;font-display:swap;src:url("fonts/outfit-800.ttf") format("truetype")}
@font-face{font-family:"Andika";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/andika-latin-400-normal.woff2") format("woff2")}
@font-face{font-family:"Andika";font-style:normal;font-weight:700;font-display:swap;src:url("fonts/andika-latin-700-normal.woff2") format("woff2")}

/* Layout: one centered column; home = lesson path + tips; practice = big letters, keyboard, hands stacked */
:root{
  --bg:#faf8ef; --surface:#fffdf6; --ink:#243d33; --muted:#566357; --line:#d9dfd1;
  --accent:#d54c2c; --good:#42764a; --oops:#c34135; --fixed:#96701a;
  --f5:#9B5CF6; --f4:#2F80ED; --f3:#1FAE74; --f2:#F08A24; --f1:#E0578B;
  --skin:#E9D3BF; --skin-line:#C9AE96;
  --water:#ccdfd7; --wave:#e4eee8; --pad:#86ad75; --pad-line:#547d4c; --log:#b58b64; --log-line:#8e6848;
  --road:#46574d; --lane:#faf8ef; --grass:#dce7ba; --car:#d65a3d; --frog:#7da462; --frog-dark:#476e3d;
  --display:"Outfit",sans-serif;
  --read:"DM Sans",sans-serif; --typing:"Andika",sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
:root{padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
body{margin:0}
.brand{font-family:var(--display);font-weight:800;font-size:14px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
.hdr-actions{display:flex;flex-direction:column;align-items:flex-end;gap:10px}
footer.site{border-top:1px solid var(--line);padding-top:18px;display:flex;flex-wrap:wrap;gap:8px 20px;justify-content:space-between;font-size:14px;color:var(--muted)}
footer.site a{color:var(--accent)}
.field{display:flex;flex-direction:column;gap:6px;text-align:left}
.field label{font-family:var(--display);font-weight:800;font-size:16px}
.field small{color:var(--muted);font-size:13px}
.field input[type=text],.field textarea{font:inherit;font-size:17px;padding:10px 12px;border-radius:12px;border:2px solid var(--line);background:var(--bg);color:var(--ink);width:100%}
.field textarea{min-height:110px;resize:vertical}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--accent)}
.check{display:flex;gap:10px;align-items:center;text-align:left}
.check input{width:20px;height:20px;accent-color:var(--accent)}
.result.settings{max-width:480px;text-align:left;max-height:calc(100vh - 32px);overflow:auto}
[hidden]{display:none!important}
body{background:var(--bg);color:var(--ink);font-family:var(--read);font-size:17px;line-height:1.5}
.wrap{max-width:980px;margin:0 auto;padding-block:24px 48px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));display:flex;flex-direction:column;gap:24px}
h1,h2,h3{font-family:var(--display);line-height:1.1;margin:0;text-wrap:balance}
h1{font-size:clamp(30px,6vw,46px);font-weight:800}
h2{font-size:24px;font-weight:800}
p{margin:0}
.muted{color:var(--muted)}
button{font:inherit;cursor:pointer}
button:focus-visible{outline:3px solid var(--accent);outline-offset:2px}

header.top{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap}
.legend{display:flex;flex-wrap:wrap;gap:8px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--surface);border:1px solid var(--line);font-size:14px}
.dot{width:12px;height:12px;border-radius:50%}
.touch-note{background:var(--surface);border:2px dashed var(--line);border-radius:14px;padding:12px 16px;display:none}
@media (pointer:coarse){.touch-note{display:block}}

/* lesson path */
.path{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.lesson{position:relative;text-align:left;background:var(--surface);border:2px solid var(--line);border-radius:16px;padding:12px 14px;color:var(--ink);display:flex;flex-direction:column;gap:4px;min-height:112px;transition:transform .15s,border-color .15s}
.lesson:hover{transform:translateY(-2px);border-color:var(--accent)}
.lesson .n{font-family:var(--display);font-weight:800;font-size:14px;color:var(--muted);letter-spacing:.06em;text-transform:uppercase}
.lesson .k{font-family:var(--display);font-weight:800;font-size:26px;line-height:1;display:flex;gap:6px;flex-wrap:wrap}
.lesson .k span{padding:0 6px;border-radius:8px}
.lesson .t{font-size:14px;color:var(--muted)}
.lesson .stars{margin-top:auto;font-size:18px;letter-spacing:2px;color:var(--line)}
.lesson .stars b{color:var(--fixed);font-weight:400}
.lesson.next{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
.lesson.next::after{content:"Next";position:absolute;top:10px;right:10px;font-size:12px;font-weight:700;background:var(--accent);color:var(--surface);padding:1px 8px;border-radius:999px}

.tips{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:18px 20px;display:flex;flex-direction:column;gap:10px;min-width:0}
.card ul{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px}
.card li::marker{color:var(--accent)}
.reset{align-self:flex-start;background:none;border:none;color:var(--muted);text-decoration:underline;padding:0;font-size:14px}

/* practice */
.bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.btn{border:none;border-radius:12px;padding:10px 18px;font-family:var(--display);font-weight:800;font-size:18px;background:var(--accent);color:var(--surface)}
.btn.ghost{background:var(--surface);color:var(--ink);border:2px solid var(--line)}
.bar .spacer{flex:1}
.prog{height:12px;flex:1 1 160px;min-width:120px;background:var(--surface);border:1px solid var(--line);border-radius:999px;overflow:hidden}
.prog i{display:block;height:100%;width:0;background:var(--good);transition:width .2s}

.coach{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px 18px;min-height:70px}
.coach .sw{width:22px;height:22px;border-radius:50%;flex:none}
.coach p{font-family:var(--display);font-weight:600;font-size:clamp(18px,3.4vw,24px)}
.coach.oops{border-color:var(--oops);animation:shake .3s}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

.text{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:22px 20px;font-family:var(--read);font-size:clamp(30px,6.4vw,50px);line-height:1.5;letter-spacing:.04em;display:flex;flex-wrap:wrap;column-gap:0;row-gap:4px;justify-content:center;min-height:120px;align-content:center}
.text .ch{display:inline-block;min-width:.62em;text-align:center;border-bottom:4px solid transparent;color:var(--muted);opacity:.55}
.text .ch.sp{color:var(--line);opacity:1}
.text .ch.done{color:var(--good);opacity:1}
.text .ch.fixed{color:var(--fixed);opacity:1}
.text .ch.cur{color:var(--ink);opacity:1;border-bottom-color:var(--accent);animation:blink 1.1s ease-in-out infinite}
.text .ch.sp.cur{color:var(--accent)}
@keyframes blink{50%{border-bottom-color:transparent}}

.kbd-scroll{overflow-x:auto;padding-bottom:4px}
.kbd{min-width:560px;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:8px}
.row{display:flex;gap:8px}
.row .pad{flex:0 0 auto}
.key{flex:1 1 0;aspect-ratio:1/.92;border-radius:10px;display:flex;align-items:center;justify-content:center;position:relative;font-family:var(--display);font-weight:800;font-size:clamp(16px,2.4vw,24px);color:var(--ink);
  background:color-mix(in srgb,var(--fc) 22%,var(--surface));border:2px solid color-mix(in srgb,var(--fc) 45%,var(--surface));border-bottom-width:5px;transition:transform .08s}
.key.bump::after{content:"";position:absolute;bottom:9px;width:30%;height:4px;border-radius:2px;background:var(--ink);opacity:.55}
.key.home{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--fc) 30%,transparent)}
.key.space{flex:0 0 46%;aspect-ratio:auto;height:52px;font-size:15px;font-weight:600}
.key.target{background:var(--fc);color:#fff;border-color:color-mix(in srgb,var(--fc) 70%,#000);animation:pulse 1s ease-in-out infinite}
.key.target.bump::after{background:#fff}
.key.press{transform:translateY(3px)}
.key.bad{background:var(--oops);color:#fff;border-color:var(--oops)}
@keyframes pulse{50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--fc) 30%,transparent)}}

.hands{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:10px 14px 4px}
.hands svg{display:block;width:100%;max-width:620px;margin:0 auto;height:auto}
.palm{fill:var(--skin);stroke:var(--skin-line);stroke-width:2}
.fg{fill:color-mix(in srgb,var(--fc) 30%,var(--skin));stroke:var(--skin-line);stroke-width:2;transform-box:fill-box;transform-origin:center bottom;transition:transform .15s}
.fg.on{fill:var(--fc);stroke:color-mix(in srgb,var(--fc) 70%,#000);animation:wiggle .9s ease-in-out infinite}
@keyframes wiggle{50%{transform:translateY(-7px)}}
.hands .labels{display:flex;justify-content:space-around;font-family:var(--display);font-weight:800;color:var(--muted);font-size:15px;letter-spacing:.06em;text-transform:uppercase;padding-bottom:6px}

.overlay{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 70%,transparent);display:flex;align-items:center;justify-content:center;padding:max(16px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(16px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px));z-index:20}
.result{background:var(--surface);border:2px solid var(--line);border-radius:24px;padding:28px;max-width:420px;width:100%;text-align:center;display:flex;flex-direction:column;gap:14px;box-shadow:0 20px 60px rgba(0,0,0,.18)}
.result .big{font-size:52px;letter-spacing:6px;color:var(--fixed);line-height:1}
.result .big s{color:var(--line);text-decoration:none}
.nums{display:flex;justify-content:center;gap:28px}
.nums div{display:flex;flex-direction:column}
.nums b{font-family:var(--display);font-size:32px;font-variant-numeric:tabular-nums;line-height:1}
.nums span{font-size:13px;color:var(--muted)}
.result .acts{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}

/* game modes */
.modes{display:inline-flex;flex-wrap:wrap;background:var(--surface);border:2px solid var(--line);border-radius:12px;padding:3px;gap:3px}
.modes button{border:none;background:none;padding:5px 12px;border-radius:9px;font-family:var(--display);font-weight:800;font-size:16px;color:var(--muted)}
.modes button[aria-pressed="true"]{background:var(--accent);color:var(--surface)}
.game{position:relative;height:118px;border-radius:18px;overflow:hidden;border:1px solid var(--line)}
.game.frog{background:var(--water)}
.game.car{background:var(--grass)}
.track{position:absolute;left:0;top:0;bottom:0;display:flex;align-items:center;will-change:transform}
.frog .track{background-image:radial-gradient(ellipse 16px 3px at 20px 16px,var(--wave) 95%,transparent),radial-gradient(ellipse 12px 3px at 54px 102px,var(--wave) 95%,transparent);background-size:72px 118px}
.car .track{top:18px;bottom:18px;background:linear-gradient(90deg,var(--lane) 0 50%,transparent 50%) 0 22%/36px 4px repeat-x,var(--road)}
.tile{flex:0 0 72px;height:100%;display:flex;align-items:center;justify-content:center;position:relative}
.tile span{position:relative;z-index:1;font-family:var(--read);font-weight:700;font-size:28px;line-height:1.2;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35);padding:0 8px;border-radius:10px}
.tile.gap span{font-size:12px;font-family:var(--display)}
.tile.start span,.tile.lead span{display:none}
.frog .tile.lead::before{display:none}
.tile.here span{background:var(--fc);box-shadow:0 0 0 3px rgba(255,255,255,.7)}
.frog .tile::before{content:"";position:absolute;width:62px;height:42px;border-radius:50%;background:var(--pad);border:3px solid var(--pad-line);clip-path:polygon(0 0,44% 0,50% 45%,56% 0,100% 0,100% 100%,0 100%)}
.frog .tile.gap::before{width:50px;height:20px;border-radius:10px;background:var(--log);border-color:var(--log-line);clip-path:none}
.frog .tile.goal::before{width:70px;height:48px}
.frog .tile.goal span{width:24px;height:24px;padding:0;border-radius:50%;background:var(--f1);box-shadow:0 0 0 7px color-mix(in srgb,var(--f1) 40%,transparent)}
.frog .tile.past::before{opacity:.55}
.car .tile{padding-top:28px}
.car .tile.goal{flex-basis:36px;background:repeating-conic-gradient(#fff 0 25%,#222 0 50%) 0 0/16px 16px}
.car .tile.goal span{display:none}
.car .tile.past span{opacity:.3}
.avatar{position:absolute;left:28%;top:50%;transform:translate(-50%,-62%);z-index:3;pointer-events:none}
.car .avatar{transform:translate(-50%,-70%)}
.avatar svg{display:block}
.avatar.hop svg{animation:hop .32s ease-out}
@keyframes hop{45%{transform:translateY(-38px) scale(1.06,.95)}}
.avatar.drive svg{animation:bump .3s}
@keyframes bump{30%{transform:translateY(-3px) rotate(-2deg)}}
.wheel{transform-box:fill-box;transform-origin:center}
.avatar.drive .wheel{animation:spin .3s linear}
@keyframes spin{to{transform:rotate(360deg)}}
.avatar.oops svg{animation:shake .3s}
.frog .avatar.oops::after{content:"";position:absolute;left:50%;top:72%;width:74px;height:22px;margin-left:-37px;border:3px solid rgba(255,255,255,.9);border-radius:50%;opacity:0;animation:ripple .55s ease-out}
@keyframes ripple{0%{transform:scale(.4);opacity:.9}100%{transform:scale(1.7);opacity:0}}
.bubble{position:absolute;left:72%;top:-16px;background:var(--surface);color:var(--ink);font-family:var(--display);font-weight:800;font-size:16px;padding:1px 10px;border-radius:12px;border:2px solid var(--line);white-space:nowrap;opacity:0}
.bubble.show{animation:pop .9s forwards}
@keyframes pop{0%{opacity:0;transform:translateY(6px) scale(.8)}15%{opacity:1;transform:none}80%{opacity:1}100%{opacity:0}}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* cards with practice + test */
.lesson{cursor:default}
.lesson:hover{transform:none}
.lesson .acts2{display:flex;gap:6px;margin-top:auto;padding-top:6px}
.lesson .acts2 button{flex:1;border-radius:10px;border:2px solid var(--line);background:var(--bg);color:var(--ink);padding:5px 6px;font-family:var(--display);font-weight:800;font-size:14px;display:flex;flex-direction:column;align-items:center;line-height:1.1;gap:2px}
.lesson .acts2 button:hover{border-color:var(--accent)}
.lesson .acts2 .st{font-size:13px;letter-spacing:1px;color:var(--line)}
.lesson .acts2 .st b{color:var(--fixed);font-weight:400}
.lesson .acts2 .pass{color:var(--good);font-size:12px}
.own{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.own .card{gap:6px}
.own .preview{font-family:var(--read);font-size:15px;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.own .empty{border-style:dashed}
.pill{display:inline-block;font-family:var(--display);font-weight:800;font-size:13px;padding:1px 10px;border-radius:999px;background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}
/* ---- v3: profiles, levels, steps ---- */
.topline{display:flex;justify-content:space-between;align-items:center;gap:12px}
.profchip{display:inline-flex;align-items:center;gap:8px;border:2px solid var(--line);background:var(--surface);color:var(--ink);border-radius:999px;padding:3px 14px 3px 3px;font-family:var(--display);font-weight:800;font-size:16px}
.profchip:hover{border-color:var(--accent)}
.av{display:block;border-radius:50%;background:color-mix(in srgb,var(--accent) 12%,var(--surface));flex:none}
.menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--surface);border:2px solid var(--line);border-radius:16px;padding:8px;min-width:230px;z-index:15;display:flex;flex-direction:column;gap:2px;box-shadow:0 12px 40px rgba(0,0,0,.15)}
.menu button{display:flex;align-items:center;gap:10px;border:none;background:none;color:var(--ink);text-align:left;padding:7px 10px;border-radius:10px;font-family:var(--display);font-weight:600;font-size:16px}
.menu button:hover{background:var(--bg)}
.menu button[aria-current="true"]{background:color-mix(in srgb,var(--accent) 14%,transparent)}
.menu hr{border:none;border-top:1px solid var(--line);margin:4px 2px}
.avatars{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.avatars button{border:3px solid var(--line);background:var(--bg);border-radius:16px;padding:8px 4px 6px;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--ink)}
.avatars button[aria-pressed="true"]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}
.avatars b{font-family:var(--display);font-size:15px;line-height:1.1}
.avatars small{font-size:11px;color:var(--muted);line-height:1.1;text-align:center}
.field select{font:inherit;font-size:17px;padding:9px 12px;border-radius:12px;border:2px solid var(--line);background:var(--bg);color:var(--ink);max-width:140px}
.who{display:flex;flex-wrap:wrap;gap:14px;justify-content:center}
.who button{border:3px solid var(--line);background:var(--bg);border-radius:20px;padding:12px 16px;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--ink);font-family:var(--display);font-weight:800;font-size:18px;min-width:120px}
.who button:hover{border-color:var(--accent)}
.danger{color:var(--oops)!important}
/* lesson cards on home */
.lesson.card2{cursor:pointer;text-align:left;font:inherit}
.lesson.card2:hover{transform:translateY(-2px);border-color:var(--accent)}
.lvbars{display:flex;flex-direction:column;gap:3px;margin-top:auto;padding-top:6px}
.cprog{margin-top:auto;padding-top:8px;display:flex;flex-direction:column;gap:5px}
.cprog i{display:block;height:8px;border-radius:4px;background:var(--line);overflow:hidden}
.cprog i b{display:block;height:100%;background:var(--good);border-radius:4px}
.cprog .row2 span{white-space:nowrap}
.cprog .row2{display:flex;gap:6px;justify-content:space-between;align-items:center;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.cprog .rate{color:var(--fixed);font-family:var(--display);font-weight:800;font-size:14px}
.fact{background:color-mix(in srgb,var(--accent) 10%,var(--bg));border-radius:16px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;text-align:left}
.fact .n{font-family:var(--display);font-weight:800;font-size:30px;line-height:1;font-variant-numeric:tabular-nums;color:var(--accent)}
.fact p{font-size:15px}
.fact .bar{height:8px;border-radius:4px;background:var(--line);overflow:hidden}
.fact .bar b{display:block;height:100%;background:var(--accent)}
.fact small{font-size:13px;color:var(--muted)}
.total{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:10px 14px;font-size:15px;align-self:flex-start}
.total b{font-family:var(--display);font-size:20px;color:var(--accent);font-variant-numeric:tabular-nums}
.lvbar{display:grid;grid-template-columns:16px 1fr auto;align-items:center;gap:6px;font-family:var(--display);font-weight:800;font-size:12px;color:var(--muted)}
.lvbar i{height:6px;border-radius:3px;background:var(--line);overflow:hidden;display:block}
.lvbar i b{display:block;height:100%;background:var(--good)}
.lvbar.cur{color:var(--ink)}
/* lesson view */
.tabs{display:inline-flex;gap:6px;flex-wrap:wrap}
.tabs button{border:2px solid var(--line);background:var(--surface);color:var(--muted);border-radius:12px;padding:8px 16px;font-family:var(--display);font-weight:800;font-size:17px}
.tabs button[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--surface)}
.steps{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}
.step{background:var(--surface);border:2px solid var(--line);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:6px;min-width:0}
.step.next{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
.step .num{font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.step h3{font-size:21px}
.step p{font-size:14px;color:var(--muted)}
.step .st{font-size:18px;letter-spacing:2px;color:var(--line);margin-top:auto}
.step .st b{color:var(--fixed);font-weight:400}
.step .btn{font-size:16px;padding:8px 14px}
.lhead{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.lhead .k{font-family:var(--display);font-weight:800;font-size:30px;display:flex;gap:6px}
.lhead .k span{padding:0 8px;border-radius:10px}
.key.shift{flex:1.7 1 0;aspect-ratio:auto;font-size:14px;font-weight:600}
/* ---- one-screen layout ---- */
.small{font-size:14px}
.home{display:flex;flex-direction:column;gap:16px}
.home h1{font-size:clamp(30px,4.4vw,42px)}
.hero{display:flex;justify-content:space-between;align-items:center;gap:12px 20px;flex-wrap:wrap}
.hero-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.total{align-self:center}
.sec{display:flex;flex-direction:column;gap:10px}
.sec .bar{gap:8px 12px}
.arrow{width:36px;height:36px;border-radius:50%;border:2px solid var(--line);background:var(--surface);color:var(--ink);font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;padding:0 0 3px}
.arrow:hover{border-color:var(--accent)}
.strip{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x proximity;padding:4px 4px 10px;scrollbar-width:thin}
.strip .lesson{flex:0 0 168px;scroll-snap-align:start;min-height:0;padding:10px 12px}
.legend .chip{font-size:13px;padding:2px 9px}
.bottom{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.bottom .card{padding:14px 16px;gap:8px}
.bottom .card ul{gap:3px;font-size:15px}
.ownlist{display:flex;flex-direction:column;gap:8px}
.ownrow{display:flex;justify-content:space-between;align-items:center;gap:10px;background:var(--bg);border-radius:12px;padding:8px 10px}
.ownrow div{display:flex;flex-direction:column;line-height:1.2}
.ownrow .btn{font-size:15px;padding:6px 12px}
footer.site{padding-top:10px}
@media (max-width:860px){.bottom{grid-template-columns:1fr}}
/* practice fits one screen */
#practice .bar .btn{font-size:15px;padding:6px 12px}
#practice .bar h2{font-size:20px}
.coach{min-height:0;padding:10px 16px}
.coach p{font-size:clamp(16px,2.4vw,21px)}
.text{padding:12px 16px;min-height:0;font-size:clamp(28px,4.4vw,42px);line-height:1.35;flex-wrap:nowrap;justify-content:flex-start;overflow:hidden;white-space:nowrap;scroll-behavior:smooth}
.text{position:relative}
.text.fits{justify-content:center}
.text .ch{flex:none}
.deck{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,33%);gap:12px;align-items:stretch}
.deck .kbd{padding:10px;gap:6px;min-width:520px}
.deck .row{gap:6px}
.deck .key{aspect-ratio:1/.8;font-size:clamp(15px,1.8vw,21px)}
.deck .key.space{height:40px}
.deck .hands{display:flex;flex-direction:column;justify-content:center;padding:8px}
.deck .hands svg{max-width:none}
@media (max-width:860px){.deck{grid-template-columns:1fr}.deck .hands svg{max-width:380px}}
#app.compact{padding-block:12px 16px;gap:12px}
/* ---- stats + screen time ---- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:10px 14px;display:flex;flex-direction:column;gap:2px;min-width:0}
.stat .lbl{font-family:var(--display);font-weight:800;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.stat .val{font-family:var(--display);font-weight:800;font-size:26px;line-height:1.1;font-variant-numeric:tabular-nums}
.stat .val small{font-size:14px;color:var(--muted);font-weight:600}
.stat .sub{font-size:13px;color:var(--muted);line-height:1.3}
.stat .tbar{height:6px;border-radius:3px;background:var(--line);overflow:hidden;margin-top:4px}
.stat .tbar b{display:block;height:100%;background:var(--accent)}
.stat.warn .tbar b{background:var(--fixed)}
.timechip{display:inline-flex;align-items:center;gap:6px;font-family:var(--display);font-weight:800;font-size:14px;padding:3px 12px;border-radius:999px;border:2px solid var(--line);background:var(--surface);color:var(--muted);font-variant-numeric:tabular-nums}
.timechip.warn{border-color:var(--fixed);color:var(--ink);background:color-mix(in srgb,var(--fixed) 18%,var(--surface))}
.timechip.up{border-color:var(--fixed);background:var(--fixed);color:#1B2836;animation:pulse2 1.4s ease-in-out infinite}
@keyframes pulse2{50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--fixed) 35%,transparent)}}
body.locked #app{filter:grayscale(1);opacity:.45;pointer-events:none}
.lockov{background:color-mix(in srgb,var(--bg) 40%,transparent)}
.learned{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px;text-align:left;background:var(--bg);border-radius:14px;padding:12px 14px}
.learned li{display:flex;gap:8px}
.learned li::before{content:"✓";color:var(--good);font-weight:700}
.rotate{font-family:var(--display);font-weight:600;font-size:18px;min-height:2.6em;transition:opacity .4s}

/* Site navigation and narrow-screen containment for the /typing/ app. */
.home-link{text-decoration:none;display:inline-flex;align-items:center;min-height:44px}
.home-link:hover{text-decoration:underline;text-underline-offset:4px}
.home-link:focus-visible{outline:3px solid var(--accent);outline-offset:4px;border-radius:4px}
.typing-home{display:inline-flex;align-items:center;min-height:44px;color:var(--accent);font-size:14px;text-underline-offset:4px}
.topline{min-width:0}
@media(max-width:420px){.tips{grid-template-columns:minmax(0,1fr)}.topline{gap:10px;flex-wrap:wrap}.profchip{max-width:100%}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* garden and today's session */
.today{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px}
.garden,.session{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:18px 20px;display:flex;gap:16px;min-width:0}
.session{flex-direction:column;gap:8px;background:#fff7e9;border-color:#c86744}
.today .lbl{font-size:10px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--muted)}
.today b{font-family:var(--display);font-size:22px;font-weight:600;line-height:1.2}
.today small{font-size:12px;color:var(--muted);line-height:1.5}
.g-emoji{font-size:54px;line-height:1;flex:none;align-self:center}
.g-emoji.grew{animation:grow .9s ease-out}
@keyframes grow{0%{transform:scale(.4)}60%{transform:scale(1.25)}100%{transform:scale(1)}}
.g-info{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1}
.gbar{display:block;height:8px;border-radius:999px;background:#e3e7d9;overflow:hidden}
.gbar b{display:block;height:100%;background:var(--good);transition:width .6s}
.badges{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.badge{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#efedde;font-size:17px;filter:grayscale(1);opacity:.4}
.badge.has{filter:none;opacity:1;background:#fbe9dd;box-shadow:inset 0 0 0 1px #e8b9a3}
.dots{display:flex;gap:6px;align-items:center}
.dots .dot{width:14px;height:14px;border-radius:50%;background:#e3e7d9;border:2px solid #e3e7d9}
.dots .dot.done{background:var(--good);border-color:var(--good)}
.dots .dot.now{background:var(--surface);border-color:var(--accent)}
.session .btn{font-size:16px}
.lesson.card2.locked{background:#f1f0e6;color:var(--muted);border-style:dashed}
.lesson.card2.locked .k,.lesson.card2.locked .t{opacity:.55}
.rgarden{background:#edf1e0;border-radius:10px;padding:12px 16px;text-align:left;display:flex;flex-direction:column;gap:8px}
.rg-top{display:flex;gap:14px;align-items:center}
.rg-top>div{display:flex;flex-direction:column;gap:5px;flex:1;min-width:0}
.rg-top .g-emoji{font-size:44px}
.rgarden .seeds{font-family:var(--display);font-size:24px;font-weight:700;color:var(--good);line-height:1}
.rgarden small{font-size:13px;color:var(--muted)}
.rg-badges{font-size:14px;display:flex;flex-direction:column;gap:4px}
.rg-badges .badge{width:26px;height:26px;font-size:14px;vertical-align:middle;margin-right:4px}
#overlay .result{max-height:calc(100vh - 32px);overflow:auto}
@media(max-width:760px){.today{grid-template-columns:minmax(0,1fr)}}
