@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-mono-latin-300-normal-B1CBpJSE.woff2) format("woff2"),url(/assets/roboto-mono-latin-300-normal-C9WjuYdp.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-mono-latin-400-normal-GekRknry.woff2) format("woff2"),url(/assets/roboto-mono-latin-400-normal-CbJMAmM6.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-mono-latin-500-normal-pxIOXZmA.woff2) format("woff2"),url(/assets/roboto-mono-latin-500-normal-CW1Ttoxn.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-mono-latin-700-normal-foxDnrFi.woff2) format("woff2"),url(/assets/roboto-mono-latin-700-normal-B-SB-6Cv.woff) format("woff")}:root{color-scheme:light;--background: oklch(.97 .005 85);--foreground: oklch(.08 0 0);--primary: oklch(.08 0 0);--primary-foreground: oklch(.97 .005 85);--muted: oklch(.91 .008 85);--muted-foreground: oklch(.45 .005 85);--border: oklch(.85 .008 85);--accent: oklch(.91 .008 85);--error: oklch(.52 .2 25);--error-muted: oklch(.42 .13 25);--font-mono: "Roboto Mono", monospace;--bg-color: var(--background);--sub-alt-color: var(--accent);--sub-color: var(--muted-foreground);--text-color: var(--foreground);--main-color: var(--foreground);--caret-color: var(--foreground);--error-color: var(--error);--error-extra-color: var(--error-muted);--font: var(--font-mono);--roundness: 0;--typing-font-size: clamp(1.75rem, 3vw, 2.25rem);--typing-three-lines: clamp(7.0875rem, 12.15vw, 9.1125rem);--typing-block-padding: 2rem;--typing-block-padding-total: 4rem}*{box-sizing:border-box;box-shadow:none}html{min-height:100%;background:var(--background);scrollbar-color:var(--muted-foreground) transparent}body{margin:0;min-height:100vh;background:var(--background);color:var(--foreground);font-family:var(--font-mono);font-size:16px;font-weight:400;line-height:1.6;letter-spacing:0;text-rendering:geometricPrecision}button,textarea,input{font:inherit}button{border:0}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:1px solid var(--foreground);outline-offset:3px}::selection{background:var(--foreground);color:var(--background)}#root{min-height:100vh}.app-shell{width:min(100% - 6rem,1200px);min-height:100vh;margin:0 auto;display:grid;grid-template-rows:auto 1fr;gap:clamp(1.5rem,3vw,2.5rem);padding:3rem 0 5rem}.topbar{min-height:2.5rem;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);padding-bottom:1.5rem}.brand-button,.topbar-nav button,.text-button,.icon-button{color:var(--foreground);background:transparent;border-radius:0;cursor:pointer;font-weight:500;line-height:1;text-transform:lowercase;transition:all .15s ease-out}.brand-button{padding:.35rem 0;font-size:.875rem;letter-spacing:0}.topbar-nav{display:flex;gap:1.25rem}.topbar-nav button{padding:.35rem 0;color:var(--muted-foreground);border-bottom:1px solid transparent}.topbar-nav button:hover,.topbar-nav button.active{color:var(--foreground);border-bottom-color:var(--foreground)}.text-button{display:inline-flex;min-height:2.75rem;align-items:center;justify-content:center;border:1px solid var(--foreground);padding:.75rem 1.5rem;color:var(--foreground);background:transparent}.text-button:hover,.text-button.accent,.text-button.accent:hover{color:var(--background);background:var(--foreground)}.text-button:not(.accent):hover{color:var(--background);background:var(--foreground)}.main-view{min-height:0;display:grid;align-items:start}.muted{color:var(--muted-foreground)}.typing-screen{width:100%;align-self:start;padding:clamp(.25rem,1.5vw,1rem) 0 0}.typing-meta{width:min(100%,1200px);margin:0 auto 1.25rem;display:flex;justify-content:space-between;gap:1.5rem;color:var(--foreground);font-size:.75rem;line-height:1.3;text-transform:uppercase;letter-spacing:.12em}.live-stats{display:flex;gap:1.5rem;white-space:nowrap}#wordsWrapper{width:min(100%,1200px);height:calc(var(--typing-three-lines) + var(--typing-block-padding-total) + 2px);margin:0 auto;position:relative;overflow:hidden;cursor:text;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:var(--typing-block-padding) 0}#wordsWrapper.out-of-focus #words{opacity:.32}#wordsInput{position:absolute;left:0;top:0;width:1px;height:1px;padding:0;margin:0;opacity:0;border:0;resize:none;pointer-events:none;caret-color:transparent;color:transparent;background:transparent;overflow:hidden;white-space:nowrap;z-index:-1}#words{width:100%;display:flex;flex-wrap:wrap;align-content:flex-start;color:var(--muted-foreground);font-size:var(--typing-font-size);font-weight:400;line-height:1.35;-webkit-user-select:none;user-select:none;transition:none;will-change:transform}.word{position:relative;margin:.22em .34em;border-bottom:1px solid transparent;font-variant-ligatures:none}.word.active{border-bottom-color:var(--foreground)}.word.error{border-bottom-color:var(--error)}.word.typed:not(.error){opacity:.72}letter.letter{display:inline-block;min-width:.01em}.letter.correct{color:var(--foreground)}.letter.incorrect{color:var(--error);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.12em}.letter.incorrect.extra{color:var(--error-muted);opacity:1;text-decoration-style:double}.letter.faint{color:var(--muted-foreground);opacity:.55}#caret{position:absolute;left:0;top:0;width:2px;min-width:2px;height:1.2em;border-radius:0;background:var(--foreground);transform-origin:top left;animation:caretFlash 1s infinite;pointer-events:none;z-index:2}#caret.hidden{display:none}#caret.moving{animation:none}.focus-warning,.empty-typing-target{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:grid;place-items:center;text-align:center;color:var(--foreground);font-size:.75rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;pointer-events:none}.typing-footer{width:min(100%,1200px);margin:2rem auto 0;display:grid;justify-items:center;gap:1rem}.test-progress{width:100%;height:1px;overflow:hidden;background:var(--border);border-radius:0}.test-progress>div{height:100%;background:var(--foreground);transition:width .15s ease-out}.icon-button{min-width:2.75rem;min-height:2.75rem;display:inline-grid;place-items:center;border:1px solid var(--foreground);padding:0 .8rem;color:var(--foreground);background:transparent;font-size:.875rem}.icon-button:hover,.icon-button:focus-visible{color:var(--background);background:var(--foreground)}.restart-button{position:relative}.restart-tooltip{position:absolute;top:calc(100% + .6rem);left:50%;z-index:3;padding:.4rem .55rem;border:1px solid var(--border);color:var(--foreground);background:var(--background);font-size:.75rem;font-weight:400;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transform:translate(-50%,-.25rem);transition:opacity .15s ease-out,transform .15s ease-out}.restart-tooltip:before{content:none}.restart-button:hover .restart-tooltip,.restart-button:focus-visible .restart-tooltip{opacity:1;transform:translate(-50%)}.restart-shortcut{display:flex;align-items:center;gap:.4rem;color:var(--muted-foreground);font-size:.75rem}.restart-shortcut kbd{padding:.15rem .35rem;border:1px solid var(--border);border-radius:0;color:var(--foreground);background:transparent;font:inherit;line-height:1}.result-screen{width:min(100%,1000px);margin:0 auto;display:grid;gap:2.5rem;padding:clamp(2rem,7vw,5rem) 0}.result-primary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.result-secondary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.result-stat{min-width:0;padding:1.5rem 1.5rem 1.5rem 0;border-right:1px solid var(--border)}.result-stat:last-child,.result-primary .result-stat:last-child{border-right:0;padding-left:1.5rem}.stat-label,.result-primary .stat-label,.field-label,.normalization-options legend,.preview-label{display:block;margin-bottom:.75rem;color:var(--muted-foreground);font-size:.75rem;font-weight:500;line-height:1.2;letter-spacing:.12em;text-transform:uppercase}.stat-value{color:var(--foreground);font-size:clamp(4rem,12vw,10rem);font-weight:700;line-height:.95;letter-spacing:-.02em}.stat-value.small{font-size:clamp(1.25rem,3vw,2rem);font-weight:500;line-height:1.2;letter-spacing:0;overflow-wrap:anywhere}.result-source{border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:1.5rem 0;color:var(--muted-foreground);font-size:.875rem;line-height:1.6}.source-title{color:var(--foreground);font-weight:500}.result-actions{display:flex;justify-content:center;gap:.75rem}.import-screen{width:100%;align-self:start;display:grid;grid-template-columns:minmax(0,1.2fr) minmax(16rem,.8fr);gap:3rem;padding:clamp(2rem,7vw,5rem) 0}.import-column,.normalization-options,.preview-panel{background:transparent;border-top:1px solid var(--border);border-radius:0;padding:1.5rem 0 0}.raw-text-input{width:100%;min-height:16rem;border:0;border-bottom:1px solid var(--border);border-radius:0;padding:0 0 1rem;color:var(--foreground);background:transparent;resize:vertical}.raw-text-input::placeholder{color:var(--muted-foreground);opacity:.75}.raw-text-input:focus-visible{border-bottom-color:var(--foreground);outline:0}.file-picker{margin-top:2rem;padding-top:1.5rem;border-top:1px solid var(--border)}.file-row{display:flex;align-items:center;gap:.75rem}.file-row input{min-width:0;color:var(--muted-foreground);border-bottom:1px solid var(--border);padding-bottom:.75rem}.file-row input::file-selector-button{margin-right:1rem;border:1px solid var(--foreground);border-radius:0;padding:.7rem 1rem;color:var(--foreground);background:transparent;font:inherit;font-weight:500;text-transform:lowercase;cursor:pointer;transition:all .15s ease-out}.file-row input::file-selector-button:hover{color:var(--background);background:var(--foreground)}.file-meta,.status-line,.error-line{margin-top:1rem;color:var(--muted-foreground);font-size:.875rem;line-height:1.6;overflow-wrap:anywhere}.error-line{color:var(--foreground);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}.import-actions{margin-top:1.5rem;display:flex;flex-wrap:wrap;gap:.75rem}.normalization-options{margin:0;border-right:0;border-bottom:1px solid var(--border);border-left:0;align-self:start}.checkbox-row{display:grid;grid-template-columns:1rem minmax(0,1fr);align-items:start;gap:.75rem;border-top:1px solid var(--border);padding:.85rem 0;color:var(--foreground);font-size:.875rem;line-height:1.45}.checkbox-row input{width:1rem;height:1rem;margin:.12rem 0 0;accent-color:var(--foreground)}.normalization-preview{grid-column:1 / -1;display:grid;grid-template-columns:1fr 1fr;gap:3rem}.preview-text{max-height:14rem;overflow:auto;color:var(--foreground);font-size:.875rem;line-height:1.7;white-space:pre-wrap;scrollbar-color:var(--muted-foreground) transparent}.preview-text.required{color:var(--foreground)}.preview-faint{color:var(--muted-foreground);opacity:.55}@keyframes caretFlash{0%,45%{opacity:1}46%,to{opacity:0}}@media(max-width:760px){.app-shell{width:min(100% - 3rem,1200px);gap:3rem;padding:1.5rem 0 3rem}.topbar{align-items:flex-start;gap:1rem}.typing-meta{flex-direction:column;margin-bottom:2rem}.live-stats{justify-content:space-between}#wordsWrapper{--typing-font-size: 1.35rem;--typing-three-lines: 5.4675rem;--typing-block-padding: 1.5rem;--typing-block-padding-total: 3rem}#words{font-size:var(--typing-font-size)}.result-primary,.result-secondary,.import-screen,.normalization-preview{grid-template-columns:1fr}.result-stat,.result-primary .result-stat:last-child{border-right:0;border-bottom:1px solid var(--border);padding:1.25rem 0}.result-stat:last-child,.result-primary .result-stat:last-child{border-bottom:0}.file-row,.import-actions,.result-actions{align-items:stretch}.file-row{flex-direction:column}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}
