@keyframes typing-blink{0%,to{border-bottom-color:var(--primary-500)}50%{border-bottom-color:transparent}}.typing-tool{background:#fff;border-radius:16px;border:1px solid var(--gray-200);padding:2rem;margin-top:2rem}.typing-controls{display:flex;flex-wrap:wrap;gap:1rem 2rem;margin-bottom:1.5rem;padding:1rem 1.25rem;background:var(--gray-50);border:1px solid var(--gray-100);border-radius:12px}.typing-control-group{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.typing-control-label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--gray-400);white-space:nowrap}.typing-pill-tabs{display:flex;gap:.3rem;flex-wrap:wrap}.typing-pill{padding:.28rem .8rem;border:1.5px solid var(--gray-200);border-radius:20px;background:#fff;font-size:.78rem;font-weight:600;color:var(--gray-500);cursor:pointer;transition:all .15s;line-height:1.4}.typing-pill:hover{border-color:var(--primary-300, #fca5a5);color:var(--primary-600)}.typing-pill.active{background:var(--primary-500, #eb3944);border-color:var(--primary-500, #eb3944);color:#fff}.typing-stats{display:flex;gap:.75rem;margin-bottom:1.5rem;flex-wrap:wrap}.typing-stat{display:flex;flex-direction:column;align-items:center;flex:1;min-width:90px;padding:.875rem .75rem;background:var(--gray-50);border:1px solid var(--gray-100);border-radius:12px;gap:.2rem;transition:border-color .15s,background .15s}.typing-stat svg{width:18px;height:18px;min-width:18px;min-height:18px;stroke:var(--gray-300);margin-bottom:.25rem;display:block}.typing-stat-val{font-size:1.75rem;font-weight:800;color:var(--primary-600);line-height:1}.typing-stat-lbl{font-size:.68rem;color:var(--gray-400);text-transform:uppercase;letter-spacing:.06em;text-align:center}.typing-passage-wrap{border:1.5px solid var(--gray-200);border-radius:12px;padding:1.25rem 1.5rem;margin-bottom:1rem;background:var(--gray-50);position:relative}.typing-passage{font-size:1.15rem;line-height:1.9;letter-spacing:.01em;color:var(--gray-300);word-break:break-word;user-select:none}.typing-passage .char-pending{color:var(--gray-400)}.typing-passage .char-correct{color:var(--gray-700)}.typing-passage .char-wrong{color:#ef4444;background:#fef2f2;border-radius:2px}.typing-passage .char-current{color:var(--gray-800);border-bottom:2px solid var(--primary-500);animation:typing-blink 1s step-end infinite}.typing-input{width:100%;min-height:90px;padding:.875rem 1rem;border:1.5px solid var(--gray-200);border-radius:10px;font-size:1rem;font-family:inherit;resize:none;line-height:1.6;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;color:var(--gray-800)}.typing-input:focus{outline:0;border-color:var(--primary-400, #f87171);box-shadow:0 0 0 3px rgba(235,57,68,.1)}.typing-input:disabled{background:var(--gray-50);color:var(--gray-400);cursor:not-allowed}.typing-result{margin-top:1.25rem;padding:1.5rem;background:linear-gradient(135deg,#f0fdf4,#ecfdf5);border:1.5px solid #bbf7d0;border-radius:14px;text-align:center}.typing-result-title{font-size:1.1rem;font-weight:700;color:#16a34a;margin-bottom:1rem}.typing-result-stats{display:flex;justify-content:center;gap:1.5rem;flex-wrap:wrap;margin-bottom:1rem}.typing-result-stat{display:flex;flex-direction:column;align-items:center;gap:.2rem}.typing-result-val{font-size:2rem;font-weight:800;color:#15803d;line-height:1}.typing-result-lbl{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#4ade80}.typing-result-grade{font-size:1.5rem;font-weight:800;color:#16a34a;margin-top:.5rem}.typing-actions{display:flex;align-items:center;gap:1rem;margin-top:1.25rem;flex-wrap:wrap}.typing-hint{font-size:.78rem;color:var(--gray-400)}.typing-progress-bar-wrap{height:4px;background:var(--gray-100);border-radius:2px;margin-bottom:1rem;overflow:hidden}.typing-progress-bar{height:100%;background:var(--primary-500, #eb3944);border-radius:2px;transition:width .1s;width:0%}@media (max-width:640px){.typing-stat-val{font-size:1.4rem}.typing-passage{font-size:1rem}.typing-result-val{font-size:1.5rem}.typing-result-stats{gap:1rem}}