@import url(https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap);:root{--canvas:#f3f5f4;--surface:#fff;--sunken:#f7f9f8;--line:#e2e7e4;--line-strong:#ced5d1;--ink:#172026;--ink-2:#525e66;--ink-3:#76828a;--brand:#3a9d48;--brand-strong:#247a33;--brand-soft:#e6f4e8;--on-brand:#fff;--danger:#c43030;--danger-soft:#fcecec;--shadow:rgba(16,24,32,.06);--shadow-strong:rgba(16,24,32,.12);--type-bg:#fff;--type-edge:#e2e7e4;--type-char:#172026;--type-correct:#2f8f3d;--type-incorrect:#d33a3a;--type-cursor:rgba(23,32,38,.14);--type-input-bg:#f7f9f8;--type-focus:rgba(23,32,38,.22);--type-error-edge:rgba(211,58,58,.6);color-scheme:light}:root[data-theme=dark]{--canvas:#0d1116;--surface:#151b22;--sunken:#11161c;--line:#242d38;--line-strong:#343f4c;--ink:#e6ebf0;--ink-2:#a0abb8;--ink-3:#76818f;--brand:#4caf50;--brand-strong:#4caf50;--brand-soft:#182e1e;--on-brand:#08160b;--danger:#f06868;--danger-soft:#381a1c;--shadow:rgba(0,0,0,.25);--shadow-strong:rgba(0,0,0,.45);--type-bg:#151b22;--type-edge:#242d38;--type-char:#fff;--type-correct:#4caf50;--type-incorrect:#f55;--type-cursor:hsla(0,0%,47%,.6);--type-input-bg:#1c232c;--type-focus:hsla(0,0%,59%,.4);--type-error-edge:rgba(255,85,85,.6);color-scheme:dark}*{box-sizing:border-box;margin:0;padding:0}body,html{overscroll-behavior:none}body{-webkit-font-smoothing:antialiased;background:#f3f5f4;background:var(--canvas);color:#172026;color:var(--ink);font-family:Montserrat,sans-serif;min-height:100vh;overflow-x:hidden}.theme-transition,.theme-transition *,.theme-transition :after,.theme-transition :before{transition:background-color .24s ease,border-color .24s ease,color .24s ease,fill .24s ease,stroke .24s ease,box-shadow .24s ease!important}.shell{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}.shell-header{align-items:center;display:flex;flex-shrink:0;height:64px;padding:0 24px}.brand{align-items:center;color:#172026;color:var(--ink);display:inline-flex;font-size:1.15rem;font-weight:800;gap:10px;letter-spacing:-.3px;text-decoration:none}.brand img{display:block;height:30px;width:30px}a.brand:hover{color:#247a33;color:var(--brand-strong)}.shell-main{flex:1 1;flex-direction:column;justify-content:center;padding:0 20px}.shell-footer,.shell-main{align-items:center;display:flex}.shell-footer{color:#76828a;color:var(--ink-3);flex-shrink:0;font-size:.8rem;height:52px;justify-content:space-between;padding:0 24px}.page-narrow{margin:0 auto;max-width:860px;padding:40px 20px;width:100%}.page-header{margin-bottom:28px;text-align:center}h1{font-size:2.2rem;font-weight:800;letter-spacing:-.5px;line-height:1.15}.page-sub{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:10px}.chip{align-items:center;background:#fff;background:var(--surface);border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:999px;color:#525e66;color:var(--ink-2);display:inline-flex;font-size:.8rem;font-weight:600;gap:6px;padding:4px 10px}.chip strong{color:#172026;color:var(--ink);font-weight:700;letter-spacing:1px}.chip.brand{background:#e6f4e8;background:var(--brand-soft);border-color:transparent;color:#247a33;color:var(--brand-strong)}.btn{align-items:center;border:1px solid transparent;border-radius:10px;cursor:pointer;display:inline-flex;font-family:Montserrat,sans-serif;font-size:.9rem;font-weight:700;gap:8px;height:44px;justify-content:center;padding:0 22px;text-decoration:none;transition:background-color .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease,transform .15s ease;white-space:nowrap}.btn:active:not(:disabled){transform:translateY(1px)}.btn:focus-visible{outline:2px solid #3a9d48;outline:2px solid var(--brand);outline-offset:2px}.btn svg{flex-shrink:0}.btn-primary{background:#3a9d48;background:var(--brand);box-shadow:0 1px 2px rgba(16,24,32,.12);box-shadow:0 1px 2px var(--shadow-strong);color:#fff;color:var(--on-brand)}.btn-primary:hover:not(:disabled){background:#247a33;background:var(--brand-strong)}:root[data-theme=dark] .btn-primary:hover:not(:disabled){background:#5cc060}.btn-secondary{background:#fff;background:var(--surface);border-color:#ced5d1;border-color:var(--line-strong);box-shadow:0 1px 2px rgba(16,24,32,.06);box-shadow:0 1px 2px var(--shadow);color:#172026;color:var(--ink)}.btn-secondary:hover:not(:disabled){background:#f7f9f8;background:var(--sunken);border-color:#76828a;border-color:var(--ink-3)}.btn-ghost{background:transparent;color:#525e66;color:var(--ink-2)}.btn-ghost:hover:not(:disabled){background:#fff;background:var(--surface);color:#172026;color:var(--ink)}.btn-block{width:100%}.btn-lg{font-size:.95rem;height:50px}.btn:disabled{background:#f7f9f8;background:var(--sunken);border-color:#e2e7e4;border-color:var(--line);box-shadow:none;color:#76828a;color:var(--ink-3);cursor:not-allowed}.card{border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:16px;box-shadow:0 1px 3px rgba(16,24,32,.06),0 8px 24px rgba(16,24,32,.06);box-shadow:0 1px 3px var(--shadow),0 8px 24px var(--shadow)}.card,.notice{background:#fff;background:var(--surface)}.notice{align-items:flex-start;border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:10px;color:#525e66;color:var(--ink-2);display:flex;font-size:.875rem;gap:10px;line-height:1.55;padding:12px 14px}.notice svg{flex-shrink:0;margin-top:2px}.notice strong{color:#172026;color:var(--ink)}.notice.brand{background:#e6f4e8;background:var(--brand-soft);border-color:transparent;color:#525e66;color:var(--ink-2);font-weight:500}.notice.brand svg{color:#247a33;color:var(--brand-strong)}.notice.danger{background:#fcecec;background:var(--danger-soft);border-color:transparent;color:#c43030;color:var(--danger)}.loading{animation:spin 1s ease-in-out infinite;border:3px solid #ced5d1;border-radius:50%;border-top-color:#3a9d48;border:3px solid var(--line-strong);border-top-color:var(--brand);display:inline-block;height:20px;width:20px}.btn-primary .loading{border-color:#fff hsla(0,0%,100%,.35) hsla(0,0%,100%,.35);border-top-color:var(--on-brand)}@keyframes spin{to{transform:rotate(1turn)}}.entry-brand{align-items:center;display:flex;flex-direction:column;gap:14px;margin-bottom:36px}.entry-brand img{height:64px;width:64px}.entry-brand h1{font-size:2.6rem}.entry-card{max-width:400px;padding:32px;width:100%}.field-label{color:#525e66;color:var(--ink-2);display:block;font-size:.85rem;margin-bottom:12px}.code-input,.field-label{font-weight:700;text-align:center}.code-input{background:#f7f9f8;background:var(--sunken);border:2px solid #ced5d1;border:2px solid var(--line-strong);border-radius:10px;color:#172026;color:var(--ink);font-family:Montserrat,sans-serif;font-size:1.8rem;letter-spacing:6px;outline:none;padding:14px 16px;text-transform:uppercase;transition:border-color .2s ease,box-shadow .2s ease;width:100%}.code-input::placeholder{color:#ced5d1;color:var(--line-strong)}.code-input:focus{border-color:#76828a;border-color:var(--ink-3)}.code-input.complete{border-color:#3a9d48;border-color:var(--brand);box-shadow:0 0 0 3px #e6f4e8;box-shadow:0 0 0 3px var(--brand-soft)}.code-dots{display:flex;gap:6px;justify-content:center;margin:10px 0 4px}.code-dots span{background:#ced5d1;background:var(--line-strong);border-radius:50%;height:6px;transition:background-color .15s ease;width:6px}.code-dots span.filled{background:#3a9d48;background:var(--brand)}.entry-error{background:#fcecec;background:var(--danger-soft);border-radius:8px;color:#c43030;color:var(--danger);font-size:.875rem;font-weight:600;margin-top:12px;padding:10px 14px;text-align:center}.entry-divider{border-top:1px solid #e2e7e4;border-top:1px solid var(--line);display:flex;justify-content:center;margin-top:20px;padding-top:20px}.desktop-required{text-align:center}.desktop-required .icon-badge{align-items:center;background:#e6f4e8;background:var(--brand-soft);border-radius:16px;color:#247a33;color:var(--brand-strong);display:flex;height:64px;justify-content:center;margin:0 auto 20px;width:64px}.desktop-required h2{font-size:1.25rem;font-weight:800;margin-bottom:12px}.desktop-required p{color:#525e66;color:var(--ink-2);font-size:.95rem;line-height:1.6}.theme-toggle{background:#f7f9f8;background:var(--sunken);display:inline-flex;padding:2px;position:relative}.theme-toggle,.theme-toggle .knob{border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:999px}.theme-toggle .knob{background:#fff;background:var(--surface);box-shadow:0 1px 2px rgba(16,24,32,.12);box-shadow:0 1px 2px var(--shadow-strong);height:26px;left:2px;position:absolute;top:2px;transition:transform .28s cubic-bezier(.34,1.4,.64,1);width:30px}.theme-toggle.dark .knob{transform:translateX(30px)}.theme-toggle button{align-items:center;background:none;border:none;border-radius:999px;color:#76828a;color:var(--ink-3);cursor:pointer;display:flex;height:26px;justify-content:center;position:relative;transition:color .15s ease;width:30px}.theme-toggle button:hover,.theme-toggle button[aria-checked=true]{color:#172026;color:var(--ink)}.theme-toggle button:focus-visible{outline:2px solid #3a9d48;outline:2px solid var(--brand);outline-offset:1px}.typing-test{padding:0;width:100%}.text-display{align-items:center;background:#fff;background:var(--type-bg);border-radius:10px;box-shadow:inset 0 0 0 1px #e2e7e4,0 1px 3px rgba(16,24,32,.06);box-shadow:inset 0 0 0 1px var(--type-edge),0 1px 3px var(--shadow);box-sizing:border-box;cursor:text;font-family:Inter,Segoe UI,system-ui,sans-serif;font-size:1.55rem;height:100px;justify-content:center;letter-spacing:.01em;line-height:1.85;margin-bottom:16px;overflow:hidden;padding:10px 32px;-webkit-user-select:none;user-select:none;width:100%}.text-display,.text-lines-inner{display:flex;flex-direction:column}.text-lines-inner{align-items:flex-start;max-width:100%}.text-lines-inner.sliding{animation:lineSlide .12s ease-out}@keyframes lineSlide{0%{transform:translateY(50%)}to{transform:translateY(0)}}.text-line{align-items:center;display:flex;height:1.47em;justify-content:flex-start}.text-line>span{white-space:nowrap}.char{color:#172026;color:var(--type-char);white-space:pre}.char.correct{color:#2f8f3d;color:var(--type-correct)}.char.incorrect{color:#d33a3a;color:var(--type-incorrect)}.char.cursor{background:rgba(23,32,38,.14);background:var(--type-cursor);border-radius:2px;color:#172026;color:var(--type-char);padding:2px 0}.text-display .text-lines-inner{transition:opacity .05s ease}.text-display.text-fading .text-lines-inner{opacity:0}.stats-bar{gap:10px;width:100%}.input-display,.stats-bar{align-items:center;display:flex}.input-display{background:#f7f9f8;background:var(--type-input-bg);border:2px solid #e2e7e4;border:2px solid var(--line);border-radius:10px;cursor:text;flex:1 1;height:48px;overflow:hidden;padding:10px 16px;transition:border-color .15s ease}:root[data-theme=dark] .input-display{border-color:transparent}.input-display.focused,:root[data-theme=dark] .input-display.focused{border-color:rgba(23,32,38,.22);border-color:var(--type-focus)}.input-display.input-error{border-color:rgba(211,58,58,.6)!important;border-color:var(--type-error-edge)!important}.input-text{color:#172026;color:var(--type-char);font-family:JetBrains Mono,Courier New,monospace;font-size:1.4rem;overflow:hidden;white-space:nowrap}.input-cursor{animation:cursorBlink 1s infinite;background-color:#172026;background-color:var(--type-char);display:inline-block;flex-shrink:0;height:1.2em;margin-left:1px;width:2px}.input-cursor.hidden{animation:none;background-color:transparent}@keyframes cursorBlink{0%,50%{opacity:1}51%,to{opacity:0}}.stat-box{align-items:center;background:#fff;background:var(--type-bg);border:1px solid #e2e7e4;border:1px solid var(--type-edge);border-radius:10px;display:flex;height:48px;justify-content:center;padding:8px 14px}.wpm-box{gap:5px;width:100px}.timer-box{width:80px}.refresh-box{color:#525e66;color:var(--ink-2);cursor:pointer;transition:background-color .2s ease,box-shadow .2s ease,color .2s ease;width:48px}.refresh-box:hover{background:#3a9d48;background:var(--brand);border-color:transparent;box-shadow:0 0 10px rgba(76,175,80,.3);color:#fff}.refresh-icon{transform:scaleX(-1)}@keyframes refreshSpin{0%{transform:scaleX(-1) rotate(0deg)}to{transform:scaleX(-1) rotate(1turn)}}.refresh-box.spinning .refresh-icon{animation:refreshSpin .5s cubic-bezier(.4,0,.2,1)}.stat-box .stat-value{color:#172026;color:var(--ink);font-size:1.3rem;font-weight:700}.stat-box .stat-value.warning{color:#d33a3a;color:var(--type-incorrect)}.stat-box .stat-label{color:#76828a;color:var(--ink-3);font-size:.7rem;font-weight:600;text-transform:uppercase}.test-footer{margin-top:16px;min-height:72px}.test-notice{transition:opacity .25s ease,transform .25s ease}.test-notice.hidden{opacity:0;transform:translateY(-4px);transition:opacity .2s ease,transform .2s ease,visibility 0s linear .2s;visibility:hidden}.test-status{align-items:center;color:#247a33;color:var(--brand-strong);display:flex;font-size:.9rem;font-weight:600;gap:10px;justify-content:center;padding-top:12px}.hidden-input-form{left:-200px;overflow:hidden;top:-200px}.hidden-input,.hidden-input-form{height:0;pointer-events:none;position:fixed;width:0}.hidden-input{border:none;caret-color:transparent;font-size:16px;left:-100px;margin:0;opacity:0;outline:none;padding:0;top:-100px}.practice-controls{align-items:center;display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:20px}.segmented{background:#fff;background:var(--surface);border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:10px;display:inline-flex;gap:2px;padding:3px;position:relative}.segmented-indicator{background:#3a9d48;background:var(--brand);border-radius:7px;bottom:3px;box-shadow:0 1px 2px rgba(16,24,32,.12);box-shadow:0 1px 2px var(--shadow-strong);left:0;position:absolute;top:3px}.segmented-indicator.animate{transition:transform .32s cubic-bezier(.34,1.3,.64,1),width .32s cubic-bezier(.34,1.3,.64,1)}.segmented button{background:transparent;border:none;border-radius:7px;color:#76828a;color:var(--ink-3);cursor:pointer;font-family:Montserrat,sans-serif;font-size:.85rem;font-weight:600;padding:6px 14px;position:relative;transition:background-color .15s ease,color .15s ease}.segmented button:hover:not(.active){background:#f7f9f8;background:var(--sunken);color:#172026;color:var(--ink)}.segmented button.active{color:#fff;color:var(--on-brand);transition:color .2s ease}.tnum{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.segmented button:focus-visible{outline:2px solid #3a9d48;outline:2px solid var(--brand);outline-offset:1px}.page-actions{gap:10px;margin-top:32px}.inline-results,.page-actions{display:flex;justify-content:center}.inline-results{align-items:center;gap:32px;height:100%}.inline-result-item{text-align:center;width:132px}.inline-result-value{font-feature-settings:"tnum";color:#3a9d48;color:var(--brand);display:block;font-size:2.4rem;font-variant-numeric:tabular-nums;font-weight:800;line-height:1;white-space:nowrap}.inline-result-label{color:#76828a;color:var(--ink-3);display:block;font-size:.75rem;font-weight:600;letter-spacing:1px;margin-top:4px;text-transform:uppercase}.results{margin:0 auto;max-width:860px;padding:16px 20px 32px;width:100%}.try-tabs{display:flex;justify-content:center;margin-bottom:20px}.try-tabs .segmented button{align-items:center;display:inline-flex;gap:8px}.try-tabs .tab-score{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:500;opacity:.75}.best-badge{background:#e6f4e8;background:var(--brand-soft);border-radius:999px;color:#247a33;color:var(--brand-strong);font-size:.65rem;font-weight:800;letter-spacing:.5px;padding:2px 6px;text-transform:uppercase}.segmented button.active .best-badge{background:hsla(0,0%,100%,.22);color:inherit}.metric-grid{grid-gap:10px;display:grid;gap:10px;grid-template-columns:repeat(6,1fr)}.metric{background:#fff;background:var(--surface);border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:12px;box-shadow:0 1px 2px rgba(16,24,32,.06);box-shadow:0 1px 2px var(--shadow);padding:14px 16px}.metric-label{color:#525e66;color:var(--ink-2);font-size:.78rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.metric-value{font-feature-settings:"tnum";color:#172026;color:var(--ink);font-size:1.75rem;font-variant-numeric:tabular-nums;font-weight:800;letter-spacing:-.5px;line-height:1.1;margin-top:4px}.metric.primary .metric-value{color:#3a9d48;color:var(--brand)}.metric-hint{color:#76828a;color:var(--ink-3);font-size:.75rem;margin-top:4px}.section-title{align-items:baseline;display:flex;justify-content:space-between;margin:24px 0 10px}.section-title h2{font-size:.95rem;font-weight:700}.section-title span{color:#76828a;color:var(--ink-3);font-size:.75rem}.typed-passage{background:#fff;background:var(--surface);border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:12px;color:#172026;color:var(--ink);font-family:JetBrains Mono,ui-monospace,SF Mono,Menlo,monospace;font-size:.85rem;height:172px;line-height:1.85;overflow-y:auto;overscroll-behavior:contain;padding:14px 16px;white-space:pre-wrap;word-break:break-word}.typed-passage mark{background:#fcecec;background:var(--danger-soft);border-radius:2px;color:#c43030;color:var(--danger);-webkit-text-decoration:underline wavy;text-decoration:underline wavy;text-decoration-color:color-mix(in srgb,#c43030 60%,transparent);text-decoration-color:color-mix(in srgb,var(--danger) 60%,transparent);text-underline-offset:4px}.typed-passage .missed{color:#76828a;color:var(--ink-3);opacity:.75}.results-actions{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-top:24px;padding:20px}.results-actions p{color:#525e66;color:var(--ink-2);font-size:.9rem;line-height:1.55}.results-actions p strong{color:#172026;color:var(--ink)}.results-actions .buttons{display:flex;flex-shrink:0;gap:10px}.submitted{align-items:center;display:flex;gap:14px}.submitted .icon-badge{background:#e6f4e8;background:var(--brand-soft);border-radius:999px;color:#247a33;color:var(--brand-strong);flex-shrink:0;height:40px;width:40px}.dialog-backdrop,.submitted .icon-badge{align-items:center;display:flex;justify-content:center}.dialog-backdrop{animation:fadeIn .15s ease;background:rgba(10,14,18,.45);inset:0;padding:20px;position:fixed;z-index:50}.dialog{animation:popIn .18s cubic-bezier(.2,.9,.3,1.2);max-width:420px;padding:24px;width:100%}.dialog h2{font-size:1.1rem;font-weight:800;margin-bottom:8px}.dialog p{color:#525e66;color:var(--ink-2);font-size:.9rem;line-height:1.6}.dialog .buttons{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}@keyframes fadeIn{0%{opacity:0}}@keyframes popIn{0%{opacity:0;transform:scale(.96) translateY(4px)}}.skeleton{animation:shimmer 1.4s ease infinite;background:linear-gradient(90deg,#fff,#f7f9f8 50%,#fff);background:linear-gradient(90deg,var(--surface) 0,var(--sunken) 50%,var(--surface) 100%);background-size:200% 100%;border:1px solid #e2e7e4;border:1px solid var(--line);border-radius:12px}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (max-width:900px){.metric-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width:700px){.text-display{border-radius:8px;font-size:1.1rem;height:80px;margin-bottom:10px;padding:12px 16px}.text-line{height:1.5em}.stats-bar{flex-wrap:wrap;gap:8px}.input-display{height:44px;order:-1;width:100%}.input-text{font-size:1.1rem}.stat-box{height:44px;padding:6px 10px}.wpm-box{width:85px}.timer-box{width:70px}.refresh-box{width:44px}.stat-box .stat-value{font-size:1.1rem}.inline-results{gap:12px}.inline-result-item{min-width:64px;width:auto}.inline-result-value{font-size:1.8rem}.metric-grid{grid-template-columns:repeat(2,1fr)}.metric-hint{display:none}.results-actions{align-items:stretch}.results-actions,.results-actions .buttons{flex-direction:column}.shell-footer,.shell-header{padding:0 16px}h1{font-size:1.8rem}}
/*# sourceMappingURL=main.ccb9f0ae.css.map*/