:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:#f7f7f5;--surface:#fff;--border:#e0e0dc;--ink:#1c1c1a;--ink-dim:#7d7d78;--pending:#c2c2bc;--ok:#1c1c1a;--bad:#b5473f;--bad-bg:#f5ddd8;--accent:#3454a3;--accent-ink:#fff;--accent-soft:#e1e7f5;--hl-keyword:#3a5f8a;--hl-string:#8a6a1f;--hl-number:#3f7d52;--hl-call:#8a6d1f;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--radius-sm:6px;--radius-md:8px;--radius-lg:10px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;font-family:var(--font-mono)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}:root:not([data-theme=light]){--bg:#171715;--surface:#202020;--border:#373732;--ink:#f0f0ec;--ink-dim:#96968f;--pending:#4d4d47;--ok:#f0f0ec;--bad:#e8746a;--bad-bg:#331c19;--accent:#8fb0e8;--accent-ink:#0c1a33;--accent-soft:#1c2c47;--hl-keyword:#86b4e0;--hl-string:#e0c078;--hl-number:#9fd8a0;--hl-call:#d8d8d0}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#171715;--surface:#202020;--border:#373732;--ink:#f0f0ec;--ink-dim:#96968f;--pending:#4d4d47;--ok:#f0f0ec;--bad:#e8746a;--bad-bg:#331c19;--accent:#8fb0e8;--accent-ink:#0c1a33;--accent-soft:#1c2c47;--hl-keyword:#86b4e0;--hl-string:#e0c078;--hl-number:#9fd8a0;--hl-call:#d8d8d0}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:before,:after{box-sizing:border-box}body{background:var(--bg);min-height:100dvh;color:var(--ink);margin:0}.error-boundary{background:var(--surface);text-align:center;border-radius:12px;max-width:1100px;margin:0 auto;padding:40px 32px}.error-boundary h2{color:var(--ink);margin:0 0 8px}.error-boundary p{color:var(--ink-dim);margin:0 0 20px;font-size:13px}.error-boundary button{background:var(--accent);color:var(--accent-ink);cursor:pointer;border:none;border-radius:8px;padding:8px 18px;font-family:inherit;font-size:14px}.ghost-picker{position:relative}.ghost-menu{z-index:20;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);width:160px;margin:0;padding:6px;list-style:none;position:absolute;top:calc(100% + 8px);left:0;box-shadow:0 12px 32px #00000029}.ghost-menu button{border-radius:var(--radius-sm);width:100%;color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:none;padding:8px 10px;font-family:inherit;font-size:13px;display:block}.ghost-menu button:hover{background:var(--accent-soft)}.ghost-menu button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.typing-test{width:100%}.status-bar{margin-bottom:var(--space-4);gap:36px;display:flex}.stat{flex-direction:column;gap:2px;display:flex}.stat b{color:var(--ink);font-variant-numeric:tabular-nums;font-size:25px;font-weight:600}.stat span{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.07em;font-size:10px}.stat-time{min-width:4ch}.stat-wpm,.stat-acc{min-width:5ch}.typing-area{padding:var(--space-2) 0;cursor:text;position:relative}.sr-input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.stream-viewport{overflow:hidden}.stream{isolation:isolate;color:var(--pending);flex-wrap:wrap;align-content:flex-start;font-size:38px;line-height:68px;transition:transform .15s;display:flex;position:relative}.word{white-space:pre;margin-right:.6em}.word.upcoming,.ch.pending{color:var(--pending)}.ch.ok{color:var(--ok)}.ch.bad{color:var(--bad);background:var(--bad-bg);border-radius:3px}.ch.extra{color:var(--bad);text-decoration:underline}.typing-test.caret-block .ch.caret{color:var(--bg)}.ch.caret-end{vertical-align:-.25em;height:1.2em;display:inline-block}.floating-caret{background:var(--accent);pointer-events:none;opacity:0;transition:transform .1s ease-out,width .1s ease-out,height .1s ease-out,opacity .1s ease-out;position:absolute;top:0;left:0}.floating-caret.visible{opacity:1}.typing-test.caret-block .floating-caret{z-index:-1;border-radius:2px}.typing-test.caret-underline .floating-caret{box-shadow:inset 0 -2px 0 0 var(--accent);background:0 0}.results{text-align:center;padding:32px 0}.results h2{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.08em;margin:0 0 24px;font-size:18px;font-weight:600}.results-grid{justify-content:center;gap:40px;margin-bottom:24px;display:flex}.results-grid div{flex-direction:column;display:flex}.results-grid b{color:var(--ink);font-variant-numeric:tabular-nums;font-size:34px;font-weight:600}.results-grid span{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em;font-size:12px}.results .best{color:var(--ink-dim);margin:-8px 0 0;font-size:13px}.leaderboard-prompt{justify-content:center;gap:var(--space-2);margin-top:var(--space-4);display:flex}.leaderboard-prompt-input{width:240px;height:34px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);font-family:inherit;font-size:13px}.leaderboard-prompt-input::placeholder{color:var(--ink-dim)}.leaderboard-prompt-input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.leaderboard-prompt-submit{height:34px;padding:0 var(--space-3);border-radius:var(--radius-md);background:var(--accent);color:var(--accent-ink);cursor:pointer;border:none;font-family:inherit;font-size:13px;font-weight:600}.leaderboard-prompt-submit:disabled{opacity:.5;cursor:default}.leaderboard-prompt-submit:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.leaderboard-prompt-saved{color:var(--ink-dim);margin-top:var(--space-4);font-size:13px}.restart-row{align-items:center;gap:var(--space-2);margin-top:var(--space-6);flex-direction:column;display:flex}.restart-btn{border:1.5px solid var(--border);background:var(--surface);width:46px;height:46px;color:var(--ink-dim);cursor:pointer;border-radius:50%;font-family:inherit;font-size:18px;line-height:1;transition:color .15s,border-color .15s,background-color .15s,transform .1s}.restart-btn:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.restart-btn:active{transform:scale(.93)}.restart-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.restart-hint{color:var(--ink-dim);letter-spacing:.04em;font-size:11px}.snippet-viewport{overflow:hidden}.snippet-code{isolation:isolate;color:var(--pending);white-space:pre-wrap;overflow-wrap:break-word;font-size:38px;line-height:68px;transition:transform .15s;position:relative}.snippet-recap{margin-top:var(--space-5);text-align:left}.snippet-empty{color:var(--ink-dim)}.snippet-title{margin:0 0 var(--space-3);font-family:var(--font-sans);color:var(--ink-dim);font-size:14px;font-weight:600}.ch.ok.hl-keyword{color:var(--hl-keyword)}.ch.ok.hl-type{color:var(--accent)}.ch.ok.hl-string{color:var(--hl-string)}.ch.ok.hl-number{color:var(--hl-number)}.ch.ok.hl-call{color:var(--hl-call)}.results .attribution{color:var(--ink-dim);margin:4px 0 0;font-size:13px}.race-trigger{height:36px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);cursor:pointer;align-items:center;font-family:inherit;font-size:13px;transition:border-color .15s;display:inline-flex}.race-trigger:hover{border-color:var(--accent)}.race-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.race-screen{align-items:center;gap:var(--space-3);padding:var(--space-6) 0;text-align:center;flex-direction:column;display:flex}.race-join-title{font-family:var(--font-sans);color:var(--ink);margin:0;font-size:22px;font-weight:700}.race-section-title{margin:var(--space-2) 0 0;font-family:var(--font-sans);color:var(--ink-dim);font-size:14px;font-weight:600}.race-join-hint{font-family:var(--font-sans);color:var(--ink-dim);margin:0;font-size:13px}.race-share-row{align-items:center;gap:var(--space-2);display:flex}.race-share-url{font-family:var(--font-mono);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--accent);padding:8px 12px;font-size:13px}.race-copy-btn{height:34px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:border-color .15s}.race-copy-btn:hover{border-color:var(--accent)}.race-error{font-family:var(--font-sans);color:var(--bad);font-size:14px}.race-join-form{gap:var(--space-2);margin-top:var(--space-2);display:flex}.race-name-input{width:220px;height:38px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);font-family:inherit;font-size:14px}.race-name-input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.race-join-btn,.race-start-btn{height:38px;padding:0 var(--space-4);border-radius:var(--radius-md);background:var(--accent);color:var(--accent-ink);cursor:pointer;border:none;font-family:inherit;font-size:14px;font-weight:600}.race-start-btn:disabled{opacity:.5;cursor:default}.race-leave-link{font-family:var(--font-sans);margin-top:var(--space-3);color:var(--ink-dim);cursor:pointer;background:0 0;border:none;font-size:13px;text-decoration:underline}.race-quit-row{margin-top:var(--space-5);justify-content:center;display:flex}.race-roster{margin:var(--space-2) 0;font-family:var(--font-sans);color:var(--ink);flex-direction:column;gap:4px;padding:0;font-size:14px;list-style:none;display:flex}.race-roster-you{color:var(--accent);font-weight:600}.race-countdown{font-family:var(--font-sans);color:var(--accent);font-size:96px;font-weight:800}.race-standings{flex-direction:column;gap:4px;width:100%;max-width:360px;margin:0;padding:0;list-style:none;display:flex}.race-standing-row{align-items:center;gap:var(--space-3);border:1px solid var(--border);border-radius:var(--radius-md);font-family:var(--font-sans);grid-template-columns:32px 1fr auto;padding:10px 12px;font-size:13px;display:grid}.race-standing-place{color:var(--ink-dim);font-variant-numeric:tabular-nums}.race-standing-name{text-align:left;color:var(--ink);font-weight:600}.race-standing-wpm{color:var(--accent);font-variant-numeric:tabular-nums;font-weight:700}.race-track-list{margin-bottom:var(--space-4);flex-direction:column;gap:6px;display:flex}.race-track{align-items:center;gap:var(--space-2);display:flex}.race-track-you{border-bottom:1px solid var(--border);margin-bottom:2px;padding-bottom:6px}.race-track-name{text-overflow:ellipsis;white-space:nowrap;width:100px;font-family:var(--font-sans);color:var(--ink-dim);flex-shrink:0;font-size:12px;overflow:hidden}.race-track-you .race-track-name{color:var(--ink);font-weight:700}.race-track-you .race-track-fill{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.race-track-bar{background:var(--border);border-radius:3px;flex:1;height:6px;overflow:hidden}.race-track-fill{background:var(--ink-dim);height:100%;transition:width .15s ease-out}.race-active .snippet-code{isolation:isolate;color:var(--pending);white-space:pre-wrap;overflow-wrap:break-word;font-size:28px;line-height:50px;position:relative}@keyframes race-reject-shake{0%{box-shadow:0 0 0 2px var(--bad);transform:translate(0)}20%,60%{transform:translate(-6px)}40%,80%{transform:translate(6px)}to{transform:translate(0);box-shadow:0 0 0 2px #0000}}.race-reject-flash{border-radius:var(--radius-sm);animation:.25s ease-in-out race-reject-shake}.leaderboard-trigger{height:36px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);cursor:pointer;align-items:center;font-family:inherit;font-size:13px;transition:border-color .15s;display:inline-flex}.leaderboard-trigger:hover{border-color:var(--accent)}.leaderboard-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.leaderboard-page{width:100%;max-width:560px;padding:var(--space-6) 0;margin:0 auto}.leaderboard-page-header{margin-bottom:var(--space-5);justify-content:space-between;align-items:center;display:flex}.leaderboard-page-header h1{font-family:var(--font-sans);color:var(--ink);margin:0;font-size:24px;font-weight:700}.leaderboard-back{color:var(--ink-dim);cursor:pointer;background:0 0;border:none;font-family:inherit;font-size:13px;text-decoration:underline}.leaderboard-filters{gap:var(--space-3);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.leaderboard-empty{padding:var(--space-6) 0;text-align:center;color:var(--ink-dim);font-size:13px}.leaderboard-list{margin:0;padding:0;list-style:none}.leaderboard-row{align-items:center;gap:var(--space-3);border-radius:var(--radius-sm);padding:10px 12px;font-size:14px;display:flex}.leaderboard-row:hover{background:var(--accent-soft)}.leaderboard-rank{width:24px;color:var(--ink-dim);font-variant-numeric:tabular-nums;flex-shrink:0}.leaderboard-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink);flex:auto;font-weight:600;overflow:hidden}.leaderboard-meta{text-align:right;width:140px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;font-size:11px}.leaderboard-wpm{text-align:right;width:80px;color:var(--accent);font-variant-numeric:tabular-nums;flex-shrink:0;font-weight:700}.settings-panel{margin-bottom:var(--space-5);flex-wrap:wrap;align-items:center;gap:14px 18px;display:flex}.settings-options{border:1px solid var(--border);border-radius:var(--radius-lg);gap:2px;padding:3px;display:flex}.settings-options button{border-radius:var(--radius-sm);height:30px;color:var(--ink-dim);cursor:pointer;background:0 0;border:none;align-items:center;padding:0 11px;font-family:inherit;font-size:13px;transition:color .15s,background-color .15s;display:inline-flex}.settings-options button:hover{color:var(--ink);background:var(--accent-soft)}.settings-options button[aria-pressed=true],.settings-options button[aria-pressed=true]:hover{background:var(--accent);color:var(--accent-ink)}.settings-options button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.theme-picker{position:relative}.theme-trigger{align-items:center;gap:var(--space-2);height:36px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);cursor:pointer;font-family:inherit;font-size:13px;transition:border-color .15s,background-color .15s;display:inline-flex}.theme-trigger:hover{border-color:var(--accent)}.theme-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.theme-chevron{color:var(--ink-dim);margin-left:2px}.theme-swatch{flex-shrink:0;display:inline-flex}.theme-swatch span{border:1px solid #0000001f;border-radius:50%;width:9px;height:9px}.theme-swatch span+span{margin-left:-3px}.theme-menu{z-index:20;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);width:200px;max-height:320px;margin:0;padding:6px;list-style:none;position:absolute;top:calc(100% + 8px);right:0;overflow-y:auto;box-shadow:0 12px 32px #00000029}.theme-menu button{justify-content:space-between;align-items:center;gap:var(--space-3);border-radius:var(--radius-sm);width:100%;color:var(--ink-dim);text-align:left;cursor:pointer;background:0 0;border:none;padding:8px 10px;font-family:inherit;font-size:13px;transition:color .15s,background-color .15s;display:flex}.theme-menu button:hover{color:var(--ink);background:var(--accent-soft)}.theme-menu li[aria-selected=true] button{color:var(--accent);background:var(--accent-soft);font-weight:600}.theme-menu button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.app{width:100%;max-width:1320px;min-height:100dvh;padding:72px 40px var(--space-6);flex-direction:column;margin:0 auto;display:flex}.app-header{justify-content:space-between;align-items:center;gap:var(--space-5);margin-bottom:var(--space-6);display:flex}.app h1{align-items:center;gap:var(--space-2);font-family:var(--font-sans);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:46px;font-weight:700;display:flex}.app h1 .accent{color:var(--accent)}.app h1 .logo-icon{color:var(--accent);flex-shrink:0}.app-header-actions{align-items:center;gap:var(--space-2);display:flex}.app-footer{font-family:var(--font-sans);gap:20px;margin-top:auto;padding-top:48px;font-size:12px;display:flex}.app-footer a{color:var(--ink-dim);align-items:center;gap:6px;text-decoration:none;transition:color .15s;display:inline-flex}.app-footer a svg{flex-shrink:0}.app-footer a:hover{color:var(--accent)}@media (width<=640px){.app{padding:40px var(--space-4) var(--space-4)}}
