:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0e1015;--bg-2:#13161d;--surface:#171b24;--surface-2:#1f2430;--border:#2a3040;--text:#dfe3ec;--muted:#8891a6;--faint:#566078;--accent:#8394ff;--accent-ink:#0d1020;--good:#58e0a0;--bad:#ff5d6c;--warn:#ffab48;--untyped:#566078;--shadow:0 12px 34px #0006;--radius:14px;--font-ui:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, "JetBrains Mono", "Fira Code", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f4f5f9;--bg-2:#eceef4;--surface:#fff;--surface-2:#eef0f6;--border:#d9dde8;--text:#22262f;--muted:#667089;--faint:#98a1b8;--accent:#4b5cf0;--accent-ink:#fff;--good:#12925a;--bad:#d8283c;--warn:#dc7a00;--untyped:#a3abc0;--shadow:0 12px 34px #1e285021}@media (prefers-color-scheme:light){:root:not([data-theme]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f4f5f9;--bg-2:#eceef4;--surface:#fff;--surface-2:#eef0f6;--border:#d9dde8;--text:#22262f;--muted:#667089;--faint:#98a1b8;--accent:#4b5cf0;--accent-ink:#fff;--good:#12925a;--bad:#d8283c;--warn:#dc7a00;--untyped:#a3abc0;--shadow:0 12px 34px #1e285021}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);min-height:100vh;color:var(--text);font:16px/1.5 var(--font-ui);-webkit-font-smoothing:antialiased;margin:0}body.has-overlay{overflow:hidden}#app{flex-direction:column;min-height:100vh;display:flex}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{letter-spacing:-.01em;margin:0 0 12px;line-height:1.2}h1{font-size:30px}h2{margin-top:28px;font-size:20px}h3{font-size:16px}p{margin:0 0 12px}kbd{border:1px solid var(--border);background:var(--surface-2);min-width:1.6em;color:var(--text);font:600 12px/1.6 var(--font-mono);text-align:center;border-bottom-width:2px;border-radius:6px;padding:1px 7px;display:inline-block}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.contents{display:contents}.lead{color:var(--muted);max-width:62ch;font-size:17px}.fineprint{color:var(--muted);margin-top:24px;font-size:13px}.empty{color:var(--muted);padding:30px 0}.topbar{z-index:20;background:color-mix(in srgb, var(--bg) 86%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);align-items:center;gap:24px;padding:12px clamp(16px,4vw,40px);display:flex;position:sticky;top:0}.logo{font:800 26px/1 var(--font-ui);letter-spacing:-.04em;color:var(--text);align-items:center;display:inline-flex}.logo:hover{text-decoration:none}.logo-o{background:var(--warn);width:.62em;height:.62em;box-shadow:0 0 14px color-mix(in srgb, var(--warn) 60%, transparent);border-radius:50%;margin:0 .04em 0 .05em;animation:1.6s ease-in-out infinite bounce}@keyframes bounce{0%,to{transform:translateY(2px)}50%{transform:translateY(-5px)}}.nav{scrollbar-width:none;flex:1;gap:4px;display:flex;overflow-x:auto}.nav-link{color:var(--muted);white-space:nowrap;border-radius:9px;align-items:center;gap:8px;padding:7px 13px;font-size:15px;font-weight:600;display:inline-flex}.nav-link:hover{color:var(--text);background:var(--surface-2);text-decoration:none}.nav-link.active{color:var(--text);background:var(--surface-2)}.nav-count{font:600 11px var(--font-mono);background:color-mix(in srgb, var(--accent) 22%, transparent);color:var(--accent);border-radius:999px;padding:1px 6px}.topbar-tools{align-items:center;gap:10px;display:flex}.icon-btn{background:var(--surface-2);width:36px;height:36px;color:var(--text);cursor:pointer;border:0;border-radius:10px;font-size:17px}.icon-btn:hover{background:var(--border)}.main{flex:1;width:100%;max-width:1080px;margin:0 auto;padding:26px clamp(16px,4vw,40px) 40px}.footer{color:var(--faint);text-align:center;border-top:1px solid var(--border);padding:18px clamp(16px,4vw,40px);font-size:13px}.page{max-width:900px}.segmented{background:var(--surface-2);border-radius:11px;flex-wrap:wrap;gap:2px;padding:3px;display:inline-flex}.seg{color:var(--muted);font:600 14px var(--font-ui);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:6px 13px;transition:background .12s,color .12s}.seg:hover{color:var(--text)}.seg.on{background:var(--accent);color:var(--accent-ink)}.toggle{background:var(--surface-2);color:var(--muted);font:600 14px var(--font-ui);cursor:pointer;border:0;border-radius:999px;align-items:center;gap:9px;padding:5px 12px 5px 6px;display:inline-flex}.toggle-knob{background:var(--border);border-radius:999px;width:30px;height:18px;transition:background .15s;position:relative}.toggle-knob:after{content:"";background:var(--text);border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px}.toggle.on{color:var(--text)}.toggle.on .toggle-knob{background:var(--accent)}.toggle.on .toggle-knob:after{background:var(--accent-ink);transform:translate(12px)}.select,.input,.textarea{border:1px solid var(--border);background:var(--surface);color:var(--text);font:500 14px var(--font-ui);border-radius:10px;max-width:100%;padding:8px 12px}.select{min-height:36px}.textarea{width:100%;font:15px/1.6 var(--font-mono);resize:vertical}.btn{border:1px solid var(--border);background:var(--surface-2);color:var(--text);font:600 14px var(--font-ui);cursor:pointer;border-radius:11px;align-items:center;gap:9px;padding:9px 16px;display:inline-flex}.btn:hover{background:var(--border);text-decoration:none}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-primary:hover{background:color-mix(in srgb, var(--accent) 88%, white)}.btn-primary kbd{background:color-mix(in srgb, var(--accent-ink) 22%, transparent);border-color:color-mix(in srgb, var(--accent-ink) 30%, transparent);color:var(--accent-ink)}.btn-danger{color:var(--bad)}.file-input{display:none}.banner{border:1px solid var(--border);background:var(--surface);border-radius:12px;margin-bottom:16px;padding:11px 16px;font-weight:600}.banner-record{background:color-mix(in srgb, var(--warn) 16%, var(--surface));border-color:color-mix(in srgb, var(--warn) 55%, var(--border));color:var(--warn);animation:.5s cubic-bezier(.2,1.4,.4,1) pop}.banner-first{color:var(--accent)}.banner-info{color:var(--muted);font-weight:500}@keyframes pop{0%{opacity:0;transform:scale(.85)}}.config{flex-direction:column;gap:14px;margin-bottom:22px;transition:opacity .25s;display:flex}.config-row{flex-wrap:wrap;align-items:flex-end;gap:14px 22px;display:flex}.field-label{text-transform:uppercase;letter-spacing:.08em;color:var(--faint);margin:0 0 5px 3px;font-size:11px;font-weight:700}.toggles{flex-wrap:wrap;gap:8px;display:flex}.mode-desc{color:var(--muted);max-width:78ch;margin:0;font-size:14px}.hud{justify-content:space-between;align-items:flex-end;gap:24px;padding:0 6px 10px;display:flex}.hud-main{align-items:baseline;gap:10px;display:flex}.hud-value{font:800 60px/1 var(--font-mono);color:var(--accent);font-variant-numeric:tabular-nums}.hud-label,.hud-stat span{text-transform:uppercase;letter-spacing:.08em;color:var(--faint);font-size:12px;font-weight:700}.hud-stats{gap:30px;display:flex}.hud-stat{flex-direction:column;align-items:flex-end;display:flex}.hud-stat b{font:700 30px/1.1 var(--font-mono);font-variant-numeric:tabular-nums}.timebar{background:var(--surface-2);border-radius:4px;height:4px;margin:0 0 14px;overflow:hidden}.timebar i{background:var(--accent);transform-origin:0;height:100%;transition:transform .1s linear;display:block}.stage{min-height:300px}.stage.is-loading{opacity:.5}.typing{--fs:clamp(20px, 1.2vw + 14px, 32px);--lh:calc(var(--fs) * 1.95);border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);font:500 var(--fs) / var(--lh) var(--font-mono);padding:14px clamp(16px,3vw,30px);transition:border-color .2s,box-shadow .2s;position:relative}.play.running .typing{border-color:color-mix(in srgb, var(--accent) 55%, var(--border));box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 10%, transparent)}.viewport{height:calc(var(--lh) * 3);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.typing.scrolled .viewport{-webkit-mask-image:linear-gradient(#00000059,#000 34% 100%);mask-image:linear-gradient(#00000059,#000 34% 100%)}.words{flex-wrap:wrap;align-content:flex-start;column-gap:.62em;transition:transform .16s;display:flex;position:relative}.w{height:var(--lh);line-height:var(--lh);white-space:pre;display:inline-block;position:relative}.c{color:var(--untyped)}.c.correct{color:var(--good)}.c.wrong{color:var(--bad);background:color-mix(in srgb, var(--bad) 20%, transparent);border-radius:3px}.c.corrected{color:var(--warn)}.c.extra{color:var(--bad);background:color-mix(in srgb, var(--bad) 20%, transparent);opacity:.85;border-radius:3px}.c.missed{color:var(--bad);opacity:.6}.w.bad{text-decoration:underline;-webkit-text-decoration-color:var(--bad);text-decoration-color:var(--bad);text-underline-offset:7px;text-decoration-thickness:2px}.w.shake{animation:.28s shake}@keyframes shake{20%{transform:translate(-4px)}40%{transform:translate(4px)}60%{transform:translate(-3px)}80%{transform:translate(3px)}}.caret{background:var(--accent);pointer-events:none;z-index:2;will-change:transform;border-radius:2px;width:2px;transition:transform 90ms cubic-bezier(.2,.8,.3,1);position:absolute;top:0;left:0}.caret.idle{animation:1s step-end infinite blink}@keyframes blink{50%{opacity:0}}.typing.flash-error{animation:.7s ease-out flash-error}@keyframes flash-error{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--bad) 70%, transparent);background:color-mix(in srgb, var(--bad) 22%, var(--surface))}to{background:var(--surface);box-shadow:0 0 0 16px #0000}}.session.finished .caret{display:none}.capture{opacity:0;resize:none;pointer-events:none;border:0;width:1px;height:1px;padding:0;position:fixed;top:0;left:-9999px}.passage-info,.hints{color:var(--faint);margin-top:14px;font-size:13px;transition:opacity .25s}.passage-info a{color:var(--muted)}.hints{flex-wrap:wrap;gap:8px 22px;display:flex}.play.running .config,.play.running .passage-info,.play.running .hints{opacity:.15}.play.running .config:hover,.play.running .config:focus-within{opacity:1}.notice{border-radius:var(--radius);background:var(--surface);border:1px dashed var(--border);color:var(--muted);flex-direction:column;align-items:flex-start;gap:12px;padding:30px;display:flex}.result{flex-direction:column;gap:20px;animation:.35s ease-out rise;display:flex}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.result-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 20px;display:flex}.result-title{font-size:18px;font-weight:700}.result-sub{color:var(--faint);font-size:13px}.heroes{flex-wrap:wrap;align-items:flex-end;gap:8px 56px;display:flex}.big{align-items:baseline;gap:10px;display:flex}.big b{font:800 88px/1 var(--font-mono);color:var(--accent);font-variant-numeric:tabular-nums}.big:nth-child(2) b{color:var(--text);font-size:56px}.big span{color:var(--faint);text-transform:uppercase;letter-spacing:.08em;font-size:13px;font-weight:700}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:12px;display:grid}.stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:13px 16px}.stat-value{font:700 24px/1.2 var(--font-mono);font-variant-numeric:tabular-nums}.stat-label{color:var(--muted);font-size:12px}.stat.bad .stat-value{color:var(--bad)}.stat.warn .stat-value{color:var(--warn)}.result-actions{flex-wrap:wrap;align-items:center;gap:12px 18px;display:flex}.hint{color:var(--muted);font-size:14px}.section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--faint);margin-bottom:8px;font-size:12px;font-weight:700}.chips{flex-wrap:wrap;gap:10px;display:flex}.chip{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:999px;align-items:center;gap:10px;padding:6px 14px 6px 8px;font-size:14px;font-weight:600;display:inline-flex}.chip:hover{border-color:var(--accent);text-decoration:none}.chip .badge{--s:.42;width:27px;height:30px}.chip .badge-icon{font-size:12px}.c-accent{--tone:var(--accent)}.c-good{--tone:var(--good)}.c-bad{--tone:var(--bad)}.c-warn{--tone:var(--warn)}.c-muted{--tone:var(--muted)}.chart{width:100%;position:relative}.chart-svg{width:100%;height:auto;display:block;overflow:visible}.chart-grid{stroke:var(--border);stroke-width:1px;opacity:.7}.chart-tick{fill:var(--faint);font:11px var(--font-ui)}.chart-line{fill:none;stroke:var(--tone);stroke-width:2.4px;stroke-linejoin:round;stroke-linecap:round}.chart-line.dashed{stroke-dasharray:5 5;stroke-width:1.8px;opacity:.8}.chart-area{fill:var(--tone);opacity:.13}.chart-dot{fill:var(--tone)}.chart-marker{stroke:var(--tone);stroke-width:1.5px;stroke-dasharray:2 3;opacity:.55}.chart-cross{stroke:var(--faint);stroke-dasharray:3 3}.chart-focus{fill:var(--tone);stroke:var(--surface);stroke-width:2px}.chart-bar{fill:var(--tone);opacity:.9}.chart-bar:hover{opacity:1}.chart-empty{text-align:center;color:var(--faint);padding:30px 0;font-size:14px}.chart-tip{z-index:5;background:var(--surface-2);border:1px solid var(--border);box-shadow:var(--shadow);pointer-events:none;white-space:nowrap;border-radius:9px;padding:7px 11px;font-size:12px;position:absolute;top:0;transform:translate(-50%,-6px)}.chart-tip-title{color:var(--muted);margin-bottom:3px}.chart-tip-row{align-items:center;gap:7px;display:flex}.chart-swatch{background:var(--tone);border-radius:50%;width:9px;height:9px}.badge{--a:#e0a36b;--b:#8a4f1d;width:60px;height:68px;filter:drop-shadow(0 4px 10px color-mix(in srgb, var(--a) 35%, transparent));flex:none;position:relative}.tier-bronze{--a:#e6ac74;--b:#8a4f1d}.tier-silver{--a:#f3f6fc;--b:#808aa3}.tier-gold{--a:#ffe07a;--b:#d68400}.tier-platinum{--a:#c6fff3;--b:#16a394}.tier-diamond{--a:#dff5ff;--b:#7d6cff}.badge-hex,.badge-hex-inner{clip-path:polygon(50% 0,94% 25%,94% 75%,50% 100%,6% 75%,6% 25%);position:absolute}.badge-hex{background:linear-gradient(145deg, var(--a), var(--b));inset:0}.badge-hex-inner{background:radial-gradient(circle at 30% 22%, color-mix(in srgb, var(--a) 30%, var(--bg-2)), var(--bg-2) 70%);inset:3.5px}.badge-icon{place-items:center;font-size:27px;display:grid;position:absolute;inset:0}.badge.locked{filter:grayscale()brightness(.7);opacity:.55}.unlock{--bg:#0e1015;--bg-2:#13161d;--text:#f2f4fa;--surface-2:#1f2430;z-index:1000;background:radial-gradient(circle at 50% 38%, color-mix(in srgb, var(--a) 30%, #06070b) 0%, #05060af5 68%);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);place-items:center;padding:24px;animation:.3s ease-out fade-in;display:grid;position:fixed;inset:0}.unlock.closing{animation:.22s ease-in forwards fade-out}@keyframes fade-in{0%{opacity:0}}@keyframes fade-out{to{opacity:0}}.unlock-confetti{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.unlock-card{z-index:1;text-align:center;color:#f2f4fa;flex-direction:column;align-items:center;gap:14px;max-width:560px;display:flex;position:relative}.unlock-kicker{letter-spacing:.22em;text-transform:uppercase;color:var(--a);font-size:14px;font-weight:800;animation:.5s .1s both rise}.badge-lg{width:168px;height:190px;filter:drop-shadow(0 0 34px color-mix(in srgb, var(--a) 60%, transparent));margin:10px 0 6px;animation:.7s cubic-bezier(.2,1.5,.4,1) both badge-in}.badge-lg:before{content:"";background:conic-gradient(from 0deg, transparent, color-mix(in srgb, var(--a) 45%, transparent), transparent 30%, transparent 50%, color-mix(in srgb, var(--a) 35%, transparent), transparent 80%);border-radius:50%;animation:7s linear infinite spin;position:absolute;inset:-46px;-webkit-mask-image:radial-gradient(circle,#0000 38%,#000 40% 62%,#0000 72%);mask-image:radial-gradient(circle,#0000 38%,#000 40% 62%,#0000 72%)}.badge-lg .badge-icon{font-size:78px}@keyframes badge-in{0%{opacity:0;transform:scale(.2)rotate(-25deg)}}@keyframes spin{to{transform:rotate(360deg)}}.unlock-name{letter-spacing:-.02em;margin:0;font-size:clamp(30px,6vw,46px);font-weight:800;animation:.5s .25s both rise}.unlock-desc{color:#b9c0d3;margin:0;font-size:18px;animation:.5s .35s both rise}.unlock-tier{border:1px solid color-mix(in srgb, var(--a) 60%, transparent);color:var(--a);letter-spacing:.16em;text-transform:uppercase;border-radius:999px;padding:3px 14px;font-size:12px;font-weight:800;animation:.5s .45s both rise}.unlock-count{color:#8f97ad;font:600 14px var(--font-mono)}.unlock-next{margin-top:18px;animation:.5s .6s both rise}.unlock-skip{color:#8f97ad;font:600 13px var(--font-ui);cursor:pointer;background:0 0;border:0;border-radius:9px;align-items:center;gap:8px;padding:6px 12px;animation:.5s .7s both rise;display:inline-flex}.unlock-skip:hover{color:#f2f4fa}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.achievements{max-width:1040px}.ach-summary{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:18px 40px;margin:8px 0 18px;padding:18px 22px;display:flex}.ach-total{flex:1;min-width:220px}.ach-total-value{color:var(--muted);margin-bottom:8px;font-size:18px}.ach-total-value b{color:var(--text);font:800 34px var(--font-mono)}.tallies{flex-wrap:wrap;gap:16px 22px;display:flex}.tally{align-items:center;gap:7px;font-size:13px;display:flex}.tally-dot{background:linear-gradient(135deg, var(--a), var(--b));border-radius:3px;width:12px;height:12px;transform:rotate(45deg)}.tally b{font-family:var(--font-mono)}.tally span{color:var(--muted)}.filters{flex-wrap:wrap;gap:12px 20px;margin-bottom:8px;display:flex}.ach-section h2{align-items:baseline;gap:12px;display:flex}.ach-section h2 small{color:var(--faint);font:600 14px var(--font-mono)}.ach-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,330px),1fr));gap:14px;display:grid}.ach{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);gap:16px;padding:16px;display:flex}.ach.unlocked{border-color:color-mix(in srgb, var(--a) 50%, var(--border));background:linear-gradient(135deg, color-mix(in srgb, var(--a) 9%, var(--surface)), var(--surface) 55%)}.ach-body{flex:1;min-width:0}.ach-body h3{margin:0 0 3px}.ach-body p{color:var(--muted);margin:0 0 9px;font-size:14px}.ach.locked h3{color:var(--muted)}.ach-meta{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.tier-chip{letter-spacing:.08em;text-transform:uppercase;color:var(--b);border:1px solid color-mix(in srgb, var(--a) 70%, var(--b));border-radius:999px;padding:1px 9px;font-size:11px;font-weight:800}.ach-date{color:var(--faint);font-size:12px}.progress{background:var(--surface-2);border-radius:999px;flex:1;min-width:110px;height:16px;position:relative;overflow:hidden}.progress i{background:linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 60%, var(--good)));border-radius:999px;height:100%;display:block}.progress span{font:600 10px var(--font-mono);color:var(--text);text-shadow:0 0 3px var(--bg);place-items:center;display:grid;position:absolute;inset:0}.progress.big{flex:none;height:10px}.custom-bar{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:8px 16px;margin:8px 2px 16px;font-size:13px;display:flex}.counter.over{color:var(--bad)}.saved{color:var(--good)}.custom-actions{flex-wrap:wrap;gap:10px;display:flex}.defs{grid-template-columns:max-content 1fr;gap:8px 22px;margin:0 0 12px;display:grid}.defs dt{font-weight:700}.defs dd{color:var(--muted);margin:0}.legend{font:500 20px var(--font-mono)}.book-list{color:var(--muted);margin:0 0 12px;padding-left:20px}@media (max-width:720px){.topbar{flex-wrap:wrap;gap:10px 14px}.config{gap:10px;margin-bottom:14px}.config-row{gap:8px 14px}.field{min-width:0;max-width:100%}.field .select{text-overflow:ellipsis;width:100%}.mode-desc{display:none}.stage{min-height:0}.nav{flex-basis:100%;order:3}.hud{flex-wrap:wrap}.hud-value{font-size:46px}.big b{font-size:62px}.big:nth-child(2) b{font-size:40px}}.stats{max-width:1040px}.tabs{margin:4px 0 22px;overflow-x:auto}.panel{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);padding:18px 20px}.panel+.panel{margin-top:16px}.muted{color:var(--muted)}.num{text-align:right;font-variant-numeric:tabular-nums}.strong{font-weight:700}.tag{background:color-mix(in srgb, var(--accent) 18%, transparent);color:var(--accent);border-radius:999px;margin-left:8px;padding:0 7px;font-size:11px;font-weight:700}.stat-cards{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;display:grid}.stat-card{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);padding:16px 18px}.stat-card-value{font:800 30px/1.1 var(--font-mono);font-variant-numeric:tabular-nums}.stat-card-label{color:var(--muted);margin-top:4px;font-size:13px;font-weight:600}.stat-card-sub{color:var(--faint);margin-top:2px;font-size:12px}.table{border-collapse:collapse;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;font-size:14px;overflow:hidden}.table th,.table td{text-align:left;border-bottom:1px solid var(--border);padding:9px 14px}.table thead th{color:var(--faint);letter-spacing:.08em;text-transform:uppercase;background:var(--bg-2);font-size:11px}.table th.num,.table td.num{text-align:right}.table tbody tr:last-child th,.table tbody tr:last-child td{border-bottom:0}.table tbody th{font-weight:600}.history .run-row{cursor:pointer}.history .run-row:hover,.history .run-row[aria-expanded=true]{background:var(--surface-2)}.history .run-detail td{background:var(--surface-2);padding:8px 18px 16px}.spark{width:90px;height:24px}.spark polyline{fill:none;stroke:var(--accent);stroke-width:1.6px;stroke-linejoin:round}.stats-history .btn{margin-top:14px}.calendar{padding-bottom:6px;overflow-x:auto}.cal-months,.cal-grid{gap:3px;display:flex}.cal-months{height:18px;margin-left:34px}.cal-month{width:14px;color:var(--faint);white-space:nowrap;font-size:11px;overflow:visible}.cal-body{gap:6px;display:flex}.cal-days{width:28px;color:var(--faint);grid-template-rows:repeat(7,14px);gap:3px;font-size:10px;line-height:14px;display:grid}.cal-col{grid-template-rows:repeat(7,14px);gap:3px;display:grid}.cal-cell{background:var(--surface-2);border-radius:3px;width:14px;height:14px;display:block}.cal-cell.void{background:0 0}.cal-cell.l1{background:color-mix(in srgb, var(--accent) 28%, var(--surface-2))}.cal-cell.l2{background:color-mix(in srgb, var(--accent) 50%, var(--surface-2))}.cal-cell.l3{background:color-mix(in srgb, var(--accent) 75%, var(--surface-2))}.cal-cell.l4{background:var(--accent)}.danger-zone{border-top:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:12px 16px;margin-top:34px;padding-top:20px;display:flex}.trend{border-top:1px solid var(--border);flex-wrap:wrap;gap:18px 44px;margin-top:20px;padding-top:18px;display:flex}.trend-value{font:800 28px/1.1 var(--font-mono);font-variant-numeric:tabular-nums}.trend-value small{font:600 12px var(--font-ui);color:var(--muted)}.trend-label{color:var(--muted);font-size:13px}.trend-delta{margin-top:2px;font-size:12px;font-weight:700}.trend-delta.up{color:var(--good)}.trend-delta.down{color:var(--bad)}.stats-progress h2,.stats-weak h2{margin-top:30px}.kboard{--key:clamp(32px, 6.6vw, 60px);padding:4px 2px 10px;overflow-x:auto}.krow{gap:6px;width:max-content;margin-bottom:6px;display:flex}.heat-freq{--heat-color:var(--accent)}.heat-err{--heat-color:var(--bad)}.heat-speed{--heat-color:var(--warn)}.kkey{width:var(--key);height:var(--key);border:1px solid var(--border);background:color-mix(in srgb, var(--heat-color,var(--accent)) var(--p,0%), var(--surface-2));color:var(--text);font-family:var(--font-mono);cursor:default;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:1px;transition:transform .1s;display:flex}.kkey:hover{z-index:1;transform:translateY(-2px)}.kkey-char{font-size:clamp(14px,2.1vw,21px);font-weight:700;line-height:1}.kkey-word{letter-spacing:.06em;text-transform:uppercase;font-size:13px;font-weight:600}.kkey-val{opacity:.85;min-height:10px;font-size:clamp(8px,1.1vw,10px);line-height:1}.kkey.hot{color:var(--accent-ink)}.kkey.nodata{color:var(--faint);border-style:dashed}.kkey.kspace{width:calc(var(--key) * 6 + 30px)}.kkey-sm{--key:40px;width:40px;height:44px}.kothers{margin-top:18px}.kothers-list{flex-wrap:wrap;gap:6px;display:flex}.heat-legend{color:var(--muted);align-items:center;gap:10px;margin-top:8px;font-size:12px;display:flex}.heat-bar{background:linear-gradient(90deg, var(--surface-2), var(--heat-color));border:1px solid var(--border);border-radius:999px;width:160px;height:8px}.drill-panel{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);margin:0 0 16px;padding:14px 18px}.drill-title{letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin-bottom:10px;font-size:12px;font-weight:700}.target-groups{flex-wrap:wrap;gap:14px 34px;display:flex}.target-label{color:var(--muted);margin-bottom:6px;font-size:12px}.target-list{flex-wrap:wrap;gap:8px;display:flex}.target{background:var(--surface-2);border:1px solid var(--border);border-radius:11px;flex-direction:column;align-items:center;gap:1px;min-width:56px;padding:6px 10px 5px;display:inline-flex}.target.key{border-color:color-mix(in srgb, var(--warn) 55%, var(--border))}.target.pair{border-color:color-mix(in srgb, var(--bad) 50%, var(--border))}.target-token{font:800 20px/1.1 var(--font-mono)}.target-token.inline{text-align:center;background:var(--surface-2);border-radius:8px;min-width:2.4em;padding:2px 8px;font-size:16px;display:inline-block}.target-info{font:500 11px var(--font-mono);color:var(--muted);white-space:nowrap}.drill-call .btn{margin-top:14px}.drill-call{margin-bottom:16px}.drill-debrief .better{color:var(--good);font-weight:700}.drill-debrief .worse{color:var(--warn);font-weight:700}.drill-debrief small{color:var(--faint);font-weight:500}.targets-host:empty{display:none}@media (max-width:720px){.kboard{--key:clamp(20px, 6vw, 60px)}.krow{gap:4px;margin-bottom:4px}.kkey{border-radius:7px}.kkey.kspace{width:calc(var(--key) * 6 + 20px)}.panel{padding:14px}}.weak-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:16px;margin-bottom:16px;display:grid}.weak-grid .panel+.panel{margin-top:0}.weak-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 16px;margin-bottom:12px;display:flex}.weak-head h3{margin:0 0 2px;font-size:17px}.weak-head .hint{margin:0;font-size:13px}.bars{gap:7px;margin:0;padding:0;list-style:none;display:grid}.bars li{grid-template-columns:3.2em 1fr auto;align-items:center;gap:12px;display:grid}.bar-label{font:700 17px var(--font-mono);text-align:center;background:var(--surface-2);border-radius:7px;padding:1px 0}.bar-track{background:var(--surface-2);border-radius:999px;height:10px;overflow:hidden}.bar-track i{background:var(--tone);border-radius:999px;height:100%;display:block}.tone-warn{--tone:var(--warn)}.tone-bad{--tone:var(--bad)}.bar-value{text-align:right;min-width:7.5em;font:700 14px var(--font-mono);font-variant-numeric:tabular-nums}.bar-value small{color:var(--faint);font-weight:500}.confusions{flex-wrap:wrap;gap:10px;display:flex}.confusion{border:1px solid var(--border);background:linear-gradient(90deg, color-mix(in srgb, var(--bad) 20%, transparent) var(--w), transparent var(--w)), var(--surface-2);font:600 16px var(--font-mono);border-radius:999px;align-items:center;gap:8px;padding:7px 14px;display:inline-flex;position:relative;overflow:hidden}.conf-want{color:var(--good)}.conf-got{color:var(--bad)}.conf-arrow{color:var(--faint)}.confusion b{color:var(--muted);margin-left:4px;font-size:13px}.race{max-width:900px}.race-banner{z-index:15;background:color-mix(in srgb, var(--warn) 18%, var(--surface));border:1px solid color-mix(in srgb, var(--warn) 50%, var(--border));color:var(--warn);border-radius:12px;margin-bottom:14px;padding:10px 16px;font-weight:700;position:sticky;top:62px}.race-banner[hidden]{display:none}.race .panel{margin-bottom:16px}.panel-title{margin:0 0 10px;font-size:18px}.race h2{margin-top:22px}.race .panel>h2:first-child{margin-top:0}.btn-lg{border-radius:13px;padding:13px 26px;font-size:16px}.btn[disabled]{opacity:.6;cursor:progress}.form-error{min-height:1.4em;color:var(--bad);margin:10px 0 0;font-size:14px;font-weight:600}.race-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 20px;margin-bottom:14px;display:flex}.race-head h1{margin:0}.race-head.slim{margin-bottom:12px}.code-badge{background:var(--surface-2);border:1px solid var(--border);font:800 22px var(--font-mono);letter-spacing:.14em;border-radius:12px;align-items:baseline;gap:10px;padding:6px 14px;display:inline-flex}.code-badge small{font:700 11px var(--font-ui);letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}.code-badge.big{margin-bottom:8px;font-size:40px}.name-field{gap:8px;max-width:360px;display:flex}.name-input{flex:1;min-width:0;font-size:16px;font-weight:600}.join-row{gap:10px;display:flex}.code-input{width:8em;font:800 22px var(--font-mono);letter-spacing:.16em;text-transform:uppercase;text-align:center}.share-row{flex-wrap:wrap;gap:10px;display:flex}.share-link{min-width:220px;font:500 14px var(--font-mono);flex:1}.rename-label{margin-top:16px}.players{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin:0 0 6px;padding:0;list-style:none;display:grid}.player{background:var(--surface-2);border:1px solid #0000;border-radius:12px;flex-wrap:wrap;align-items:center;gap:8px;padding:9px 12px;display:flex}.player.me{border-color:color-mix(in srgb, var(--accent) 60%, transparent)}.player.offline{opacity:.55}.player-name{text-overflow:ellipsis;font-weight:700;overflow:hidden}.avatar{color:#fff;width:30px;height:30px;font:800 14px var(--font-ui);text-shadow:0 1px 2px #00000059;border-radius:50%;flex:none;place-items:center;display:inline-grid}.tag-host,.tag-warn{background:color-mix(in srgb, var(--warn) 18%, transparent);color:var(--warn)}.tag-bad{background:color-mix(in srgb, var(--bad) 18%, transparent);color:var(--bad)}.summary-chips{flex-wrap:wrap;gap:10px;margin-bottom:10px;display:flex}.summary-chip{background:var(--surface-2);border-radius:999px;align-items:baseline;gap:8px;padding:6px 14px;display:inline-flex}.summary-chip span{letter-spacing:.08em;text-transform:uppercase;color:var(--faint);font-size:11px;font-weight:700}.race-actions{flex-wrap:wrap;align-items:center;gap:12px 16px;margin:20px 0;display:flex}.waiting{color:var(--muted);align-items:center;gap:12px;font-weight:600;display:inline-flex}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.9s linear infinite spin}.lanes{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);flex-direction:column;gap:8px;margin:0 0 18px;padding:14px 16px;list-style:none;display:flex}.lane{grid-template-columns:1.6em 30px minmax(6em,11em) 1fr minmax(9em,auto);align-items:center;gap:10px;transition:opacity .2s;display:grid}.lane-place{font:700 13px var(--font-mono);color:var(--faint);text-align:center}.lane-name{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:700;overflow:hidden}.lane-name small{color:var(--accent);font-weight:600}.lane-track{background:var(--surface-2);border-radius:999px;height:12px;overflow:hidden}.lane-track i{background:linear-gradient(90deg, color-mix(in srgb, var(--accent) 65%, var(--surface-2)), var(--accent));border-radius:999px;height:100%;transition:width .25s ease-out;display:block}.lane.me .lane-track i{background:linear-gradient(90deg, color-mix(in srgb, var(--good) 65%, var(--surface-2)), var(--good))}.lane-value{text-align:right;font:600 13px var(--font-mono);font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap}.lane.done .lane-value{color:var(--good)}.lane.out{opacity:.55}.lane.out .lane-value{color:var(--bad)}.lane.left{opacity:.4}.countdown{z-index:900;background:radial-gradient(circle at 50% 45%, color-mix(in srgb, var(--accent) 22%, #05060adb), #05060ae0 70%);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);color:#f2f4fa;pointer-events:none;place-content:center;justify-items:center;gap:8px;animation:.2s ease-out fade-in;display:grid;position:fixed;inset:0}.countdown.go{animation:.7s ease-in forwards fade-out}.countdown-title{letter-spacing:.2em;text-transform:uppercase;color:#b8c0d6;font-size:18px;font-weight:800}.countdown-number{font:800 clamp(120px, 26vw, 260px) / 1 var(--font-mono);text-shadow:0 0 60px color-mix(in srgb, var(--accent) 70%, transparent);animation:.9s ease-out count-pop}.countdown-number.go{color:var(--good);text-shadow:0 0 60px color-mix(in srgb, var(--good) 70%, transparent)}@keyframes count-pop{0%{opacity:0;transform:scale(1.5)}25%{opacity:1;transform:scale(1)}to{opacity:.85;transform:scale(.9)}}.race-results h2{margin-top:4px}.podium{grid-template-columns:repeat(3,minmax(0,1fr));align-items:end;gap:12px;max-width:560px;margin:8px auto 26px;display:grid}.podium-step{text-align:center;flex-direction:column;align-items:center;gap:4px;animation:.5s both rise;display:flex}.podium-step.place-1{animation-delay:.25s}.podium-step.place-2{animation-delay:.1s}.podium-step.place-3{animation-delay:0s}.podium-medal{font-size:34px;line-height:1}.podium-name{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-weight:800;overflow:hidden}.podium-score{font:700 14px var(--font-mono)}.podium-score small{color:var(--muted);font-weight:500}.podium-block{background:linear-gradient(180deg, color-mix(in srgb, var(--a,var(--accent)) 60%, var(--surface-2)), var(--surface-2));width:100%;font:800 34px var(--font-mono);color:var(--text);border-radius:12px 12px 0 0;place-items:center;margin-top:6px;display:grid}.place-1{--a:#ffd34d}.place-2{--a:#c7cfdf}.place-3{--a:#d99a5f}.place-1 .podium-block{height:110px}.place-2 .podium-block{height:80px}.place-3 .podium-block{height:58px}.podium-step.me .podium-name{color:var(--accent)}.podium-step.empty{visibility:hidden}.ranking tr.me{background:color-mix(in srgb, var(--accent) 10%, transparent)}.rank-player{align-items:center;gap:9px;font-weight:600;display:inline-flex}@media (max-width:720px){.lane{grid-template-columns:1.4em 26px minmax(4em,7em) 1fr}.lane-value{text-align:left;grid-column:3/-1}}
