.typing-trainer,.typing-trainer__picker,.typing-trainer__play,.typing-trainer__drill,.typing-trainer__report,.typing-trainer__report-preview{--tt-fg: var(--color-text, #1a1a1a);--tt-bg: var(--color-background, #ffffff);--tt-muted: var(--color-text-muted, #555);--tt-border: var(--color-border, #e5e7eb);--tt-accent: var(--color-theme, #3b8dbd);--tt-correct: #10b981;--tt-wrong: #ef4444;--tt-home: var(--color-theme-subtle, rgba(59, 141, 189, .1));color:var(--color-text, #1a1a1a);background:var(--color-background, #ffffff);font-family:inherit;padding:1.5rem}.typing-trainer__title{font-size:1.75rem;margin:0 0 .5rem;color:var(--color-text, #1a1a1a)}.typing-trainer__subtitle{color:var(--color-text-muted, #555);margin:0 0 1.5rem}.typing-trainer__field{margin-bottom:1rem}.typing-trainer__field--inline{display:inline-block;margin-right:1rem}.typing-trainer__label{display:block;font-size:.875rem;font-weight:500;color:var(--color-text-muted, #555);margin-bottom:.25rem}.typing-trainer__select{width:100%;padding:.5rem;border:1px solid var(--color-border, #ccc);border-radius:4px;font-size:1rem;font-family:inherit;background:var(--color-background, #fff);color:var(--color-text, #222);box-sizing:border-box}.typing-trainer__select:focus{outline:2px solid var(--color-theme, #3b8dbd);outline-offset:1px;border-color:var(--color-theme, #3b8dbd)}.typing-trainer__segmented{display:flex;flex-wrap:wrap;gap:.25rem;background:var(--color-border-light, #eaeaea);padding:.25rem;border-radius:6px}.typing-trainer__segmented-btn{flex:1 1 auto;padding:.5rem .75rem;border:none;background:transparent;color:var(--color-text, #333);cursor:pointer;border-radius:4px;font-size:.9rem;font-family:inherit;min-width:80px}.typing-trainer__segmented-btn:hover{background:var(--color-border, #d4d4d4)}.typing-trainer__segmented-btn.is-active{background:var(--color-background, #fff);color:var(--color-text, #000);box-shadow:0 1px 3px #0000001a}.typing-trainer__preview{color:var(--color-text-muted, #777);font-style:italic;margin:1rem 0;padding:.5rem .75rem;background:var(--color-theme-subtle, rgba(59, 141, 189, .1));border-radius:4px}.typing-trainer__button{padding:.5rem 1rem;border:1px solid var(--color-border, #ccc);border-radius:4px;background:var(--color-background, #fff);color:var(--color-text, #333);cursor:pointer;font-size:.95rem;font-family:inherit;margin-right:.5rem;margin-bottom:.5rem}.typing-trainer__button:hover{background:var(--color-border-light, #f0f0f0)}.typing-trainer__button:disabled{opacity:.5;cursor:not-allowed}.typing-trainer__button--primary{background:var(--color-theme, #3b8dbd);color:var(--color-background, #fff);border-color:var(--color-theme, #3b8dbd)}.typing-trainer__button--primary:hover{background:var(--color-theme-dark, #2a6f93);border-color:var(--color-theme-dark, #2a6f93)}.typing-trainer__button--toggle{margin-top:.5rem}.typing-trainer__error{color:var(--color-error, #dc3545);font-weight:600;margin-top:1rem}[data-theme=dark] .typing-trainer__segmented{background:var(--color-border-light, #2a2a2a)}[data-theme=dark] .typing-trainer__segmented-btn:hover{background:var(--color-border, #333)}[data-theme=dark] .typing-trainer__segmented-btn.is-active,[data-theme=dark] .typing-trainer__button{background:var(--color-surface, #1e1e1e);color:var(--color-text, #e5e5e5)}[data-theme=dark] .typing-trainer__button:hover{background:var(--color-border, #333)}[data-theme=dark] .typing-trainer__button--primary{background:var(--color-theme, #6bb3d9);color:var(--color-background, #121212);border-color:var(--color-theme, #6bb3d9)}[data-theme=dark] .typing-trainer__button--primary:hover{background:var(--color-theme-dark, #8fc5e5);border-color:var(--color-theme-dark, #8fc5e5)}.typing-trainer__play-header{display:flex;justify-content:space-between;align-items:stretch;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.typing-trainer__live-gauge{display:flex;flex-direction:column;align-items:center;gap:.25rem;min-width:7rem}.typing-trainer__live-gauge-label{display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--tt-muted);text-transform:uppercase;letter-spacing:.05em;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.typing-trainer__live-gauge-stage{font-size:.75rem;font-weight:700;padding:.1rem .4rem;border-radius:.25rem;background:var(--tt-bg);border:1px solid currentColor;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.typing-trainer__live-gauge-stage[data-stage="0"]{color:#ef4444}.typing-trainer__live-gauge-stage[data-stage="1"]{color:#f97316}.typing-trainer__live-gauge-stage[data-stage="2"]{color:#fbbf24}.typing-trainer__live-gauge-stage[data-stage="3"]{color:#34d399}.typing-trainer__live-gauge-stage[data-stage="4"]{color:#10b981}.typing-trainer__live-gauge-wrap{display:flex;align-items:center;justify-content:center}.typing-trainer__live-gauge .typing-trainer__gauge{width:7rem;height:7rem}.typing-trainer__live-gauge-detail{display:none}.typing-trainer__counter{display:flex;flex-direction:column;align-items:center;min-width:6rem}.typing-trainer__counter-label{font-size:.8rem;color:var(--tt-muted);text-transform:uppercase;letter-spacing:.05em}.typing-trainer__counter-value{font-size:1.75rem;font-weight:700;font-variant-numeric:tabular-nums}.typing-trainer__counter--timer .typing-trainer__counter-value{color:var(--tt-accent)}.typing-trainer__lines{display:flex;flex-direction:column;gap:.5rem;background:var(--tt-bg);border:1px solid var(--tt-border);border-radius:.5rem;padding:1.25rem 1.5rem;margin-bottom:1.5rem}.typing-trainer__line{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:1.4rem;line-height:2.2;letter-spacing:.02em;white-space:pre-wrap;word-break:break-word;font-variant-numeric:tabular-nums}.typing-trainer__line--current{color:var(--tt-fg)}.typing-trainer__line--history,.typing-trainer__line--preview{color:var(--tt-muted);opacity:.65}.typing-trainer__slot{position:relative;display:inline;padding:0;margin:0;color:inherit}.typing-trainer__slot--newline{display:block;width:100%;height:0;margin:0;padding:0;border:0;color:var(--tt-muted);font-size:.7rem;text-align:center;line-height:1}.typing-trainer__typed-char--newline{display:block;width:100%;height:0;margin:0;padding:0;border:0;line-height:1}.typing-trainer__slot[data-space=true]{display:inline-block;min-width:.55em;text-align:center}.typing-trainer__slot--correct{color:var(--tt-correct)}.typing-trainer__slot--wrong{color:var(--tt-wrong);text-decoration:underline wavy}.typing-trainer__caret{position:absolute;left:0;top:0;width:2px;height:100%;background:var(--tt-accent);animation:typing-trainer__blink 1s steps(1) infinite}@keyframes typing-trainer__blink{50%{opacity:0}}.typing-trainer__typed{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:1.4rem;line-height:2.2;letter-spacing:.02em;padding:0;min-height:1.7em;color:var(--tt-accent);white-space:pre-wrap;word-break:break-word}.typing-trainer__typed[data-empty=true]{color:var(--tt-muted);font-style:italic}.typing-trainer__typed[data-history=true]{color:var(--tt-fg);font-style:normal}.typing-trainer__typed-char{display:inline}.typing-trainer__typed-char[data-space=true]{display:inline-block;min-width:.55em;text-align:center}.typing-trainer__typed-char--correct{color:var(--tt-correct)}.typing-trainer__typed-char--wrong{color:var(--tt-wrong);text-decoration:underline wavy}.typing-trainer__typed-caret{display:inline-block;width:0;margin-left:0;border-left:.12em solid var(--tt-accent);height:1.1em;vertical-align:-.15em;animation:typing-trainer__blink 1s steps(1) infinite}.typing-trainer__play-controls{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.typing-trainer__keyboard{display:flex;flex-direction:column;gap:.4rem;padding:1rem;background:var(--tt-bg);border:1px solid var(--tt-border);border-radius:.5rem;margin-top:1rem}.typing-trainer__row{display:grid;grid-template-columns:repeat(10,1fr);gap:.3rem}.typing-trainer__row--number-fallback{grid-template-columns:repeat(10,1fr);margin-bottom:.4rem}.typing-trainer__key--modifier{background:#0000000d;color:var(--tt-fg);font-size:.85rem;font-weight:500;text-align:center}[data-theme=dark] .typing-trainer__key--modifier{background:#ffffff0d}.typing-trainer__key--space{background:#0000000d;color:var(--tt-fg);font-size:.85rem;font-weight:500;text-align:center}[data-theme=dark] .typing-trainer__key--space{background:#ffffff0d}.typing-trainer__key--space .typing-trainer__key-label{display:block;line-height:1}.typing-trainer__key--placeholder{visibility:hidden;pointer-events:none;background:transparent!important;border-color:transparent;padding:0}.typing-trainer__key{padding:.75rem .4rem;background:var(--tt-bg);border:1px solid var(--tt-border);border-radius:.25rem;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:.95rem;text-align:center;color:var(--tt-fg);cursor:default}.typing-trainer__key--home{background:var(--tt-home)}.typing-trainer__key--number{background:#00000008;font-size:.85rem}[data-theme=dark] .typing-trainer__key--number{background:#ffffff0a}.typing-trainer__key--active{border-color:var(--tt-accent);outline-color:var(--tt-accent);outline-style:solid;outline-width:3px;outline-offset:2px;transform:scale(1.05);z-index:1;position:relative;box-shadow:0 0 0 4px #3b82f640}.typing-trainer__overlay{position:fixed;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:100}[data-theme=dark] .typing-trainer__overlay{background:#0009}.typing-trainer__overlay-panel{background:var(--tt-bg);border:1px solid var(--tt-border);border-radius:.5rem;padding:1rem;display:grid;grid-template-columns:repeat(8,1fr);gap:.4rem;max-width:28em;width:90%}.typing-trainer__key--overlay{padding:.6rem;font-size:1rem}.typing-trainer__report{background:var(--tt-bg);padding:1.5rem}.typing-trainer__source-credit{margin:1rem 0;font-size:1.05rem}.typing-trainer__source-link{color:var(--tt-accent);text-decoration:underline}.typing-trainer__report-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:1rem;margin:1.5rem 0}.typing-trainer__stat{display:flex;flex-direction:column;align-items:center;padding:.75rem;background:var(--tt-home);border-radius:.5rem}.typing-trainer__stat-label{font-size:.75rem;color:var(--tt-muted);text-transform:uppercase;letter-spacing:.05em}.typing-trainer__stat-value{font-size:1.4rem;font-weight:700;font-variant-numeric:tabular-nums}.typing-trainer__tricky{margin-top:1.5rem}.typing-trainer__tricky h3{margin-bottom:.5rem}.typing-trainer__tricky-list{list-style:none;padding:0;margin:0}.typing-trainer__tricky-item{display:flex;gap:1rem;padding:.4rem .6rem;border-bottom:1px solid var(--tt-border);font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.typing-trainer__tricky-item[data-error=true]{background:#ef444414}.typing-trainer__tricky-flag{color:var(--tt-wrong);font-weight:700}.typing-trainer__tricky-display{font-weight:600;min-width:4rem}.typing-trainer__tricky-duration{color:var(--tt-muted);min-width:5rem}.typing-trainer__tricky-hits{color:var(--tt-muted)}.typing-trainer__report-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.5rem}.typing-trainer__toast{position:fixed;bottom:2rem;left:50%;transform:translate(-50%);background:var(--tt-fg);color:var(--tt-bg);padding:.6rem 1.2rem;border-radius:.5rem;z-index:200;font-weight:600}.typing-trainer__report-preview{padding:1.5rem}.typing-trainer__gauges{display:flex;flex-wrap:wrap;gap:1.5rem;justify-content:center;align-items:stretch;margin:1.5rem 0}.typing-trainer__gauge-card{flex:1 1 14rem;min-width:12rem;max-width:18rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1rem .75rem .5rem;border:1px solid var(--tt-border);border-radius:.5rem;background:var(--tt-home)}.typing-trainer__gauge-title{margin:0;font-size:1rem;font-weight:600;text-align:center;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.typing-trainer__gauge-title[data-stage="0"]{color:#ef4444}.typing-trainer__gauge-title[data-stage="1"]{color:#f97316}.typing-trainer__gauge-title[data-stage="2"]{color:#fbbf24}.typing-trainer__gauge-title[data-stage="3"]{color:#34d399}.typing-trainer__gauge-title[data-stage="4"]{color:#10b981}.typing-trainer__gauge-wrap{display:flex;flex-direction:column;align-items:center;gap:.25rem;width:100%}.typing-trainer__gauge{width:12rem;height:12rem;position:relative}.typing-trainer__gauge-aria{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@media(max-width:768px){.typing-trainer{padding:1rem}.typing-trainer__sentence{font-size:1.15rem;line-height:1.9}.typing-trainer__row{gap:.2rem}.typing-trainer__row--number-fallback{gap:.15rem}.typing-trainer__key{padding:.5rem .2rem;font-size:.8rem}.typing-trainer__gauge{width:10rem;height:10rem}.typing-trainer__gauge-card{min-width:10rem}.typing-trainer__live-gauge .typing-trainer__gauge{width:5.5rem;height:5.5rem}.typing-trainer__play-header{justify-content:center}}.typing-trainer__personal-best{margin:.5rem 0 0;font-size:.95rem;color:var(--color-text-muted, #555)}.typing-trainer__personal-best-label{font-weight:500}.typing-trainer__personal-best--new{color:var(--tt-correct, #10b981);font-weight:600}.typing-trainer__picker-actions{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;flex-wrap:wrap}.typing-trainer__button--small{padding:.4rem .8rem;font-size:.85rem}.typing-trainer__history{display:flex;flex-direction:column;gap:1rem}.typing-trainer__history-empty{color:var(--color-text-muted, #555);font-style:italic}.typing-trainer__history-trend{border:1px solid var(--tt-border, #e5e7eb);border-radius:.5rem;padding:1rem;background:var(--color-background-soft, rgba(0, 0, 0, .02))}.typing-trainer__history-trend-title{font-size:.95rem;margin:0 0 .5rem;color:var(--color-text-muted, #555)}.typing-trainer__history-trend-range{font-size:.85rem;color:var(--color-text-muted, #555);margin:.5rem 0 0}.typing-trainer__sparkline{display:flex;align-items:flex-end;gap:.2rem;height:5rem;width:100%}.typing-trainer__sparkline-bar{flex:1;background:var(--tt-accent, #3b8dbd);border-radius:.125rem;min-height:2px}.typing-trainer__history-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem;max-height:24rem;overflow-y:auto}.typing-trainer__history-item{display:grid;grid-template-columns:8rem 1fr auto auto;gap:.75rem;align-items:center;padding:.5rem .75rem;border:1px solid var(--tt-border, #e5e7eb);border-radius:.375rem;font-size:.9rem}.typing-trainer__history-date{color:var(--color-text-muted, #555);font-size:.8rem;font-variant-numeric:tabular-nums}.typing-trainer__history-source{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.typing-trainer__history-wpm{font-weight:600;font-variant-numeric:tabular-nums;min-width:5rem;text-align:right}.typing-trainer__history-acc{color:var(--color-text-muted, #555);font-variant-numeric:tabular-nums;min-width:3rem;text-align:right}.typing-trainer__history-actions{display:flex;gap:.5rem;flex-wrap:wrap}[data-theme=dark] .typing-trainer__history-item{border-color:var(--color-border, #2a2a2a)}[data-theme=dark] .typing-trainer__history-trend{border-color:var(--color-border, #2a2a2a);background:var(--color-background-soft, rgba(255, 255, 255, .04))}@media(max-width:30rem){.typing-trainer__history-item{grid-template-columns:1fr auto;grid-template-areas:"date wpm" "source acc";gap:.25rem .5rem}.typing-trainer__history-date{grid-area:date}.typing-trainer__history-source{grid-area:source}.typing-trainer__history-wpm{grid-area:wpm}.typing-trainer__history-acc{grid-area:acc}}.typing-trainer__stats{margin:.5rem 0 0}.typing-trainer__stats-title{font-size:.95rem;margin:0 0 .5rem;color:var(--color-text-muted, #555)}.typing-trainer__stats-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));gap:.5rem}.typing-trainer__stat{display:flex;flex-direction:column;gap:.125rem;padding:.5rem .75rem;border:1px solid var(--tt-border, #e5e7eb);border-radius:.5rem;background:var(--color-background-soft, rgba(0, 0, 0, .02))}.typing-trainer__stat-label{font-size:.8rem;color:var(--color-text-muted, #555);margin:0}.typing-trainer__stat-note{color:var(--color-text-muted, #555);opacity:.8}.typing-trainer__stat-value{font-size:1.1rem;font-weight:600;font-variant-numeric:tabular-nums;margin:0;color:var(--color-text, #1a1a1a)}[data-theme=dark] .typing-trainer__stat{border-color:var(--color-border, #2a2a2a);background:var(--color-background-soft, rgba(255, 255, 255, .04))}.typing-trainer__perkey{margin:.5rem 0 0}.typing-trainer__perkey-title{font-size:.95rem;margin:0 0 .5rem;color:var(--color-text-muted, #555)}.typing-trainer__legend{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.75rem 1.25rem;align-items:center;font-size:.8rem;color:var(--color-text-muted, #555)}.typing-trainer__legend-item{display:inline-flex;align-items:center;gap:.4rem}.typing-trainer__legend-swatch{display:inline-block;width:1rem;height:1rem;border-radius:.25rem;border:1px solid var(--tt-border, #e5e7eb)}.typing-trainer__key--error-low{background:var(--tt-correct-soft, #d1fae5);color:var(--color-text, #064e3b)}.typing-trainer__key--error-mid{background:var(--tt-warn-soft, #fef3c7);color:var(--color-text, #78350f)}.typing-trainer__key--error-high{background:var(--tt-wrong-soft, #fee2e2);color:var(--color-text, #7f1d1d)}.typing-trainer__key--error-na{background:var(--color-background-soft, rgba(0, 0, 0, .04));color:var(--color-text-muted, #999);opacity:.6}[data-theme=dark] .typing-trainer__key--error-low{background:#064e3b;color:#a7f3d0}[data-theme=dark] .typing-trainer__key--error-mid{background:#78350f;color:#fde68a}[data-theme=dark] .typing-trainer__key--error-high{background:#7f1d1d;color:#fecaca}[data-theme=dark] .typing-trainer__key--error-na{background:#ffffff0f;color:var(--color-text-muted, #777);opacity:.7}[data-theme=dark] .typing-trainer__legend-swatch{border-color:var(--color-border, #2a2a2a)}.typing-trainer__drill{display:flex;flex-direction:column;gap:1rem}.typing-trainer__drill-hint{font-size:.9rem;color:var(--color-text-muted, #555);margin:0;font-style:italic}.typing-trainer,.typing-trainer__picker,.typing-trainer__play,.typing-trainer__drill,.typing-trainer__report,.typing-trainer__report-preview{--tt-finger-lp: #ec4899;--tt-finger-lr: #f59e0b;--tt-finger-lm: #10b981;--tt-finger-li: #3b82f6;--tt-finger-ri: #8b5cf6;--tt-finger-rm: #14b8a6;--tt-finger-rr: #f59e0b;--tt-finger-rp: #ef4444;--tt-finger-thumb: #94a3b8}.typing-trainer__key--finger-lp{background:var(--tt-finger-lp);color:#fff}.typing-trainer__key--finger-lr{background:var(--tt-finger-lr);color:#1a1a1a}.typing-trainer__key--finger-lm{background:var(--tt-finger-lm);color:#fff}.typing-trainer__key--finger-li{background:var(--tt-finger-li);color:#fff}.typing-trainer__key--finger-ri{background:var(--tt-finger-ri);color:#fff}.typing-trainer__key--finger-rm{background:var(--tt-finger-rm);color:#fff}.typing-trainer__key--finger-rr{background:var(--tt-finger-rr);color:#1a1a1a}.typing-trainer__key--finger-rp{background:var(--tt-finger-rp);color:#fff}.typing-trainer__key--finger-thumb{background:var(--tt-finger-thumb);color:#fff}[data-theme=dark] .typing-trainer__key--finger-lp{background:#831843;color:#fce7f3}[data-theme=dark] .typing-trainer__key--finger-lr{background:#78350f;color:#fef3c7}[data-theme=dark] .typing-trainer__key--finger-lm{background:#064e3b;color:#a7f3d0}[data-theme=dark] .typing-trainer__key--finger-li{background:#1e3a8a;color:#dbeafe}[data-theme=dark] .typing-trainer__key--finger-ri{background:#4c1d95;color:#ede9fe}[data-theme=dark] .typing-trainer__key--finger-rm{background:#134e4a;color:#99f6e4}[data-theme=dark] .typing-trainer__key--finger-rr{background:#78350f;color:#fef3c7}[data-theme=dark] .typing-trainer__key--finger-rp{background:#7f1d1d;color:#fee2e2}[data-theme=dark] .typing-trainer__key--finger-thumb{background:#1f2937;color:#e5e7eb}.typing-trainer__button--toggle[aria-pressed=true]{background:var(--color-theme, #3b8dbd);color:#fff}.typing-trainer__key-label{display:block;line-height:1.1}.typing-trainer__key-ghost{position:absolute;bottom:2px;right:4px;font-size:.55em;opacity:.55;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-weight:400;letter-spacing:0}.typing-trainer__key{position:relative}[data-theme=dark] .typing-trainer__key-ghost{opacity:.65}
