:root{--font-ui: "Sarabun", "Leelawadee UI", Tahoma, system-ui, sans-serif;--bg: #f2ebdd;--panel: #fffdf7;--ink: #2b2a33;--muted: #7a7362;--line: #d8cdb8;--accent: #c9483f;--accent-2: #2f4a7a;--on-accent-2: #ffffff;--accent-3: #5b8a4a;--ok: #2e7d32;--bad: #b3261e;--fixed: #b35900;--cur-bg: #ffe27a;--hl: #ffe27a;--rule: #e3d9c4;--margin-rule: #e7a8a2;--grain: rgba(120, 100, 70, .08);--key-bg: #fffdf7;--key-shadow: #cbbfa6;--f-lp: #fde2e4;--f-lr: #fff1c9;--f-lm: #d9f2d9;--f-li: #d6ecff;--f-ri: #e6dcff;--f-rm: #d9f2d9;--f-rr: #fff1c9;--f-rp: #fde2e4;--f-th: #eeeeee;color-scheme:light;--hand-face: var(--panel);--hand-line: var(--line)}@media(prefers-color-scheme:dark){:root{--bg: #1c1a17;--panel: #26231f;--ink: #ece6da;--muted: #a79f8f;--line: #3d372f;--hand-face: #d2c7b4;--hand-line: #7c7260;--accent: #d25a50;--accent-2: #8fb0e6;--on-accent-2: #1c1a17;--accent-3: #93c07e;--ok: #6fcf7a;--bad: #ff7a6e;--fixed: #f0a64b;--cur-bg: #5c4b1a;--hl: rgba(255, 210, 80, .3);--rule: #34302a;--margin-rule: #6b3b37;--grain: rgba(255, 240, 210, .04);--key-bg: #2e2a25;--key-shadow: #12100e;--f-lp: #4a2f33;--f-lr: #4a4228;--f-lm: #2c4430;--f-li: #283d52;--f-ri: #3b3252;--f-rm: #2c4430;--f-rr: #4a4228;--f-rp: #4a2f33;--f-th: #33363f;color-scheme:dark}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-ui);line-height:1.6}button,select,input,textarea{font:inherit}.app{max-width:980px;margin:0 auto;padding:16px 20px 40px}.top{margin-bottom:4px}.top-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px}.top-tools{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px 16px}h1{font-size:1.5rem;margin:0}.brand{color:var(--muted);font-weight:400;font-size:1rem}.controls{display:flex;flex-wrap:wrap;gap:8px}.controls select{padding:6px 8px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);max-width:240px}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.seg button{border:0;background:var(--panel);color:var(--ink);padding:6px 12px;cursor:pointer}.seg button.on{background:var(--accent-2);color:var(--on-accent-2)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:16px 0}.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 12px;text-align:center}.stat-v{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.stat-l{color:var(--muted);font-size:.85rem}.typing{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px 22px;font-size:1.6rem;line-height:2.4;white-space:pre-wrap;max-height:calc(2.4em * 3 + 36px);overflow-y:auto;color:var(--muted)}.typing.big{font-size:2.1rem}.c.ok{color:var(--ok)}.c.fixed{color:var(--fixed)}.c.wrong{color:var(--bad);text-decoration:underline wavy}.c.cur{color:var(--ink);background:var(--cur-bg);border-radius:4px;box-shadow:inset 0 -3px 0 var(--accent)}.c.cur.partial{box-shadow:inset 0 -3px 0 var(--ok)}.c.cur.err{background:color-mix(in srgb,var(--bad) 25%,transparent)}.c.sp.cur{display:inline-block;min-width:.5em}.warn{margin-top:10px;padding:8px 12px;border-radius:8px;background:color-mix(in srgb,var(--bad) 15%,transparent);color:var(--bad)}.guide{display:flex;align-items:center;justify-content:center;gap:24px;margin:14px 0;flex-wrap:wrap}.nextkey{display:flex;align-items:center;gap:14px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 16px;min-width:260px}.nk-glyph{font-size:2.6rem;line-height:1;min-width:1.4em;text-align:center}.nk-name{font-weight:700}.nk-shift{color:var(--accent-2)}.nk-wrong{color:var(--bad)}.shake{animation:shake .25s}@keyframes shake{25%{transform:translate(-4px)}75%{transform:translate(4px)}}.hands{width:260px;max-width:100%;height:auto;overflow:visible}.hands .hand-silhouette{stroke:color-mix(in srgb,var(--hand-line) 85%,var(--muted));stroke-width:1.5;stroke-linejoin:round;filter:drop-shadow(0 2px 1px color-mix(in srgb,var(--line) 30%,transparent))}.hands .hand-base-light{stop-color:var(--hand-face)}.hands .hand-base-shade{stop-color:color-mix(in srgb,var(--hand-face) 82%,var(--hand-line))}.hands .hand-active-strong{stop-color:var(--accent-2)}.hands .hand-active-soft{stop-color:color-mix(in srgb,var(--accent-2) 55%,var(--hand-face))}.hands .hand-ground{fill:var(--line);opacity:.22}.hands .hand-highlight{stroke:transparent;stroke-width:1.2}.hands .hand-digit.on .hand-highlight{stroke:var(--accent-2)}.hands .hand-nail{fill:color-mix(in srgb,var(--hand-face) 80%,var(--f-lp));stroke:color-mix(in srgb,var(--hand-line) 60%,transparent);stroke-width:1}.hands .hand-digit.on .hand-nail{fill:color-mix(in srgb,var(--accent-2) 70%,var(--on-accent-2));stroke:color-mix(in srgb,var(--accent-2) 55%,var(--on-accent-2))}.hands .hand-joint,.hands .hand-crease{fill:none;stroke:var(--hand-line);stroke-width:1.2;stroke-linecap:round}.hands .hand-digit.on .hand-joint{stroke:color-mix(in srgb,var(--on-accent-2) 45%,var(--accent-2))}.hands .hand-cuff{fill:color-mix(in srgb,var(--accent-2) 12%,var(--hand-face));stroke:color-mix(in srgb,var(--accent-2) 25%,var(--hand-line));stroke-width:1.3}.hands .hand-cuff-seam{stroke:color-mix(in srgb,var(--accent-2) 25%,var(--hand-line));stroke-width:1;stroke-linecap:round;stroke-dasharray:2 3}.result{text-align:center;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px;margin:14px 0}.result h2{margin:0 0 6px}.result button{margin-top:6px;padding:8px 18px;border-radius:8px;border:0;background:var(--accent);color:#fff;cursor:pointer}.errkey{display:inline-block;margin:0 4px;padding:0 8px;border-radius:6px;background:color-mix(in srgb,var(--bad) 15%,transparent);font-size:1.2rem}.kb{display:flex;flex-direction:column;gap:5px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px;-webkit-user-select:none;user-select:none}.kb-row{display:flex;gap:5px}.key{flex-basis:0;position:relative;height:50px;border-radius:7px;background:var(--key-bg);box-shadow:0 2px 0 var(--key-shadow);display:flex;flex-direction:column;justify-content:space-between;padding:2px 6px;min-width:0}.key.gap{visibility:hidden}.key.f-lp{background:var(--f-lp)}.key.f-lr{background:var(--f-lr)}.key.f-lm{background:var(--f-lm)}.key.f-li{background:var(--f-li)}.key.f-ri{background:var(--f-ri)}.key.f-rm{background:var(--f-rm)}.key.f-rr{background:var(--f-rr)}.key.f-rp{background:var(--f-rp)}.key.f-th{background:var(--f-th)}.key.fn{justify-content:center}.k-shift{font-size:.75rem;color:var(--muted);align-self:flex-start}.k-main{font-size:1.15rem;align-self:flex-end;line-height:1.3}.k-fn{font-size:.8rem;color:var(--muted);text-align:center}.key.bump:after{content:"";position:absolute;bottom:6px;left:50%;width:12px;height:2px;margin-left:-6px;background:var(--muted);border-radius:1px}.key.next{outline:3px solid var(--accent);outline-offset:-1px;animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{50%{outline-color:color-mix(in srgb,var(--accent) 35%,transparent)}}.key.hit{animation:hit .25s}.key.miss{animation:miss .35s}@keyframes hit{0%{transform:translateY(2px);box-shadow:none}}@keyframes miss{0%{background:var(--bad)}}.hint{color:var(--muted);text-align:center;font-size:.85rem}a{color:var(--accent-2)}.logo{position:relative;display:inline-flex;flex-direction:column;padding-top:26px;color:var(--ink);text-decoration:none;line-height:1}.nav{display:flex;gap:2px;margin-top:12px;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav a{flex:none;padding:8px 14px;border-radius:8px 8px 0 0;color:var(--ink);text-decoration:none;white-space:nowrap}.nav a:hover{background:color-mix(in srgb,var(--panel) 70%,transparent)}.nav a.on{background:var(--panel);box-shadow:inset 0 -3px 0 var(--accent);font-weight:600}.nav a.nav-end{margin-left:auto}.page{margin-top:16px}.page h2{margin:0 0 8px}.muted{color:var(--muted)}.badge{display:inline-block;margin-left:8px;padding:0 8px;border-radius:999px;background:var(--accent);color:#fff;font-size:.75rem;vertical-align:middle}.hero{padding:24px 0 8px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.card{display:flex;flex-direction:column;gap:4px;padding:18px;background:var(--panel);border:1px solid var(--line);border-radius:12px;color:var(--ink);text-decoration:none}.card:hover,.lesson-card:hover{border-color:var(--accent)}.card-t{font-size:1.2rem;font-weight:700;color:var(--accent)}.lesson-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.lesson-card{display:flex;flex-direction:column;gap:4px;padding:12px 14px;background:var(--panel);border:1px solid var(--line);border-radius:12px;color:var(--ink);text-decoration:none}.lesson-card.done{border-left:4px solid var(--ok)}.lc-no{color:var(--muted);font-size:.85rem}.lc-title{font-weight:700}.lc-keys{font-size:1.2rem;letter-spacing:.05em}.lc-foot{display:flex;justify-content:space-between;align-items:center}.stars{color:#e3a008;letter-spacing:2px}.stars-off{color:var(--line)}.stars-big{font-size:2rem;margin:4px 0}.lesson-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}.lesson-head h2{margin:0}.back{text-decoration:none}.steps{display:flex;gap:6px;margin-left:auto}.step{padding:2px 10px;border-radius:999px;border:1px solid var(--line);color:var(--muted);font-size:.85rem}.step.on{border-color:var(--accent-2);color:var(--accent-2);font-weight:700}.step.done{background:var(--ok);border-color:var(--ok);color:#fff}.tip{margin:8px 0 0;padding:8px 12px;border-radius:8px;background:var(--panel);border:1px dashed var(--line)}.opts{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.opts h2{margin:0 8px 0 0}.result-main{display:flex;justify-content:center;gap:48px;margin:8px 0}.big{font-size:3rem;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}.actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px}.btn{padding:8px 18px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.stat-v.small{font-size:1.15rem}h3{margin:20px 0 8px}.table-wrap{overflow-x:auto}.history{width:100%;border-collapse:collapse;background:var(--panel);border-radius:10px;overflow:hidden}.history th,.history td{padding:6px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}.history th{color:var(--muted);font-weight:500}.nav-badge{display:inline-block;min-width:1.3em;margin-left:4px;padding:0 5px;border-radius:999px;background:var(--bad);color:#fff;font-size:.75rem;text-align:center}.friends .panel,.panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:12px 0}.panel h3{margin:0 0 8px}.my-handle{display:flex;align-items:center;gap:12px;font-size:1.4rem}.add-friend{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px}.add-friend .field{flex:1;min-width:200px}.ok-note{margin-top:10px;padding:8px 12px;border-radius:8px;background:color-mix(in srgb,var(--ok) 15%,transparent);color:var(--ok)}.friend-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:7px 0;border-bottom:1px solid var(--line)}.friend-block:last-child .friend-row,.friend-row:last-child{border-bottom:0}.friend-name{display:inline-flex;align-items:center;gap:8px;font-weight:500}.row-actions{display:flex;gap:6px}.dot{width:9px;height:9px;border-radius:50%;background:var(--line);flex:none}.dot.on{background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 25%,transparent)}.game-pick{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:4px 0 10px 18px}.invite-toast{margin-top:12px;padding:8px 14px;border-radius:10px;background:color-mix(in srgb,var(--ok) 14%,var(--panel));border:1px solid color-mix(in srgb,var(--ok) 40%,transparent)}.invite-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:4px 0}.invite-row>span{flex:1;min-width:200px;font-weight:500}.invite-friends{max-width:420px;margin:16px auto 0;text-align:left;border-top:1px dashed var(--line);padding-top:12px}.room-code{font-size:3rem;font-weight:800;letter-spacing:.3em;margin:4px 0 8px;padding-left:.3em}.room-players{list-style:none;padding:0;margin:14px auto;max-width:380px;text-align:left}.room-players li{display:flex;justify-content:space-between;gap:12px;padding:6px 10px;border-bottom:1px solid var(--line)}.room-players li.off{opacity:.55}.room-players .ok{color:var(--ok);font-weight:600}.room-name{max-width:280px;margin:8px auto 12px;text-align:left}.countdown{font-size:3.5rem;font-weight:800;text-align:center;margin:48px 0;color:var(--accent)}.opp-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;padding:6px 12px;margin:8px 0;border-radius:10px;background:color-mix(in srgb,var(--accent-2) 10%,var(--panel));border:1px solid var(--line)}.bad-text{color:var(--bad)}.scoreboard{margin:10px auto;border-collapse:collapse}.scoreboard td{padding:5px 14px;text-align:left}.scoreboard tr.me{font-weight:700}.scoreboard tr.winner td:first-child:before{content:"🏆 "}.room-join{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:18px;padding:12px 14px;border-radius:12px;background:var(--panel);border:1px solid var(--line)}.room-join input{font:inherit;width:8ch;text-transform:uppercase;letter-spacing:.2em;padding:6px 8px;border-radius:8px;border:1px solid var(--line);background:var(--bg);color:var(--ink)}.kb-bar{display:flex;justify-content:flex-end;margin-bottom:6px}.kb-bar .seg button{padding:3px 10px;font-size:.85rem}.key .k-shift,.key .k-main,.key .k-fn{position:relative;z-index:1}.key .paw{position:absolute;height:32%;aspect-ratio:1;fill:var(--paw);opacity:var(--paw-opacity);pointer-events:none}.kb.cat{background:#f3efe8;border-color:#e2dcd2}.kb.cat .key{background:#fff;color:#2b2b2b;box-shadow:0 2px #d5cec3}.kb.cat .k-shift,.kb.cat .k-fn{color:#8c857a}.kb.cat .k-main,.kb.cat .k-shift,.kb.cat .k-fn{text-shadow:0 0 2px #fff,0 0 2px #fff}.kb.theme-catty-white{--paw: #a39889;--paw-opacity: .85}.kb.theme-catty-black{--paw: #1c1c1f;--paw-opacity: .8}.kb.cat{position:relative;margin-top:66px;margin-bottom:56px}.kb.cat .cat-mouth{transform:scaleY(0)}.kb.theme-catty-white{--cat-fur: #ffffff;--cat-line: #6f665d;--cat-inner: #f4b3bd;--cat-eye: #3b3632;--cat-shine: #ffffff}.kb.theme-catty-black{--cat-fur: #232326;--cat-line: #55555d;--cat-inner: #d98a9b;--cat-eye: #f2cf46;--cat-shine: #fffbe6}.cat-peek,.cat-tail,.cat-bubble{position:absolute;z-index:3;pointer-events:none}.cat-peek{left:18px;bottom:100%;width:96px;height:auto;margin-bottom:-6px;transform-origin:50% 100%;animation:cat-head 4.2s ease-in-out infinite}.cat-peek .fur{fill:var(--cat-fur);stroke:var(--cat-line);stroke-width:1.6;stroke-linejoin:round}.cat-peek .ear-in,.cat-peek .nose{fill:var(--cat-inner)}.cat-peek .eye{fill:var(--cat-eye)}.cat-peek .pupil{fill:#141414;display:none}.theme-catty-black .cat-peek .pupil{display:inline}.cat-peek .shine{fill:var(--cat-shine)}.cat-peek .line{fill:none;stroke:var(--cat-line);stroke-width:1.4;stroke-linecap:round}.theme-catty-black .cat-peek .whisker{stroke:#8d8d95}.cat-head{transform-box:fill-box;transform-origin:50% 100%;animation:cat-head 4.2s ease-in-out infinite}.cat-ear-l{transform-box:fill-box;transform-origin:70% 100%;animation:cat-ear 4.2s ease-in-out infinite}.cat-eyes{transform-box:fill-box;transform-origin:50% 50%;animation:cat-blink 4.2s infinite}.cat-mouth{fill:#b8475c;stroke:var(--cat-line);stroke-width:1;transform-box:fill-box;transform-origin:50% 0;animation:cat-mouth 4.2s ease-in-out infinite}.cat-bubble{left:112px;bottom:100%;margin-bottom:30px;padding:2px 10px;border-radius:12px;background:#fff;color:#3b3632;border:1.5px solid #6f665d;font-size:.9rem;font-weight:600;white-space:nowrap;opacity:0;animation:cat-bubble 4.2s ease-in-out infinite}.cat-bubble:after{content:"";position:absolute;left:-7px;bottom:4px;border:5px solid transparent;border-right:7px solid #6f665d;border-left:0}.cat-tail{left:14px;top:100%;width:44px;margin-top:-4px;overflow:visible;transform-origin:72% 3%;animation:cat-tail 1.5s ease-in-out infinite alternate}.cat-tail .tail-outline{fill:none;stroke:var(--cat-line);stroke-width:11;stroke-linecap:round}.cat-tail .tail-fur{fill:none;stroke:var(--cat-fur);stroke-width:7.5;stroke-linecap:round}@keyframes cat-head{0%,58%,88%,to{transform:rotate(0)}66%{transform:translateY(-3px) rotate(-7deg)}78%{transform:translateY(-3px) rotate(-4deg)}}@keyframes cat-mouth{0%,60%,84%,to{transform:scaleY(0)}65%,79%{transform:scaleY(1)}}@keyframes cat-bubble{0%,60%,86%,to{opacity:0;transform:translateY(4px) scale(.9)}65%,81%{opacity:1;transform:none}}@keyframes cat-blink{0%,24%,30%,92%,98%,to{transform:scaleY(1)}27%,95%{transform:scaleY(.1)}}@keyframes cat-ear{0%,38%,46%,to{transform:rotate(0)}42%{transform:rotate(-14deg)}}@keyframes cat-tail{0%{transform:rotate(-14deg)}to{transform:rotate(20deg)}}@media(prefers-reduced-motion:reduce){.cat-head,.cat-ear-l,.cat-peek{animation:none}.cat-tail{animation:cat-tail-soft 3s ease-in-out infinite alternate}}@keyframes cat-tail-soft{0%{transform:rotate(-6deg)}to{transform:rotate(8deg)}}.kb.cat .key[class*=f-]:before{content:"";position:absolute;left:8px;right:8px;bottom:2px;height:3px;border-radius:2px;background:var(--stripe)}.kb.cat .key.f-lp,.kb.cat .key.f-rp{--stripe: #f4a3ad}.kb.cat .key.f-lr,.kb.cat .key.f-rr{--stripe: #f2cf6b}.kb.cat .key.f-lm,.kb.cat .key.f-rm{--stripe: #8fd19e}.kb.cat .key.f-li{--stripe: #8cc4f2}.kb.cat .key.f-ri{--stripe: #b9a4f0}.kb.cat .key.f-th{--stripe: #c8c8c8}.game-card{gap:6px;min-height:188px;position:relative;overflow:hidden;isolation:isolate}.game-card:after{content:"";position:absolute;top:34px;right:0;bottom:0;left:0;z-index:-2;background:repeating-linear-gradient(to bottom,transparent 0 25px,var(--rule) 25px 26px);opacity:.75;pointer-events:none}.game-mark{position:absolute;right:-6px;bottom:-10px;z-index:-1;font-size:6.6rem;line-height:1;opacity:.16;transform:rotate(-12deg);transform-origin:bottom right;filter:saturate(.8);pointer-events:none;-webkit-user-select:none;user-select:none;transition:transform .35s ease,opacity .35s ease}@media(prefers-color-scheme:dark){.game-mark{opacity:.22;filter:saturate(.9)}}.game-card:hover .game-mark,.game-card:focus-visible .game-mark{transform:rotate(-5deg) scale(1.1);opacity:.26}.game-card .card-t,.game-card .muted,.game-card .game-best{position:relative}.game-card .muted{line-height:1.5}@media(prefers-reduced-motion:reduce){.game-mark{transition:none}.game-card:hover .game-mark,.game-card:focus-visible .game-mark{transform:rotate(-12deg)}}.game-best{margin-top:auto;font-weight:600}.game-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}.game-head h2{margin:0}.defense-castle-icon{display:inline-block;width:1.4em;height:1.5em;vertical-align:-.38em;overflow:visible}.game-ready .defense-castle-icon{width:2.3em;height:2.45em}.game-mark .defense-castle-icon{width:1.1em;height:1.2em}.defense-energy-halo{opacity:0;transition:opacity .25s ease}.defense-energy-ring,.defense-castle-sheen,.defense-castle-spark{opacity:0}.defense-core-glow{opacity:.2;transition:opacity .25s ease}.game-ready .defense-castle-sheen{animation:defense-castle-polish 5s ease-in-out infinite}.game-ready .defense-castle-spark,.game-ready .game-icon:hover .defense-energy-halo{opacity:.6}.game-ready .game-icon:hover .defense-core-glow{opacity:.8}.game-ready .game-icon:hover .defense-energy-ring{transform-origin:90px 94px;animation:defense-castle-pulse 1.6s ease-out infinite}@keyframes defense-castle-polish{0%,10%{transform:translate(-90px);opacity:0}16%{opacity:.25}42%,to{transform:translate(190px);opacity:0}}@keyframes defense-castle-pulse{0%{transform:scale(.88);opacity:.6}to{transform:scale(1.12);opacity:0}}@media(prefers-reduced-motion:reduce){.game-ready .defense-castle-body,.game-ready .defense-castle-sheen,.game-ready .game-icon:hover .defense-energy-ring{animation:none}.game-ready .game-icon:hover .defense-energy-ring{opacity:.5}.defense-energy-halo,.defense-core-glow{transition:none}}.race-car-icon{display:inline-block;width:1.8em;height:1.45em;vertical-align:-.35em;overflow:visible}.game-ready .race-car-icon{width:2.8em;height:2.25em}.game-mark .race-car-icon{width:1.5em;height:1.25em}.race-speed-lines{opacity:0}.race-headlights{opacity:.2}.race-car-sheen{opacity:0}.race-car-body{transform-origin:50% 75%}.game-ready .race-car-body{animation:race-engine-idle 3s ease-in-out infinite}.game-ready .race-speed-lines{opacity:.5;animation:race-speed-drift 1.8s ease-out infinite}.game-ready .race-headlights{opacity:.55}.game-ready .race-car-sheen{animation:race-car-polish 4.8s ease-in-out infinite}.game-ready .game-icon:hover .race-car-body{animation:race-engine-rev .18s ease-in-out infinite alternate}.game-ready .game-icon:hover .race-headlights{opacity:.85}@keyframes race-engine-idle{0%,to{transform:translateY(0) rotate(-.3deg)}50%{transform:translateY(-1.5px) rotate(.3deg)}}@keyframes race-engine-rev{0%{transform:translate(-.5px) rotate(-.35deg)}to{transform:translate(.5px,-.7px) rotate(.35deg)}}@keyframes race-speed-drift{0%{transform:translate(6px);opacity:.55}to{transform:translate(-9px);opacity:0}}@keyframes race-car-polish{0%,10%{transform:translate(-70px);opacity:0}15%{opacity:.3}42%{transform:translate(230px);opacity:0}to{transform:translate(230px);opacity:0}}@media(prefers-reduced-motion:reduce){.game-ready .race-car-body,.game-ready .game-icon:hover .race-car-body,.game-ready .race-speed-lines,.game-ready .race-car-sheen{animation:none}.game-ready .race-speed-lines{opacity:.25}}.rain-cloud-icon{display:inline-block;width:1.45em;height:1.35em;vertical-align:-.32em;overflow:visible}.game-ready .rain-cloud-icon{width:1.8em;height:1.65em}.game-mark .rain-cloud-icon{width:1.2em;height:1.1em}.rain-cloud-drop{animation:rain-cloud-drizzle 1.8s ease-in-out infinite}.rain-cloud-drop-1{animation-delay:-.6s}.rain-cloud-drop-2{animation-delay:-1.2s}.game-head .rain-cloud-drop,.game-mark .rain-cloud-drop{animation:none}@keyframes rain-cloud-drizzle{0%,to{transform:translateY(0);opacity:.65}50%{transform:translateY(7px);opacity:1}}@media(prefers-reduced-motion:reduce){.rain-cloud-drop{animation:none}}.game-opts{margin:10px 0}.game-opts select{font:inherit;padding:5px 8px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);max-width:300px}.game-ready .game-icon{font-size:3.4rem}.hud{display:flex;flex-wrap:wrap;align-items:center;gap:8px 22px;margin:8px 0;font-size:1.05rem}.hud b{font-variant-numeric:tabular-nums}.combo.hot b{color:var(--fixed)}.arena{position:relative;height:var(--arena-h, 440px);overflow:hidden;border-radius:14px;border:1px solid var(--line);background:linear-gradient(180deg,color-mix(in srgb,var(--accent-2) 12%,var(--panel)),var(--panel));-webkit-user-select:none;user-select:none;margin-bottom:12px}.arena.sky{background:linear-gradient(180deg,color-mix(in srgb,#4aa8ff 28%,var(--panel)),var(--panel))}.arena.defense{background:radial-gradient(circle at 50% 95%,color-mix(in srgb,var(--ok) 20%,var(--panel)),var(--panel) 65%)}.game-recovery-help{margin:8px 0 12px;padding:10px 12px;border:1px solid var(--accent-2);border-radius:12px;background:var(--panel)}.recovery-title{color:var(--accent-2);font-weight:600;margin-bottom:4px}.recovery-guide{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 18px;margin-bottom:8px}.game-recovery-help .nextkey{min-width:0;padding:6px 10px;border:0;flex:1 1 150px}.game-recovery-help .nk-glyph{font-size:2.1rem}.game-recovery-help .hands{width:174px;flex:0 1 174px}.game-recovery-help .kb-wrap{margin:0}@media(max-width:480px){.game-recovery-help{padding:8px}.game-recovery-help .hands{width:130px;flex-basis:130px}.game-recovery-help .nextkey{flex-basis:130px;padding:4px;gap:6px}.recovery-guide{gap:4px}}.entity{position:absolute;transform:translate(-50%,-50%);white-space:pre;pointer-events:none}.rain .entity{transform:translateY(-50%)}.word{display:inline-block;padding:2px 10px;border-radius:10px;background:var(--panel);border:1px solid var(--line);font-size:1.5rem;line-height:1.7;box-shadow:0 2px 6px #0000001f}.word.locked{border-color:var(--accent-2);box-shadow:0 0 0 2px var(--accent-2)}.w-done{color:var(--ok)}.w-cur{color:var(--ok);text-decoration:underline}.ground{position:absolute;left:0;right:0;bottom:0;height:6px;background:var(--bad);opacity:.5}.fx-pop{font-size:1.6rem;color:var(--ok);animation:fx-pop .6s ease-out forwards}.rain .fx-pop{animation-name:fx-pop-left}@keyframes fx-pop{to{opacity:0;transform:translate(-50%,-130%) scale(1.3)}}@keyframes fx-pop-left{to{opacity:0;transform:translateY(-130%) scale(1.3)}}.balloon{width:62px;height:74px;border-radius:50% 50% 46% 46%;background:radial-gradient(circle at 35% 30%,hsl(var(--hue) 90% 82%),hsl(var(--hue) 75% 52%));display:flex;align-items:center;justify-content:center;font-size:1.8rem;color:#fff;text-shadow:0 1px 3px rgb(0 0 0 / .5)}.balloon:after{content:"";position:absolute;top:100%;left:50%;width:1px;height:28px;background:color-mix(in srgb,var(--ink) 40%,transparent)}.enemy{display:flex;flex-direction:column;align-items:center;gap:2px}.enemy-icon{font-size:1.8rem;line-height:1}.enemy.boss .enemy-icon{font-size:3rem}.enemy .word{font-size:1.2rem}.base{font-size:2.6rem}.arena.defense .base{width:clamp(104px,18vw,144px);line-height:0;transform:translate(-50%,-88%);z-index:1}.defense-castle-base{display:block;width:100%;height:auto;overflow:visible}.arena.defense .enemy{z-index:4}.arena.defense .enemy:not(.castle-attacker){transform:translate(-50%,-25px)}.arena.defense .enemy.boss:not(.castle-attacker){transform:translate(-50%,-38px)}.defense-barrier{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:2;overflow:visible}.defense-barrier ellipse{fill:#6acbdc0c;stroke:#62c6d7;stroke-width:2}.defense-barrier.is-danger ellipse{fill:#e99a3714;stroke:#d77b24;stroke-width:2.5;animation:defense-shield-warning 1.8s ease-in-out infinite}.defense-barrier.is-hit ellipse{stroke:#f1b85d;stroke-width:4}.defense-danger-label{position:absolute;z-index:7;top:10px;left:50%;transform:translate(-50%);max-width:calc(100% - 24px);padding:5px 12px;border:1px solid var(--fixed);background:var(--panel);color:var(--fixed);border-radius:20px;text-align:center;font-size:.85rem;pointer-events:none}.defense-danger-label:empty{display:none}.defense-danger-label:not(:empty):before{content:"⚠ "}.arena.defense .is-near-barrier .word{position:relative;isolation:isolate;color:#fff1e8;background:transparent;border-color:transparent;border-radius:0;box-shadow:none;--threat-shape: polygon(0% 13%, 9% 17%, 6% 0%, 19% 9%, 27% 0%, 35% 9%, 43% 0%, 51% 9%, 59% 0%, 67% 9%, 75% 0%, 83% 9%, 94% 0%, 91% 19%, 100% 13%, 95% 33%, 100% 46%, 95% 59%, 100% 78%, 91% 82%, 96% 100%, 82% 91%, 74% 100%, 66% 91%, 58% 100%, 50% 91%, 42% 100%, 34% 91%, 26% 100%, 18% 91%, 5% 100%, 9% 82%, 0% 88%, 5% 67%, 0% 53%, 5% 39%);filter:drop-shadow(0 0 5px #e7354b66);animation:defense-threat-glow 1.6s ease-in-out infinite}.arena.defense .is-near-barrier{gap:8px}.arena.defense .is-near-barrier .word:before,.arena.defense .is-near-barrier .word:after{content:"";position:absolute;z-index:-1;clip-path:var(--threat-shape);pointer-events:none}.arena.defense .is-near-barrier .word:before{top:-7px;right:-7px;bottom:-7px;left:-7px;background:linear-gradient(145deg,#ffb0a3,#df435b 55%,#8e1a37)}.arena.defense .is-near-barrier .word:after{top:-4px;right:-4px;bottom:-4px;left:-4px;background:linear-gradient(145deg,#451c29,#26141c)}.arena.defense .is-near-barrier .word.locked{outline:none}.arena.defense .is-near-barrier .word.locked:before{background:linear-gradient(145deg,#b9f6ff,#67c7de 55%,#24859f)}.arena.defense .is-near-barrier .w-done{color:#a0e6b0}.arena.defense .is-near-barrier .w-cur{color:#ffe19b}@keyframes defense-threat-glow{0%,to{filter:drop-shadow(0 0 4px #e7354b55)}50%{filter:drop-shadow(0 0 8px #e7354b99)}}@media(prefers-reduced-motion:reduce){.arena.defense .is-near-barrier .word{animation:none}}.barrier-strike{z-index:5;pointer-events:none}.barrier-strike .defense-attack-swipe{left:0;top:-29px}.barrier-strike.boss .defense-attack-swipe{top:-37px}.barrier-strike:after{content:"";position:absolute;width:36px;height:36px;left:-18px;top:-18px;border:2px solid #ffd893;border-radius:50%;animation:defense-barrier-impact 1s linear both paused;animation-delay:var(--attack-age)}@keyframes defense-shield-warning{0%,to{stroke-opacity:.65}50%{stroke-opacity:1}}@keyframes defense-barrier-impact{0%,48%{opacity:0;transform:scale(.5)}55%{opacity:1;transform:scale(.65)}to{opacity:0;transform:scale(1.8)}}@media(prefers-reduced-motion:reduce){.defense-barrier.is-danger ellipse{animation:none}}.track{--racer-width: 72px;position:relative;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:6px 30px 6px 12px;margin-bottom:12px}.lane{position:relative;height:66px;border-bottom:1px dashed var(--line)}.lane:last-of-type{border-bottom:0}.lane-label{position:absolute;left:0;top:0;font-size:.8rem;color:var(--muted)}.car{position:absolute;top:17px;width:var(--racer-width);height:48px;line-height:0;transition:left .12s linear}.car.ghost{opacity:1}.race-route{position:absolute;inset:0 calc(var(--racer-width) - 8px) 0 0}.track-racer{display:block;width:100%;height:100%;overflow:visible}.track-racer-car{filter:drop-shadow(0 2px 1px #24364926)}.track-racer-opponent{filter:hue-rotate(175deg)}.track-racer-trail{opacity:0}.track.racing .track-racer-trail{animation:track-racer-speed 1.2s ease-out infinite}.track.racing .track-racer-car{animation:track-racer-engine .35s ease-in-out infinite alternate}.track.racing .track-racer-ghost{animation:track-ghost-float 1.6s ease-in-out infinite alternate}@keyframes track-racer-speed{0%{transform:translate(3px);opacity:.5}to{transform:translate(-5px);opacity:0}}@keyframes track-racer-engine{0%{transform:translateY(0)}to{transform:translateY(-.6px)}}@keyframes track-ghost-float{0%{transform:translateY(0) rotate(-1deg)}to{transform:translateY(-3px) rotate(1deg)}}@media(prefers-reduced-motion:reduce){.track.racing .track-racer-trail,.track.racing .track-racer-car,.track.racing .track-racer-ghost{animation:none}.track.racing .track-racer-trail{opacity:.2}.car{transition:none}}.finish{position:absolute;right:14px;top:6px;bottom:6px;width:8px;background:repeating-linear-gradient(0deg,var(--ink) 0 8px,var(--panel) 8px 16px)}@media(max-width:720px){.key .paw{height:26%}.key .paw.tr,.key .paw.bl{display:none}.arena{height:var(--arena-h, 340px)}.word{font-size:1.2rem}}.seg-wrap{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.seg-label{color:var(--muted);font-size:.85rem}.lang{display:inline-flex;align-items:center;gap:4px}.lang select{font:inherit;padding:5px 6px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer}.navlink{padding:6px 12px;border-radius:8px;color:var(--ink);text-decoration:none}.navlink.on{background:var(--panel);box-shadow:inset 0 -3px 0 var(--accent)}.user{display:flex;align-items:center;gap:10px;font-weight:500;white-space:nowrap}.user-name{max-width:18ch;overflow:hidden;text-overflow:ellipsis}.login-btn{text-decoration:none;white-space:nowrap}button.link{border:0;background:none;padding:0;color:var(--accent-2);cursor:pointer;text-decoration:underline}.auth{max-width:420px}.forgot-link{align-self:flex-end;margin-top:-6px;font-size:.9em;color:var(--accent-2)}.form{display:flex;flex-direction:column;gap:12px;margin:16px 0}.field{display:flex;flex-direction:column;gap:4px}.field input{font:inherit;padding:8px 10px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink)}.field input:focus{outline:2px solid var(--accent-2);outline-offset:-1px}.btn:disabled{opacity:.6;cursor:default}.banner{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:12px;padding:10px 14px;border-radius:10px;background:color-mix(in srgb,var(--accent-2) 12%,var(--panel));border:1px solid color-mix(in srgb,var(--accent-2) 35%,transparent)}.banner-msg{font-weight:500}.save-note{color:var(--ok);font-size:.9rem}.save-note.bad{color:var(--bad)}.small-note{font-size:.85rem;font-weight:400}@media(max-width:720px){.steps{margin-left:0}.stats{grid-template-columns:repeat(2,1fr)}.key{height:40px;padding:1px 3px}.k-shift{display:none}.typing.big{font-size:1.5rem}}.mono{font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:.9em}.history tr.clickable{cursor:pointer}.history tr.clickable:hover td{background:color-mix(in srgb,var(--accent-2) 12%,transparent)}.live-dot:before{content:"";display:inline-block;width:7px;height:7px;margin-inline-end:5px;border-radius:50%;background:var(--good, #3aa76d)}.trend{margin:12px 0}.trend svg{width:100%;height:90px;display:block}.trend rect{fill:var(--accent-2)}.trend-axis{display:flex;justify-content:space-between;font-size:.75rem;color:var(--muted)}.tabs{display:flex;flex-wrap:wrap;gap:4px;margin:16px 0 8px;border-bottom:1px solid var(--line)}.tab{font:inherit;cursor:pointer;padding:6px 12px;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;background:none;color:var(--muted)}.tab.on{background:var(--panel);border-color:var(--line);color:var(--ink);font-weight:600}.filters{align-items:flex-end}.filters .field input,.filters .field select{min-width:8rem}.range-inputs,.check{display:inline-flex;align-items:center;gap:6px}.pager{display:flex;align-items:center;gap:10px;margin:10px 0}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;padding:16px;z-index:50}.modal{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:16px;max-width:min(880px,96vw);max-height:88vh;overflow:auto}.kv{display:grid;grid-template-columns:max-content 1fr;gap:4px 14px;margin:0 0 12px}.kv dt{color:var(--muted)}.kv dd{margin:0}@media(max-width:720px){.admin .stats{grid-template-columns:repeat(2,1fr)}.kv{grid-template-columns:1fr}}.tips{margin:14px 0;text-align:left}.tips h3{margin:0 0 2px}.tip-list{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px}.tip{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel)}.tip-title{font-weight:600}.tip .btn{white-space:nowrap;text-decoration:none}.tip-key{margin-inline-start:8px;padding:0 6px;border:1px solid var(--line);border-radius:4px;font-size:.8em;font-family:inherit}@media(max-width:720px){.tip{flex-direction:column;align-items:stretch}}.arena.rain{background:radial-gradient(ellipse at 12% 12%,color-mix(in srgb,#fff 65%,transparent),transparent 42%),linear-gradient(180deg,color-mix(in srgb,#b7e3e6 35%,var(--panel)),var(--panel) 75%)}.rain .entity{z-index:4}.rain .ground{z-index:3;height:5px;background:#8db7a8;opacity:.65}.rain-scene{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.rain-water{position:absolute;left:0;right:0;bottom:0;height:var(--water);z-index:2;opacity:0;background:linear-gradient(180deg,#69ccdd99,#339fcea8 65%,#247faebf);box-shadow:inset 0 14px 28px #b4f4ef26;transition:height 1.1s ease-out,opacity .5s ease}.rain-scene.wet .rain-water{opacity:1}.rain-swell{position:absolute;left:0;top:-16px;width:200%;height:28px;overflow:visible;animation:rain-swell-drift 7s linear infinite}.rain-swell-back{top:-22px;fill:#a0e6eab0;animation-duration:10s;animation-direction:reverse}.rain-swell-front{fill:#69ccddcc}.rain-foam{fill:none;stroke:#e0fffc;stroke-width:2;opacity:.8}.rain-water-glints{position:absolute;top:10px;right:0;bottom:0;left:0;background:radial-gradient(ellipse 22px 2px at 15% 25%,#e0fffc80 90%,transparent),radial-gradient(ellipse 15px 1.5px at 68% 40%,#e0fffc80 90%,transparent),radial-gradient(ellipse 28px 2px at 42% 70%,#e0fffc60 90%,transparent),radial-gradient(ellipse 13px 1.5px at 88% 80%,#e0fffc70 90%,transparent);background-size:260px 75px;animation:rain-glint-drift 9s ease-in-out infinite alternate}.rain-bubbles{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.rain-bubbles i{position:absolute;bottom:-12px;width:var(--bubble-size);height:var(--bubble-size);border:1px solid #e5fffc99;border-radius:50%;background:#d5fffd1f;animation:rain-bubble-rise 8s ease-in infinite;animation-delay:var(--bubble-delay)}.rain-cat{position:absolute;top:0;bottom:0;width:112px;left:0;will-change:transform}.rain-cat-dir{position:absolute;left:0;right:0;bottom:5px;height:100px;z-index:1;transition:bottom 1.1s ease-out}.rain-cat-sprite{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;object-position:center bottom;filter:drop-shadow(0 3px 2px #254d6220);-webkit-user-select:none;user-select:none}.rain-cat-walk-sprite{position:absolute;left:0;right:0;bottom:0;aspect-ratio:4 / 3;background-image:var(--cat-sheet);background-size:200% 200%;background-repeat:no-repeat;background-position:0 0;filter:drop-shadow(0 3px 2px #254d6220)}.rain-cat .cat-float{display:none}.rain-ripple{position:absolute;left:1px;right:1px;bottom:calc(var(--water) - 5px);height:10px;z-index:3;border:1.5px solid #e0fffcbd;border-radius:50%;opacity:0;transition:bottom 1.1s ease-out}.rain-scene.wet .rain-ripple{animation:rain-ripple 1.8s ease-out infinite}.rain-scene.flooded .rain-cat{z-index:3}.rain-scene.flooded .rain-cat-dir{bottom:calc(var(--water) - 16px);z-index:3}.rain-scene.flooded .cat-walk{display:none}.rain-scene.flooded .cat-float{display:block;animation:rain-cat-bob 2s ease-in-out infinite alternate}.rain.flooded .entity{opacity:.35;transition:opacity .6s}@keyframes rain-cat-bob{0%{transform:translateY(-2px) rotate(-3deg)}to{transform:translateY(3px) rotate(3deg)}}@keyframes rain-ripple{0%{opacity:.8;transform:scale(.7)}to{opacity:0;transform:scale(1.3)}}@keyframes rain-swell-drift{to{transform:translate(-50%)}}@keyframes rain-glint-drift{to{background-position:35px 6px}}@keyframes rain-bubble-rise{0%{opacity:0;transform:translateY(0)}20%{opacity:.7}to{opacity:0;transform:translate(10px,-100px)}}@media(prefers-reduced-motion:reduce){.rain-scene.flooded .cat-float,.rain-scene.wet .rain-ripple,.rain-swell,.rain-water-glints,.rain-bubbles i{animation:none}.rain-cat-dir,.rain-water,.rain-ripple{transition:none}}.defense-enemy-art{display:block;width:50px;height:50px;overflow:visible;filter:drop-shadow(0 2px 1px #34304720)}.defense-skin-triangle{transform-origin:0 0;transform-box:view-box;animation:defense-skin 1.9s linear infinite}.defense-boss-art .defense-skin-triangle{animation-duration:3.2s}.defense-eyelids{transform-box:view-box;animation:defense-blink 4.7s linear infinite}.defense-imp-lid-reveal{transform-box:view-box;transform-origin:67px 34px;animation:defense-imp-blink 4.7s ease-in-out infinite}.defense-imp-lid-crease{animation:defense-imp-crease 4.7s linear infinite}.defense-boss-art .defense-eyelids{animation-duration:5.9s;animation-delay:-1.7s}.enemy:nth-child(3n) .defense-skin-triangle{animation-delay:-.4s}.enemy:nth-child(3n) .defense-eyelids{animation-delay:-2.1s}.enemy:nth-child(3n) .defense-imp-lid-reveal,.enemy:nth-child(3n) .defense-imp-lid-crease{animation-delay:-2.1s}@keyframes defense-imp-blink{0%,94%,to{transform:scaleY(0)}96%,97%{transform:scaleY(1)}}@keyframes defense-imp-crease{0%,95%,99%,to{opacity:0}96%,97%{opacity:1}}@keyframes defense-skin{0%,to{transform:var(--pose-0)}12.5%{transform:var(--pose-1)}25%{transform:var(--pose-2)}37.5%{transform:var(--pose-3)}50%{transform:var(--pose-4)}62.5%{transform:var(--pose-5)}75%{transform:var(--pose-6)}87.5%{transform:var(--pose-7)}}@keyframes defense-blink{0%,92%,to{transform:scaleY(0)}94%,96%{transform:scaleY(1)}}.defense-enemy-art.is-attacking .defense-skin-triangle{animation:defense-skin 1s linear both paused;animation-delay:var(--attack-age)}.defense-enemy-art.is-attacking .defense-eyelids,.defense-enemy-art.is-attacking .defense-imp-lid-reveal{animation:none;transform:scaleY(0)}.defense-enemy-art.is-attacking .defense-imp-lid-crease{animation:none;opacity:0}.castle-attacker{pointer-events:none}.attack-pose{animation:defense-attack-lunge 1s linear both paused;animation-delay:var(--attack-age)}.defense-attack-swipe{position:absolute;width:64px;height:58px;left:50%;top:45%;margin-left:-32px;overflow:visible;fill:none;stroke:#ffdf9b;stroke-width:3;stroke-linecap:round;filter:drop-shadow(0 0 3px #d56b3b);animation:defense-attack-contact 1s linear both paused;animation-delay:var(--attack-age)}.boss .defense-attack-swipe{width:80px;height:74px;margin-left:-40px;stroke:#e0bdff}@keyframes defense-attack-lunge{0%,to{transform:translate(0) rotate(0);opacity:1}30%{transform:translate(calc(var(--attack-dx) * -.35),calc(var(--attack-dy) * -.35)) rotate(-7deg)}55%{transform:translate(var(--attack-dx),var(--attack-dy)) rotate(6deg)}80%{transform:translate(0) rotate(0);opacity:1}99%,to{opacity:0}}@keyframes defense-attack-contact{0%,45%,90%,to{opacity:0;transform:scale(.6)}55%{opacity:1;transform:scale(1)}78%{opacity:0;transform:scale(1.25)}}@media(prefers-reduced-motion:reduce){.defense-skin-triangle{animation-duration:3.8s}.defense-boss-art .defense-skin-triangle{animation-duration:4.8s}.defense-enemy-art.is-attacking .defense-skin-triangle{animation-duration:1s}.attack-pose{animation-name:defense-attack-lunge-soft}}@keyframes defense-attack-lunge-soft{0%,to{transform:translateY(0);opacity:1}55%{transform:translateY(2px)}80%{opacity:1}99%,to{opacity:0}}.defense-boss-art{width:76px;height:76px}.arena.defense .enemy-icon{animation:defense-enemy-hover 2.2s ease-in-out infinite alternate}.arena.defense .boss .enemy-icon{animation-duration:3s}.arena.defense .enemy .word{max-width:min(260px,calc(100vw - 64px));white-space:pre-wrap;overflow-wrap:anywhere}.spell-bolt{z-index:5}.spell-projectile{display:block;width:46px;height:24px;overflow:visible;filter:drop-shadow(0 0 3px #ffd88c80)}.spell-tail{transform-origin:42px 14px;animation:defense-spell-tail .25s ease-in-out infinite alternate}.spell-trail{width:10px;height:10px;border-radius:50%;z-index:2;background:radial-gradient(circle,#fff4b3bd,#caabea60 55%,transparent 75%)}.spell-impact .boom-flash{background:radial-gradient(circle,#fffde6 0%,#ffd58aa6 30%,#78d8ed80 58%,transparent 74%)}.spell-impact .boom-ring{border-color:#94d5e6}.spell-impact .boom-spark{background:#ffedb3;box-shadow:0 0 6px #be9bdf}.base.is-hit .defense-castle-body{animation:defense-castle-hit .35s ease-out}.hp.is-hit{color:var(--bad);border-radius:5px;box-shadow:0 0 0 4px color-mix(in srgb,var(--bad) 12%,transparent)}.castle-impact{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.castle-impact-ring{position:absolute;top:12%;right:4%;bottom:0;left:4%;border:3px solid #e5a26a;border-radius:50%;animation:defense-castle-impact .7s ease-out forwards}.castle-hit-number{position:absolute;left:50%;top:0;color:var(--bad);background:var(--panel);border:1px solid color-mix(in srgb,var(--bad) 30%,var(--line));padding:7px 9px;border-radius:12px;font:700 1rem/1 var(--font-ui);animation:defense-damage-number 1.1s ease-out forwards}@keyframes defense-enemy-hover{0%{transform:translateY(1px) rotate(-2deg)}to{transform:translateY(-5px) rotate(2deg)}}@keyframes defense-enemy-hover-soft{0%{transform:translateY(0)}to{transform:translateY(-2px)}}@keyframes defense-spell-tail{0%{transform:scaleX(.85)}to{transform:scaleX(1.05)}}@keyframes defense-castle-hit{0%,to{transform:translate(0)}20%,60%{transform:translate(-3px)}40%,80%{transform:translate(3px)}}@keyframes defense-castle-impact{0%{opacity:.7;transform:scale(.8)}to{opacity:0;transform:scale(1.25)}}@keyframes defense-damage-number{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-24px)}}@media(prefers-reduced-motion:reduce){.spell-tail,.base.is-hit .defense-castle-body,.castle-impact-ring,.castle-hit-number{animation:none}.arena.defense .enemy-icon{animation:defense-enemy-hover-soft 2.4s ease-in-out infinite alternate}.arena.defense .boss .enemy-icon{animation-duration:3.2s}.castle-impact-ring{opacity:.45}.castle-hit-number{transform:translate(-50%)}.enemy.doomed{animation:none}}.enemy.doomed{animation:doomed-shake .12s linear infinite alternate}@keyframes doomed-shake{0%{margin-left:-2px}to{margin-left:2px}}.boom{width:0;height:0;z-index:4;--boom: 70px}.boom.big{--boom: 130px}.boom>span{position:absolute;left:0;top:0;border-radius:50%}.boom-flash{width:var(--boom);height:var(--boom);margin:calc(var(--boom) / -2);background:radial-gradient(circle,#fff7c2 0%,#ffb020 35%,#ff5a1f 60%,transparent 72%);animation:boom-flash .5s ease-out forwards}.boom-ring{width:var(--boom);height:var(--boom);margin:calc(var(--boom) / -2);border:3px solid #ffb020;animation:boom-ring .5s ease-out forwards}.boom-spark{width:6px;height:6px;margin:-3px;background:#ffd34d;box-shadow:0 0 6px #ff9a1a;animation:boom-spark .5s ease-out forwards}@keyframes boom-flash{0%{transform:scale(.2);opacity:1}to{transform:scale(1.1);opacity:0}}@keyframes boom-ring{0%{transform:scale(.3);opacity:.9}to{transform:scale(1.6);opacity:0}}@keyframes boom-spark{0%{transform:rotate(var(--a)) translate(4px) scale(1);opacity:1}to{transform:rotate(var(--a)) translate(calc(var(--boom) * .75)) scale(.3);opacity:0}}@media(prefers-reduced-motion:reduce){.enemy.doomed{animation:none}}.site-foot{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 16px;margin-top:40px;padding-top:14px;border-top:1px solid var(--line);color:var(--muted);font-size:.8rem}.foot-links{display:flex;flex-wrap:wrap;gap:4px 16px}.foot-links a{color:var(--muted)}.foot-links a:hover{color:var(--accent-2)}.prose{max-width:720px;line-height:1.7}.prose .lead{font-size:1.08rem}.feature-list{list-style:none;padding:0;margin:8px 0;display:grid;gap:8px}.feature-list li{display:flex;gap:12px;align-items:baseline;padding:10px 14px;background:var(--panel);border:1px solid var(--line);border-radius:10px}.feature-icon{flex:none;font-size:1.2rem}.prose a.btn{display:inline-block;text-decoration:none}.field select,.field textarea{font:inherit;padding:8px 10px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink)}.field textarea{resize:vertical;min-height:140px}.field select:focus,.field textarea:focus{outline:2px solid var(--accent-2);outline-offset:-1px}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.contact-form .btn.primary{align-self:flex-start}.trap{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.msg-list{list-style:none;padding:0;margin:8px 0;display:grid;gap:10px}.msg{padding:12px 14px;background:var(--panel);border:1px solid var(--line);border-radius:10px}.msg-new{border-left:4px solid var(--accent-2)}.msg-done{opacity:.7}.msg-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}.msg-time{margin-left:auto}.msg-body{white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0}.msg-meta{display:flex;flex-wrap:wrap;gap:4px 14px}.msg-actions{margin-top:8px;justify-content:flex-start}.msg-actions .btn{padding:5px 12px;text-decoration:none}@media(max-width:720px){.field-row{grid-template-columns:1fr}}.logo{--logo-fur: #ffffff;--logo-line: #6f665d;--logo-inner: #f4b3bd;--logo-eye: #3b3632;--logo-blush: #f2a0ab;--logo-cat-x: -58%;--logo-cat-y: 5px}.logo-word{display:inline-flex;align-items:flex-end;gap:3px;font-family:"Chakra Petch",var(--font-ui);white-space:nowrap}.logo-sanook{position:relative;display:inline-flex;gap:3px;margin-left:5px}.logo-key{display:inline-flex;align-items:center;justify-content:center;width:20px;height:24px;border-radius:6px;background:linear-gradient(180deg,color-mix(in srgb,var(--key-bg) 90%,#fff),var(--key-bg));color:var(--ink);border:1px solid var(--line);box-shadow:inset 0 1px #ffffff80,0 3px 0 var(--key-shadow),0 4px 5px #38291d0c;font-weight:700;font-size:15px;line-height:1;transition:transform .12s ease,box-shadow .12s ease}.logo-sanook .logo-key{background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#fff),var(--accent));border-color:color-mix(in srgb,var(--accent) 85%,#000);color:#fff;box-shadow:inset 0 1px #ffffff40,0 3px color-mix(in srgb,var(--accent) 55%,#000),0 4px 5px #38291d0c}.logo-tag{margin-top:5px;color:var(--muted);font-family:"Chakra Petch",var(--font-ui);font-size:.75rem;font-weight:500;white-space:nowrap;transition:color .2s ease}.logo:is(:hover,:focus-visible) .logo-tag{color:var(--accent)}.logo:hover .logo-key,.logo:focus-visible .logo-key{animation:logo-keypress 1.8s ease-in-out infinite}.logo-key:nth-child(2){animation-delay:.12s!important}.logo-key:nth-child(3){animation-delay:.24s!important}.logo-sanook .logo-key:nth-child(1){animation-delay:.4s!important}.logo-sanook .logo-key:nth-child(2){animation-delay:.52s!important}.logo-sanook .logo-key:nth-child(3){animation-delay:.64s!important}.logo-sanook .logo-key:nth-child(4){animation-delay:.76s!important}.logo-sanook .logo-key:nth-child(5){animation-delay:.88s!important}.logo-sanook .logo-key:nth-child(6){animation-delay:1s!important}@keyframes logo-keypress{0%,12%,to{transform:translateY(0)}6%{transform:translateY(2px);box-shadow:0 0 0 transparent}}.logo-cat{transform-origin:50% 100%;transition:transform .3s cubic-bezier(.2,.8,.3,1),filter .3s ease;position:absolute;left:50%;bottom:100%;width:50px;height:auto;overflow:visible;transform:translate(var(--logo-cat-x),var(--logo-cat-y));filter:drop-shadow(0 1px 1px #38291d24);pointer-events:none}.logo-heart{position:absolute;left:calc(50% + 19px);bottom:calc(100% + 17px);color:var(--accent);font:12px/1 system-ui,sans-serif;opacity:0;transform:translateY(5px) scale(.6) rotate(12deg);transition:opacity .2s ease,transform .3s ease;pointer-events:none}.logo:is(:hover,:focus-visible,:active) .logo-heart{opacity:1;transform:translateY(0) scale(1) rotate(12deg)}.logo-tail{position:absolute;left:100%;bottom:2px;width:13px;height:21px;margin-left:1px;overflow:visible;transform-origin:10% 88%;animation:logo-tail 6s ease-in-out infinite;pointer-events:none}.logo .fur{fill:var(--logo-fur);stroke:var(--logo-line);stroke-width:1.5;stroke-linejoin:round}.logo .ear-in{fill:var(--logo-inner)}.logo .eye{fill:var(--logo-eye)}.logo .shine{fill:#fff}.logo .nose{fill:var(--logo-inner);stroke:var(--logo-line);stroke-width:.6}.logo .line{fill:none;stroke:var(--logo-line);stroke-width:1.1;stroke-linecap:round}.logo .whisker{stroke-width:.7}.logo .tail-line,.logo .tail-fur{fill:none;stroke-linecap:round}.logo .tail-line{stroke:var(--logo-line);stroke-width:5.6}.logo .tail-fur{stroke:var(--logo-fur);stroke-width:3.2}.logo-head,.logo-eyes,.logo-ear-l,.logo-mouth{transform-box:fill-box}.logo-head{transform-origin:50% 100%;transition:transform .25s ease}.logo-eyes{transform-origin:50% 50%;animation:logo-blink 6s linear infinite}.logo-ear-l{transform-origin:80% 100%;animation:logo-ear 6s ease-in-out infinite}.logo-mouth{fill:#b5485c;stroke:var(--logo-line);stroke-width:.6;transform-origin:50% 0;transform:scaleY(0);transition:transform .15s ease}.logo:hover .logo-cat,.logo:focus-visible .logo-cat,.logo:active .logo-cat{transform:translate(var(--logo-cat-x),calc(var(--logo-cat-y) - 2px)) rotate(-5deg) scale(1.06);filter:drop-shadow(0 2px 2px #38291d30)}.logo:hover .logo-mouth,.logo:focus-visible .logo-mouth,.logo:active .logo-mouth{transform:scaleY(1)}.logo:hover .logo-tail,.logo:focus-visible .logo-tail,.logo:active .logo-tail{animation:logo-tail-happy .9s ease-in-out infinite}.logo:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:6px}@keyframes logo-blink{0%,40%,44%,to{transform:scaleY(1)}42%{transform:scaleY(.1)}}@keyframes logo-ear{0%,62%,66%,70%,to{transform:rotate(0)}64%{transform:rotate(-16deg)}68%{transform:rotate(-11deg)}}@keyframes logo-tail{0%,14%,38%,to{transform:rotate(0)}20%{transform:rotate(18deg)}26%{transform:rotate(-10deg)}32%{transform:rotate(12deg)}}@keyframes logo-tail-happy{0%,to{transform:rotate(-12deg)}50%{transform:rotate(20deg)}}@media(prefers-reduced-motion:reduce){.logo *,.logo:hover *,.logo:focus-visible *,.logo:active *{animation:none;transition:none}.logo .logo-key,.logo .logo-tail,.logo:is(:hover,:focus-visible,:active) .logo-key,.logo:is(:hover,:focus-visible,:active) .logo-tail{animation:none}.logo:is(:hover,:focus-visible,:active) .logo-cat{transform:translate(var(--logo-cat-x),var(--logo-cat-y))}}@keyframes logo-tail-soft{0%,15%,45%,to{transform:rotate(0)}30%{transform:rotate(8deg)}}@media(max-width:480px){.logo{padding-top:22px;--logo-cat-y: 4px}.logo-key{width:17px;height:21px;font-size:13px}.logo-cat{width:42px}.logo-tag{display:none}}.kb-compact .kb{gap:3px;padding:6px;border-radius:10px}.kb-compact .kb-row{gap:3px}.kb-compact .key{height:34px;padding:1px 4px;border-radius:5px}.kb-compact .k-main{font-size:.95rem;line-height:1.15}.kb-compact .k-shift{font-size:.62rem}.kb-compact .k-fn{font-size:.7rem}.kb-compact .key.bump:after{bottom:3px}.game{scroll-margin-top:8px}.stage-bar{display:flex;justify-content:flex-end;margin-bottom:4px}.stage-full{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;font-size:.85rem}.stage-full svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.fs-stage:fullscreen{box-sizing:border-box;padding:16px max(16px,calc((100vw - 980px)/2));overflow:auto;background:var(--bg);color:var(--ink)}.fs-stage:fullscreen .stage-bar{position:fixed;top:10px;right:14px;z-index:10;margin:0}.fs-stage:fullscreen .game+.hint{display:none}.fs-stage:fullscreen .game>.hud,.fs-stage:fullscreen>.opts,.fs-stage:fullscreen>.lesson-head{margin-top:0;padding-right:150px}.game-opts .seg-wrap{flex-wrap:wrap;max-width:100%}.game-opts .seg{flex-wrap:wrap}body{background-image:radial-gradient(var(--grain) 1px,transparent 1px);background-size:4px 4px}h1,h2,h3,.card-t{font-family:var(--font-ui);font-weight:600}.nav a.on{background:linear-gradient(transparent 58%,var(--hl) 58%,var(--hl) 88%,transparent 88%);box-shadow:none}.card,.lesson-card{position:relative;border-radius:8px;box-shadow:0 1px 0 var(--line),0 6px 14px #5a46280f;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}.card:before{content:"";position:absolute;left:14px;right:14px;top:0;height:3px;border-radius:0 0 3px 3px;background:var(--accent)}.cards>.card:nth-child(2):before{background:var(--accent-2)}.cards>.card:nth-child(3):before{background:var(--accent-3)}.cards>.card:nth-child(2) .card-t{color:var(--accent-2)}.cards>.card:nth-child(3) .card-t{color:var(--accent-3)}.card:hover,.lesson-card:hover{border-color:var(--line);transform:translateY(-3px) rotate(.4deg);box-shadow:0 1px 0 var(--line),0 12px 22px #5a462821}.typing{border-left:3px solid var(--margin-rule);border-radius:6px;background-image:linear-gradient(to bottom,transparent calc(100% - 1px),var(--rule) calc(100% - 1px));background-size:100% 2.4em;background-size:100% 1lh;background-origin:content-box;background-attachment:local}.c.cur{background:var(--hl)}.btn,.result button{border-radius:6px;transition:background-color .2s ease,filter .2s ease}.btn:hover{background:color-mix(in srgb,var(--hl) 22%,var(--panel))}.btn.primary:hover,.result button:hover{background:var(--accent);filter:brightness(1.08)}.stat,.result,.kb,.tip{box-shadow:0 1px 0 var(--line)}@media(prefers-reduced-motion:reduce){.card:hover,.lesson-card:hover{transform:none}}.account-info{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:12px 0 20px}.account-info dt{color:var(--muted)}.account-info dd{margin:0;overflow-wrap:anywhere}.account-section{border-top:1px solid var(--line);padding-top:8px}.resend{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.resend .ok-note{margin-top:0}.privacy{max-width:760px}.privacy li{margin-bottom:6px}.avatar{display:inline-grid;place-items:center;border-radius:50%;object-fit:cover;flex:0 0 auto;background:var(--panel);border:1px solid var(--line);overflow:hidden}.avatar.blank{background:#dfe3e8;border-color:transparent}.avatar.blank svg{display:block;fill:#9aa1ab}.avatar-section{margin:12px 0 8px}.avatar-row{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.avatar-row p{margin:0 0 8px}.avatar-row>div{flex:1 1 200px}.avatar-actions,.cropper-actions{display:flex;flex-wrap:wrap;gap:8px}.hidden-file{display:none}.cropper{display:grid;gap:12px;justify-items:center}.crop-frame{position:relative;border-radius:10px;overflow:hidden;background:var(--panel);touch-action:none;cursor:grab;max-width:100%}.crop-frame:active{cursor:grabbing}.crop-frame canvas{display:block;max-width:100%}.crop-ring{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;box-shadow:0 0 0 9999px #00000073;border-radius:50%;border:2px solid rgba(255,255,255,.85)}.zoom{display:grid;gap:4px;width:100%;max-width:280px}.zoom>span{font-size:.85rem;color:var(--muted)}.navavatar{display:inline-flex;padding:0;border:0;border-radius:50%;background:none;line-height:0;cursor:pointer}.navavatar .avatar{transition:box-shadow .12s}.navavatar:hover .avatar,.navavatar:focus-visible .avatar,.navavatar[aria-expanded=true] .avatar{box-shadow:0 0 0 2px var(--accent)}.navmenu{position:relative;display:inline-flex}.navmenu .menu{position:absolute;top:calc(100% + 8px);right:0;z-index:30;width:max-content;display:flex;flex-direction:column;padding:6px;border:1px solid var(--line);border-radius:10px;background:var(--panel);box-shadow:0 8px 24px #0000002e;animation:menu-in .12s ease-out}.navmenu .menu-head{display:flex;flex-direction:column;gap:2px;margin:0;padding:6px 10px 8px;border-bottom:1px solid var(--line);overflow-wrap:anywhere;font-size:.9em;white-space:normal}.navmenu .menu a,.navmenu .menu button{padding:8px 10px;border:0;border-radius:6px;background:none;color:var(--ink);font:inherit;text-align:left;text-decoration:none;white-space:nowrap;cursor:pointer}.navmenu .menu a:hover,.navmenu .menu a:focus-visible,.navmenu .menu button:hover,.navmenu .menu button:focus-visible{background:color-mix(in srgb,var(--accent) 12%,transparent)}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.navmenu .menu{animation:none}}.form-actions{display:flex;flex-wrap:wrap;gap:8px}.name-section{margin:-8px 0 20px}.name-taken p{margin:0 0 8px}.navavatar{position:relative}.navavatar-dot{position:absolute;top:0;right:0;width:10px;height:10px;border-radius:50%;background:var(--bad);box-shadow:0 0 0 2px var(--bg)}.navmenu .menu a .nav-badge{margin-left:8px}.inbox-list{list-style:none;padding:0;margin:16px 0;display:grid;gap:12px}.inbox-item{padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--panel)}.inbox-reply{margin-top:8px;padding:8px 12px;border-left:3px solid var(--accent-2);background:color-mix(in srgb,var(--accent-2) 8%,transparent);border-radius:0 8px 8px 0}.inbox-reply .msg-body{margin:4px 0 0}.new-badge{background:var(--bad)}.msg-reply{margin-top:8px;display:grid;gap:6px}.msg-reply textarea{font:inherit;width:100%;padding:8px 10px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);resize:vertical}.update-banner{background:color-mix(in srgb,var(--accent) 10%,var(--panel));border-color:color-mix(in srgb,var(--accent) 35%,transparent)}.avatar-with-dot{position:relative;display:inline-flex;line-height:0}.avatar-with-dot .dot{position:absolute;right:-1px;bottom:-1px;box-shadow:0 0 0 2px var(--panel)}.player-name{display:inline-flex;align-items:center;gap:8px}.invite-row .avatar{flex:0 0 auto}.msg-bulk{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:8px 0}.msg-bulk .check{display:inline-flex;align-items:center;gap:6px}.blocked-badge{background:var(--bad)}.blocked-list{margin:12px 0}.blocked-list ul{list-style:none;padding:0;margin:8px 0 0;display:grid;gap:6px}.blocked-list li{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}.bot-badge{display:inline-block;white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:.85em;border:1px solid var(--line);cursor:help}.bot-badge.bot-human{border-color:color-mix(in srgb,var(--accent-3) 45%,transparent);background:color-mix(in srgb,var(--accent-3) 12%,transparent)}.bot-badge.bot-maybe{border-color:color-mix(in srgb,var(--hl) 60%,transparent);background:color-mix(in srgb,var(--hl) 25%,transparent)}.bot-badge.bot-bot{border-color:color-mix(in srgb,var(--bad) 45%,transparent);background:color-mix(in srgb,var(--bad) 12%,transparent)}.rank-hero{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:14px;align-items:stretch;margin:14px 0}@media(max-width:720px){.rank-hero{grid-template-columns:1fr}}.rank-panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px}.rank-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px}.rank-head h3{margin:0;font-size:1.05rem}.rank-list{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:2px}.rank-list li{display:flex;align-items:center;gap:10px;padding:4px 6px;border-radius:8px}.rank-list li+li{border-top:1px solid var(--rule)}.rank-no{flex:none;width:26px;text-align:center;font-weight:700;font-variant-numeric:tabular-nums;color:var(--muted)}.rank-no.gold{color:#b8860b}.rank-no.silver{color:#8c8c8c}.rank-no.bronze{color:#a9622f}.rank-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rank-wpm{font-weight:700;font-variant-numeric:tabular-nums;color:var(--accent-2)}.rank-acc{width:42px;text-align:right;font-variant-numeric:tabular-nums}.rank-you{margin:10px 0 0;padding-top:8px;border-top:2px solid var(--rule);font-weight:600}.rank-empty{margin:10px 0 0;color:var(--muted)}.rank-cta{display:flex;flex-direction:column;justify-content:center;gap:10px;padding:14px 16px;border:1px dashed var(--line);border-radius:12px;background:color-mix(in srgb,var(--hl) 16%,transparent)}.rank-challenge{margin:0;font-size:1.15rem;font-weight:700;line-height:1.4}.rank-cta .btn{align-self:start}.game-ranking{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:14px;margin-top:20px}.game-ranking .rank-panel{min-width:0}.game-rank-scope{margin:6px 0 0}.game-rank-error{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;color:var(--muted)}.game-rank-list .rank-wpm{white-space:nowrap}.game-rank-cta p{margin:0}.game-board-invite{margin-top:10px;font-size:.85rem;color:var(--accent-2)}.game-rank-comparison{margin:8px 0;font-weight:600;color:var(--accent-2)}@media(max-width:720px){.game-ranking{grid-template-columns:minmax(0,1fr)}}@media(max-width:420px){.game-ranking .rank-panel{padding:12px}.game-rank-list li{gap:6px;padding-left:0;padding-right:0}.game-rank-list .rank-acc{display:none}}.stat-rank .rank-no{width:auto;font-size:inherit;color:var(--accent)}.start-badge{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:10px 0}.start-badge-tag{display:inline-block;padding:4px 12px;border-radius:999px;font-weight:700;color:var(--on-accent-2);background:var(--accent-2);animation:start-pulse 1.8s ease-in-out infinite}@keyframes start-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@media(prefers-reduced-motion:reduce){.start-badge-tag{animation:none}}.daily-goal{margin:0 0 32px;padding:23px 26px 18px;border:1px solid var(--line);border-radius:16px;background:var(--panel)}.home-practice{display:flex;align-items:center;justify-content:space-between;gap:26px;margin:0 0 32px;padding:24px 26px;background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--accent-2);border-radius:16px}.home-practice-copy{min-width:0}.home-practice-kicker{font-size:12px;color:var(--accent-2)}.home-practice h2{font-size:22px;margin:6px 0 12px;line-height:1.6}.home-practice-lesson{font-size:16px;font-weight:600;margin:0 0 8px}.home-practice-reason{color:var(--muted);font-size:14px;line-height:1.8;margin:0}.home-practice-keys{display:flex;flex-wrap:wrap;gap:12px 20px;margin:15px 0}.home-practice-key{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--muted)}.home-practice-key kbd{display:grid;place-items:center;min-width:36px;height:38px;padding:3px 6px;color:var(--accent-2);font:inherit;font-size:21px;background:var(--key-bg);border:1px solid var(--line);border-radius:7px;box-shadow:0 3px 0 var(--key-shadow)}.home-practice-source{color:var(--muted);font-size:11px;line-height:1.8;margin:10px 0 0}.home-practice>a{flex-shrink:0;white-space:normal;text-align:center}@media(max-width:700px){.home-practice{align-items:start;flex-direction:column;padding:18px;gap:18px}.home-practice h2{font-size:20px}}.daily-goal.complete{border-color:var(--ok)}.daily-goal-top{display:flex;align-items:center;justify-content:space-between;gap:20px}.daily-goal-kicker{color:var(--muted);font-size:12px}.daily-goal h2{margin:5px 0 0;font-size:23px;line-height:1.6}.daily-goal.complete h2{color:var(--ok)}.daily-goal-choice{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:13px}.daily-goal-choice select{font-size:14px;padding:8px 10px;max-width:100%}.daily-goal-values{display:flex;align-items:baseline;justify-content:space-between;gap:15px;margin:19px 0 10px}.daily-goal-values>strong{font-size:30px;font-variant-numeric:tabular-nums;color:var(--accent-2)}.daily-goal-values small{font-size:17px;font-weight:400;color:var(--muted)}.daily-goal-values>span{color:var(--muted);font-size:13px}.daily-goal-track{height:8px;border-radius:8px;background:var(--rule);overflow:hidden}.daily-goal-track>span{display:block;height:100%;background:var(--accent-2);border-radius:inherit}.daily-goal.complete .daily-goal-track>span{background:var(--ok)}.daily-goal-bottom{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-top:12px;font-size:14px}.daily-goal-bottom>span{color:var(--muted)}.daily-goal-bottom>a{font-weight:700;flex-shrink:0}.daily-goal-note{color:var(--muted);font-size:12px;line-height:1.8;margin:18px 0 0}.daily-goal-preference{color:var(--muted);font-size:11px;margin:3px 0 0}.daily-goal-preference-status{display:flex;flex-wrap:wrap;gap:10px;align-items:center;color:var(--muted);font-size:13px;line-height:1.8;margin:12px 0}.daily-goal-error{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:18px;font-size:14px}.round-goal{text-align:left;border:1px solid var(--line);border-radius:12px;padding:18px 20px;margin:22px 0;background:color-mix(in srgb,var(--accent-2) 4%,var(--panel))}.round-goal-heading{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px 18px}.round-goal h3{margin:0;font-size:18px}.round-goal-heading strong{color:var(--accent-2);font-size:14px;font-weight:600}.round-goal-progress p{font-size:15px;margin:14px 0 10px}.round-goal-progress>span{display:block;margin-top:8px;color:var(--muted);font-size:12px}.round-goal.complete{border-color:var(--ok)}.round-goal.complete .daily-goal-track>span{background:var(--ok)}.round-goal.complete h3{color:var(--ok)}.round-goal-next{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-top:18px;font-size:14px}.round-goal-next>span{flex:1 1 200px}.round-goal-next .btn{white-space:normal}.round-goal-status{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin:14px 0;font-size:14px}.round-goal-notice,.round-goal-date{font-size:13px;color:var(--muted);line-height:1.8}.focused-practice h1{font-size:clamp(25px,4vw,34px);margin:18px 0 10px}.focused-practice-ready{border:1px solid var(--line);border-radius:16px;padding:24px;background:var(--panel)}.focused-practice-ready h2{margin-top:0;font-size:22px}.focused-practice-targets{display:flex;flex-wrap:wrap;align-items:center;gap:15px;margin:18px 0}.focused-practice-targets>span{display:flex;align-items:center;gap:8px}.focused-practice-targets kbd{display:grid;place-items:center;min-width:43px;min-height:44px;padding:4px 9px;font-family:inherit;font-size:26px;color:var(--accent-2);border:1px solid var(--line);border-radius:8px;background:var(--key-bg);box-shadow:0 3px var(--key-shadow)}.focused-practice-targets small{color:var(--muted)}.focused-practice-ready>p{line-height:1.9}.focus-result-link{text-align:left;font-size:14px}.focus-link{white-space:normal}@media(max-width:420px){.focused-practice-ready{padding:18px}}@media(max-width:420px){.round-goal{padding:16px}}.practice-week{border-top:1px solid var(--line);margin-top:22px;padding-top:18px}.practice-week-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.practice-week-head h3{margin:0;font-size:15px;font-weight:600}.practice-week-head>span{font-size:12px;color:var(--muted)}.practice-week-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px;list-style:none;margin:18px 0 12px;padding:0}.practice-week-days li{min-width:0;text-align:center;border-radius:8px;padding:6px 4px}.practice-week-days li.today{background:color-mix(in srgb,var(--accent-2) 7%,transparent);outline:1px solid var(--line)}.practice-week-time{display:block;color:var(--ink);font-size:13px;font-variant-numeric:tabular-nums}.practice-week-days li.empty .practice-week-time{color:var(--muted)}.practice-week-bar{display:flex;align-items:end;height:60px;margin:7px auto 9px;width:min(100%,30px);background:var(--rule);border-radius:5px;overflow:hidden}.practice-week-bar>span{display:block;width:100%;background:var(--accent-2);border-radius:inherit}.practice-week-day{display:block;font-size:13px;font-weight:600}.practice-week-date{display:block;font-size:11px;color:var(--muted);margin-top:2px}.practice-week-total,.practice-week-empty{font-size:12px;color:var(--muted);margin:8px 0 0;line-height:1.8}@media(max-width:420px){.practice-week-head{align-items:start;flex-direction:column;gap:4px}.practice-week-days{gap:3px}.practice-week-time,.practice-week-day{font-size:11px}.practice-week-date{font-size:10px}}@media(max-width:640px){.daily-goal{padding:18px}.daily-goal-top{align-items:start;flex-direction:column;gap:12px}.daily-goal h2{font-size:21px}.daily-goal-bottom{align-items:start;flex-direction:column;gap:8px}}.guide-page{padding-bottom:28px}.guide-page h1{margin:14px 0 20px;font-size:clamp(30px,4.4vw,48px);line-height:1.38;letter-spacing:-.025em;overflow-wrap:anywhere}.guide-eyebrow{color:var(--accent-2);font-size:13px;font-weight:700;letter-spacing:.06em}.guide-lead{max-width:690px;color:var(--muted);font-size:19px;line-height:1.9;margin:0}.guide-hub-head{display:grid;grid-template-columns:minmax(0,1fr) 205px;align-items:center;gap:50px;padding:28px 0 42px}.guide-highlight{background:linear-gradient(transparent 62%,var(--hl) 62%,var(--hl) 91%,transparent 91%)}.guide-hub-note{padding:22px;background:var(--hl);border:1px solid var(--line);border-radius:4px 4px 30px;text-align:center;transform:rotate(3deg);box-shadow:3px 5px 0 var(--grain)}.guide-hub-note>span{font-size:12px;font-weight:700}.guide-hub-note>div{display:flex;justify-content:center;gap:10px;margin:18px 0 14px}.guide-hub-note kbd{display:grid;place-items:center;width:50px;height:50px;background:var(--panel);border:1px solid var(--line);border-bottom:4px solid var(--key-shadow);border-radius:9px;font:700 24px var(--font-ui);text-decoration:underline;text-underline-offset:8px}.guide-hub-note p{font-size:15px;line-height:1.7;margin:0}.guide-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid var(--line)}.guide-card{display:flex;flex-direction:column;gap:17px;padding:27px 24px;color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line);min-width:0;transition:background .16s,transform .16s}.guide-card+.guide-card{border-left:1px solid var(--line)}.guide-card:hover{background:var(--panel);transform:translateY(-3px)}.guide-card:focus-visible{outline:3px solid var(--accent-2);outline-offset:-3px}.guide-card-kicker{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px}.guide-card-kicker>span{color:var(--accent);font-weight:700;font-size:21px}.guide-card h2{font-size:24px;line-height:1.6;margin:0}.guide-card p{margin:0 0 8px;color:var(--muted);line-height:1.9;font-size:16px}.guide-card-link{display:flex;justify-content:space-between;color:var(--accent-2);font-weight:700;margin-top:auto;font-size:15px}.guide-practice-bar{display:flex;align-items:center;justify-content:space-between;gap:24px;background:var(--panel);border:1px solid var(--line);border-radius:16px;margin-top:32px;padding:24px}.guide-practice-bar h2{margin:0 0 7px;font-size:22px}.guide-practice-bar p{margin:0;color:var(--muted);line-height:1.8}.guide-practice-bar .btn{flex-shrink:0}.guide-breadcrumbs{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;font-size:13px;color:var(--muted);padding:8px 0 24px}.guide-breadcrumbs a{text-decoration:none}.guide-article-head{max-width:900px;border-bottom:1px solid var(--line);padding-bottom:28px;margin-bottom:30px}.guide-byline{margin:18px 0 0;color:var(--muted);font-size:13px}.guide-article-layout{display:grid;grid-template-columns:200px minmax(0,1fr);gap:40px;align-items:start}.guide-toc{position:sticky;top:20px;padding:12px 20px 18px 0;border-right:1px solid var(--line)}.guide-toc h2{font-size:15px;margin:0 0 16px;color:var(--muted)}.guide-toc ol{padding-left:20px;margin:0}.guide-toc li{padding:0 0 14px 4px;color:var(--muted);font-size:14px;line-height:1.8}.guide-toc li a{color:var(--ink);text-decoration:none}.guide-toc li a:hover{color:var(--accent-2);text-decoration:underline}.guide-toc-practice{display:block;border-top:1px solid var(--line);padding-top:16px;margin-top:6px;font-size:14px;font-weight:700}.guide-body{min-width:0;font-size:17px;line-height:1.95}.guide-section{scroll-margin-top:28px;margin:35px 0}.guide-section h2{font-size:25px;line-height:1.65;margin:0 0 16px}.guide-section p{margin:0 0 18px}.guide-takeaway{background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--hl);border-radius:0 12px 12px 0;padding:20px 23px}.guide-takeaway>span{color:var(--accent-2);font-size:13px;font-weight:700}.guide-takeaway p{margin:6px 0 0}.guide-steps,.guide-points{padding-left:25px}.guide-steps li,.guide-points li{padding-left:5px;margin-bottom:10px}.guide-finger-figure{margin:26px 0;border:1px solid var(--line);background:var(--panel);border-radius:15px;padding:22px}.guide-finger-figure figcaption{display:flex;flex-direction:column;gap:3px;font-size:16px}.guide-finger-figure figcaption>span{color:var(--muted);font-size:13px}.guide-finger-demo{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:22px;align-items:center;margin-top:18px}.guide-home-keys{min-width:0}.guide-hand-label{display:block;font-size:12px;color:var(--muted);margin:6px 0 5px}.guide-key-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.guide-home-key{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:65px;min-width:0;padding:4px 0 10px;border:1px solid var(--line);border-bottom:3px solid var(--key-shadow);border-radius:7px;cursor:pointer;color:#2b2a33}.guide-home-key>span:first-child{font-size:22px;line-height:1.5}.guide-home-key kbd{font:12px var(--font-ui);opacity:.8}.guide-home-key.finger-lp,.guide-home-key.finger-rp{background:var(--f-lp)}.guide-home-key.finger-lr,.guide-home-key.finger-rr{background:var(--f-lr)}.guide-home-key.finger-lm,.guide-home-key.finger-rm{background:var(--f-lm)}.guide-home-key.finger-li{background:var(--f-li)}.guide-home-key.finger-ri{background:var(--f-ri)}.guide-home-key.selected,.guide-space-key.selected{outline:2px solid var(--accent-2);outline-offset:2px}.guide-key-bump{position:absolute;bottom:5px;width:11px;height:2px;border-radius:2px;background:currentColor}.guide-space-key{width:100%;min-height:40px;border:1px solid var(--line);border-bottom:3px solid var(--key-shadow);background:var(--key-bg);color:var(--ink);border-radius:7px;padding:7px;margin-top:12px;font:12px var(--font-ui);cursor:pointer}.guide-finger-result .hands{display:block;width:100%;height:auto;max-width:360px;margin:auto}.guide-finger-result p{text-align:center;margin:8px 0 0;display:flex;flex-direction:column;font-size:14px}.guide-finger-result p>span{color:var(--muted);font-size:13px}.guide-figure-note{color:var(--muted);font-size:12px;line-height:1.8;margin:18px 0 0!important}.guide-routine{border:1px solid var(--line);border-radius:14px;padding:22px;background:var(--panel);margin:24px 0}.guide-routine-head{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:15px}.guide-routine .seg button{padding:7px 12px;font-size:13px}.guide-routine ol{list-style:none;margin:22px 0 0;padding:0}.guide-routine li{display:grid;grid-template-columns:40px minmax(0,1fr);gap:16px;padding:14px 0;border-top:1px solid var(--line)}.guide-minute{display:flex;flex-direction:column;text-align:center;color:var(--accent-2);font-size:25px;line-height:1.3;font-weight:700}.guide-minute small{font-size:11px;font-weight:400}.guide-routine li strong{font-size:15px}.guide-routine li p{color:var(--muted);font-size:14px;margin:4px 0 0;line-height:1.8}.guide-metrics{background:var(--panel);border:1px solid var(--line);padding:22px;border-radius:14px;margin:24px 0}.guide-metrics figcaption{color:var(--muted);font-size:13px}.guide-metrics dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:20px 0 0}.guide-metrics dl>div{min-width:0;border-left:2px solid var(--hl);padding-left:14px}.guide-metrics dt{color:var(--muted);font-size:12px}.guide-metrics dd{color:var(--accent-2);font-size:34px;font-weight:700;line-height:1.6;margin:0}.guide-metrics dd small{font-size:17px}.guide-metrics dl p{font-size:12px;margin:0;color:var(--muted)}.guide-article-action{border-top:1px solid var(--line);padding:28px 0;margin-top:32px}.guide-article-action h2{margin:8px 0;font-size:25px}.guide-article-action p{color:var(--muted);margin:0 0 18px}.guide-extra-link{display:block;margin-top:15px;font-size:14px}.guide-source{border-top:1px solid var(--line);padding-top:22px;color:var(--muted);font-size:13px}.guide-source h2{font-size:14px;margin:0 0 8px}.guide-source p{margin:0 0 8px}.guide-related{border-top:1px solid var(--line);margin-top:40px;padding-top:25px}.guide-related-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:20px}.guide-related-head h2{margin:0;font-size:22px}.guide-related-head a{font-size:14px;flex-shrink:0}.guide-cards-related{grid-template-columns:repeat(2,minmax(0,1fr))}.home-guide-note{display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:18px;padding:20px 0;margin:0 0 28px;border-top:1px dashed var(--line);border-bottom:1px dashed var(--line)}.home-guide-mark{color:var(--accent-2);font-size:28px;letter-spacing:-.08em;font-weight:700}.home-guide-note h2{font-size:17px;margin:0 0 5px}.home-guide-note p{margin:0;font-size:14px;color:var(--muted);line-height:1.8}.home-guide-note a{white-space:nowrap;font-weight:700;font-size:14px}.home-guide-topics{display:flex;flex-wrap:wrap;gap:8px 20px;margin:14px 0 0;padding:0;list-style:none}.home-guide-topics a{white-space:normal;font-size:13px;font-weight:400}.lessons-intro{max-width:820px;margin-bottom:25px}.lessons-intro h1{font-size:clamp(26px,4vw,35px);line-height:1.6;margin:10px 0 12px}.lessons-intro>p{color:var(--muted);line-height:1.9}.lessons-start-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px 24px;margin-top:20px}.lessons-help{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:30px;border-top:1px solid var(--line);padding-top:28px;margin-top:36px}.lessons-help h2{font-size:21px;line-height:1.6;margin:0 0 12px}.lessons-help p{color:var(--muted);line-height:1.9;margin:0 0 14px}.guide-week-plan{list-style:none;padding:0;margin:24px 0}.guide-week-plan>li{display:grid;grid-template-columns:70px minmax(0,1fr);gap:18px;border-top:1px solid var(--line);padding:20px 0}.guide-week-day{color:var(--accent-2);font-weight:700;font-size:15px;padding-top:3px}.guide-week-plan h3{margin:0 0 7px;font-size:19px;line-height:1.7}.guide-week-plan p{margin:0 0 10px}.guide-week-plan a{font-size:14px;font-weight:600}@media(max-width:600px){.lessons-help{grid-template-columns:1fr}.guide-week-plan>li{grid-template-columns:1fr;gap:5px}}@media(max-width:850px){.guide-article-layout{grid-template-columns:1fr;gap:26px}.guide-toc{position:static;border-right:0;border-bottom:1px solid var(--line);padding:0 0 20px}.guide-toc ol{columns:2;column-gap:30px}.guide-toc li{break-inside:avoid}.guide-cards:not(.guide-cards-related){grid-template-columns:1fr}.guide-cards:not(.guide-cards-related) .guide-card+.guide-card{border-left:0}.guide-card{padding:24px 16px}}@media(max-width:640px){.guide-hub-head{grid-template-columns:1fr;gap:28px;padding-top:12px}.guide-hub-note{display:none}.guide-page h1{font-size:31px}.guide-lead{font-size:17px}.guide-desktop-break{display:none}.guide-practice-bar{flex-direction:column;align-items:start;padding:20px}.guide-article-head{margin-bottom:24px}.guide-body{font-size:16px;line-height:2}.guide-section h2{font-size:22px}.guide-toc ol{columns:1}.guide-finger-figure{padding:16px}.guide-finger-demo{grid-template-columns:1fr;gap:18px}.guide-finger-result .hands{max-width:280px}.guide-home-key{min-height:68px}.guide-space-key{min-height:44px}.guide-routine,.guide-metrics{padding:16px}.guide-routine-head{flex-direction:column;align-items:start}.guide-metrics dl{grid-template-columns:1fr;gap:20px}.guide-metrics dd{line-height:1.4}.guide-cards-related{grid-template-columns:1fr}.guide-cards-related .guide-card+.guide-card{border-left:0}.guide-related-head{align-items:start;flex-direction:column}.home-guide-note{grid-template-columns:32px minmax(0,1fr);gap:12px}.home-guide-note a{grid-column:2}}@media(prefers-reduced-motion:reduce){.guide-card{transition:none}.guide-card:hover{transform:none}}.home-layout{--bg: #fbf7ed;--panel: #fffef9;--line: #e5dbca;--ink: #302e31;--muted: #81776a;background:var(--bg)}@media(prefers-color-scheme:dark){.home-layout{--bg: #27241f;--panel: #312d28;--line: #51483d;--ink: #f0e7da;--muted: #b7ad9f}}.home-layout .top{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:14px;align-items:center;padding:12px 0 18px;border-bottom:1px solid var(--line);margin-bottom:0}.home-layout .top-bar{display:contents}.home-layout .top-bar>.logo{grid-column:1;grid-row:1}.home-layout .top-tools{grid-column:3;grid-row:1;gap:8px;font-size:.8rem}.home-layout .top-tools .seg-wrap{gap:5px}.home-layout .top-tools .seg button{padding:6px 8px}.home-layout .top-tools .seg-label{font-size:.75rem}.home-layout .top-tools .lang{gap:4px}.home-layout .top-tools .lang select{padding:6px}.home-layout .nav{grid-column:2;grid-row:1;margin:0;padding:0;border:0;gap:9px;justify-content:center;flex-wrap:wrap;overflow:visible}.home-layout .nav a{padding:5px 3px;font-size:.8rem}.home-topline{display:flex;justify-content:space-between;gap:12px;padding:19px 0 0;font-size:.7rem;color:var(--muted);letter-spacing:.05em}.home-topline>span:last-child{font-family:system-ui,sans-serif;letter-spacing:.14em;flex:none}.home-hero{display:grid;grid-template-columns:1.08fr 1fr;align-items:center;gap:24px;min-height:425px;padding:26px 0 28px;margin:0}.home-hero-copy{min-width:0}.home-eyebrow{color:var(--accent);font-size:.78rem;font-weight:600;letter-spacing:.03em}.home-page .home-hero h1{font-size:clamp(2.15rem,4.8vw,3.2rem);line-height:1.45;letter-spacing:-.035em;margin:12px 0 20px;font-weight:700}.home-marker{background:linear-gradient(transparent 68%,color-mix(in srgb,var(--cur-bg) 90%,transparent) 68%,color-mix(in srgb,var(--cur-bg) 90%,transparent) 91%,transparent 91%);box-decoration-break:clone;-webkit-box-decoration-break:clone}.home-hero-copy>p.muted{font-size:.93rem;line-height:1.9;max-width:400px;margin:0}.home-actions{display:flex;align-items:center;flex-wrap:wrap;gap:20px;margin:25px 0 18px}.home-actions .btn{display:inline-flex;align-items:center;gap:22px;padding:12px 20px;border-radius:9px;box-shadow:0 3px color-mix(in srgb,var(--accent) 72%,#332125);font-weight:600}.home-secondary{color:var(--ink);font-size:.85rem;text-decoration:none;padding:8px 0}.home-secondary:hover{color:var(--accent);text-decoration:underline}.home-start-note{font-size:.73rem;color:var(--muted)}.home-art{position:relative;min-width:0;height:355px;display:flex;align-items:center;justify-content:center}.home-art-orbit{position:absolute;width:280px;height:280px;top:38px;left:calc(50% - 140px);border-radius:50%;background:color-mix(in srgb,var(--cur-bg) 45%,var(--bg))}.home-art-note{position:absolute;right:0;top:7px;background:var(--cur-bg);color:var(--ink);padding:8px 12px;font-size:.72rem;transform:rotate(7deg);box-shadow:3px 4px color-mix(in srgb,var(--line) 40%,transparent);z-index:4}.home-art-cat{position:absolute;width:162px;height:auto;left:calc(50% - 73px);top:23px;transform:rotate(-8deg);z-index:2}.home-keyboard{position:relative;width:95%;max-width:390px;margin-top:28px;padding:14px 12px 12px;background:color-mix(in srgb,var(--line) 65%,var(--panel));border:1px solid var(--line);border-radius:14px;box-shadow:0 9px 0 var(--key-shadow),0 20px 26px #32271c19;transform:rotate(-9deg);z-index:3}.home-key-row{display:flex;justify-content:center;gap:5px;margin-bottom:6px}.home-key-row:last-child{margin-bottom:0}.home-key-row>span{display:grid;place-items:center;flex:1;min-width:0;height:33px;position:relative;border:1px solid var(--line);border-radius:5px;background:var(--key-bg);box-shadow:0 2px 0 var(--key-shadow);font-size:.85rem;color:var(--muted)}.home-key-row>.home-key-mark{background:var(--accent);color:#fff;border-color:var(--accent)}.home-key-mark:after{content:"";position:absolute;width:9px;height:1px;background:currentColor;opacity:.7;bottom:4px}.home-key-row>.home-space{flex:7;font-size:.65rem;letter-spacing:.08em}.home-key-row>.home-enter{background:var(--accent-2);color:var(--on-accent-2);flex:1}.home-key-bottom{padding:0 14px}.home-art-caption{position:absolute;bottom:4px;right:18px;color:var(--muted);font-size:.72rem;transform:rotate(-4deg)}.home-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding:22px 0 16px}.home-section-head h2{margin:0;font-size:1rem}.home-section-head>span{font-size:.73rem}.home-paths{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.home-path{display:flex;flex-direction:column;gap:8px;min-width:0;padding:3px 14px 4px;border-left:2px solid var(--line);color:var(--ink);text-decoration:none;transition:border-color .18s}.home-path:hover{border-color:var(--accent)}.home-path-kicker{font-size:.7rem;color:var(--accent)}.home-path h3{display:flex;justify-content:space-between;gap:10px;font-size:1.08rem;line-height:1.5;margin:0}.home-path h3>span{flex:none}.home-path p{font-size:.8rem;margin:0;color:var(--muted)}.home-path-detail{font-size:.73rem;color:var(--muted)}.home-progress{height:4px;background:var(--line);border-radius:8px;overflow:hidden;margin-top:auto}.home-progress span{display:block;height:100%;background:var(--accent-2);border-radius:inherit}.home-personal{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:18px 0 8px;font-size:.76rem;color:var(--muted)}.home-personal a{text-decoration:none;color:var(--accent-2)}.home-personal a:hover{text-decoration:underline}.home-page .rank-hero{margin-top:25px}.home-page .rank-panel,.home-page .rank-cta{border-radius:12px}.home-page>.small-note{line-height:1.8;font-size:.75rem}.home-page a:focus-visible{outline:3px solid var(--accent-2);outline-offset:5px}@media(max-width:900px){.home-layout .top{display:block}.home-layout .top-bar{display:flex}.home-layout .top-tools{font-size:.85rem}.home-layout .nav{justify-content:flex-start;margin-top:14px;gap:17px}.home-layout .nav a{font-size:.9rem;padding:5px}}@media(max-width:640px){.home-layout{padding-left:20px;padding-right:20px}.home-layout .top-tools{font-size:.76rem;gap:7px}.home-layout .top-tools .seg-label{display:none}.home-layout .top-tools .seg button{padding:5px 7px}.home-layout .top-tools .lang select{padding:5px 3px}.home-layout .top-tools .login-btn{padding:6px 8px;font-size:.76rem}.home-layout .nav{gap:10px}.home-layout .nav a{font-size:.85rem;padding:5px 3px}.home-topline{font-size:.68rem;letter-spacing:0}.home-topline>span:last-child{font-size:.65rem;letter-spacing:.06em}.home-hero{grid-template-columns:1fr;gap:14px;padding:26px 0 25px}.home-page .home-hero h1{font-size:clamp(2.1rem,8vw,2.75rem);margin-top:10px}.home-hero-copy>p.muted{max-width:430px;font-size:.9rem}.home-art{height:300px;max-width:380px;width:100%;justify-self:center;margin-top:7px}.home-art-orbit{width:240px;height:240px;left:calc(50% - 120px);top:28px}.home-art-cat{width:150px;left:calc(50% - 68px);top:8px}.home-art-note{right:2px;top:0;font-size:.7rem}.home-keyboard{margin-top:24px}.home-art-caption{bottom:0}.home-section-head{align-items:flex-start}.home-section-head>span{max-width:150px;text-align:right}.home-paths{grid-template-columns:1fr;gap:20px}.home-path{gap:5px}.home-progress{margin-top:7px;max-width:260px}}@media(max-width:380px){.home-actions{gap:12px}.home-actions .btn{padding:11px 15px;gap:14px;font-size:.9rem}.home-secondary{font-size:.8rem}.home-key-row>span{height:28px;font-size:.76rem}.home-keyboard{padding:12px 9px}}@media(prefers-reduced-motion:reduce){.home-path{transition:none}}.engagement{margin-top:1.5rem}.engagement-heading{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.engagement-heading h3{margin-bottom:.35rem}.engagement-private{border:1px solid #cec6b5;padding:.3rem .8rem;border-radius:99px;color:#315384;font-size:.85em}.engagement-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:1rem;margin:1rem 0 1.5rem}.engagement-card{background:#fffdf8;border:1px solid #dcd1bc;border-radius:18px;padding:1.25rem;min-width:0}.engagement-card h4{margin:0 0 1rem}.engagement-donut-layout{display:flex;align-items:center;flex-wrap:wrap;gap:1rem}.engagement-donut{position:relative;width:180px;max-width:100%;flex:0 1 180px}.engagement-donut svg{display:block;width:100%;height:auto}.engagement-donut-total{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;pointer-events:none}.engagement-donut-total strong{font-size:1.1rem}.engagement-donut-total span{font-size:.65rem;color:#7a7263;max-width:100px;text-align:center}.engagement-legend{list-style:none;padding:0;margin:0;flex:1;min-width:160px}.engagement-legend li{display:flex;align-items:center;gap:.5rem;padding:.4rem 0}.engagement-legend li>span:nth-child(2){flex:1}.engagement-legend small{display:block;color:#7a7263;font-size:.8em}.engagement-swatch{width:10px;height:10px;border-radius:50%;flex:none}.engagement-metrics{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.engagement-metrics dt{color:#7a7263;font-size:.85em}.engagement-metrics dd{margin:.2rem 0;font-size:1.4rem;font-weight:700}.engagement-advice{padding:1rem;border-left:3px solid #41857a;background:#eff5ef;border-radius:0 10px 10px 0}.engagement-members{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:.7rem}.engagement-member{text-align:start;padding:1rem;background:#fffdf8;color:inherit;border:1px solid #dcd1bc;border-radius:12px;cursor:pointer;font:inherit}.engagement-member>*{display:block}.engagement-member span{margin:.35rem 0;color:#315384}.engagement-member small{color:#7a7263;line-height:1.6}.engagement-member:hover,.engagement-member.selected{border-color:#315384;background:#f1f5fa}.engagement-member:focus-visible{outline:3px solid #315384;outline-offset:3px}@media(max-width:760px){.engagement-grid{grid-template-columns:1fr}.admin>.opts .seg-wrap,.admin .range-inputs{max-width:100%;flex-wrap:wrap;white-space:normal}.admin>.opts .seg{max-width:100%;flex-wrap:wrap}}
