:root{--bg: #0b1220;--card: #111d30;--accent: #38bdf8;--text: #f8fafc;--muted: #94a3b8;--dim: #7d8ba0;--line: #1c2b45;--raised: #1e2e4a;--word: #16263f;--bar: #1e3a5c;--miss: #f87171;--miss-bg: rgba(248, 113, 113, .14);--accent-bg: rgba(56, 189, 248, .12);--ui: "Manrope", system-ui, sans-serif;--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-drawer: cubic-bezier(.32, .72, 0, 1);--text-size: 1.875rem;--lh: 3.375rem;--r-card: 28px;--r-ctl: 10px;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}*{margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--ui);font-size:1rem;line-height:1.55;color:var(--text);background:var(--bg);min-height:100vh}#root{min-height:100vh}::selection{background:#38bdf84d}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}button:disabled{cursor:default;opacity:.6}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:8px}.num{font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.small{font-size:.875rem}.hi{color:var(--text)}.spacer{flex:1}.row{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}kbd{font:inherit;font-size:.8125rem;padding:2px 8px;border-radius:6px;background:var(--card);color:var(--text);border:1px solid var(--line)}.link{color:var(--accent);text-decoration:none}.link:hover{text-decoration:underline;text-underline-offset:3px}.app{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:24px 40px 0}.header,.main,.foot{width:100%;max-width:1080px}.header{display:flex;align-items:center;gap:28px;transition:opacity .2s ease}.header.is-dimmed{opacity:.4}.brand{display:flex;align-items:center;gap:10px;color:var(--text);text-decoration:none}.brand-mark{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:11px;background:var(--accent);color:var(--bg);font-weight:800}.brand-name{font-size:1.1875rem;font-weight:800}.nav{display:flex;gap:22px;font-size:.9375rem}.nav a{color:var(--muted);text-decoration:none;padding:4px 0;transition:color .15s ease}.nav a[aria-current=page]{color:var(--text)}.chip{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;background:var(--card);font-size:.875rem;white-space:nowrap}.dot{width:8px;height:8px;border-radius:4px;background:var(--accent)}.main{flex:1;display:flex;flex-direction:column;gap:16px;padding:32px 0 48px}.main-center{justify-content:center}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-card)}.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:65px;padding:14px 20px;border-bottom:1px solid var(--line);font-size:.875rem}.seg{display:inline-flex;gap:2px;padding:3px;border-radius:12px;background:var(--bg)}.seg button{padding:7px 12px;border-radius:9px;font-size:.875rem;font-weight:600;color:var(--muted);transition:color .15s ease,background-color .15s ease,transform .12s var(--ease-out)}.seg button[aria-checked=true]{background:var(--accent);color:var(--bg);font-weight:700}.seg-quiet button[aria-checked=true]{background:var(--raised);color:var(--text)}.seg-block{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;width:100%}.seg-block button{padding:9px 0}.chip-toggle{padding:7px 12px;border-radius:var(--r-ctl);border:1px solid var(--line);font-size:.875rem;font-weight:600;color:var(--muted);transition:color .15s ease,background-color .15s ease,border-color .15s ease,transform .12s var(--ease-out)}.chip-toggle[aria-pressed=true]{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}.mode-pill{padding:7px 12px;border-radius:var(--r-ctl);background:var(--accent-bg);color:var(--accent);font-weight:600}.icon-btn{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;color:var(--muted);transition:color .15s ease,background-color .15s ease,transform .12s var(--ease-out)}.seg button:active,.chip-toggle:active,.icon-btn:active,.btn:active{transform:scale(.97)}@media (hover: hover) and (pointer: fine){.seg button[aria-checked=false]:hover,.chip-toggle:hover,.icon-btn:hover{color:var(--text)}.icon-btn:hover{background:var(--bg)}.nav a:hover{color:var(--text)}.btn:hover{transform:translateY(-1px)}.btn:active{transform:scale(.97)}}.test{position:relative;overflow:hidden}.test-body{padding:32px 44px 30px}.live{display:flex;align-items:flex-end;gap:40px;margin-bottom:26px;flex-wrap:wrap}.stat{display:flex;flex-direction:column}.stat b{font-size:1.875rem;font-weight:700;line-height:1}.stat b.empty{color:var(--dim)}.stat span{font-size:.8125rem;color:var(--muted);margin-top:6px}.stat-main b{font-size:3.25rem;font-weight:800;color:var(--accent)}.lead{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;background:var(--accent-bg);color:var(--accent);font-size:.875rem;font-weight:700}.lead.behind{background:var(--raised);color:var(--muted)}.viewport{position:relative;height:calc(var(--lh) * 3);overflow:hidden;cursor:text}.lines{position:relative;font-size:var(--text-size);line-height:var(--lh);color:var(--dim);transition:transform .18s var(--ease-out)}.word{display:inline-block;white-space:pre;border-radius:8px}.word.is-active{background:var(--word);box-shadow:0 0 0 4px var(--word)}.ch.ok{color:var(--text)}.ch.bad{color:var(--miss);background:var(--miss-bg);border-radius:6px}.caret{position:absolute;top:0;left:0;z-index:2;width:3px;height:2.125rem;border-radius:2px;background:var(--accent)}.caret.blink{animation:blink 1s steps(1) infinite}.ghost{position:absolute;top:0;left:0;height:3px;border-radius:2px;background:var(--text);opacity:0;pointer-events:none;transition:opacity .15s ease}.sr-input{position:absolute;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none}.race{position:relative;margin-top:28px;padding-bottom:22px}.race-track{height:6px;border-radius:3px;background:var(--bg);overflow:hidden}.race-you{height:6px;border-radius:3px;background:var(--accent);transition:width .2s var(--ease-out)}.race-rival{position:absolute;top:-5px;width:2px;height:16px;border-radius:1px;background:var(--text);opacity:.75;transition:left .2s linear}.race-rival span{position:absolute;top:20px;left:50%;transform:translate(-50%);font-size:.75rem;color:var(--muted);white-space:nowrap}.note{margin-top:8px;font-size:.875rem;color:var(--muted)}.is-paused .test-body{filter:blur(6px);opacity:.4}.pause{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;padding:24px;background:#0b122059;animation:fade .15s ease both}.pause h2{font-size:1.625rem;font-weight:800}.pause p{color:var(--muted);max-width:44ch}.pause-icon{display:grid;place-items:center;width:56px;height:56px;border-radius:18px;background:var(--accent-bg);color:var(--accent)}.hints{display:flex;justify-content:center;gap:24px;font-size:.875rem;color:var(--muted);flex-wrap:wrap}.hint-start{display:inline-flex;align-items:center;gap:10px;font-size:.9375rem}.hint-start svg{color:var(--accent)}.recent{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.pill{padding:7px 12px;border-radius:999px;background:var(--card);font-size:.875rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:12px 20px;border-radius:12px;border:1px solid var(--line);background:var(--card);font-weight:600;font-size:.9375rem;transition:transform .12s var(--ease-out),background-color .15s ease,border-color .15s ease}.btn-lg{padding:14px 24px;border-radius:14px;font-size:1rem}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--bg);font-weight:700}.btn-primary kbd{background:#0b122026;border-color:#0b122040;color:var(--bg)}.btn-outline{background:transparent;border-color:var(--accent);color:var(--accent)}.results{display:flex;flex-direction:column;gap:16px}.res-card{padding:36px 44px}.res-top{display:flex;align-items:flex-end;gap:40px;flex-wrap:wrap}.badge{display:inline-flex;padding:7px 14px;border-radius:999px;font-weight:800;font-size:.875rem;background:var(--accent);color:var(--bg)}.badge-quiet{background:var(--raised);color:var(--muted);font-weight:600}.stamp{animation:stamp .32s var(--ease-out) .12s both}.res-wpm{display:flex;align-items:baseline;gap:14px;margin-top:16px}.res-wpm .num{font-size:7.5rem;font-weight:800;line-height:.88;letter-spacing:-.04em}.res-unit{font-size:1.25rem;font-weight:500;color:var(--muted)}.res-stats{flex:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-left:1px solid var(--line)}.res-stats div{padding:4px 24px}.res-stats div+div{border-left:1px solid var(--line)}.res-stats dt{font-size:.8125rem;color:var(--muted)}.res-stats dd{font-size:2rem;font-weight:700}.err{color:var(--miss)}.res-grid{margin-top:36px;display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:36px}.h1{font-size:1.75rem;font-weight:800;letter-spacing:-.01em}.h2{font-size:1rem;font-weight:700;margin-bottom:14px;text-align:left}.res-note{margin-top:16px;color:var(--muted);font-size:.9375rem;max-width:70ch}.letters{display:flex;flex-direction:column}.letter-list{list-style:none;display:flex;flex-direction:column;gap:8px;margin-bottom:18px}.letter-list li{display:flex;align-items:center;gap:12px}.key{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:10px;background:var(--bg);font-weight:800;flex-shrink:0}.key-err{background:var(--miss-bg);color:var(--miss)}.meter{flex:1;height:6px;border-radius:3px;background:var(--bg);overflow:hidden}.meter span{display:block;height:6px;border-radius:3px;background:var(--dim)}.meter .meter-err{background:var(--miss)}.letters .btn{margin-top:auto}.res-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.bars-fig{margin:0}.bars{position:relative;display:flex;align-items:flex-end;gap:3px;border-bottom:1px solid var(--line)}.bar{flex:1;min-width:1px;background:var(--bar);border-radius:3px 3px 0 0}.bar.is-best{background:var(--accent)}.bar.has-err{box-shadow:inset 0 3px 0 var(--miss)}.bars-record{position:absolute;left:0;right:0;border-top:2px dashed rgba(248,250,252,.4)}.bars-record span{position:absolute;right:0;bottom:6px;font-size:.75rem;color:var(--muted)}.bars-axis{display:flex;justify-content:space-between;margin-top:8px;font-size:.75rem;color:var(--muted)}.drawer-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;pointer-events:none}.drawer-root.is-open{pointer-events:auto}.drawer-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#05091299;opacity:0;transition:opacity .24s ease}.is-open .drawer-backdrop{opacity:1}.drawer{position:absolute;top:0;right:0;bottom:0;width:min(440px,100%);background:var(--card);border-left:1px solid var(--line);padding:28px;overflow-y:auto;display:flex;flex-direction:column;gap:26px;box-shadow:-24px 0 48px -16px #00000080;transform:translate(100%);transition:transform .3s var(--ease-drawer)}.is-open .drawer{transform:translate(0)}.drawer-head{display:flex;align-items:center;justify-content:space-between}.drawer-head h2{font-size:1.375rem;font-weight:800}.drawer-head .icon-btn{background:var(--bg);color:var(--text)}.field{display:flex;flex-direction:column;gap:10px}.field-label{font-size:.875rem;font-weight:700}.option{display:flex;align-items:center;gap:12px;text-align:left;padding:14px;border-radius:14px;background:var(--bg);border:1px solid transparent;font-size:.9375rem;transition:border-color .15s ease}.option[aria-checked=true]{border-color:var(--accent)}.option-hint{display:block;font-size:.8125rem;color:var(--muted)}.radio{width:18px;height:18px;border-radius:50%;border:2px solid var(--dim);flex-shrink:0}.option[aria-checked=true] .radio{border:5px solid var(--accent)}.switch-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;text-align:left;font-size:.9375rem}.switch-hint{display:block;font-size:.8125rem;color:var(--muted)}.switch{position:relative;width:44px;height:26px;border-radius:13px;background:var(--raised);flex-shrink:0;transition:background-color .15s ease}.switch-knob{position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:10px;background:var(--muted);transition:transform .18s var(--ease-out),background-color .15s ease}.switch-row[aria-checked=true] .switch{background:var(--accent)}.switch-row[aria-checked=true] .switch-knob{transform:translate(18px);background:var(--bg)}.history{display:flex;flex-direction:column;gap:16px}.history .card,.how,.empty{padding:32px 36px}.hist-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;margin-bottom:28px}.hist-totals{display:flex;gap:36px}.hist-totals dt{font-size:.8125rem;color:var(--muted)}.hist-totals dd{font-size:1.75rem;font-weight:800}.days{display:flex;align-items:flex-end;gap:6px;height:180px;border-bottom:1px solid var(--line)}.day{position:relative;flex:1;max-width:40px;height:100%;display:flex;align-items:flex-end}.day-best,.day-avg{position:absolute;left:0;right:0;bottom:0;border-radius:4px 4px 0 0}.day-best{background:var(--bar)}.day-avg{background:var(--accent);left:25%;right:25%}.legend{display:flex;gap:20px;margin-top:12px;font-size:.8125rem;color:var(--muted)}.legend span:before{content:"";display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:8px;vertical-align:-1px}.lg-avg:before{background:var(--accent)}.lg-best:before{background:var(--bar)}.hist-records{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.tile{padding:20px;display:flex;flex-direction:column;gap:4px}.tile-num{font-size:2.25rem;font-weight:800}.table-wrap{overflow-x:auto}.attempts{width:100%;border-collapse:collapse;font-size:.9375rem}.attempts th{text-align:left;font-weight:500;font-size:.8125rem;color:var(--muted);padding:0 12px 10px 0;border-bottom:1px solid var(--line);white-space:nowrap}.attempts td{padding:11px 12px 11px 0;border-bottom:1px solid var(--line);white-space:nowrap}.attempts .r{text-align:right;padding-right:0;padding-left:12px}.attempts tr.is-partial td{color:var(--muted)}.empty{display:flex;flex-direction:column;align-items:flex-start;gap:14px}.how{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px}.how p{color:var(--muted);max-width:60ch;margin-top:14px}.how p:first-of-type{color:var(--text)}.levels{border-collapse:collapse;width:100%}.levels caption{margin-bottom:8px}.levels th{text-align:left;vertical-align:top;white-space:nowrap;font-size:1.25rem;font-weight:800;padding:12px 24px 12px 0}.levels td{padding:14px 0;color:var(--muted)}.levels tr+tr>*{border-top:1px solid var(--line)}.foot{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:20px 0 28px;border-top:1px solid var(--line);font-size:.8125rem;color:var(--muted)}.foot-links{display:flex;gap:16px;flex-wrap:wrap}.foot-links a{color:inherit;text-decoration:none}.foot-links a:hover{color:var(--text);text-decoration:underline;text-underline-offset:3px}.foot-lang{padding:0;border:0;background:none;font:inherit;color:inherit;cursor:pointer}.foot-lang:hover{color:var(--text);text-decoration:underline;text-underline-offset:3px}.foot-lang:focus-visible{outline:2px solid var(--accent, currentColor);outline-offset:2px;border-radius:4px}.rise{animation:rise .24s var(--ease-out) both}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}@keyframes stamp{0%{opacity:0;transform:scale(.95)}}@keyframes fade{0%{opacity:0}}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion: reduce){.lines,.race-you,.race-rival,.drawer,.switch-knob{transition:none}.rise,.stamp{animation-name:fade}.caret.blink{animation:none}}@media (max-width: 860px){.app{padding:14px 16px 0}.header{gap:14px;flex-wrap:wrap}.nav{order:3;flex-basis:100%;flex-wrap:wrap;gap:4px 10px}.main{padding:20px 0 32px;gap:12px}.main-center{justify-content:flex-start}:root{--text-size: 1.375rem;--lh: 2.375rem;--r-card: 22px}.toolbar{padding:12px 14px;min-height:0}.toolbar .small{display:none}.test-body{padding:20px 18px}.live{gap:20px;margin-bottom:16px}.stat-main b{font-size:2.25rem}.stat b{font-size:1.375rem}.live .spacer{display:none}.lead{font-size:.8125rem}.caret{height:1.625rem}.hints{display:none}.hints.hints-idle{display:flex}.res-card{padding:22px 20px}.res-wpm .num{font-size:5.25rem}.res-stats{border-left:0;border-top:1px solid var(--line);padding-top:14px;flex-basis:100%}.res-stats div{padding:0 12px 0 0}.res-stats div+div{padding-left:12px}.res-stats dd{font-size:1.375rem}.res-grid,.how{grid-template-columns:minmax(0,1fr);gap:28px}.res-actions{flex-direction:column}.res-actions .btn{width:100%}.hist-records{grid-template-columns:repeat(2,minmax(0,1fr))}.history .card,.how,.empty{padding:22px 20px}.hist-totals{gap:22px}.drawer{padding:22px 18px}}.btn-sm{padding:8px 14px;border-radius:10px;font-size:.875rem}.account{display:inline-flex;align-items:center;gap:10px;padding:4px 12px 4px 4px;border-radius:999px;background:var(--card);font-size:.875rem;font-weight:600;transition:background-color .15s ease,transform .12s var(--ease-out)}.account:active{transform:scale(.97)}.avatar{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:15px;background:var(--raised);color:var(--accent);font-weight:800}@media (hover: hover) and (pointer: fine){.account:hover{background:var(--raised)}}.modal-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:grid;place-items:center;padding:16px;pointer-events:none}.modal-root.is-open{pointer-events:auto}.modal-root .drawer-backdrop{position:absolute}.modal-root.is-open .drawer-backdrop{opacity:1}.modal{position:relative;width:min(460px,100%);background:var(--card);border:1px solid var(--line);border-radius:24px;padding:26px 28px 28px;display:flex;flex-direction:column;gap:18px;box-shadow:0 24px 64px -24px #0009;opacity:0;transform:scale(.96);transition:opacity .2s var(--ease-out),transform .2s var(--ease-out)}.is-open .modal{opacity:1;transform:none}.form{display:flex;flex-direction:column;gap:16px}.form .muted{line-height:1.5}.input{width:100%;font:inherit;font-size:1rem;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:13px 14px;transition:border-color .15s ease}.input::placeholder{color:var(--dim)}.input:focus{outline:none;border-color:var(--accent)}.input-code{font-size:1.75rem;font-weight:800;letter-spacing:.5em;text-align:center;padding-left:calc(14px + .5em);font-variant-numeric:tabular-nums}.form-error{color:var(--miss);font-size:.9375rem;margin-top:-6px}.form-links{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.link-btn{color:var(--accent);font-size:.875rem;font-weight:600;padding:4px 0}.link-btn:disabled{color:var(--muted);opacity:1}@media (hover: hover) and (pointer: fine){.link-btn:not(:disabled):hover{text-decoration:underline;text-underline-offset:3px}}.dev-note{font-size:.875rem;padding:10px 12px;border-radius:10px;background:var(--accent-bg);color:var(--text)}.banner{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:18px;background:var(--accent-bg);border:1px solid rgba(56,189,248,.3);font-size:.9375rem;line-height:1.5;animation:rise .24s var(--ease-out) both}.banner-quiet{background:var(--card);border-color:var(--line);justify-content:space-between}.lang-offer{flex-wrap:wrap}.lang-offer-actions{display:flex;align-items:center;gap:14px}.banner-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:var(--accent);color:var(--bg);flex-shrink:0}.board-page{display:flex;flex-direction:column;gap:12px}.board-card{padding:32px 36px}.board-head{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:22px}.board-filters{display:flex;gap:8px;flex-wrap:wrap}.board-cta{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:14px 16px;border-radius:14px;background:var(--bg);margin-bottom:18px}.board-me{margin-bottom:14px;color:var(--muted)}.board-empty{padding:28px 0}.board-table .rank{width:72px}.board-table tr.is-me td,.board-table tr.is-me td b{color:var(--accent)}.medal{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:9px;font-weight:800;background:var(--raised)}.medal.m1{background:var(--accent);color:var(--bg)}.board-skeleton{display:flex;flex-direction:column;gap:10px;padding:8px 0}.board-skeleton span{height:40px;border-radius:10px;background:linear-gradient(90deg,var(--bg) 0%,var(--raised) 50%,var(--bg) 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}@keyframes shimmer{to{background-position:-200% 0}}.board-rules{padding:0 8px;max-width:80ch}@media (prefers-reduced-motion: reduce){.modal{transition:opacity .15s ease;transform:none}.board-skeleton span{animation:none}}@media (max-width: 860px){.board-card{padding:22px 18px}.modal{padding:22px 20px}.account-name{display:none}.account{padding:4px}}:root{--f-pinky: #f472b6;--f-ring: #fbbf24;--f-middle: #34d399;--f-index: #38bdf8;--f-thumb: #94a3b8;--trophy: #fbbf24}.lessons{display:flex;flex-direction:column;gap:16px}.lessons-head{padding:32px 36px;display:flex;justify-content:space-between;align-items:flex-end;gap:24px 40px;flex-wrap:wrap}.lessons-intro{max-width:62ch;display:flex;flex-direction:column;gap:10px}.lessons-intro .muted{line-height:1.55}.lessons-actions{display:flex;flex-direction:column;align-items:flex-end;gap:12px}.lesson-streak{display:grid;grid-template-columns:auto auto;justify-content:start;align-items:center;gap:6px 16px;margin-top:6px}.lesson-streak>.muted{grid-column:1 / -1}.lesson-streak-count{font-weight:800;font-size:1rem}.lesson-streak-week{list-style:none;display:flex;gap:6px;margin:0;padding:0}.lesson-streak-week li{width:22px;height:22px;border-radius:6px;background:var(--bg);border:1px solid var(--line)}.lesson-streak-week li.is-on{background:var(--accent);border-color:var(--accent)}.lesson-streak-week li:last-child{outline:2px solid var(--line);outline-offset:2px}.lesson-grid{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.lesson-card{width:100%;height:100%;min-height:150px;text-align:left;display:flex;flex-direction:column;gap:10px;padding:18px;border-radius:20px;background:var(--card);border:1px solid var(--line);transition:border-color .15s ease,transform .12s var(--ease-out),background-color .15s ease}.lesson-card:active:not(:disabled){transform:scale(.98)}.lesson-card.is-next{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.lesson-card:disabled{opacity:.55}@media (hover: hover) and (pointer: fine){.lesson-card:not(:disabled):hover{transform:translateY(-2px);border-color:var(--dim)}.lesson-card.is-next:hover{border-color:var(--accent)}}.lesson-num{font-size:.8125rem;font-weight:700;color:var(--muted)}.lesson-keys{display:flex;gap:6px;flex-wrap:wrap}.key-sm{width:34px;height:34px;border-radius:9px;font-size:.9375rem}.lesson-name{font-weight:700;font-size:.9375rem}.lesson-foot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:8px}.lesson-lock{display:inline-flex;align-items:center;gap:6px}.stars{display:inline-flex;gap:3px}.stars svg{stroke-width:1.6}.star-on{fill:var(--accent);stroke:var(--accent)}.star-off{fill:none;stroke:var(--dim)}.stars-animate svg{animation:star .36s var(--ease-out) both}@keyframes star{0%{opacity:0;transform:scale(.6) rotate(-12deg)}}.lesson .toolbar{gap:16px}.back-btn{display:inline-flex;align-items:center;gap:4px}.lesson-title{font-weight:700;font-size:.9375rem}.lesson-body{padding:28px 40px 32px;display:flex;flex-direction:column;gap:22px}.lesson-meta{display:flex;align-items:center;gap:16px}.lesson-progress{flex:1;height:6px;border-radius:3px;background:var(--bg);overflow:hidden}.lesson-progress span{display:block;height:6px;border-radius:3px;background:var(--accent);transition:width .16s var(--ease-out)}.lesson-text{position:relative;cursor:text}.lesson-text p{font-size:1.875rem;line-height:3rem;color:var(--dim);word-break:break-word}.lesson-text .done{color:var(--text)}.lesson-text .cur{color:var(--bg);background:var(--accent);border-radius:6px;padding:0 2px;transition:background-color .12s ease}.lesson-text .cur.is-wrong{background:var(--miss)}.lesson-text.is-blurred p{filter:blur(5px);opacity:.5}.refocus-btn{position:absolute;top:0;right:0;bottom:0;left:0;font-weight:600;color:var(--text)}.finger-hint{min-height:1.5em;text-align:center;color:var(--muted)}.kbd{display:flex;flex-direction:column;align-items:center;gap:6px;-webkit-user-select:none;user-select:none}.kbd-row{display:flex;gap:6px}.kbd-key{position:relative;width:50px;height:50px;border-radius:10px;display:grid;place-items:center;background:var(--bg);border:1px solid var(--line);font-weight:700;font-size:1rem;color:var(--text);transition:background-color .15s ease,color .15s ease}.kbd-key:after{content:"";position:absolute;bottom:6px;left:50%;width:6px;height:6px;margin-left:-3px;border-radius:3px;background:var(--fc);opacity:.9}.kbd-key.f-pinky{--fc: var(--f-pinky)}.kbd-key.f-ring{--fc: var(--f-ring)}.kbd-key.f-middle{--fc: var(--f-middle)}.kbd-key.f-index{--fc: var(--f-index)}.kbd-key.f-thumb{--fc: var(--f-thumb)}.kbd-key.is-home{box-shadow:inset 0 -3px 0 var(--raised)}.kbd-key.is-off{opacity:.3}.kbd-key.is-fresh{border-color:var(--accent)}.kbd-key.is-next{background:var(--accent);border-color:var(--accent);color:var(--bg);opacity:1}.kbd-key.is-next:after{background:var(--bg)}.kbd-key.is-wrong{background:var(--miss);border-color:var(--miss);color:var(--bg)}.kbd-space{width:320px;font-size:.8125rem;font-weight:600;color:var(--muted)}.finger-legend{display:flex;justify-content:center;gap:18px;flex-wrap:wrap;font-size:.8125rem;color:var(--muted)}.finger-legend span:before{content:"";display:inline-block;width:8px;height:8px;border-radius:4px;margin-right:7px;vertical-align:1px}.finger-legend .f-pinky:before{background:var(--f-pinky)}.finger-legend .f-ring:before{background:var(--f-ring)}.finger-legend .f-middle:before{background:var(--f-middle)}.finger-legend .f-index:before{background:var(--f-index)}.finger-legend .f-thumb:before{background:var(--f-thumb)}.lesson-result{padding:40px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px}.lesson-result .muted{max-width:52ch}.lesson-stats{display:flex;gap:0;margin:8px 0}.lesson-stats div{padding:0 26px}.lesson-stats div+div{border-left:1px solid var(--line)}.lesson-stats dt{font-size:.8125rem;color:var(--muted)}.lesson-stats dd{font-size:1.75rem;font-weight:800}.lesson-stats small{font-size:.875rem;font-weight:500;color:var(--muted)}@media (prefers-reduced-motion: reduce){.stars-animate svg{animation-name:fade}.lesson-progress span{transition:none}}@media (max-width: 1100px){.lesson-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 860px){.lesson-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.lessons-head{padding:22px 20px}.lessons-actions{align-items:stretch;width:100%}.lesson-body{padding:20px 16px}.lesson-text p{font-size:1.375rem;line-height:2.25rem}.kbd-key{width:calc((100vw - 32px - 32px - 72px) / 13);height:36px;font-size:.75rem;border-radius:7px}.kbd-key:after{bottom:3px;width:4px;height:4px;margin-left:-2px}.kbd-row{gap:4px}.kbd-space{width:55vw}.lesson .toolbar .small{display:none}.lesson-stats{flex-wrap:wrap;justify-content:center;row-gap:12px}.lesson-stats div{padding:0 14px}.lesson-result{padding:28px 18px}}.kbd-alt{position:absolute;top:4px;left:6px;font-size:.625rem;font-weight:600;color:var(--muted)}.kbd-key.is-next .kbd-alt{color:var(--bg)}.kbd-gap{display:block;flex-shrink:0}.kbd-gap-tab{width:28px}.kbd-gap-caps{width:56px}.kbd-shift{width:86px;font-size:.8125rem}.key-wide{width:auto;padding:0 9px}.lesson-text .cur{white-space:pre}@media (max-width: 860px){.kbd-gap-tab{width:10px}.kbd-gap-caps{width:20px}.kbd-shift{width:34px;font-size:.5625rem}.kbd-alt{display:none}}.races{display:flex;flex-direction:column;gap:16px}.races-head{padding:32px 36px;display:flex;justify-content:space-between;align-items:flex-end;gap:20px 40px;flex-wrap:wrap}.races-intro{max-width:62ch;display:flex;flex-direction:column;gap:10px}.races-name{padding:20px 24px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px 16px}.races-name .muted{grid-column:1 / -1}.races-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.race-mode{padding:28px;display:flex;flex-direction:column;gap:12px;align-items:flex-start}.race-mode .h2{font-size:1.25rem;margin:0}.race-mode .btn{margin-top:8px}.races-hint{text-align:center}.race-room .toolbar{gap:16px}.race-clock{font-weight:800;color:var(--accent);font-size:1.125rem}.race-body{padding:24px 32px 32px;display:flex;flex-direction:column;gap:22px}.race-status{color:var(--muted)}.race-status-row{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}.race-track-wrap{position:relative}.track{list-style:none;display:flex;flex-direction:column;gap:8px}.lane{display:grid;grid-template-columns:180px minmax(0,1fr) 120px;align-items:center;gap:16px;padding:8px 12px;border-radius:14px;background:var(--bg)}.lane.is-me{box-shadow:inset 0 0 0 1px var(--accent)}.lane.is-gone{opacity:.45}.lane-name{display:flex;align-items:center;gap:10px;min-width:0}.lane-num{width:22px;height:22px;border-radius:7px;background:var(--raised);display:grid;place-items:center;font-size:.75rem;font-weight:800;flex-shrink:0}.lane-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}.lane-road{position:relative;height:34px;border-bottom:2px dashed var(--line)}.lane-car-rail{position:absolute;left:0;bottom:2px;width:calc(100% - 44px);transition:transform .22s linear}.lane-finish{position:absolute;right:0;top:0;bottom:-2px;width:6px;background:repeating-linear-gradient(to bottom,var(--text) 0 6px,var(--bg) 6px 12px);opacity:.6;border-radius:2px}.car{display:block;fill:var(--raised)}.car-wheel{fill:var(--muted)}.car-glass{fill:var(--bg)}.lane.is-me .car{fill:var(--accent)}.lane-stat{display:flex;align-items:baseline;justify-content:flex-end;gap:6px}.place{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:8px;background:var(--raised);font-weight:800;font-size:.8125rem;align-self:center;animation:stamp .32s var(--ease-out) both}.place-1{background:var(--accent);color:var(--bg)}.countdown{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#0b12208c;border-radius:14px}.countdown-num{font-size:5rem;font-weight:800;color:var(--accent);animation:count .3s var(--ease-out) both}@keyframes count{0%{opacity:0;transform:scale(.9)}}.race-text.is-locked p{opacity:.45}.race-results{display:flex;flex-direction:column;gap:18px;align-items:center}.race-results .table-wrap{width:100%}@media (prefers-reduced-motion: reduce){.lane-car-rail{transition:none}.countdown-num,.place{animation-name:fade}}@media (max-width: 860px){.races-head{padding:22px 20px}.races-modes,.races-name{grid-template-columns:minmax(0,1fr)}.race-body{padding:18px 14px 22px}.lane{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name stat" "road road";gap:4px 10px}.lane-name{grid-area:name}.lane-stat{grid-area:stat}.lane-road{grid-area:road}.countdown-num{font-size:3.5rem}}.btn-google{background:#fff;color:#1f1f1f;border-color:#fff;text-decoration:none}@media (hover: hover) and (pointer: fine){.btn-google:hover{background:#f1f5f9;border-color:#f1f5f9}}.or{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:.8125rem}.or:before,.or:after{content:"";flex:1;height:1px;background:var(--line)}.races-info{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}.race-stats,.race-board{padding:26px 28px;display:flex;flex-direction:column;gap:14px}.race-stats .h2,.race-board .h2{margin:0;font-size:1.125rem}.race-board .board-head{margin:0}.race-stats-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.race-stats-row dt{font-size:.75rem;color:var(--muted)}.race-stats-row dd{font-size:1.5rem;font-weight:800}.race-recent{list-style:none;display:flex;flex-direction:column}.race-recent li{display:flex;align-items:center;gap:8px;padding:9px 0;border-top:1px solid var(--line)}.race-recent .medal{width:26px;height:26px;font-size:.8125rem}@media (max-width: 860px){.races-info{grid-template-columns:minmax(0,1fr)}.race-stats-row{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:12px}.race-stats,.race-board{padding:20px 18px}}:root{--typing-font: var(--ui);--text-scale: 1}:root[data-theme=light]{--bg: #f1f5f9;--card: #ffffff;--accent: #0369a1;--text: #0b1220;--muted: #475569;--dim: #64748b;--line: #e2e8f0;--raised: #e2e8f0;--word: #e0f2fe;--bar: #bae6fd;--miss: #dc2626;--miss-bg: rgba(220, 38, 38, .1);--accent-bg: rgba(3, 105, 161, .1);color-scheme:light}@media (prefers-color-scheme: light){:root[data-theme=system]{--bg: #f1f5f9;--card: #ffffff;--accent: #0369a1;--text: #0b1220;--muted: #475569;--dim: #64748b;--line: #e2e8f0;--raised: #e2e8f0;--word: #e0f2fe;--bar: #bae6fd;--miss: #dc2626;--miss-bg: rgba(220, 38, 38, .1);--accent-bg: rgba(3, 105, 161, .1);color-scheme:light}}:root[data-theme=light] .btn-google{border-color:var(--line)}:root[data-theme=light] .bars-record{border-top-color:#0b122059}:root[data-theme=light] .lane-finish{background:repeating-linear-gradient(to bottom,var(--text) 0 6px,var(--card) 6px 12px)}@media (prefers-color-scheme: light){:root[data-theme=system] .btn-google{border-color:var(--line)}:root[data-theme=system] .bars-record{border-top-color:#0b122059}}.lines{font-family:var(--typing-font);font-size:calc(var(--text-size) * var(--text-scale));line-height:calc(var(--lh) * var(--text-scale))}.viewport{height:calc(var(--lh) * var(--text-scale) * 3)}.caret{height:calc(2.125rem * var(--text-scale))}.lesson-text p{font-family:var(--typing-font);font-size:calc(1.875rem * var(--text-scale));line-height:calc(3rem * var(--text-scale))}@media (max-width: 860px){.caret{height:calc(1.625rem * var(--text-scale))}.lesson-text p{font-size:calc(1.375rem * var(--text-scale));line-height:calc(2.25rem * var(--text-scale))}}.size-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;padding:3px;border-radius:12px;background:var(--bg)}.size-opt{height:44px;border-radius:9px;display:grid;place-items:center;font-weight:700;color:var(--muted);transition:background-color .15s ease,color .15s ease}.size-opt[aria-checked=true]{background:var(--accent);color:var(--bg)}.custom-text{display:flex;flex-direction:column;gap:8px}.textarea{resize:vertical;min-height:120px;line-height:1.5;font-size:.9375rem}.custom-text-foot{display:flex;justify-content:space-between;align-items:center;gap:12px}.oauth-row{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:8px}.btn-oauth{padding:12px 10px;text-decoration:none;font-size:.9375rem}.btn-yandex,.btn-vk{background:var(--bg);color:var(--text);border-color:var(--line)}.btn-oauth[aria-disabled=true]{opacity:.5}.consent{display:flex;gap:10px;align-items:flex-start;font-size:.875rem;line-height:1.45;color:var(--muted);cursor:pointer}.consent input{flex:none;width:18px;height:18px;margin:1px 0 0;accent-color:var(--accent);cursor:pointer}.consent a{color:var(--accent);text-underline-offset:2px}.btn-danger{background:var(--miss);border-color:var(--miss);color:var(--bg)}.plain-link{color:inherit;text-decoration:none}.plain-link:hover{text-decoration:underline;text-underline-offset:3px}.ach-badge{display:inline-grid;place-items:center;border-radius:14px;background:var(--bg);color:var(--dim);flex-shrink:0;border:1px dashed var(--line)}.ach-badge.is-on{border:0;color:var(--bg)}.ach-badge.is-on.ach-test{background:var(--accent)}.ach-badge.is-on.ach-speed{background:var(--f-ring)}.ach-badge.is-on.ach-habit{background:var(--f-middle)}.ach-badge.is-on.ach-race{background:var(--f-pinky)}.ach-badge.is-on.ach-lessons{background:var(--f-index)}.ach-badge.is-on.ach-tournament{background:var(--trophy, #fbbf24)}.toast{position:fixed;left:50%;bottom:24px;z-index:40;display:flex;align-items:center;gap:14px;width:min(440px,calc(100vw - 32px));padding:14px 14px 14px 16px;border-radius:18px;background:var(--card);border:1px solid var(--line);box-shadow:0 18px 48px -16px #0000008c;transform:translate(-50%);animation:toast-in .28s var(--ease-out) both}.toast>span:not(.ach-badge){display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,12px)}}.profile{display:flex;flex-direction:column;gap:16px}.profile-head{padding:28px 32px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}.avatar-lg{width:64px;height:64px;border-radius:22px;font-size:1.75rem}.profile-name .muted{margin-top:2px}.profile-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}.profile-ach,.profile>.card:last-child{padding:28px 32px}.profile-ach .h2 .muted,.daily-board .h2 .muted{font-weight:500;margin-left:8px}.ach-grid{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.ach{display:flex;align-items:center;gap:12px;padding:10px;border-radius:14px}.ach>span{display:flex;flex-direction:column;min-width:0}.ach:not(.is-on) b{color:var(--muted)}.profile-best{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:8px}.profile-best div{display:flex;flex-direction:column}.profile-best b{font-size:1.75rem;font-weight:800}.profile-recent-title{margin-top:22px}.profile-lessons{margin-top:16px}.daily{display:flex;flex-direction:column;gap:16px}.daily-head{padding:32px 36px;display:flex;justify-content:space-between;align-items:flex-end;gap:20px 40px;flex-wrap:wrap}.daily-intro{max-width:64ch;display:flex;flex-direction:column;gap:10px}.daily-play{padding:28px 40px 32px;display:flex;flex-direction:column;gap:18px}.strict{display:flex;flex-direction:column;gap:20px}.daily-result{display:flex;flex-direction:column;align-items:flex-start;gap:12px}.daily-result .res-wpm{margin-top:0}.daily-board{padding:28px 32px;display:flex;flex-direction:column;gap:12px}.daily-board .h2{margin:0}.classes{display:flex;flex-direction:column;gap:16px}.classes-head{padding:28px 32px;display:flex;flex-direction:column;gap:8px}.classes-head .muted{max-width:70ch}.classes-forms{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.class-form{padding:24px 28px;display:flex;flex-direction:column;gap:14px;align-items:flex-start}.class-form .field{width:100%}.class-form .h2{margin:0}.input-classcode{font-size:1.25rem;font-weight:800;letter-spacing:.3em;text-transform:uppercase}.class-list{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.class-card{width:100%;text-align:left;padding:20px;display:flex;flex-direction:column;gap:6px;transition:border-color .15s ease,transform .12s var(--ease-out)}@media (hover: hover) and (pointer: fine){.class-card:hover{border-color:var(--dim);transform:translateY(-2px)}}.class-role{font-size:.8125rem;color:var(--muted)}.class-body{padding:24px 32px 30px;display:flex;flex-direction:column;gap:18px}.class-invite{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.class-code{font-size:1.75rem;font-weight:800;letter-spacing:.2em;color:var(--accent)}.class-table td{vertical-align:middle}.class-me{grid-template-columns:repeat(3,minmax(0,1fr));max-width:520px}@media (prefers-reduced-motion: reduce){.toast{animation-name:fade}}@media (max-width: 860px){.profile-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.ach-grid{grid-template-columns:minmax(0,1fr)}.profile-head,.profile-ach,.profile>.card:last-child,.daily-head,.daily-board,.classes-head,.class-form{padding:20px 18px}.daily-play,.class-body{padding:20px 16px}.classes-forms,.class-list{grid-template-columns:minmax(0,1fr)}.profile-best{grid-template-columns:repeat(2,minmax(0,1fr))}.oauth-row{grid-auto-flow:row}}.profile-links{display:grid;grid-template-columns:1fr 1fr;gap:8px}@media (max-width: 860px){.profile-links{grid-template-columns:1fr}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.page-loading{min-height:60vh}.weekly-left{font-size:1rem}.podium{list-style:none;margin:0;padding:0;display:grid;gap:10px}.podium li{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:14px;background:var(--bg);border:1px solid var(--line)}.podium li .muted{margin-left:auto}.daily>.seg{align-self:flex-start}.mode-select select{font:inherit;font-size:.875rem;font-weight:600;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:7px 30px 7px 14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 16px) 52%,calc(100% - 11px) 52%;background-size:5px 5px;background-repeat:no-repeat}.mode-select select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ch.nl{color:var(--dim);padding:0 .15em}.ch.nl.ok,.quote-from{color:var(--muted)}.kbd-num{display:grid;grid-template-columns:repeat(4,64px);grid-auto-rows:56px;gap:8px;justify-content:center;align-items:stretch;justify-items:stretch}.kbd-num .kbd-key{width:auto;height:auto;min-width:0}@media (max-width: 600px){.kbd-num{grid-template-columns:repeat(4,52px);grid-auto-rows:46px}}.lines.is-code{font-family:JetBrains Mono,ui-monospace,monospace;font-size:calc(var(--text-size) * var(--text-scale) * .82);font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0}.seg button{white-space:nowrap}@media (max-width: 600px){.toolbar .seg:first-child{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;width:100%}.toolbar .seg:first-child button{padding-left:0;padding-right:0;font-size:.8125rem}}
