.tpro-root{--tpro-bg:#0d0d0f;--tpro-surface:#141418;--tpro-surface-2:#1c1c22;--tpro-border:#2a2a32;--tpro-text:#d1d0c5;--tpro-text-dim:#646669;--tpro-text-faint:#3a3a40;--tpro-accent:#e2b714;--tpro-accent-dim:#a07d00;--tpro-correct:#d1d0c5;--tpro-incorrect:#ca4754;--tpro-incorrect-bg:rgba(202,71,84,0.18);--tpro-extra:#9e3b44;--tpro-cursor:#e2b714;--tpro-cursor-caret:#e2b714;--tpro-good:#57ad57;--tpro-warn:#d4ac0d;--tpro-bad:#ca4754;--tpro-font-mono:"Roboto Mono","JetBrains Mono","Cascadia Code","Fira Code","Consolas",ui-monospace,monospace;--tpro-row-height:52px}.tpro-root[data-theme=light]{--tpro-bg:#f5f5f0;--tpro-surface:#ffffff;--tpro-surface-2:#ebebeb;--tpro-border:#d9d9d4;--tpro-text:#2c2c2c;--tpro-text-dim:#909090;--tpro-text-faint:#c8c8c8;--tpro-accent:#e2b714;--tpro-accent-dim:#b8920d;--tpro-correct:#3e3e3e;--tpro-incorrect:#c03030;--tpro-incorrect-bg:rgba(192,48,48,0.12);--tpro-extra:#9e3b44;--tpro-cursor:#e2b714;--tpro-good:#2a7a2a;--tpro-warn:#996b00;--tpro-bad:#c03030}.tpro-root{min-height:100vh;background:var(--tpro-bg);color:var(--tpro-text);display:flex;flex-direction:column;font-family:var(--tpro-font-mono);transition:background .2s ease,color .2s ease}.tpro-root:-webkit-full-screen,.tpro-root:fullscreen{overflow-y:auto}.tpro-header{justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--tpro-border);flex-shrink:0}.tpro-header,.tpro-logo{display:flex;align-items:center}.tpro-logo{font-size:1rem;font-weight:700;color:var(--tpro-accent);letter-spacing:.04em;text-decoration:none;gap:8px}.tpro-logo span{color:var(--tpro-text-dim);font-weight:400}.tpro-header-right{display:flex;align-items:center;gap:8px}.tpro-icon-btn{background:none;border:none;color:var(--tpro-text-dim);cursor:pointer;padding:7px 9px;border-radius:8px;font-size:1rem;transition:background .15s,color .15s;line-height:1}.tpro-icon-btn:hover{background:var(--tpro-surface-2);color:var(--tpro-text)}.tpro-icon-btn.is-active{color:var(--tpro-accent)}.tpro-main{flex:1 1;flex-direction:column;padding:32px 24px 48px;max-width:900px;margin:0 auto;gap:0}.tpro-config,.tpro-main{display:flex;align-items:center;width:100%}.tpro-config{flex-wrap:wrap;justify-content:center;gap:4px 16px;margin-bottom:28px;padding:10px 16px;background:var(--tpro-surface);border-radius:12px;border:1px solid var(--tpro-border)}.tpro-config-divider{width:1px;height:18px;background:var(--tpro-border);flex-shrink:0}.tpro-config-group{display:flex;align-items:center;gap:2px}.tpro-hud{display:flex;align-items:flex-end;gap:28px;margin-bottom:18px;height:56px;width:100%}.tpro-hud-cell{display:flex;flex-direction:column;gap:2px}.tpro-hud-label{font-size:.68rem;color:var(--tpro-text-dim);text-transform:uppercase;letter-spacing:.08em;line-height:1}.tpro-hud-value{font-size:1.6rem;font-weight:700;color:var(--tpro-accent);line-height:1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;transition:color .2s}.tpro-hud-value.dim{color:var(--tpro-text-dim);font-size:1rem}.tpro-hud-cell--timer{margin-left:auto}.tpro-hud-cell--timer .tpro-hud-value{font-size:2.2rem;color:var(--tpro-text)}.tpro-caps-warning{background:rgba(226,183,20,.12);border:1px solid var(--tpro-accent);color:var(--tpro-accent);padding:5px 14px;border-radius:8px;font-size:.8rem;display:flex;align-items:center;gap:6px;margin-bottom:10px;animation:tpro-blink 1s steps(1) infinite}@keyframes tpro-blink{0%,to{opacity:1}50%{opacity:.6}}.tpro-text-outer{width:100%;height:calc(var(--tpro-row-height) * 3);overflow:hidden;position:relative;cursor:text;mask-image:linear-gradient(180deg,transparent 0,black 10%,black 85%,transparent);-webkit-mask-image:linear-gradient(180deg,transparent 0,black 10%,black 85%,transparent)}.tpro-text-inner{position:relative;font-size:1.2rem;line-height:var(--tpro-row-height);letter-spacing:.02em;color:var(--tpro-text-faint);white-space:pre-wrap;word-break:break-word;transition:transform .15s cubic-bezier(.4,0,.2,1);padding:0 2px;display:flex;flex-wrap:wrap;align-content:flex-start;gap:0}.tpro-word--incorrect>.tpro-word-underline{display:block}.tpro-word-underline{display:none;position:absolute;bottom:10px;left:0;right:0;height:2px;background:var(--tpro-incorrect);border-radius:1px}.tpro-char{color:var(--tpro-text-faint);position:relative;transition:color .08s}.tpro-char--correct{color:var(--tpro-correct)}.tpro-char--incorrect{color:var(--tpro-incorrect);background:var(--tpro-incorrect-bg);border-radius:2px}.tpro-char--extra{color:var(--tpro-extra);-webkit-text-decoration:underline wavy var(--tpro-extra);text-decoration:underline wavy var(--tpro-extra)}.tpro-char--cursor:before{content:"";position:absolute;left:-1px;top:20%;bottom:20%;width:2px;border-radius:2px;background:var(--tpro-cursor-caret);animation:tpro-cursor 1.05s steps(1) infinite}@keyframes tpro-cursor{0%,to{opacity:1}50%{opacity:0}}.tpro-hidden-input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px;top:0;left:0;border:none;outline:none;resize:none}.tpro-actions{display:flex;align-items:center;gap:10px;margin-top:18px;width:100%}.tpro-restart-hint{color:var(--tpro-text-dim);font-size:.78rem;display:flex;align-items:center;gap:6px}.tpro-restart-hint kbd{background:var(--tpro-surface-2);border:1px solid var(--tpro-border);padding:1px 6px;border-radius:4px;font-size:.72rem;color:var(--tpro-text-dim)}.tpro-btn,.tpro-restart-hint kbd{font-family:var(--tpro-font-mono)}.tpro-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border-radius:10px;font-size:.85rem;font-weight:600;cursor:pointer;transition:background .15s,color .15s,transform .1s;border:1px solid transparent;line-height:1.4}.tpro-btn:active{transform:translateY(1px)}.tpro-btn-primary{background:var(--tpro-accent);color:#111;border-color:var(--tpro-accent)}.tpro-btn-primary:hover{background:#f0c520}.tpro-btn-ghost{background:var(--tpro-surface-2);color:var(--tpro-text-dim);border-color:var(--tpro-border)}.tpro-btn-ghost:hover{background:var(--tpro-border);color:var(--tpro-text)}.tpro-minigraph{width:100%;height:48px;margin-top:14px;opacity:.6}.tpro-results{width:100%;animation:tpro-fade-in .3s ease}@keyframes tpro-fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.tpro-results-hero{display:flex;flex-wrap:wrap;gap:0;margin-bottom:28px}.tpro-stat-big{flex:1 1;min-width:140px;padding:20px 24px;border-right:1px solid var(--tpro-border)}.tpro-stat-big:last-child{border-right:none}.tpro-stat-big-label{font-size:.7rem;color:var(--tpro-text-dim);text-transform:uppercase;letter-spacing:.1em;margin-bottom:4px}.tpro-stat-big-value{font-size:2.8rem;font-weight:700;color:var(--tpro-accent);line-height:1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.tpro-stat-big-sub{font-size:.75rem;color:var(--tpro-text-dim);margin-top:4px}.tpro-results-detail{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px;gap:20px;margin-bottom:24px}@media (max-width:600px){.tpro-results-detail{grid-template-columns:1fr}}.tpro-graph-wrap{background:var(--tpro-surface);border:1px solid var(--tpro-border);border-radius:12px;padding:16px}.tpro-graph-title{font-size:.75rem;color:var(--tpro-text-dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.tpro-char-breakdown{background:var(--tpro-surface);border:1px solid var(--tpro-border);border-radius:12px;padding:16px}.tpro-char-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0;border-bottom:1px solid var(--tpro-border);font-size:.85rem}.tpro-char-row:last-child{border-bottom:none}.tpro-char-row-label{color:var(--tpro-text-dim)}.tpro-char-row-val{font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.tpro-char-row-val.good{color:var(--tpro-good)}.tpro-char-row-val.bad{color:var(--tpro-bad)}.tpro-char-row-val.warn{color:var(--tpro-warn)}.tpro-verdict{background:var(--tpro-surface);border:1px solid var(--tpro-border);border-radius:12px;padding:16px 20px;margin-bottom:20px}.tpro-verdict-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:20px;font-size:.8rem;font-weight:700;margin-bottom:10px}.tpro-verdict-badge.pass{background:rgba(87,173,87,.15);color:var(--tpro-good);border:1px solid rgba(87,173,87,.3)}.tpro-verdict-badge.fail{background:rgba(202,71,84,.12);color:var(--tpro-bad);border:1px solid rgba(202,71,84,.25)}.tpro-tips-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}.tpro-tips-list li{font-size:.85rem;color:var(--tpro-text);display:flex;gap:8px}.tpro-tips-list li:before{content:"→";color:var(--tpro-accent);flex-shrink:0}.tpro-pb-badge{background:var(--tpro-accent);color:#111;padding:2px 10px;border-radius:20px;font-size:.72rem;font-weight:700;margin-left:8px;vertical-align:middle}.tpro-result-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.tpro-keyboard-wrap{width:100%;margin-top:20px;background:var(--tpro-surface);border:1px solid var(--tpro-border);border-radius:12px;padding:14px 12px;animation:tpro-fade-in .2s ease}.tpro-kb-row{display:flex;justify-content:center;gap:5px;margin-bottom:5px}.tpro-progress-bar-wrap{width:100%;height:3px;background:var(--tpro-border);border-radius:2px;margin-bottom:14px;overflow:hidden}.tpro-progress-bar-fill{height:100%;background:var(--tpro-accent);border-radius:2px;transition:width .2s ease}.tpro-focus-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(13,13,15,.72);backdrop-filter:blur(3px);color:var(--tpro-text-dim);font-size:.9rem;gap:8px;border-radius:4px;cursor:pointer;z-index:3;transition:opacity .15s}.tpro-root[data-theme=light] .tpro-focus-hint{background:rgba(245,245,240,.72)}@media (max-width:720px){.tpro-main{padding:16px 14px 32px}.tpro-config{gap:2px 8px}.tpro-config-divider{display:none}.tpro-hud{gap:14px}.tpro-hud-value{font-size:1.3rem}.tpro-hud-cell--timer .tpro-hud-value{font-size:1.8rem}.tpro-text-inner{font-size:1rem}.tpro-root{--tpro-row-height:46px}.tpro-stat-big-value{font-size:2rem}.tpro-keyboard-wrap{display:none}}@media (max-width:480px){.tpro-header{padding:10px 14px}.tpro-stat-big{min-width:100px;padding:14px 12px}}