.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-125);padding:var(--spacing-200) var(--spacing-300);font-size:var(--font-size-lg);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-tight-md);font-weight:var(--font-weight-semibold);border:none;border-radius:var(--radius-12);cursor:pointer;transition:var(--transition-fast);text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--color-primary-light);outline-offset:3px}.btn:active:not(:disabled){transform:scale(.98)}.btn-primary{background-color:var(--color-primary);color:var(--color-neutral-0)}.btn-primary:hover:not(:disabled){background-color:var(--color-primary-light)}.btn-primary:active:not(:disabled){background-color:var(--color-primary)}.btn-secondary{background-color:var(--color-surface);color:var(--color-text)}.btn-secondary:hover:not(:disabled){background-color:var(--color-neutral-400);border-color:var(--color-text);opacity:.9}.btn-secondary:active:not(:disabled){background-color:var(--color-surface);border-color:var(--color-border)}.btn-white{background-color:var(--color-neutral-0);color:var(--color-neutral-900)}.btn-white:hover:not(:disabled){background-color:var(--color-neutral-400);border-color:var(--color-text);opacity:.9}.btn-white:active:not(:disabled){background-color:var(--color-surface);border-color:var(--color-border)}.btn-outline{background-color:transparent;color:var(--color-surface);border:1px solid var(--color-neutral-500)}.btn-outline:hover:not(:disabled){border-color:var(--color-primary-light);color:var(--color-primary-light)}.btn-outline:active:not(:disabled){border-color:var(--color-primary-light);color:var(--color-primary-light)}.btn-sm{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-sm)}.btn-lg{padding:var(--spacing-md) var(--spacing-lg);font-size:var(--font-size-lg)}.btn-full{width:100%}.btn-icon{display:inline-flex;align-items:center;justify-content:center}.btn-icon-left,.btn-icon-right{width:1em;height:1em}.personal-best{display:inline-flex;align-items:center;gap:var(--spacing-125)}.personal-best .icon{flex-shrink:0;width:18px;height:16px}.personal-best .text{font-size:var(--font-size-sm);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-snug)}.personal-best .label{color:var(--color-neutral-400)}@media(min-width:540px){.personal-best .text{font-size:var(--font-size-base);letter-spacing:var(--letter-spacing-tight)}.personal-best .icon{width:21px;height:18px}}.header{display:flex;justify-content:space-between;align-items:center}.header>:first-child{flex-shrink:0}.dropdown-wrapper{display:flex;flex-direction:column;position:relative}.dropdown-toggle{white-space:nowrap;display:flex;align-items:center;justify-content:center;gap:var(--spacing-125);padding:var(--spacing-75) var(--spacing-125);font-size:var(--font-size-sm);border:1px solid var(--color-neutral-500);border-radius:var(--radius-8);background-color:transparent;color:var(--color-neutral-0);cursor:pointer;transition:all .2s ease}.dropdown-toggle:hover:not(:disabled){border-color:var(--color-primary-light);color:var(--color-primary-light)}.dropdown-toggle:focus-visible{outline:2px solid var(--color-primary-light);outline-offset:2px}.dropdown-toggle:disabled{background-color:#f5f5f5;color:#999;cursor:not-allowed;opacity:.6}.dropdown-icon{transition:transform .2s ease;fill:currentColor;flex-shrink:0}.dropdown-toggle.open .dropdown-icon{transform:rotate(180deg)}.dropdown-menu{position:absolute;top:100%;left:0;right:0;list-style:none;margin-top:7px;background-color:var(--color-neutral-800);border-radius:var(--radius-8);max-height:0;overflow:hidden;opacity:0;pointer-events:none;transition:all .2s ease;z-index:10}.dropdown-menu.visible{max-height:300px;opacity:1;pointer-events:auto;overflow-y:auto}.dropdown-item{white-space:nowrap;padding:var(--spacing-100) var(--spacing-125);cursor:pointer;transition:all .15s ease;display:flex;align-items:center;gap:var(--spacing-150);font-size:var(--font-size-sm);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-snug)}.dropdown-item:first-child{padding-top:var(--spacing-125)}.dropdown-item:last-child{padding-bottom:var(--spacing-125)}.dropdown-item:not(:first-child){border-top:1px solid var(--color-neutral-700)}.dropdown-radio{border-radius:var(--radius-full);flex-shrink:0}.dropdown-item.selected .dropdown-radio>:first-child{stroke:none;fill:var(--color-primary-light)}.dropdown-item.selected .dropdown-radio>:last-child{fill:var(--color-neutral-900)}.dropdown-item.highlighted .dropdown-radio{outline:2px solid var(--color-primary-light);outline-offset:2px}.select-wrapper{display:flex;align-items:center;gap:var(--spacing-150)}.select-label{font-size:var(--font-size-sm);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-snug);color:var(--color-neutral-400)}.select-items{display:flex;gap:var(--spacing-75)}.select-item{position:relative}.select-item input[type=radio]{position:absolute;inset:0;opacity:0;cursor:pointer}.select-item input[type=radio]:focus-visible+label{outline:2px solid var(--color-primary-light);outline-offset:2px}.select-item input[type=radio]:disabled+label{cursor:not-allowed;opacity:.6}.select-item input[type=radio]:hover:not(:disabled)+label{border-color:var(--color-primary-light);color:var(--color-primary-light)}.select-item label{display:inline-flex;padding:var(--spacing-75) var(--spacing-125);border-radius:var(--radius-8);border:1px solid var(--color-neutral-500);font-size:var(--font-size-sm);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-snug)}.select-item.selected label{border-color:var(--color-primary-light);color:var(--color-primary-light)}.settings{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:var(--spacing-125)}@media(min-width:640px){.settings{display:flex;gap:0}.settings>*{padding-inline:var(--spacing-200)}.settings>:first-child{padding-inline-start:0}.settings>:last-child{padding-inline-end:0}.settings>*+*{border-left:1px solid var(--color-neutral-700)}}.info-bar{display:flex;flex-direction:column;gap:var(--spacing-200);padding-bottom:var(--spacing-200);border-bottom:1px solid var(--color-neutral-700)}@media(min-width:640px){.info-bar{flex-direction:row;flex-wrap:wrap;justify-content:space-between}}.passage-display{position:relative;transition:all .2s ease;height:100%;overflow-y:auto}.passage-display.no-scroll{overflow-y:hidden}.start-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:var(--spacing-250);text-align:center}.start-overlay p{font-weight:var(--font-weight-semibold);font-size:var(--font-size-lg);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-tight-md)}.passage-display.clickable{cursor:pointer}.passage-text{font-size:var(--font-size-2xl);line-height:var(--line-height-relaxed);letter-spacing:var(--letter-spacing-wider);word-break:break-word;overflow-wrap:break-word}.passage-text.blur{filter:blur(16px)}.character{transition:color .05s ease}.character-correct{color:var(--color-green-500)}.character-incorrect{color:var(--color-red-500);text-decoration:underline;text-decoration-thickness:3px;text-underline-offset:.3em}.character-pending{color:var(--color-neutral-400)}.character-overflow{background-color:#fecaca;color:#991b1b;padding:0 .25rem;border-radius:.25rem}.indicator{z-index:-1;opacity:.2;border-radius:var(--radius-4);background-color:var(--color-neutral-0)}@media(min-width:768px){.passage-text{font-size:var(--font-size-3xl)}}@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:400;src:url(/fonts/Sora/sora-v17-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:600;src:url(/fonts/Sora/sora-v17-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:Sora;font-style:normal;font-weight:700;src:url(/fonts/Sora/sora-v17-latin-700.woff2) format("woff2")}:root{--font-family: "Sora", sans-serif;--font-weight-regular: 400;--font-weight-semibold: 600;--font-weight-bold: 700;--font-size-xs: 12px;--font-size-sm: 16px;--font-size-base: 18px;--font-size-lg: 20px;--font-size-xl: 24px;--font-size-2xl: 32px;--font-size-3xl: 40px;--line-height-tight: 1;--line-height-normal: 1.2;--line-height-relaxed: 1.36;--letter-spacing-tight: -.6px;--letter-spacing-snug: -.48px;--letter-spacing-tight-md: -.3px;--letter-spacing-normal: 0px;--letter-spacing-wide: .32px;--letter-spacing-wider: .4px;--color-neutral-900: hsl(0, 0%, 7%);--color-neutral-800: hsl(0, 0%, 15%);--color-neutral-700: hsl(0, 0%, 23%);--color-neutral-500: hsl(240, 3%, 46%);--color-neutral-400: hsl(240, 1%, 59%);--color-neutral-0: hsl(0, 0%, 100%);--color-blue-600: hsl(214, 100%, 55%);--color-blue-400: hsl(210, 100%, 65%);--color-red-500: hsl(354, 63%, 57%);--color-green-500: hsl(140, 63%, 57%);--color-yellow-400: hsl(49, 85%, 70%);--color-text: var(--color-neutral-0);--color-text-secondary: var(--color-neutral-400);--color-background: var(--color-neutral-900);--color-surface: var(--color-neutral-800);--color-border: var(--color-neutral-500);--color-primary: var(--color-blue-600);--color-primary-light: var(--color-blue-400);--color-error: var(--color-red-500);--color-success: var(--color-green-500);--color-warning: var(--color-yellow-400);--spacing-0: 0;--spacing-25: 2px;--spacing-50: 4px;--spacing-75: 6px;--spacing-100: 8px;--spacing-125: 10px;--spacing-150: 12px;--spacing-200: 16px;--spacing-250: 20px;--spacing-300: 24px;--spacing-400: 32px;--spacing-500: 40px;--spacing-600: 48px;--spacing-800: 64px;--spacing-1000: 80px;--spacing-1200: 96px;--spacing-1400: 112px;--spacing-1600: 128px;--spacing-1800: 140px;--breakpoint-mobile: 375px;--breakpoint-tablet: 768px;--breakpoint-desktop: 1440px;--radius-0: 0;--radius-4: 4px;--radius-6: 6px;--radius-8: 8px;--radius-10: 10px;--radius-12: 12px;--radius-16: 16px;--radius-20: 20px;--radius-24: 24px;--radius-full: 999px;--transition-fast: .15s ease-in-out;--transition-base: .25s ease-in-out;--transition-slow: .35s ease-in-out}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-regular);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-background);transition:background-color var(--transition-base),color var(--transition-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{font-weight:var(--font-weight-bold);line-height:var(--line-height-tight)}h1{font-size:var(--font-size-2xl)}h2{font-size:var(--font-size-xl)}h3{font-size:var(--font-size-lg)}p{line-height:var(--line-height-relaxed)}a{color:var(--color-primary);text-decoration:inherit;transition:color var(--transition-fast)}a:hover,a:focus{color:var(--color-primary-light)}input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}button{font-family:inherit;font-size:inherit;cursor:pointer}ul,ol{list-style:none}img,picture,video,canvas,svg{display:block;max-width:100%}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.font-regular{font-weight:var(--font-weight-regular)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.line-tight{line-height:var(--line-height-tight)}.line-normal{line-height:var(--line-height-normal)}.line-relaxed{line-height:var(--line-height-relaxed)}.text-center{text-align:center}.text-secondary{color:var(--color-text-secondary)}.text-error{color:var(--color-error)}.text-success{color:var(--color-success)}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-center{display:flex;align-items:center;justify-content:center}.grid{display:grid}.gap-xs{gap:var(--spacing-xs)}.gap-sm{gap:var(--spacing-sm)}.gap-md{gap:var(--spacing-md)}.gap-lg{gap:var(--spacing-lg)}.p-xs{padding:var(--spacing-xs)}.p-sm{padding:var(--spacing-sm)}.p-md{padding:var(--spacing-md)}.p-lg{padding:var(--spacing-lg)}.p-xl{padding:var(--spacing-xl)}.px-md{padding-left:var(--spacing-md);padding-right:var(--spacing-md)}.py-md{padding-top:var(--spacing-md);padding-bottom:var(--spacing-md)}.m-auto{margin:auto}.mx-auto{margin-left:auto;margin-right:auto}.mt-md{margin-top:var(--spacing-md)}.mb-md{margin-bottom:var(--spacing-md)}.w-full{width:100%}.h-full{height:100%}.min-h-screen{min-height:100vh}.container{width:100%;margin-left:auto;margin-right:auto;padding-left:var(--spacing-md);padding-right:var(--spacing-md)}@media(min-width:768px){.container{padding-left:var(--spacing-lg);padding-right:var(--spacing-lg)}}@media(min-width:1440px){.container{max-width:1200px;padding-left:var(--spacing-2xl);padding-right:var(--spacing-2xl)}}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.hidden{display:none!important}.bg-primary{background-color:var(--color-primary)}.bg-success{background-color:var(--color-success)}.bg-error{background-color:var(--color-error)}.bg-warning{background-color:var(--color-warning)}.bg-surface{background-color:var(--color-surface)}.border{border:1px solid var(--color-border)}.rounded{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-lg{border-radius:var(--radius-lg)}.transition-fast{transition:all var(--transition-fast)}.transition-base{transition:all var(--transition-base)}.transition-slow{transition:all var(--transition-slow)}.cursor-pointer{cursor:pointer}.cursor-disabled{cursor:not-allowed;opacity:.5}.focus-visible:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.shadow-sm{box-shadow:0 1px 2px #0000000d}.shadow{box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f}.shadow-md{box-shadow:0 4px 6px #0000001a,0 2px 4px #0000000f}.shadow-lg{box-shadow:0 10px 15px #0000001a,0 4px 6px #0000000d}.passage{background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--spacing-lg);min-height:200px;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-lg);line-height:var(--line-height-relaxed);cursor:text;transition:border-color var(--transition-base),box-shadow var(--transition-base)}.passage:hover{border-color:var(--color-primary)}.passage:focus-within{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #007dff1a}.char{position:relative}.char.correct{color:var(--color-success)}.char.incorrect{color:var(--color-error);text-decoration:underline;text-decoration-color:var(--color-error);text-decoration-thickness:2px;text-underline-offset:2px}.char.cursor{animation:blink 1s infinite}.char.cursor:after{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background-color:var(--color-text)}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}@media(max-width:768px){.passage{padding:var(--spacing-md);font-size:var(--font-size-base);min-height:150px}}.stats{display:grid;grid-template-columns:repeat(3,1fr)}.stats>*+*{border-left:1px solid var(--color-neutral-700)}.stat{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-100)}.stat-value{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);line-height:var(--line-height-tight);color:var(--color-neutral-0)}.stat-label{font-size:var(--font-size-sm);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-snug);color:var(--color-neutral-400)}.stat.error .stat-value{color:var(--color-error)}.stat.success .stat-value{color:var(--color-success)}.stat.warning .stat-value{color:var(--color-warning)}@media(min-width:540px){.stats{display:flex}.stat{flex-direction:row;align-items:center;gap:var(--spacing-150);padding-inline:var(--spacing-300)}.stat:first-child{padding-inline-start:0}.stat:last-child{padding-inline-end:0}.stat-label{font-size:var(--font-size-lg);letter-spacing:var(--letter-spacing-tight)}}.results{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-300);padding-top:var(--spacing-200)}.results svg{width:100%;height:100%}.results-icon{width:var(--spacing-600);height:var(--spacing-600)}.results-icon:has(.check-icon){position:relative}.results-icon:has(.check-icon):before{content:"";position:absolute;inset:0;border-radius:var(--radius-full);box-shadow:0 0 0 7.5px #4cd67a33,0 0 0 15px #4cd67a1a}.message-container{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-125);padding-top:var(--spacing-200);text-align:center}.results-title{font-weight:var(--font-weight-bold);font-size:var(--font-size-xl);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-wide)}.results-message{font-size:var(--font-size-sm);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-snug);color:var(--color-neutral-400)}.results-stats{display:grid;row-gap:var(--spacing-200);column-gap:var(--spacing-250);flex-direction:column;align-self:stretch;padding-bottom:var(--spacing-200)}.results-stat{display:flex;flex-direction:column;gap:var(--spacing-150);padding:var(--spacing-200) var(--spacing-300);border-radius:var(--radius-8);border:1px solid var(--color-neutral-700)}.results-stat .label{font-size:var(--font-size-lg);line-height:var(--line-height-normal);letter-spacing:var(--letter-spacing-tight);color:var(--color-neutral-400)}.results-stat .value{font-weight:var(--font-weight-bold);font-size:var(--font-size-xl);line-height:var(--line-height-tight)}@media(min-width:560px){.results-stats{grid-template-columns:repeat(3,1fr);padding-block:var(--spacing-250) var(--spacing-400)}}@media(min-width:768px){.results{gap:var(--spacing-400);padding-top:var(--spacing-300)}.results-icon{width:var(--spacing-800);height:var(--spacing-800)}.message-container{padding-top:var(--spacing-300)}.results-title{font-size:var(--font-size-3xl);line-height:var(--line-height-relaxed);letter-spacing:var(--letter-spacing-wider)}.results-message{font-size:var(--font-size-lg);letter-spacing:var(--letter-spacing-tight)}.results-stats{grid-template-columns:repeat(3,160px);justify-content:center}}.app-shell{height:100svh;display:flex;flex-direction:column;gap:var(--spacing-400);padding:var(--spacing-200);padding-bottom:var(--spacing-400);max-width:calc(1216px + 2 * var(--spacing-400));margin-inline:auto}.app-shell>.main{display:flex;flex-direction:column;gap:var(--spacing-400);height:100%;overflow-y:auto}.app-shell>.footer{padding-top:var(--spacing-300);border-top:1px solid var(--color-neutral-700);display:flex;justify-content:center}@media(min-width:768px){.app-shell{padding-top:var(--spacing-400);padding-inline:var(--spacing-400);padding-bottom:var(--spacing-500);gap:var(--spacing-500)}}@media(min-width:1440px){.app-shell{padding-bottom:var(--spacing-800);gap:var(--spacing-800)}}
