@font-face{font-family:Sora;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/b886574ba42c3409-s.1_wjncogyh-s7.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Sora;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/c41ca59f1c34ba31-s.p.2y2uoi4t910qy.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Sora Fallback;src:local(Arial);ascent-override:85.29%;descent-override:25.5%;line-gap-override:0.0%;size-adjust:113.73%}.sora_53a4f7ee-module__lOHCoq__className{font-family:Sora,Sora Fallback;font-style:normal}.sora_53a4f7ee-module__lOHCoq__variable{--font-sora:"Sora", "Sora Fallback"}
@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.2f7nqdagzwx2-.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.176arc174-8zp.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.0bp8oijd_gu96.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.1fby2rem9ngyr.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.0vfdmo25voy_0.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2?dpl=dpl_QbvPjipwf5eRM5HeTdd52Fhhaut4)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_4dc6e007-module__VZbHCG__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_4dc6e007-module__VZbHCG__variable{--font-jbmono:"JetBrains Mono", "JetBrains Mono Fallback"}
:root{--paper:#f4f2ec;--paper-2:#ebe8df;--sheet:#fffdf8;--rule:#dcd8cc;--rule-strong:#c3beaf;--ink:#17181c;--ink-2:#2f3238;--muted:#4f535c;--faint:#5f636d;--accent:#1d4ed8;--accent-ink:#1639a8;--accent-fill:#1d4ed8;--on-accent:#fff;--accent-soft:#1d4ed817;--error:#b42318;--error-soft:#b423181a;--on-error:#fff;--mark:#1d4ed8;--mark-lip:#1639a8;--burst:#b45309;--burst-ink:#92400e;--burst-soft:#b453091f;--lift:0 1px 0 #17181c0a, 0 22px 44px -30px #17181c52;--key:inset 0 -2px 0 #17181c1f;--r-lg:10px;--r:8px;--r-sm:6px;--maxw:960px;--measure:68ch;--font-sans:var(--font-sora), ui-sans-serif, system-ui, sans-serif;--font-mono:var(--font-jbmono), ui-monospace, "SFMono-Regular", Menlo, monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--paper:#121315;--paper-2:#1b1d20;--sheet:#18191c;--rule:#2c2f34;--rule-strong:#41454c;--ink:#ecebe6;--ink-2:#d4d3cd;--muted:#a6a9b0;--faint:#8f939b;--accent:#7ea6ff;--accent-ink:#a9c3ff;--accent-fill:#7ea6ff;--on-accent:#0b1226;--accent-soft:#7ea6ff24;--error:#ff8f85;--error-soft:#ff8f8524;--on-error:#1f0907;--mark:#3567e8;--mark-lip:#2449b8;--burst:#f59e0b;--burst-ink:#fbbf24;--burst-soft:#f59e0b29;--lift:0 0 0 1px #0003;--key:inset 0 -2px 0 #00000059;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}body{background:var(--paper);min-height:100vh;color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}::selection{background:var(--accent-soft);color:var(--ink)}code{font-family:var(--font-mono);border:1px solid var(--rule);background:var(--paper-2);border-radius:4px;padding:1px 5px;font-size:.9em}.container{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 24px}@media (max-width:480px){.container{padding:0 16px}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:50;color:var(--paper);background:var(--ink);border-radius:var(--r-sm);padding:10px 16px;font-size:14px;font-weight:600;position:absolute;top:-60px;left:12px}.skip-link:focus{top:12px}#main:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.site-header{border-bottom:1px solid var(--rule);background:var(--paper)}.site-header .inner{justify-content:space-between;align-items:center;gap:16px;min-height:60px;display:flex}.brand{letter-spacing:-.025em;align-items:center;gap:10px;min-height:44px;font-size:18px;font-weight:700;display:inline-flex}.brand-mark{flex-shrink:0;display:block}.brand-name{color:var(--ink)}.brand-accent{color:var(--accent)}.nav-links{color:var(--muted);align-items:center;gap:4px;font-size:14.5px;font-weight:500;display:flex}.nav-links a{border-radius:var(--r-sm);align-items:center;min-height:40px;padding:0 10px;transition:color .15s,background-color .15s;display:inline-flex}.nav-links a:hover{color:var(--ink);background:var(--paper-2)}.nav-short{display:none}@media (max-width:640px){.site-header .inner{flex-wrap:wrap;gap:0;min-height:0;padding-top:4px}.nav-links{border-top:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;gap:0;width:calc(100% + 16px);margin:0 -8px;font-size:14px}.nav-links a{white-space:nowrap;min-height:44px;padding:0 clamp(4px,2vw,8px)}.nav-long{display:none}.nav-short{display:inline}}.hero{padding-top:36px;padding-bottom:20px}.hero h1{letter-spacing:-.035em;margin:0;font-size:clamp(26px,5vw,44px);font-weight:800;line-height:1.08}.hero .sub{color:var(--muted);margin:8px 0 0;font-size:16.5px}@media (max-width:640px){.hero{padding-top:20px;padding-bottom:12px}.hero .sub{margin-top:6px;font-size:15px}}.history-teaser{white-space:nowrap;text-overflow:ellipsis;width:fit-content;max-width:100%;height:40px;color:var(--muted);-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-color:var(--rule-strong);text-decoration-color:var(--rule-strong);text-underline-offset:5px;margin-top:4px;font-size:13.5px;font-weight:500;line-height:40px;transition:color .15s,text-decoration-color .15s;display:block;overflow:hidden}.history-teaser:hover{color:var(--ink);-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.history-teaser-num{color:var(--ink);font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:600}.history-teaser-sep{color:var(--faint);margin:0 7px}@media (max-width:360px){.history-teaser{font-size:12.5px}}.wordset-switcher{z-index:1;align-items:flex-end;gap:2px;margin-bottom:-1px;padding-left:4px;display:flex;position:relative}.wordset-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);align-self:center;margin-right:10px;font-size:12px}.wordset-tab{min-height:42px;font-family:var(--font-sans);color:var(--muted);border-radius:var(--r) var(--r) 0 0;cursor:pointer;background:0 0;border:1px solid #0000;border-bottom:0;padding:0 16px;font-size:14px;font-weight:600;transition:color .15s,background-color .15s}.wordset-tab:hover{color:var(--ink);background:var(--paper-2)}.wordset-tab.active{color:var(--ink);background:var(--sheet);border-color:var(--rule);box-shadow:inset 0 2px 0 var(--accent)}.wordset-tab:focus-visible{outline-offset:-3px}@media (max-width:480px){.wordset-switcher{padding-left:0}.wordset-label{display:none}.wordset-tab{white-space:nowrap;flex:auto;padding:0 6px;font-size:13.5px}}.test-wrap{margin-top:0}main.page .test-wrap{margin-top:4px}.test{background:var(--sheet);border:1px solid var(--rule);border-radius:var(--r-lg);box-shadow:var(--lift);padding:22px 26px 18px}.test-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;margin-bottom:14px;display:flex}.durations{background:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r);gap:3px;padding:3px;display:inline-flex}.dur{min-width:52px;min-height:38px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--muted);border-radius:var(--r-sm);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0 12px;font-size:13.5px;font-weight:500;transition:color .15s,background-color .15s;display:inline-flex}.dur:hover{color:var(--ink);background:var(--sheet)}.dur.active{color:var(--on-accent);background:var(--accent-fill);box-shadow:var(--key);font-weight:600}@media (pointer:coarse){.dur{min-height:42px}}.dur-short{display:none}.timer{font-family:var(--font-mono);align-items:baseline;gap:6px;display:inline-flex}.timer-num{letter-spacing:-.03em;text-align:right;min-width:3ch;color:var(--accent);font-variant-numeric:tabular-nums;font-size:30px;font-weight:600;line-height:1}.timer-unit{color:var(--faint);font-size:12.5px}.stats{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);grid-template-columns:repeat(4,1fr);margin-bottom:14px;display:grid}.stat{border-left:1px solid var(--rule);flex-direction:column-reverse;gap:2px;padding:10px 14px;display:flex}.stat:first-child{border-left:0;padding-left:2px}.stat-num{font-family:var(--font-mono);letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums;font-size:24px;font-weight:600;line-height:1.15}.stat-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);white-space:nowrap;font-size:11px}.stat-label abbr{text-decoration:none}.stats.is-idle .stat-num{color:var(--faint)}@media (max-width:480px){.test{padding:14px 14px 12px}.test-bar{flex-wrap:nowrap;gap:8px;margin-bottom:10px}.dur{white-space:nowrap;min-width:0;padding:0 9px;font-size:13px}.dur-full{display:none}.dur-short{display:inline}.timer{white-space:nowrap;flex-shrink:0}.timer-num{font-size:24px}.timer-unit{font-size:11.5px}.stats{margin-bottom:10px}.stat{padding:7px 8px}.stat:first-child{padding-left:0}.stat-num{font-size:18px}.stat-label{letter-spacing:.04em;font-size:10px}}@media (max-width:360px){.test-bar{flex-wrap:wrap}.dur{padding:0 6px}.stat-label{letter-spacing:0;font-size:9.5px}}.passage{font-family:var(--font-mono);color:var(--faint);cursor:text;border-radius:var(--r-sm);-webkit-user-select:none;user-select:none;height:calc(6em + 12px);margin:0 -6px;padding:6px;font-size:22px;line-height:2;transition:box-shadow .15s;overflow:hidden}@media (max-width:520px){.passage{font-size:18px}}@media (max-width:399.98px){.passage{height:calc(4em + 12px)}}.test.is-large .passage,:root[data-large=on] .test.is-kids .passage{font-size:28px}@media (max-width:520px){.test.is-large .passage,:root[data-large=on] .test.is-kids .passage{font-size:22px}}.passage-inner{position:relative}.word{vertical-align:top;border-radius:4px;margin-right:.55ch;padding:0 1px;display:inline-block;position:relative}.word-active{background:var(--accent-soft)}.word-wrong{text-decoration:underline;-webkit-text-decoration-color:var(--error);text-decoration-color:var(--error);text-underline-offset:6px;text-decoration-thickness:2px}.char{transition:color 50ms}.char-correct{color:var(--ink)}.char-incorrect{color:var(--error);background:var(--error-soft);text-underline-offset:4px;border-radius:3px;text-decoration:underline;text-decoration-thickness:2px}.char-extra{color:var(--error);text-decoration:line-through;text-decoration-thickness:2px}.char-missed{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-color:var(--error);text-decoration-color:var(--error);text-underline-offset:4px;text-decoration-thickness:2px}.word-caret-end:after{content:"";border-left:2px solid var(--accent);animation:1s step-end infinite caret;position:absolute;top:.45em;bottom:.45em;right:-1px}.char-cursor{border-left:2px solid var(--accent);margin-left:-2px;animation:1s step-end infinite caret}@keyframes caret{50%{border-color:#0000}}.test:has(.test-stage.is-done) .stats{display:none}.test:has(.test-stage.is-done) .timer{visibility:hidden}.test-stage{position:relative}.test-input{opacity:0;color:#0000;caret-color:#0000;cursor:text;z-index:1;background:0 0;border:0;width:100%;height:100%;margin:0;padding:0;font-size:16px;position:absolute;inset:0}.test-stage.is-done .test-input{display:none}.test-stage:focus-within .passage{box-shadow:0 0 0 1px var(--accent), 0 0 0 4px var(--accent-soft)}.passage-hint{min-height:1.45em;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin:-4px 0 8px;font-size:12.5px;line-height:1.45;overflow:hidden}.hint-short{display:none}@media (max-width:400px){.hint-long{display:none}.hint-short{display:inline}}.passage-hint-warn{color:var(--error);font-weight:600}.passage-hint-drill{white-space:nowrap;align-items:baseline;gap:12px;margin:-8px -4px 4px;padding:4px;display:flex;overflow:hidden}.drill-keys{text-overflow:ellipsis;min-width:0;overflow:hidden}.drill-keys strong{font-family:var(--font-mono);color:var(--ink);font-weight:600}.drill-back{color:var(--accent);text-underline-offset:3px;flex:none;text-decoration:underline;text-decoration-thickness:1px}.drill-back:hover{color:var(--accent-ink);text-decoration-thickness:2px}@media (max-width:400px){.drill-back-wide{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}.only-coarse{display:none}@media (pointer:coarse){.only-coarse{display:inline}.only-fine{display:none}}.test-actions{flex-wrap:wrap;align-items:center;gap:8px 16px;margin-top:14px;display:flex}.test-keys,.test-mobile-note,.test-legend{color:var(--muted);font-size:13px}kbd,.test-keys kbd{min-width:1.9em;font-family:var(--font-mono);text-align:center;color:var(--ink);background:var(--sheet);border:1px solid var(--rule-strong);border-bottom-width:2px;border-radius:5px;padding:0 6px;font-size:11.5px;line-height:1.7;display:inline-block}.test-legend{margin-left:auto}.test-legend .char{font-family:var(--font-mono);padding:0 2px;font-size:14px}.test-legend .char-missed{color:var(--faint)}@media (max-width:640px){.test-legend{margin-left:0}}.pb{font-family:var(--font-mono);color:var(--muted);margin:10px 0 0;font-size:12.5px;font-weight:500}.pb:empty{display:none}.corpus-note{border-top:1px solid var(--rule);color:var(--faint);margin:14px 0 0;padding-top:12px;font-size:12.5px;line-height:1.6}.corpus-note strong{color:var(--ink-2);font-weight:600}.corpus-sample{font-family:var(--font-mono);font-size:12px}.test-foot{align-items:center;gap:6px 16px;margin-top:10px;display:flex}.test-foot .pb{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;margin:0;overflow:hidden}.test-options{flex-wrap:wrap;flex:none;align-items:center;gap:4px 14px;display:flex}@media (max-width:860px){.test-foot{flex-direction:column;align-items:flex-start}.test-foot .pb{white-space:normal}}.opt{min-height:28px;font-family:var(--font-sans);color:var(--muted);border-radius:var(--r-sm);cursor:pointer;background:0 0;border:0;align-items:center;gap:7px;padding:0 2px;font-size:13px;line-height:1.2;display:inline-flex}.opt:hover,.opt[aria-pressed=true]{color:var(--ink)}.opt:disabled{cursor:not-allowed;opacity:.55}.opt kbd{min-width:1.7em;padding:0 4px}.opt-box{background:var(--sheet);border:1.5px solid var(--faint);border-radius:4px;flex:none;width:16px;height:16px;position:relative}.opt[aria-pressed=true] .opt-box{background:var(--accent-fill);border-color:var(--accent-fill)}.opt[aria-pressed=true] .opt-box:after{content:"";border:solid var(--on-accent);border-width:0 2px 2px 0;width:4px;height:8px;position:absolute;top:1.5px;left:4.5px;transform:rotate(45deg)}@media (pointer:coarse){.opt-fine,.test-options-fine{display:none}}.test-mods{flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;display:flex}.mods .dur{font-size:13px}.mods .dur.active{font-weight:500}.mods .dur:disabled{cursor:not-allowed;opacity:.55}.mods .dur:disabled:hover{color:var(--muted);background:0 0}@media (max-width:480px){.mods .dur{padding:0 10px;font-size:12.5px}}.own-text{width:min(560px,100vw - 32px)}.own-text-lede,.own-text-rules{color:var(--ink-2);margin:0 0 12px;font-size:14px;line-height:1.55}.own-text-rules{color:var(--muted);margin:8px 0 0;font-size:12.5px}.own-text-label{color:var(--ink);margin-bottom:6px;font-size:13px;font-weight:600;display:block}.own-text-field{width:100%;min-height:9.5em;max-height:50vh;font-family:var(--font-mono);color:var(--ink);background:var(--paper-2);border:1px solid var(--rule-strong);border-radius:var(--r-sm);resize:vertical;padding:10px 12px;font-size:14px;line-height:1.5;display:block}.own-text-field[aria-invalid=true]{border-color:var(--error)}.own-text-count{font-family:var(--font-mono);color:var(--muted);margin:8px 0 0;font-size:12.5px;line-height:1.5}.own-text-count-over{color:var(--error);font-weight:600}.own-text-error{color:var(--error);margin:10px 0 0;font-size:13.5px;font-weight:600;line-height:1.5}.own-text-actions{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.fg{background:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r);grid-template-columns:minmax(0,340px) 236px;justify-content:center;align-items:center;gap:0 28px;height:140px;margin-top:12px;padding:11px 14px;display:grid;overflow:hidden}.fg-kb{grid-template-rows:repeat(5,19px);row-gap:3px;min-width:0;display:grid}.fg-key{min-width:0;font-family:var(--font-mono);text-transform:uppercase;color:var(--muted);background:var(--sheet);border:1px solid var(--rule);border-radius:4px;justify-content:center;align-items:center;margin:0 1.5px;font-size:10.5px;line-height:1;display:flex;position:relative;overflow:hidden}.fg-key.is-home{border-color:var(--rule-strong)}.fg-key.is-bump:after{content:"";background:currentColor;border-radius:1px;height:1.5px;position:absolute;bottom:3px;left:35%;right:35%}.fg-key.fg-mod{font-size:12px}.fg-key.is-zone{color:var(--ink-2);background:var(--accent-soft)}.fg-key.is-next{color:var(--on-accent);background:var(--accent-fill);border-color:var(--accent-fill);font-weight:700}.fg-info{flex-direction:column;gap:4px;min-width:0;display:flex}.fg-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);font-size:11px;line-height:14px}.fg-now{align-items:center;gap:10px;min-width:0;height:36px;display:flex}.fg-cap{width:54px;height:36px;font-family:var(--font-mono);color:var(--on-accent);background:var(--accent-fill);border-radius:var(--r-sm);box-shadow:var(--key);flex:none;justify-content:center;align-items:center;font-size:19px;font-weight:700;display:inline-flex}.fg-cap.fg-cap-word{font-size:12px;font-weight:600}.fg-text{flex-direction:column;min-width:0;display:flex}.fg-finger,.fg-reach,.fg-shift{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fg-finger{color:var(--ink);font-size:14px;font-weight:600;line-height:18px}.fg-reach,.fg-shift{color:var(--muted);font-size:12.5px;line-height:17px}.fg-hands{width:150px;height:34px;display:block}.fg-tip{fill:var(--sheet);stroke:var(--rule-strong);stroke-width:1px}.fg-tip.is-on{fill:var(--accent-fill);stroke:var(--accent-fill)}.fg-tip.is-shift{fill:var(--accent-soft);stroke:var(--accent);stroke-dasharray:3 2}@media (max-width:560px){.fg{grid-template-rows:30px auto;grid-template-columns:minmax(0,1fr);justify-content:stretch;gap:8px;height:154px;padding:8px 10px}.fg-kb{grid-template-rows:repeat(5,17px)}.fg-label,.fg-reach,.fg-shift,.fg-hands{display:none}.fg-info{flex-direction:row;align-items:center}.fg-now{height:30px}.fg-cap{width:48px;height:28px;font-size:16px}}@media (pointer:coarse){.fg{display:none}}.test .fg{display:none}@media not all and (pointer:coarse){.test.has-guide .fg,:root[data-guide=on] .test .fg{display:grid}:root[data-guide=off] .test .fg{display:none}}:root[data-typing] :has(.test.is-running)>:not(:has(.test.is-running)):not(.is-running):not(:hover):not(:focus-within){opacity:.3}:root[data-typing] .test.is-running>:not(.test-bar):not(.test-stage):not(.fg):not(dialog):not(:hover):not(:focus-within),:root[data-typing] .test.is-running>.test-bar>:not(.timer):not(:hover):not(:focus-within){opacity:.3}@media (prefers-reduced-motion:no-preference){:root[data-typing] :has(.test.is-running)>:not(:has(.test.is-running)):not(.is-running){transition:opacity .25s ease-out}:root[data-typing] .test.is-running>:not(.test-bar):not(.test-stage):not(.fg):not(dialog),:root[data-typing] .test.is-running>.test-bar>:not(.timer){transition:opacity .25s ease-out}}.shortcuts{width:min(460px,100vw - 32px);max-height:calc(100vh - 32px);color:var(--ink);background:var(--sheet);border:1px solid var(--rule-strong);border-radius:var(--r-lg);box-shadow:var(--lift);padding:0}.shortcuts::backdrop{background:#17181c73}@media (prefers-color-scheme:dark){.shortcuts::backdrop{background:#000000a6}}.shortcuts-inner{padding:20px 22px 18px}.shortcuts-title{font-family:var(--font-sans);letter-spacing:-.01em;margin:0 0 14px;font-size:18px;font-weight:700;line-height:1.3}.shortcuts-list{gap:10px;margin:0;font-size:14px;line-height:1.45;display:grid}.shortcuts-list>div{grid-template-columns:9.5em minmax(0,1fr);align-items:baseline;gap:4px 14px;display:grid}.shortcuts-list dt{color:var(--muted);white-space:nowrap;font-size:13px}.shortcuts-list dd{color:var(--ink-2);margin:0}.shortcuts-close{margin-top:18px}@media (max-width:420px){.shortcuts-inner{padding:16px 16px 14px}.shortcuts-list>div{grid-template-columns:minmax(0,1fr)}}.results{padding:0}.results:focus{outline:none}.results-head{flex-wrap:wrap;align-items:flex-end;gap:8px 16px;margin-bottom:14px;display:flex}.results-wpm{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.05em;color:var(--accent);font-size:clamp(56px,12vw,84px);font-weight:600;line-height:.95}.results-wpm-label{color:var(--ink);flex-direction:column;padding-bottom:4px;font-size:20px;font-weight:700;line-height:1.25;display:flex}.results-wpm-label small{color:var(--muted);font-size:13.5px;font-weight:400}.results-pb,.results-badge{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);border:1.5px solid var(--rule-strong);border-radius:var(--r-sm);align-self:center;margin-left:auto;padding:6px 12px;font-size:12px;font-weight:600}.results-pb-first,.results-pb-new,.results-badge{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}@media (max-width:560px){.results-pb,.results-badge{margin-left:0}}.results-grid{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);flex-wrap:wrap;display:flex}.results-grid>div{border-left:1px solid var(--rule);flex-direction:column-reverse;flex:1 1 0;justify-content:flex-end;gap:2px;min-width:0;padding:12px 16px;display:flex}.results-grid>div:first-child{border-left:0;padding-left:2px}.rg-num{font-family:var(--font-mono);letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ink);font-size:26px;font-weight:600}.rg-chars{font-size:20px;line-height:1.5}.rg-chars span:nth-child(n+2){color:var(--error)}.rg-of{letter-spacing:0;color:var(--faint);margin-left:2px;font-size:.55em;font-weight:500}.rg-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);font-size:11px}@media (min-width:561px){.results-grid>div.rg-wide{flex-grow:2}.rg-wide .rg-label{letter-spacing:.04em}}@media (max-width:560px){.results-grid>div{flex:40%;padding:10px}.results-grid>div:nth-child(odd){border-left:0;padding-left:0}.results-grid>div:nth-child(n+3){border-top:1px solid var(--rule)}.results-grid>div:last-child:nth-child(odd){flex-basis:100%}.rg-num{font-size:22px}.rg-chars{font-size:18px}}.wpm-chart{margin:20px 0 0}.wpm-chart-legend{color:var(--muted);flex-wrap:wrap;gap:4px 16px;margin-bottom:8px;font-size:12.5px;display:flex}.wpm-chart-legend span{align-items:center;gap:6px;display:inline-flex}.sw{width:14px;height:10px;display:inline-block}.sw-line{border-top:2px solid var(--accent);height:0}.sw-bar{background:var(--burst);border-radius:2px}.sw-err{border-left:2px solid var(--error);width:0;height:10px}.wpm-chart-body{gap:8px;display:flex}.wpm-chart-y{width:3ch;font-family:var(--font-mono);color:var(--faint);font-variant-numeric:tabular-nums;font-size:11px;position:relative}.wpm-chart-y span{position:absolute;right:0;transform:translateY(-50%)}.wpm-chart-plot{touch-action:pan-y;flex:1;height:140px;position:relative}.wpm-chart-plot svg{width:100%;height:100%;display:block;overflow:visible}.wpm-grid{stroke:var(--rule);stroke-width:1px}.wpm-bar{fill:var(--burst);opacity:.8}.wpm-err{stroke:var(--error);stroke-width:2px}.wpm-line{fill:none;stroke:var(--accent);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.wpm-cross{stroke:var(--faint);stroke-width:1px}.wpm-tip{white-space:nowrap;color:var(--ink);background:var(--sheet);border:1px solid var(--rule-strong);border-radius:var(--r-sm);pointer-events:none;padding:5px 9px;font-size:12.5px;line-height:1.4;position:absolute;top:0;transform:translate(8px)}.wpm-tip-left{transform:translate(calc(-100% - 8px))}.wpm-chart-x{font-family:var(--font-mono);color:var(--faint);justify-content:space-between;margin-left:calc(3ch + 8px);font-size:11px;display:flex}.results-share{flex-wrap:wrap;gap:10px;margin-top:18px;display:flex}.share-url{min-width:0;min-height:44px;font-family:var(--font-mono);color:var(--ink);background:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r);flex:260px;padding:0 12px;font-size:13px}.share-url:focus-visible{outline-offset:1px}.share-manual{color:var(--muted);flex-basis:100%;font-size:13px}.results-links{flex-wrap:wrap;gap:4px 20px;margin:14px 0 0;font-size:14px;display:flex}.results-links a,.results-compare a,.share-links a,.share-note a,.byline a,.prose a,.embed-credit a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.results-links a:hover,.results-compare a:hover,.share-links a:hover,.share-note a:hover,.byline a:hover,.prose a:hover{color:var(--accent-ink);text-decoration-thickness:2px}.results-links a{align-items:center;min-height:32px;display:inline-flex}.results-compare{border-top:1px solid var(--rule);color:var(--muted);max-width:var(--measure);margin-top:18px;padding-top:14px;font-size:14px;line-height:1.7}.results-compare p{margin:0 0 10px}.results-compare p:last-child{margin-bottom:0}.results-compare strong{color:var(--ink);font-weight:600}.results-actions{flex-wrap:wrap;gap:10px;margin-top:16px;display:flex}@media (max-width:560px){.results-actions .btn{flex:auto}}.results-next{color:var(--muted);max-width:var(--measure);margin:10px 0 0;font-size:13.5px;line-height:1.6}.results-next a,.link-button{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.results-next a:hover,.link-button:hover{color:var(--accent-ink);text-decoration-thickness:2px}.link-button{font:inherit;cursor:pointer;background:0 0;border:0;padding:0}.weak-keys{border-top:1px solid var(--rule);margin-top:18px;padding-top:14px}.weak-keys-title{color:var(--ink);margin:0 0 10px;font-size:14px;font-weight:700;line-height:1.4}.weak-keys-body{flex-wrap:wrap;align-items:center;gap:14px 28px;display:flex}.weak-keys-body .kbmap{flex:280px;max-width:400px}.weak-keys-list{flex:220px;gap:8px;margin:0;padding:0;list-style:none;display:grid}.weak-keys-list li{color:var(--ink-2);font-variant-numeric:tabular-nums;align-items:center;gap:10px;font-size:14px;display:flex}.weak-keys-list kbd{min-width:2.2em;color:var(--burst-ink);background:var(--burst-soft);border-color:var(--burst);font-size:14px;font-weight:700}.weak-keys-note{color:var(--muted);flex:220px;margin:0;font-size:14px;line-height:1.6}.weak-keys-note strong{color:var(--ink);font-weight:600}.weak-keys-how{color:var(--faint);max-width:var(--measure);margin:10px 0 0;font-size:12.5px;line-height:1.6}.kbmap{width:100%;max-width:calc(var(--kb-cols,13.5) * 30px);flex-direction:column;gap:3px;display:flex;container-type:inline-size}.kbmap-row{--kb-u:20px;padding-left:calc(var(--kb-offset,0) * var(--kb-u));gap:3px;display:flex}@supports (width:1cqi){.kbmap-row{--kb-u:min(30px, calc(100cqi / var(--kb-cols,13.5)))}}.kbmap-key{width:calc(var(--kb-u) - 3px);height:calc(var(--kb-u) - 3px);font-family:var(--font-mono);font-size:max(9px, calc(var(--kb-u) * .42));color:var(--faint);background:var(--sheet);border:1px solid var(--rule);border-radius:4px;flex:none;justify-content:center;align-items:center;line-height:1;display:inline-flex;position:relative}.kbmap-key.is-home{background:var(--paper-2)}.kbmap-key.is-bump:after{content:"";opacity:.6;background:currentColor;border-radius:1px;height:1.5px;position:absolute;bottom:14%;left:35%;right:35%}.kbmap-key.is-marked{color:var(--burst-ink);background:var(--burst-soft);background:color-mix(in srgb, var(--burst) calc(8% + var(--kb-level,1) * 16%), var(--sheet));border:2px solid var(--burst);font-weight:700}.kbmap-key.is-lit{color:var(--ink);outline:2px solid var(--accent);outline-offset:1px}.btn{min-height:44px;font-family:var(--font-sans);color:var(--ink);background:var(--sheet);border:1px solid var(--rule-strong);border-radius:var(--r);box-shadow:var(--key);cursor:pointer;justify-content:center;align-items:center;gap:8px;padding:0 18px;font-size:14.5px;font-weight:600;line-height:1.2;text-decoration:none;transition:transform 80ms,background-color .15s,border-color .15s,color .15s;display:inline-flex}.btn:hover{background:var(--paper-2);border-color:var(--faint)}.btn:active{box-shadow:none;transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn-primary{color:var(--on-accent);background:var(--accent-fill);border-color:#0000}.btn-primary:hover{color:var(--on-accent);background:var(--accent-ink);border-color:#0000}.btn-danger{color:var(--on-error);background:var(--error);border-color:#0000}.btn-danger:hover{color:var(--on-error);background:var(--error);filter:brightness(.92);border-color:#0000}.btn-ghost{color:var(--muted);box-shadow:none;background:0 0;border-color:#0000;padding:0 10px;font-weight:500}.btn-ghost:hover{color:var(--ink);background:var(--paper-2);border-color:#0000}.prose a.btn,.prose a.btn:hover{color:var(--ink);text-decoration:none}.prose a.btn-primary,.prose a.btn-primary:hover{color:var(--on-accent)}.section-title{letter-spacing:-.025em;margin:0 0 6px;font-size:24px;font-weight:700}.site-index{margin-top:64px}.index-h{border-bottom:2px solid var(--ink);font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink);margin:28px 0 0;padding-bottom:8px;font-size:12px;font-weight:500}.index-table{border-collapse:collapse;width:100%}.index-table tr{border-bottom:1px solid var(--rule);transition:background-color .15s}.index-table tr:hover{background:var(--paper-2)}.index-table th,.index-table td{text-align:left;vertical-align:baseline;padding:11px 0}.index-table th{width:34%;padding-right:16px;font-size:15.5px;font-weight:600}.index-len{width:5em;font-family:var(--font-mono);color:var(--accent);font-variant-numeric:tabular-nums;font-size:13.5px}.index-line{color:var(--muted);font-size:14.5px}.index-table a,.index-list a,.link-list a{color:var(--ink);text-underline-offset:4px;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition:color .15s,text-decoration-color .15s}.index-table a:hover,.index-list a:hover,.link-list a:hover{color:var(--accent);text-decoration-color:currentColor}.index-pair{grid-template-columns:1fr 1fr;gap:0 40px;display:grid}.index-list,.link-list{margin:0;padding:0;list-style:none}.index-list li,.link-list li{border-bottom:1px solid var(--rule);flex-direction:column;gap:1px;padding:10px 0;display:flex}.index-list a,.link-list a{font-size:15.5px;font-weight:600}.index-list span,.link-list span{color:var(--muted);font-size:14.5px}@media (max-width:720px){.index-pair{grid-template-columns:1fr}}@media (max-width:560px){.index-table tr{grid-template-columns:1fr auto;padding:10px 0;display:grid}.index-table th,.index-table td{width:auto;padding:0}.index-len{text-align:right}.index-line{grid-column:1/-1}}.home-body{margin-top:56px}.home-body>.byline{border-bottom:1px solid var(--rule);margin:0;padding-bottom:14px}.home-body .prose{margin-top:28px}main.page{min-height:60vh;padding-bottom:24px}.crumbs{font-family:var(--font-mono);color:var(--faint);flex-wrap:wrap;align-items:center;gap:8px;padding:22px 0 4px;font-size:12.5px;display:flex}.crumbs a{color:var(--muted);text-decoration:underline;-webkit-text-decoration-color:var(--rule-strong);text-decoration-color:var(--rule-strong);text-underline-offset:3px}.crumbs a:hover{color:var(--ink);text-decoration-color:currentColor}.crumb-sep{color:var(--rule-strong)}.page-head{padding:10px 0 28px}.page-head h1{letter-spacing:-.035em;max-width:22ch;margin:0 0 12px;font-size:clamp(30px,4.6vw,44px);font-weight:800;line-height:1.08}.page-head p{max-width:62ch;color:var(--muted);margin:0;font-size:17.5px;line-height:1.6}.page-head .byline{color:var(--faint);margin-top:14px;font-size:13.5px}.page-head .page-answer{border-left:3px solid var(--accent);max-width:var(--measure);color:var(--ink);margin-top:22px;padding-left:16px;font-size:17px;line-height:1.7}.byline{color:var(--faint);margin:14px 0 0;font-size:13.5px;line-height:1.6}.byline a{color:var(--muted);-webkit-text-decoration-color:var(--rule-strong);text-decoration-color:var(--rule-strong)}.prose{max-width:100%;margin-top:32px}.prose p,.prose h2,.prose h3,.prose ul,.prose ol,.prose .faq{max-width:var(--measure)}.prose p{color:var(--ink-2);margin:0 0 16px;font-size:17px;line-height:1.72}.prose h2{letter-spacing:-.025em;color:var(--ink);margin:52px 0 14px;font-size:25px;font-weight:700;line-height:1.25}.prose>h2:first-child,.prose>section:first-child>h2:first-child{margin-top:0}.prose h3{color:var(--ink);margin:26px 0 6px;font-size:17.5px;font-weight:600;line-height:1.4}.prose strong{color:var(--ink);font-weight:600}.data-table-wrap{margin:20px 0 28px;overflow-x:auto}.data-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:15px}.data-table caption{caption-side:top;text-align:left;font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);padding-bottom:10px;font-size:11.5px;font-weight:500}.data-table th,.data-table td{text-align:left;vertical-align:top;border-bottom:1px solid var(--rule);white-space:nowrap;padding:10px 16px 10px 0}.data-table thead th{color:var(--ink);border-bottom:2px solid var(--ink);padding-top:0;font-size:13px;font-weight:600}.data-table tbody th{color:var(--ink);font-weight:600}.data-table td{color:var(--ink-2)}.data-table tbody tr:hover{background:var(--paper-2)}.data-table-note{color:var(--faint)!important;margin:10px 0 0!important;font-size:13px!important;line-height:1.6!important}.data-table.wrap th,.data-table.wrap td{white-space:normal;min-width:110px}.faq{border-top:1px solid var(--rule)}.faq-item{border-bottom:1px solid var(--rule);padding:18px 0 4px}.prose .faq-item h3{margin:0 0 6px}.prose .faq-item p{margin-bottom:14px}.sources-list{counter-reset:src;margin:8px 0 0;padding:0;list-style:none}.sources-list li{counter-increment:src;border-bottom:1px solid var(--rule);color:var(--ink-2);grid-template-columns:2.6em 1fr;padding:8px 0;font-size:15px;line-height:1.55;display:grid}.sources-list li:before{content:"[" counter(src) "]";font-family:var(--font-mono);color:var(--faint);font-size:12.5px;line-height:1.9}.prose .sources-list a{color:var(--ink-2);-webkit-text-decoration-color:var(--rule-strong);text-decoration-color:var(--rule-strong);overflow-wrap:anywhere}.prose .sources-list a:hover{color:var(--accent);text-decoration-color:currentColor}.readout{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);grid-template-columns:repeat(4,1fr);margin:0 0 8px;display:grid}.readout>div{border-left:1px solid var(--rule);flex-direction:column-reverse;gap:2px;padding:12px 16px;display:flex}.readout>div:first-child{border-left:0;padding-left:0}.readout dt{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-size:11px}.readout dd{font-family:var(--font-mono);letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ink);margin:0;font-size:28px;font-weight:600}.readout>div:nth-child(2) dd{color:var(--accent)}@media (max-width:560px){.readout{grid-template-columns:1fr 1fr}.readout>div:nth-child(odd){border-left:0;padding-left:0}.readout>div:nth-child(n+3){border-top:1px solid var(--rule)}.readout dd{font-size:24px}}.progress-chart{max-width:720px;margin:16px 0 8px}.pc-body{gap:10px;display:flex}.pc-y{width:3ch;font-family:var(--font-mono);color:var(--faint);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;position:relative}.pc-y span{position:absolute;right:0;transform:translateY(-50%)}.pc-plot{flex:1;height:180px;position:relative}.pc-plot svg{width:100%;height:100%;display:block;overflow:visible}.pc-grid{stroke:var(--rule);stroke-width:1px}.pc-line{fill:none;stroke:var(--accent);stroke-width:2px;stroke-linejoin:round}.pc-dot{background:var(--sheet);border:2px solid var(--accent);border-radius:50%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;position:absolute}.pc-x{font-family:var(--font-mono);color:var(--faint);justify-content:space-between;gap:12px;margin:8px 0 0 calc(3ch + 10px);font-size:11px;display:flex}@media (max-width:480px){.pc-plot{height:140px}.pc-x span:nth-child(2){display:none}}.empty-state{max-width:var(--measure);border:1px dashed var(--rule-strong);border-radius:var(--r-lg);background:var(--sheet);padding:24px 26px}.prose .empty-state p{color:var(--muted);font-size:16px}.prose .empty-state .empty-title{letter-spacing:-.015em;color:var(--ink);margin:0 0 8px;font-size:19px;font-weight:700}.empty-state .share-actions{margin-top:4px}.cert-wrap{max-width:780px}.cert-controls{border:1px solid var(--rule);border-radius:var(--r-lg);background:var(--paper-2);margin:8px 0 28px;padding:18px 20px}.cert-controls label{margin-bottom:6px;font-size:14px;font-weight:600;display:block}.cert-controls input{width:100%;max-width:340px;min-height:44px;font:inherit;color:var(--ink);background:var(--sheet);border:1px solid var(--rule-strong);border-radius:var(--r);padding:0 12px}.cert-controls-note{color:var(--faint);margin:8px 0 14px;font-size:13px}.cert{background:var(--sheet);border:1px solid var(--rule-strong);box-shadow:var(--lift);border-radius:4px;padding:36px 38px}.cert-head{border-bottom:2px solid var(--ink);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px;margin-bottom:24px;padding-bottom:14px;display:flex}.cert-brand{letter-spacing:-.025em;font-size:20px;font-weight:800}.cert-kicker{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-size:11.5px}.cert-name{letter-spacing:-.02em;margin:0 0 22px;font-size:26px;font-weight:700}.cert-grid{grid-template-columns:repeat(3,1fr);gap:18px 24px;margin:0 0 26px;display:grid}.cert-grid dt{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin-bottom:4px;font-size:11px}.cert-grid dd{font-variant-numeric:tabular-nums;margin:0;font-size:19px;font-weight:600}.cert-grid>div:last-child:nth-child(3n+1){grid-column:1/-1}.cert-grid>div:last-child:nth-child(3n+2){grid-column:span 2}.cert-grid .cert-big{font-family:var(--font-mono);letter-spacing:-.04em;color:var(--accent);font-size:44px;line-height:1}.cert-disclaimer{border-top:1px solid var(--rule);color:var(--muted);margin:0;padding-top:18px;font-size:13px;line-height:1.7}@media (max-width:560px){.cert{padding:24px 20px}.cert-grid{grid-template-columns:1fr 1fr}.cert-grid>div:first-child{grid-column:1/-1}.cert-grid>div:last-child:nth-child(3n+1),.cert-grid>div:last-child:nth-child(3n+2){grid-column:auto}.cert-grid>div:last-child:nth-child(2n){grid-column:1/-1}}@media print{.no-print,.site-header,.site-footer,.skip-link{display:none!important}body{background:#fff}.cert{box-shadow:none;border:1px solid #333;border-radius:0;padding:24px}main.container.page{padding:0}}.share-result{max-width:760px;margin-top:8px}.share-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:20px;display:flex}.share-links,.share-note{color:var(--muted);max-width:var(--measure);margin-top:16px;font-size:14px;line-height:1.7}.prose .share-note{color:var(--muted);font-size:14px}.challenge-rival{border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 var(--r-sm) var(--r-sm) 0;color:var(--ink-2);margin:0 0 16px;padding:12px 16px;font-size:15px}.challenge-rival strong{font-family:var(--font-mono);color:var(--ink)}.copybox{margin:18px 0 8px}.copybox pre{border:1px solid var(--rule);border-radius:var(--r);background:var(--paper-2);font-family:var(--font-mono);color:var(--ink);margin:0;padding:16px 18px;font-size:13px;line-height:1.7;overflow-x:auto}.copybox-actions{margin-top:12px}.test-paste-note{color:var(--error);margin:14px 0 0;font-size:13.5px}.test-noscript{border:1px dashed var(--rule-strong);border-radius:var(--r);background:var(--paper-2);color:var(--muted);margin-top:20px;padding:18px 20px;font-size:15px;line-height:1.7}.test-noscript p{margin:0 0 10px}.test-noscript p:last-child{margin-bottom:0}.test-sample-words{font-family:var(--font-mono);color:var(--faint);font-size:14px}.not-found .page-head{padding-top:48px}.page-head .nf-code{font-family:var(--font-mono);letter-spacing:-.04em;color:var(--accent);margin:0 0 6px;font-size:56px;font-weight:600;line-height:1}.nf-caret{vertical-align:-.05em;border-left:4px solid var(--accent);width:0;height:.8em;margin-left:6px;animation:1s step-end infinite caret;display:inline-block}.page-head p+p{margin-top:20px}.site-footer{border-top:1px solid var(--rule);background:var(--paper-2);color:var(--muted);margin-top:80px;padding:48px 0 36px;font-size:14px}.footer-top{grid-template-columns:minmax(0,1fr) minmax(0,2.4fr);gap:32px 48px;display:grid}.footer-brand{max-width:300px}.footer-tagline{color:var(--muted);margin:10px 0 0;line-height:1.65}.footer-cols{grid-template-columns:repeat(4,minmax(0,1fr));gap:24px;display:grid}.footer-col{flex-direction:column;gap:2px;display:flex}.footer-h{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink);margin:0 0 8px;font-size:11.5px;font-weight:500}.footer-col a{min-height:30px;color:var(--muted);align-items:center;font-size:14px;transition:color .15s;display:inline-flex}.footer-col a:hover{color:var(--ink);text-underline-offset:3px;text-decoration:underline}.footer-note{border-top:1px solid var(--rule);color:var(--faint);margin-top:32px;padding-top:18px;font-size:13px}.footer-note a{color:var(--muted);text-decoration:underline;-webkit-text-decoration-color:var(--rule-strong);text-decoration-color:var(--rule-strong);text-underline-offset:3px}.footer-note a:hover{color:var(--ink);text-decoration-color:currentColor}.footer-note+.footer-note{border-top:0;margin-top:6px;padding-top:0}@media (max-width:860px){.footer-top{grid-template-columns:1fr}}@media (max-width:560px){.footer-cols{grid-template-columns:1fr 1fr;gap:24px 16px}.footer-col a{min-height:36px}}.contact-wrap{max-width:540px;margin-top:32px}.contact-form{flex-direction:column;gap:18px;display:flex}.form-field{flex-direction:column;gap:7px;display:flex}.form-field label{color:var(--ink);font-size:13.5px;font-weight:600}.form-field input,.form-field textarea{font-family:var(--font-sans);color:var(--ink);background:var(--sheet);border:1px solid var(--rule-strong);border-radius:var(--r);resize:vertical;padding:11px 14px;font-size:16px;transition:border-color .15s,box-shadow .15s}.form-field input:focus,.form-field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.form-hp{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.form-note{margin:0;font-size:14px}.form-note-error{color:var(--error)}.form-success{background:var(--sheet);border:1px solid var(--rule);border-left:3px solid var(--accent);border-radius:var(--r);max-width:540px;margin-top:32px;padding:24px}.form-success h2{margin:0 0 8px;font-size:20px}.form-success p{color:var(--muted);margin:0}.ad-slot{background:var(--paper-2);border:1px dashed var(--rule-strong);border-radius:var(--r);justify-content:center;align-items:center;margin:24px 0 0;display:flex}.ad-slot-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);font-size:11px}.consent-banner{z-index:40;background:var(--sheet);border:1px solid var(--rule-strong);border-radius:var(--r-lg);flex-wrap:wrap;align-items:center;gap:16px;max-width:640px;margin:0 auto;padding:18px 22px;display:flex;position:fixed;bottom:16px;left:16px;right:16px;box-shadow:0 18px 40px -20px #00000059}.consent-banner p{color:var(--muted);flex:260px;margin:0;font-size:14px}.consent-actions{flex-shrink:0;gap:10px;display:flex}.changelog{max-width:var(--measure);margin:24px 0 0;padding:0;list-style:none}.changelog li{border-top:1px solid var(--rule);margin-top:26px;padding-top:18px}.changelog li:first-child{border-top:0;margin-top:0;padding-top:0}.changelog h2{margin:4px 0 8px!important;font-size:19px!important}.changelog-meta{font-family:var(--font-mono);align-items:center;gap:10px;display:flex;color:var(--faint)!important;margin:0!important;font-size:12.5px!important}.changelog-tag{letter-spacing:.08em;text-transform:uppercase;color:var(--accent);border:1px solid;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:500}@media (prefers-reduced-motion:reduce){.char-cursor,.word-caret-end:after,.nf-caret{animation:none}*{transition-duration:.001ms!important}.btn:active{transform:none}}
