:root{color:#e9edf6;font-synthesis:none;background:#101722;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif;line-height:1.5}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0}#app{max-width:1000px;margin:1rem auto 5rem;padding:clamp(1rem,4vw,2.5rem)}h1{letter-spacing:-.055em;margin:0 0 .5rem;font-size:clamp(2rem,5vw,3rem);line-height:1.1}h2{letter-spacing:.01em;margin:2.5rem 0 .8rem;font-size:1.1rem}h3{margin:2rem 0 .5rem;font-size:1rem}p{margin:.8rem 0}.subtitle,.hint,.status{color:#bbcadc}.status{font-variant-numeric:tabular-nums;margin:1.7rem 0 .7rem}.practicing{max-width:1200px!important}.practice-header,.settings-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.practice-header nav{align-items:center;display:flex}.practice-header button{margin:0 0 0 .6rem}.icon-button{padding:.55rem .8rem;font-size:1.35rem;line-height:1}.practicing .prompt{--line-height:1.85em;height:calc(3 * var(--line-height) + 2 * clamp(1rem, 3vw, 2rem) + 4px);background:#1b2939;border:2px solid #455a73;border-radius:.8rem;padding:clamp(1rem,3vw,2rem);font:clamp(1.55rem,4vw,2.85rem)/1.85 ui-monospace,SFMono-Regular,Consolas,monospace;position:relative;overflow:hidden}.prompt-line{height:var(--line-height);white-space:nowrap;gap:1ch;display:flex}.prompt:focus-visible{outline-offset:3px;outline:3px solid #c1e1ff}.token{white-space:pre;flex:none;position:relative}.char.pending{color:#a3b2c6}.char.correct{color:#a4e2c0}.char.incorrect{color:#ff9fa6;text-decoration:underline;text-decoration-thickness:.1em}.visual-caret{pointer-events:none;border-left:2px solid #fff;height:1.15em;transition:transform 55ms ease-out;position:absolute;top:0;left:0}@media (prefers-reduced-motion:reduce){.visual-caret{transition:none}}.end-caret{height:1.15em;position:absolute;top:.4em;left:100%}.ranges{gap:.8rem;max-width:55rem;margin:0 0 1rem;display:grid}.range{flex-wrap:wrap;align-items:center;gap:.7rem 1.2rem;display:flex}.range label:first-child{min-width:8rem}.range span{color:#bbcadc;font-size:.9rem}label{flex-wrap:wrap;align-items:center;gap:.3rem;display:inline-flex}input[type=checkbox]{accent-color:#9fc8fa;width:1.15rem;height:1.15rem}input[type=number],select,input[type=file]{font:inherit;color:inherit}input[type=number],select{background:#1b2939;border:1px solid #97b6d8;border-radius:.35rem;width:7rem;padding:.5rem}input:focus-visible,select:focus-visible,.table-scroll:focus-visible{outline-offset:2px;outline:3px solid #c1e1ff}.controls{flex-wrap:wrap;gap:.7rem;margin:1rem 0;display:flex}button{color:#fff;font:inherit;cursor:pointer;background:#294565;border:1px solid #97b6d8;border-radius:.4rem;margin-bottom:.4rem;margin-right:.6rem;padding:.68rem 1.1rem;font-weight:600}button:hover,button:focus-visible{outline-offset:2px;background:#3c648b;outline:2px solid #c1e1ff}button:disabled{opacity:.5;cursor:not-allowed}.backup-file{margin:1rem 0;display:flex}.backup-file input{max-width:100%}.table-scroll{overflow-x:auto}details{margin:1rem 0}details>summary{cursor:pointer;color:#c1e1ff}details>summary:focus-visible{outline:3px solid #c1e1ff}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}th,td{text-align:left;border-bottom:1px solid #455a73;padding:.65rem}th{white-space:nowrap}.summary{grid-template-columns:repeat(auto-fit,minmax(125px,1fr));gap:1rem;display:grid}.summary dt{color:#bbcadc}.summary dd{font-variant-numeric:tabular-nums;margin:0;font-size:1.5rem;font-weight:650}.notice{color:#9ef2bc}.error{color:#ff9fa6}@media (width<=600px){#app{margin:0 auto 3rem}.range{align-items:flex-start}.range label:first-child{min-width:100%}}#app.report-view{color:#e8f0fa;max-width:1120px;margin-top:0;padding-top:clamp(1.5rem,4vw,3rem)}.report-view .report-header,.report-view .section-heading{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem 2rem;display:flex}.report-view .report-header{margin-bottom:2rem}.report-view h1{margin:.25rem 0 0;font-size:clamp(2.3rem,5vw,3.5rem)}.report-view h2{letter-spacing:-.025em;margin:0;font-size:1.35rem}.report-view h3{margin:1.5rem 0 .5rem}.report-view .eyebrow,.report-view .stat-label{color:#86b6e9;letter-spacing:.14em;margin:0;font-size:.7rem;font-weight:750}.report-view .report-back{color:#d5e5f8;background:0 0;border-color:#43556c;margin:0}.report-view .report-overview{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.8rem;display:grid}.report-view .empty-progress{max-width:640px;margin-top:2rem;padding:clamp(1.5rem,4vw,2.5rem)}.report-view .empty-progress h2{margin-top:.5rem;font-size:1.7rem}.report-view .empty-progress button{margin-top:.6rem}.report-view .stat-card,.report-view .report-card{background:#1a2838;border:1px solid #34465c;border-radius:.9rem}.report-view .stat-card{min-width:0;padding:1.2rem 1.3rem}.report-view .stat-card strong{letter-spacing:-.04em;font-variant-numeric:tabular-nums;margin:.65rem 0 .25rem;font-size:clamp(1.7rem,3vw,2.4rem);font-weight:700;line-height:1;display:block}.report-view .stat-note{color:#aec1d5;margin:0;font-size:.78rem}.report-view .progress-visuals{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:1rem;margin:1rem 0 0;display:grid}.report-view .report-card{min-width:0;padding:clamp(1rem,2.5vw,1.5rem)}.report-view .trend-card{grid-column:1/-1}.report-view .section-heading{align-items:end;margin-bottom:1.1rem}.report-view .section-heading h2{margin-top:.25rem}.report-view .chart-controls{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.report-view label{color:#b7c9db;gap:.5rem;font-size:.8rem}.report-view select,.report-view .chart-controls input{color:#e8f0fa;background:#111d2b;border-color:#435870;border-radius:.45rem;width:auto;min-width:7rem;padding:.45rem .65rem;font-size:.85rem}.report-view .chart-controls input{width:5.5rem;min-width:0}.report-view .chart-controls button{margin:0;padding:.48rem .8rem;font-size:.83rem}.report-view .progress-chart{background:0 0;border:0;border-radius:0;width:100%;max-width:none;height:auto;margin:.4rem 0 0;display:block;overflow:hidden}.report-view .progress-chart [aria-label=y-grid] line{stroke:#34465c}.report-view .chart-caption{color:#9fb3c8;margin:.5rem 0 0;font-size:.78rem;line-height:1.5}.report-view .weak-bars{margin-top:.8rem}.report-view .weak-bar-row{font-variant-numeric:tabular-nums;color:#b7c9db;border-bottom:1px solid #34465c;grid-template-columns:3.4rem minmax(3rem,1fr) minmax(11.5rem,1.4fr);align-items:center;gap:.7rem;margin:0;padding:.75rem 0;font-size:.76rem;display:grid}.report-view .weak-bar-row:last-child{border-bottom:none}.report-view .weak-bar-row button{color:#e8f0fa;text-align:left;background:0 0;border:0;margin:0;padding:.2rem;font:700 1rem ui-monospace,SFMono-Regular,Consolas,monospace}.report-view .weak-bar-row button:hover,.report-view .weak-bar-row button:focus-visible{color:#79baff}.report-view .weak-bar-track{background:#32465c;border-radius:1rem;height:.45rem}.report-view .weak-bar-fill{background:#79baff;border-radius:1rem;height:100%}.report-view .report-cta{background:#326eaa;margin:1.2rem 0 0}.report-view .chart-panel h3{font:700 1.3rem ui-monospace,SFMono-Regular,Consolas,monospace}.report-view .report-history{margin:2rem 0 0}.report-view .report-history h2{margin-bottom:.8rem}.report-view details{background:#1a2838;border:1px solid #34465c;border-radius:.6rem;margin:.5rem 0;padding:.8rem 1rem}.report-view details>summary{color:#e8f0fa;font-weight:600}.report-view details[open]>summary{margin-bottom:.8rem}.report-view table{font-size:.85rem}.report-view th,.report-view td{border-bottom-color:#34465c;padding:.65rem .8rem}.report-view th{color:#a9bfd7}@media (width<=850px){.report-view .report-overview{grid-template-columns:repeat(2,minmax(0,1fr))}.report-view .progress-visuals{grid-template-columns:1fr}.report-view .trend-card{grid-column:auto}}@media (width<=520px){.report-view .report-header{align-items:flex-start}.report-view .stat-card{padding:1rem}.report-view .stat-label{font-size:.6rem}.report-view .weak-bar-row{grid-template-columns:3rem 1fr}.report-view .weak-bar-row span{grid-column:2}.report-view .section-heading{align-items:flex-start}.report-view .chart-controls{width:100%}.report-view .chart-controls label{flex:1}.report-view .chart-controls select{max-width:100%}}
