.tm--typing{--tm-cycle:7.2s}.tm-type-bar{fill:var(--surface-inset);animation:tm-type-in var(--tm-cycle) var(--ease) infinite}@keyframes tm-type-in{0%{opacity:0}5%,92%{opacity:1}98%,to{opacity:0}}.tm-type-wipe--1{animation:tm-type-wipe1 var(--tm-cycle) var(--ease) infinite;transform:translate(204px)}@keyframes tm-type-wipe1{0%,5%{transform:translate(0)}32%,92%{transform:translate(204px)}98%,to{transform:translate(0)}}.tm-type-wipe--2{animation:tm-type-wipe2 var(--tm-cycle) var(--ease) infinite;transform:translate(194px)}@keyframes tm-type-wipe2{0%,33%{transform:translate(0)}58%,92%{transform:translate(194px)}98%,to{transform:translate(0)}}.tm-type-caret{fill:var(--accent);animation:tm-type-caret var(--tm-cycle) var(--ease) infinite;transform:translate(190px,20px)}@keyframes tm-type-caret{0%,5%{transform:translate(0)}32%,33%{transform:translate(200px)}34%{transform:translateY(20px)}58%,92%{transform:translate(190px,20px)}98%,to{transform:translate(0)}}.tm-type-wrong{fill:var(--danger);animation:tm-type-wrong var(--tm-cycle) var(--ease) infinite}@keyframes tm-type-wrong{0%,20%{opacity:0}23%,92%{opacity:1}98%,to{opacity:0}}.tm-type-out{animation:tm-type-out var(--tm-cycle) var(--ease) infinite}@keyframes tm-type-out{0%,58%{opacity:0;transform:translateY(10px)}66%,92%{opacity:1;transform:none}98%,to{opacity:0;transform:translateY(10px)}}.tm-type-wpm{font-family:var(--font-display);letter-spacing:var(--track-display);fill:var(--text);font-size:30px;font-weight:700}.tm-type-unit{font-family:var(--font-mono);fill:var(--text-subtle);font-size:8px;font-weight:500}.tm-type-cap{fill:var(--surface-inset)}.tool:has(>.tt),.tt__host{container-type:inline-size}.tt{--tt-flow:0;flex-direction:column;gap:14px;display:flex}.tt__controls{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-lg);flex-direction:column;padding:8px 12px;display:flex}.tt__row{flex-wrap:wrap;align-items:center;gap:6px 14px;min-height:42px;display:flex}.tt__set{border:0;min-width:0;margin:0;padding:0}.tt__set--len{flex-wrap:wrap;gap:4px 12px;margin-inline-start:auto;display:flex}.tt__reveal{transition:grid-template-rows .24s var(--ease);grid-template-rows:0fr;display:grid}.tt__reveal.is-open{grid-template-rows:1fr}.tt__reveal-inner{min-height:0;overflow:hidden}.tt__toggles{opacity:0;transition:opacity .2s var(--ease), transform .2s var(--ease);flex-wrap:wrap;align-items:center;gap:4px;padding-block:5px 3px;display:flex;transform:translateY(-4px)}.tt__reveal.is-open .tt__toggles{opacity:1;transform:none}.tt__row>.tt__unit,.tt__toggles>.tt__unit{min-width:3.5rem}.tt__toggles>.tt__unit{margin-inline-end:10px}.tt__chips{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.tt__unit{font-family:var(--font-mono);color:var(--text-subtle);letter-spacing:.04em;font-size:.6875rem}.tt__chip input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.tt__chip label{border-radius:var(--r-full);color:var(--text-muted);cursor:pointer;transition:background-color .14s var(--ease), color .14s var(--ease);border:1px solid #0000;align-items:center;padding:5px 11px;font-size:.8125rem;font-weight:500;display:inline-flex}.tt__chip--num label{font-family:var(--font-mono);justify-content:center;min-width:34px;padding-inline:9px}.tt__chip label:hover{background:var(--surface-inset);color:var(--text)}.tt__chip input:checked+label{background:var(--accent);color:var(--on-accent)}.tt__chip input:focus-visible+label{outline:2px solid var(--focus);outline-offset:2px}.tt__toggle{border-radius:var(--r-full);border:1px solid var(--border-input);font:inherit;color:var(--text-subtle);cursor:pointer;transition:background-color .14s var(--ease), color .14s var(--ease);background:0 0;align-items:center;gap:5px;padding:5px 11px;font-size:.8125rem;font-weight:500;display:inline-flex}.tt__toggle:hover{border-color:var(--border-hover);color:var(--text)}.tt__toggle[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent-border);color:var(--accent-text)}.tt__toggle span{font-family:var(--font-mono);opacity:.7}.tt__custom{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--r-lg);flex-direction:column;gap:8px;padding:12px;display:flex}.tt__custom-label{color:var(--text-muted);font-size:.8125rem}.tt__custom-input{border:1px solid var(--border-input);border-radius:var(--r-md);background:var(--surface);width:100%;color:var(--text);font:inherit;resize:vertical;padding:10px 12px;font-size:.9375rem}.tt__custom-actions{align-items:center;gap:10px;display:flex}.tt__custom-count{font-family:var(--font-mono);color:var(--text-subtle);font-size:.75rem}.tt__stage{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);flex-direction:column;gap:14px;padding:clamp(14px,3cqi,26px);display:flex}.tt__live{opacity:.55;transition:opacity .2s var(--ease);flex-wrap:wrap;align-items:baseline;gap:18px;display:flex}.tt__stage.is-running .tt__live{opacity:1}.tt__metric{color:var(--text-subtle);align-items:baseline;gap:5px;font-size:.75rem;display:flex}.tt__metric strong{font-family:var(--font-display);letter-spacing:var(--track-tight);color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:1.375rem;font-weight:700}.tt__metric--lead strong{color:var(--text);font-size:2rem}.tt__flow{border-radius:var(--r-full);background:var(--surface-inset);flex:90px;align-self:center;min-width:70px;height:5px;overflow:hidden}.tt__flow-fill{background:var(--accent);transform-origin:0;width:100%;height:100%;transition:transform .16s var(--ease);display:block;transform:scaleX(0)}.tt__field{border-radius:var(--r-md);position:relative}.tt__scroll{height:calc(5.25*clamp(1.0625rem,.85rem + 1.1cqi,1.5rem));position:relative;overflow:hidden}.tt__words{font-family:var(--font-mono);color:var(--text-subtle);transition:transform .15s var(--ease);will-change:transform;flex-wrap:wrap;gap:0 .55em;font-size:clamp(1.0625rem,.85rem + 1.1cqi,1.5rem);line-height:1.75;display:flex}.tt-w{display:flex}.tt-c{white-space:pre;display:block}.tt-c--ok{color:var(--text);animation:tt-pop .2s var(--ease)}.tt-c--bad{color:var(--danger);background:var(--danger-soft);animation:tt-nudge .17s var(--ease);border-radius:2px}.tt-c--extra{color:var(--danger);opacity:.65;text-decoration:line-through}@keyframes tt-pop{0%{transform:scale(1.28)}to{transform:scale(1)}}@keyframes tt-nudge{0%,to{transform:translate(0)}30%{transform:translate(-2px)}70%{transform:translate(2px)}}.tt-w.is-wrong{text-decoration:underline;text-decoration-color:var(--danger);text-underline-offset:3px;text-decoration-thickness:1.5px}.tt__caret{background:var(--accent);width:2px;transition:transform .15s var(--ease), height .15s var(--ease);box-shadow:0 0 calc(10px * var(--tt-flow)) calc(1px * var(--tt-flow)) var(--accent);pointer-events:none;border-radius:1px;position:absolute;top:0;left:0}.tt__stage:not(.is-running) .tt__caret{animation:1.1s step-end infinite tt-blink}@keyframes tt-blink{0%,49%{opacity:1}50%,to{opacity:0}}.tt__input{color:#0000;caret-color:#0000;resize:none;z-index:2;cursor:text;background:0 0;border:0;width:100%;height:100%;padding:0;font-size:16px;position:absolute;inset:0}.tt__input:focus{outline:none}.tt__veil{z-index:1;color:var(--text-muted);pointer-events:none;place-items:center;font-size:.875rem;font-weight:500;display:grid;position:absolute;inset:0}.tt__stage:not(.is-focused) .tt__words{filter:blur(3px);opacity:.6;transition:filter .18s var(--ease), opacity .18s var(--ease)}.tt__stage:not(.is-focused) .tt__caret{opacity:0}.tt__actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.tt__result{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);flex-direction:column;gap:18px;padding:clamp(14px,3cqi,26px);display:flex}.tt__headline{align-items:center;gap:16px;display:grid}@container (width>=560px){.tt__headline{grid-template-columns:auto minmax(0,1fr);gap:28px}}.tt__score{flex-direction:column;line-height:1;display:flex}.tt__score strong{font-family:var(--font-display);letter-spacing:var(--track-display);font-variant-numeric:tabular-nums;color:var(--text);font-size:clamp(3.25rem,2rem + 9cqi,5.5rem);font-weight:700}.tt__score span{font-family:var(--font-mono);letter-spacing:.08em;color:var(--text-subtle);margin-top:6px;font-size:.75rem}.tt__quick{grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:12px;margin:0;display:grid}.tt__quick dt{letter-spacing:.05em;text-transform:uppercase;color:var(--text-subtle);font-size:.6875rem}.tt__quick dd{font-family:var(--font-display);color:var(--text);font-variant-numeric:tabular-nums;margin:3px 0 0;font-size:1.0625rem;font-weight:500}.tt__tabs{border-bottom:1px solid var(--border);gap:2px;display:flex;overflow-x:auto}.tt__tab{appearance:none;font:inherit;color:var(--text-subtle);cursor:pointer;white-space:nowrap;transition:color .14s var(--ease), border-color .14s var(--ease);background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:9px 14px;font-size:.875rem;font-weight:500}.tt__tab:hover{color:var(--text)}.tt__tab[aria-selected=true]{color:var(--text);border-bottom-color:var(--accent)}.tt__panel{flex-direction:column;gap:18px;display:flex}.tt__panel:focus-visible{outline:2px solid var(--focus);outline-offset:4px;border-radius:var(--r-sm)}.tt__panel-note{color:var(--text-muted);margin:0;font-size:.8125rem;line-height:1.6}.tt__speeds{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;display:grid}.tt__speed{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--r-md);flex-direction:column;padding:12px 14px;display:flex}.tt__speed strong{font-family:var(--font-display);letter-spacing:var(--track-tight);font-variant-numeric:tabular-nums;font-size:1.75rem;font-weight:700;line-height:1.1}.tt__speed-label{font-family:var(--font-mono);letter-spacing:.06em;color:var(--text-subtle);margin-top:2px;font-size:.6875rem}.tt__speed-note{color:var(--text-muted);margin-top:8px;font-size:.75rem;line-height:1.5}.tt__chart{margin:0}.tt__chart svg{width:100%;height:clamp(140px,26cqi,210px);overflow:visible}.tt__grid line{stroke:var(--border);stroke-width:1px;vector-effect:non-scaling-stroke}.tt__line{fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.tt__area{fill:var(--accent-soft);stroke:none}.tt__line--raw{stroke:var(--border-strong)}.tt__line--net{stroke:var(--accent);stroke-width:2.5px}.tt__errdot{fill:var(--danger);vector-effect:non-scaling-stroke}.tt__chart figcaption{color:var(--text-subtle);flex-wrap:wrap;gap:6px 16px;margin-top:10px;font-size:.75rem;display:flex}.tt__key{align-items:center;gap:6px;display:inline-flex}.tt__key:before{content:"";background:var(--border-strong);border-radius:2px;width:14px;height:3px}.tt__key--net:before{background:var(--accent)}.tt__key--err:before{background:var(--danger);border-radius:50%;width:8px;height:8px}.tt__chart-max{font-family:var(--font-mono);margin-inline-start:auto}.tt__stumbles h3{margin:0 0 4px;font-size:1rem}.tt__stumble-list{flex-direction:column;gap:6px;margin:10px 0 0;padding:0;list-style:none;display:flex}.tt__stumble-list li{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--r-sm);flex-wrap:wrap;align-items:baseline;gap:4px 12px;padding:8px 12px;display:flex}.tt__stumble-list code{font-family:var(--font-mono);color:var(--text);font-size:.9375rem}.tt__stumble-list span{color:var(--text-muted);font-size:.8125rem}.tt__legend{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.tt__legend-label{color:var(--text-subtle);font-size:.75rem}.tt__ramp{border-radius:var(--r-full);border:1px solid var(--border);background:linear-gradient(90deg, var(--surface-inset), var(--accent));width:100px;height:8px}.tt__legend .tt__toggle{margin-inline-start:auto}.tt__keyboard{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--r-md);flex-direction:column;gap:4px;padding:10px;display:flex;overflow-x:auto}.tt__krow{gap:4px;min-width:480px;display:flex}.tt__cap{--heat:0;flex:var(--cap-w) 1 0;border-radius:var(--r-sm);border:1px solid var(--border);background:color-mix(in oklab, var(--accent) calc(var(--heat) * 78%), var(--surface));min-width:0;color:var(--text);transition:background-color .26s var(--ease);flex-direction:column;justify-content:center;align-items:center;gap:1px;padding:6px 2px;display:flex}.tt__cap.is-hot{color:var(--on-accent)}.tt__cap.is-cold,.tt__cap--dead{background:var(--surface);color:var(--text-subtle);opacity:.5}.tt__cap-key{font-family:var(--font-mono);font-size:.75rem;font-weight:500;line-height:1}.tt__cap-val{font-family:var(--font-mono);opacity:.75;min-height:.5625rem;font-size:.5625rem;line-height:1}.tt__fingers{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.tt__finger{grid-template-columns:96px minmax(60px,1fr);align-items:center;gap:4px 12px;display:grid}@container (width>=520px){.tt__finger{grid-template-columns:96px minmax(80px,1fr) auto}}.tt__finger-name{color:var(--text-muted);font-size:.8125rem}.tt__finger-bar{border-radius:var(--r-full);background:var(--surface-inset);height:10px;overflow:hidden}.tt__finger-fill{background:var(--accent);transform-origin:0;height:100%;transition:transform .52s var(--ease);display:block;transform:scaleX(0)}.tt__finger-val{font-family:var(--font-mono);color:var(--text-subtle);grid-column:2;font-size:.75rem}@container (width>=520px){.tt__finger-val{white-space:nowrap;grid-column:3}}.tt__finger.is-empty{opacity:.5}.tt__replay{font-family:var(--font-mono);color:var(--text-subtle);background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--r-md);flex-wrap:wrap;gap:0 .55em;max-height:8.5em;padding:12px;font-size:clamp(.9375rem,.8rem + .8cqi,1.25rem);line-height:1.7;display:flex;overflow-y:auto}.tt__replay-bar{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.tt__replay-seek{min-width:100px;accent-color:var(--accent);flex:140px}.tt__replay-time{font-family:var(--font-mono);color:var(--text-subtle);min-width:5ch;font-size:.8125rem}.tt__again{flex-wrap:wrap;justify-content:center;gap:8px;padding-top:4px;display:flex}@container (width<=820px){.tt__set--len{margin-inline-start:0}}@container (width<=560px){.tt__row{min-height:0;padding-block:6px}.tt__row>.tt__unit,.tt__toggles>.tt__unit{min-width:0;margin-inline-end:0}}@media (prefers-reduced-motion:reduce){.tt-c--ok,.tt-c--bad{animation:none}.tt__caret,.tt__words,.tt__finger-fill,.tt__flow-fill,.tt__reveal,.tt__toggles{transition:none}.tt__stage:not(.is-running) .tt__caret{animation:none}}.workspace .tt [data-tt=expand]{display:none}.tt>.studio-body{flex-direction:column;gap:14px;display:flex}
