@font-face{font-family:OpenDyslexic;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/opendyslexic-5.3.0-400.woff2) format("woff2")}@font-face{font-family:OpenDyslexic;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/opendyslexic-5.3.0-700.woff2) format("woff2")}:root{--radius-s: 8px;--radius-m: 12px;--radius-l: 18px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--ease: cubic-bezier(.2, .7, .2, 1);--content-width: 760px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;min-height:100%}.app{--dur-fast: calc(var(--motion, 1) * .14s);--dur: calc(var(--motion, 1) * .24s);position:relative;isolation:isolate;min-height:100vh;min-height:100dvh;color:var(--fg);background:var(--bg);font-family:var(--font);font-size:var(--font-size);line-height:var(--line-height);letter-spacing:var(--letter-spacing);word-spacing:var(--word-spacing);-webkit-font-smoothing:antialiased;color-scheme:var(--color-scheme, dark);accent-color:var(--accent)}.backdrop{position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(120% 70% at 50% 110%,color-mix(in srgb,var(--accent) 22%,transparent),transparent 60%),linear-gradient(180deg,var(--bg),color-mix(in srgb,var(--bg) 70%,var(--accent)))}.backdrop canvas{display:block;width:100%;height:100%;opacity:0;transition:opacity calc(var(--motion, 1) * .9s) var(--ease)}.backdrop canvas[data-ready]{opacity:1}.shell{max-width:var(--content-width);margin:0 auto;padding:var(--space-4) max(var(--space-4),env(safe-area-inset-right)) var(--space-6) max(var(--space-4),env(safe-area-inset-left))}.skip-link{position:absolute;left:-9999px;top:var(--space-2);z-index:10;padding:var(--space-2) var(--space-3);border-radius:var(--radius-s);background:var(--bg);color:var(--fg)}.skip-link:focus{left:var(--space-2)}.topbar{position:sticky;top:var(--space-2);z-index:5;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-5);padding:var(--space-2) var(--space-2) var(--space-2) var(--space-4);border-radius:var(--radius-l)}.brand{margin:0;font-size:1.1rem;font-weight:650;line-height:1.2}.eyebrow{display:block;color:var(--muted);font-size:.72em;font-weight:400;letter-spacing:.02em}.panel{background:color-mix(in srgb,var(--bg) calc(var(--panel-alpha) * 100%),transparent);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.2);backdrop-filter:blur(var(--glass-blur)) saturate(1.2);border:1px solid color-mix(in srgb,var(--fg) 12%,transparent);border-radius:var(--radius-l);box-shadow:0 1px color-mix(in srgb,var(--fg) 6%,transparent) inset,0 12px 32px -12px #00000059}.view{padding:var(--space-5)}.view>h2:first-child,.view>header:first-child h2{margin-top:0}h2{font-size:1.6rem;font-weight:700;line-height:1.2;letter-spacing:-.01em;margin:0 0 var(--space-3)}h3{font-size:1.1rem;font-weight:650;margin:var(--space-5) 0 var(--space-2)}.muted{color:var(--muted)}.stack{display:grid;gap:var(--space-3)}.section{margin-top:var(--space-5)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:44px;padding:var(--space-2) var(--space-4);font:inherit;font-weight:600;color:var(--fg);background:color-mix(in srgb,var(--fg) 8%,transparent);border:1px solid color-mix(in srgb,var(--fg) 18%,transparent);border-radius:999px;cursor:pointer;transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.btn:hover{background:color-mix(in srgb,var(--fg) 14%,transparent);border-color:color-mix(in srgb,var(--fg) 30%,transparent)}.btn:active{transform:translateY(calc(var(--motion, 1) * 1px))}.btn:disabled{cursor:not-allowed;opacity:.55}.btn-primary{color:var(--bg);background:var(--accent);border-color:var(--accent)}.btn-primary:hover{background:color-mix(in srgb,var(--accent) 88%,var(--fg));border-color:color-mix(in srgb,var(--accent) 88%,var(--fg))}:focus-visible{outline:3px solid var(--accent);outline-offset:2px;box-shadow:0 0 0 2px var(--bg)}.tile{display:block;width:100%;text-align:left;padding:var(--space-4);font:inherit;color:var(--fg);background:color-mix(in srgb,var(--fg) 5%,transparent);border:1px solid color-mix(in srgb,var(--fg) 14%,transparent);border-radius:var(--radius-m);cursor:pointer;transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),transform var(--dur) var(--ease)}.tile:hover{background:color-mix(in srgb,var(--fg) 10%,transparent);border-color:color-mix(in srgb,var(--accent) 60%,transparent);transform:translateY(calc(var(--motion, 1) * -1px))}.tile-title{display:block;font-weight:650;font-size:1.05em}.tile-sub{display:block;margin-top:2px;color:var(--muted);font-size:.85em}.tile-primary{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.tiles{display:grid;gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));margin:var(--space-4) 0}.notice{margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border:1px solid color-mix(in srgb,var(--accent) 50%,transparent);border-left-width:4px;border-radius:var(--radius-m)}.plain-list{margin:0;padding:0;display:grid;gap:var(--space-2)}.calendar{margin:var(--space-2) 0 0;padding:0;display:grid;grid-template-columns:repeat(7,1fr);gap:6px;max-width:320px}.calendar>li{aspect-ratio:1;border-radius:6px}.run-surface{position:relative;border-radius:var(--radius-m);padding:var(--space-4);background:color-mix(in srgb,var(--bg) 60%,transparent);border:1px solid color-mix(in srgb,var(--fg) 10%,transparent)}@media(max-width:480px){.view{padding:var(--space-4)}h2{font-size:1.35rem}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.ladder-chapter{margin:var(--space-4) 0 var(--space-1)}.ladder-btn{display:block;width:100%;text-align:left;padding:10px 12px;font:inherit;background:transparent;border-radius:6px}.progress-lead{font-size:1.05em;line-height:1.5;margin:var(--space-2) 0 var(--space-4)}.progress-sub{color:var(--muted);margin-top:-8px}.progress-legend{padding:0;margin:var(--space-1) 0 0;display:flex;flex-wrap:wrap;gap:14px;color:var(--muted);font-size:.85em}.progress-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-2px;margin-right:4px}.progress-table{border-collapse:collapse;margin-top:var(--space-2)}.progress-caption{caption-side:bottom;color:var(--muted);font-size:.85em;text-align:left;padding-top:6px}.progress-table th{text-align:left;padding:4px 14px 4px 0;border-bottom:1px solid var(--muted);font-weight:600}.progress-table td{text-align:left;padding:4px 14px 4px 0;border-bottom:1px solid var(--muted)}.progress-table .text-right{text-align:right}.key-cell{min-width:38px;padding:4px 3px;text-align:center;border-radius:4px;color:var(--fg)}.key-cell-glyph{display:block;font-size:13px}.key-cell-foot{display:block;font-size:10px;color:var(--muted)}.export-desc{color:var(--muted);font-size:.9em;margin:0 0 var(--space-2)}.export-msg{color:var(--muted);font-size:.9em;min-height:1.2em}.weak-list{padding-left:20px;display:grid;gap:4px}.progress-section{margin-top:28px}.progress-back-btn{margin-top:var(--space-5)}.heatmap-grid{padding:0;margin:var(--space-3) 0 0;display:grid;gap:4px;justify-items:center}.heatmap-row{padding:0;margin:0;display:flex;gap:4px;justify-content:center}.heatmap-row-wrapper{width:100%}.export-heading{margin-bottom:4px}.font-normal{font-weight:400}.settings-group{border:1px solid var(--muted);border-radius:6px;margin-bottom:var(--space-4)}.settings-row{margin:10px 0}.settings-label{display:block}.settings-help{color:var(--muted);font-size:.85em}.settings-range{display:block;width:100%}.run-viewport{height:42vh;min-height:240px;overflow:hidden}.run-word{position:absolute;font-size:1.6em;letter-spacing:var(--letter-spacing);pointer-events:none;z-index:1}.run-race{color:var(--muted);margin:var(--space-2) 0}.run-keyboard{margin:var(--space-3) 0}.assess-viewport{height:34vh;min-height:200px;overflow:hidden}.assess-word{position:absolute;font-size:1.5em;pointer-events:none;z-index:1}.assess-skip-btn{margin-top:12px}.play-heading{font-size:1rem;color:var(--muted)}.text-accent{color:var(--accent)}.sr-only{position:absolute;left:-9999px}.kbd{width:100%}.kbd-canvas{display:block;width:100%;height:0}.kbd-3d .kbd-canvas{height:auto;aspect-ratio:14.5 / 6;max-height:34vh}.kbd-grid{display:grid;gap:4px;justify-items:center}.kbd-3d .kbd-grid{display:none}.kbd-key{min-width:min(30px,5.6vw);padding:6px min(4px,.6vw);font-size:12px}.kbd-space{min-width:min(220px,44vw)}.kbd-row{display:flex;gap:min(4px,.8vw)}@media(forced-colors:active){.backdrop canvas{display:none}}.cruise-stage{position:relative;margin:var(--space-3) 0 var(--space-4)}.cruise-host{position:relative;height:46vh;min-height:260px;border-radius:var(--radius-m);overflow:hidden;border:1px solid color-mix(in srgb,var(--fg) 12%,transparent)}.cruise-canvas{position:absolute;inset:0;width:100%;height:100%}.cruise-word{position:absolute;left:50%;bottom:var(--space-4);transform:translate(-50%);max-width:calc(100% - 2 * var(--space-4));padding:var(--space-3) var(--space-5);text-align:center}.cruise-current{margin:0;font-size:2em;font-weight:600;letter-spacing:var(--letter-spacing);white-space:nowrap}.cruise-upcoming{margin:2px 0 0;color:var(--muted);white-space:pre;overflow:hidden;text-overflow:ellipsis}.cruise-hud{display:flex;gap:var(--space-4);flex-wrap:wrap;align-items:center}.cruise-speed{margin:0}.cruise-speed strong{font-size:1.4em;font-variant-numeric:tabular-nums}.cruise-gauge{flex:1 1 120px;height:8px;border-radius:999px;background:color-mix(in srgb,var(--muted) 45%,transparent);overflow:hidden}.cruise-note{color:var(--muted);margin:6px 0 0}.practice-group{padding:var(--space-3)}.practice-hint{margin:0 0 10px;display:block}.practice-check{display:flex;gap:var(--space-2);align-items:baseline}.practice-small{display:block;margin:var(--space-2) 0 0}.practice-actions{display:flex;gap:var(--space-2);margin-top:var(--space-4);flex-wrap:wrap}.kbd-swatch{display:inline-block;width:.9em;height:.9em;margin-right:4px;border-radius:3px;vertical-align:-.1em;border:1px solid var(--muted)}
