@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-400-normal-CDDApCn2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-500-normal-6ng42L7E.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--paper:var(--lightningcss-light,#f3f5f7)var(--lightningcss-dark,#11161c);--surface:var(--lightningcss-light,#fff)var(--lightningcss-dark,#19202a);--ink:var(--lightningcss-light,#1b2430)var(--lightningcss-dark,#e6ebf0);--ink-soft:var(--lightningcss-light,#5b6878)var(--lightningcss-dark,#9aa7b6);--rule:var(--lightningcss-light,#d6dce3)var(--lightningcss-dark,#2c3642);--accent:var(--lightningcss-light,#2f5bd3)var(--lightningcss-dark,#86a6ff);--accent-ink:var(--lightningcss-light,#fff)var(--lightningcss-dark,#0e1420);--ok:var(--lightningcss-light,#1e7a46)var(--lightningcss-dark,#5cc48a);--err:var(--lightningcss-light,#c2342b)var(--lightningcss-dark,#ff7a70);--key-surface:var(--lightningcss-light,#fbfcfd)var(--lightningcss-dark,#222b36);--key-edge:var(--lightningcss-light,#c9d1da)var(--lightningcss-dark,#0b0f14);--key-ink-soft:var(--lightningcss-light,#505c6b)var(--lightningcss-dark,#a6b2c0);--key-active-ink:var(--lightningcss-light,#1b2430)var(--lightningcss-dark,#05070a);--finger-LP:var(--lightningcss-light,#d9738a)var(--lightningcss-dark,#c4627a);--finger-RP:var(--lightningcss-light,#c978c0)var(--lightningcss-dark,#b568ad);--finger-LR:var(--lightningcss-light,#e39a55)var(--lightningcss-dark,#c98645);--finger-RR:var(--lightningcss-light,#8a80d6)var(--lightningcss-dark,#776dc2);--finger-LM:var(--lightningcss-light,#cbb43e)var(--lightningcss-dark,#b39e32);--finger-RM:var(--lightningcss-light,#479fc2)var(--lightningcss-dark,#3d8baa);--finger-LI:var(--lightningcss-light,#35c9c2)var(--lightningcss-dark,#30b4ad);--finger-RI:var(--lightningcss-light,#56ae77)var(--lightningcss-dark,#4a9a68);--finger-LT:var(--lightningcss-light,#baa38a)var(--lightningcss-dark,#a08b73);--finger-RT:var(--lightningcss-light,#8da4bd)var(--lightningcss-dark,#768ca3);--finger-unused:var(--lightningcss-light,#c3c9d0)var(--lightningcss-dark,#3a434e);--heat-none:var(--key-surface);--chart-1:var(--accent);--chart-2:var(--ok);--font-sans:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;--fs-label:.8125rem;--fs-small:.9375rem;--fs-h3:1.25rem;--fs-h2:1.625rem;--fs-figure:2.5rem;--typing-font-size:28px;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--r-small:4px;--r:8px;--column:960px;accent-color:var(--accent)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--paper);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0;font-size:1rem;line-height:1.5}h1,h2,h3{margin:0;font-weight:600;line-height:1.25}h2{font-size:var(--fs-h2)}h3{font-size:var(--fs-h3)}p{margin:0}code,pre{font-family:var(--font-mono)}.muted{color:var(--ink-soft)}.ok{color:var(--ok)}.err{color:var(--err)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button{font:inherit;font-size:var(--fs-small);min-height:36px;padding:0 var(--s4);border:1px solid var(--rule);border-radius:var(--r);background:var(--surface);color:var(--ink);cursor:pointer;font-weight:500}button:hover{border-color:var(--ink-soft)}button:disabled{cursor:not-allowed;opacity:.55}.button-like{font-size:var(--fs-small);min-height:36px;padding:0 var(--s4);border:1px solid var(--rule);border-radius:var(--r);background:var(--surface);color:var(--ink);cursor:pointer;align-items:center;font-weight:500;display:inline-flex;position:relative}.button-like>input[type=file]{opacity:0;pointer-events:none;border:0;width:1px;height:1px;min-height:0;margin:0;padding:0;position:absolute;top:0;left:0}.button-like:hover{border-color:var(--ink-soft)}.button-like[aria-disabled=true]{cursor:not-allowed;opacity:.55}.button-like[aria-disabled=true]:hover{border-color:var(--rule)}.button-like:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}button.primary:hover{background:color-mix(in oklab, var(--accent) 88%, var(--ink))}button.quiet{color:var(--ink-soft);padding:0 var(--s2);background:0 0;border-color:#0000}button.quiet:hover{color:var(--ink);text-underline-offset:3px;text-decoration:underline}.practice-actions>.quiet:first-child,.session-detail>.quiet{margin-left:calc(-1 * var(--s2))}input:not([type=checkbox],[type=radio],[type=range]),select,textarea{font:inherit;font-size:var(--fs-small);color:var(--ink);background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-small);min-height:36px;padding:var(--s1) var(--s2)}input[type=number]{font-variant-numeric:tabular-nums;width:7rem}input[type=checkbox],input[type=radio]{flex:none;width:1rem;height:1rem;margin:0}input[type=range]{width:12rem;margin:0}.column{width:100%;max-width:var(--column);padding:0 var(--s5);margin:0 auto}.app-header{background:var(--surface);border-bottom:1px solid var(--rule)}.header-row{align-items:stretch;column-gap:var(--s5);min-height:56px;display:flex}.wordmark{letter-spacing:-.01em;align-items:center;font-size:1.125rem;font-weight:600;display:flex}.app-nav{align-items:stretch;gap:var(--s1);display:flex}.nav-tab{min-height:56px;padding:0 var(--s3);color:var(--ink-soft);font-size:var(--fs-small);background:0 0;border:none;border-radius:0;font-weight:500;box-shadow:inset 0 -2px #0000}.nav-tab:hover{color:var(--ink)}.nav-tab:focus-visible{outline-offset:-4px}.nav-tab[aria-current=page]{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent)}.profile-select{min-height:36px;padding:0 var(--s3);border:1px solid var(--rule);color:var(--ink-soft);font-size:var(--fs-label);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-self:center;min-width:0;max-width:16rem;margin-left:auto;font-weight:500;overflow:hidden}.profile-select:hover{color:var(--ink);border-color:var(--ink-soft)}.wordmark,.app-nav{flex:none}@media (width<=900px){.header-row{column-gap:var(--s4)}.nav-tab{padding:0 var(--s2)}}@media (width<=640px){.header-row{flex-wrap:wrap}.app-nav{flex:100%;order:3;overflow-x:auto}}.app-main{padding-top:var(--s6);padding-bottom:var(--s7)}:where(.app-main>section){gap:var(--s5);grid-template-columns:minmax(0,1fr);align-content:start;display:grid}.loading{padding:var(--s5)}.mode-nav{gap:var(--s1);margin-bottom:var(--s5);border-bottom:1px solid var(--rule);flex-wrap:wrap;display:flex}.mode-tab{min-height:40px;padding:0 var(--s3);color:var(--ink-soft);font-size:var(--fs-label);background:0 0;border:none;border-radius:0;font-weight:500;box-shadow:inset 0 -2px #0000}.mode-tab:hover{color:var(--ink)}.mode-tab:focus-visible{outline-offset:-4px}.mode-tab[aria-current=page]{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent)}.field-stack{gap:var(--s2);display:grid}.free-text-input{resize:vertical;width:100%;min-height:12rem;font-family:var(--font-mono);line-height:1.5}.free-text-status{font-size:var(--fs-small);flex-direction:column;display:flex}.free-text-report{gap:var(--s1);display:grid}.free-text-report:not(:empty){margin-top:var(--s1)}.free-text-report p,.free-text-length{margin:0}.free-text-preview-label{font-size:var(--fs-label);color:var(--ink-soft)}.free-text-preview{max-height:12rem;padding:var(--s2) var(--s3);border:1px solid var(--rule);border-radius:var(--r);background:var(--surface);font-family:var(--font-mono);font-size:var(--fs-small);white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.5;overflow:auto}.free-text-return{margin-left:var(--s1);color:var(--ink-soft)}.lessons{gap:var(--s6)}.lessons-intro{gap:var(--s2);display:grid}.stage-head{justify-content:space-between;align-items:baseline;gap:var(--s4);padding-bottom:var(--s2);border-bottom:1px solid var(--rule);display:flex}.stage-progress{color:var(--ink-soft);font-size:var(--fs-label);font-variant-numeric:tabular-nums;white-space:nowrap}.lesson-list{margin:0;padding:0;list-style:none}.lesson-list li{border-bottom:1px solid var(--rule)}.lesson-row{align-items:center;gap:var(--s4);width:100%;min-height:48px;padding:var(--s2) var(--s3);border-radius:var(--r-small);text-align:left;background:0 0;border:none;grid-template-columns:7rem minmax(0,1fr) auto;font-size:1rem;font-weight:400;display:grid}.lesson-row:hover{background:var(--surface)}.lesson-row:focus-visible{outline-offset:-2px}.lesson-title{font-variant-numeric:tabular-nums;font-weight:500}.lesson-row.locked .lesson-title{color:var(--ink-soft)}.adaptive-rows{gap:var(--s2) var(--s3);margin-bottom:var(--s3);grid-template-columns:max-content minmax(0,1fr);align-items:center;display:grid}.adaptive-row{display:contents}.adaptive-label{color:var(--ink-soft)}.keycap-chips{gap:var(--s1);flex-wrap:wrap;display:flex}.keycap-chip{min-width:1.6rem;padding:0 var(--s1);border:1px solid var(--rule);border-bottom:2px solid var(--key-edge);border-radius:var(--r-small);background:var(--key-surface);font-family:var(--font-mono);font-size:var(--fs-label);text-align:center;font-weight:500;line-height:1.5rem;display:inline-block}.keycap-chip.wide{font-family:var(--font-sans);padding:0 var(--s2)}.lesson-status{justify-content:flex-end;align-items:center;gap:var(--s4);font-size:var(--fs-small);text-align:right;display:flex}.status-current{color:var(--accent);font-weight:500}.status-locked{color:var(--ink-soft);align-items:center;gap:6px;display:inline-flex}.lesson-best{color:var(--ink-soft);font-variant-numeric:tabular-nums;white-space:nowrap}.practice{gap:var(--s5)}.live-stats{gap:var(--s2) var(--s6);flex-wrap:wrap;display:flex}.live-stats .stat{align-items:baseline;gap:6px;display:flex}.live-stats .stat-value{font-size:var(--fs-h3);font-variant-numeric:tabular-nums;font-weight:600}.live-stats .stat-label{color:var(--ink-soft);font-size:var(--fs-label)}.typing-area{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r);padding:var(--s6) var(--s5);position:relative;overflow:hidden}.typing-area:focus-within{border-color:color-mix(in oklab, var(--accent) 45%, var(--rule))}.text-line{font-family:var(--font-mono);font-size:var(--typing-font-size);white-space:pre;line-height:1.5}.text-line .ch{color:var(--ink)}.text-line .ch.correct,.text-line .ch.corrected{color:var(--ink-soft)}.text-line .ch.corrected{-webkit-text-decoration:underline dotted var(--err);text-decoration:underline dotted var(--err);text-underline-offset:.2em}.text-line .ch.error{color:var(--err);background:color-mix(in oklab, var(--err) 12%, transparent);-webkit-text-decoration:underline wavy var(--err);text-decoration:underline wavy var(--err);text-underline-offset:.2em;text-decoration-thickness:1px}.text-line .ch.cursor{background:color-mix(in oklab, var(--accent) 14%, transparent);position:relative}.text-line .ch.cursor:before{content:"";background:var(--accent);border-radius:2px;width:3px;position:absolute;top:.12em;bottom:.12em;left:-1.5px}.hidden-input{opacity:0;resize:none;border:0;width:1px;height:1px;min-height:0;margin:0;padding:0;position:absolute;top:0;left:0}.focus-overlay{background:color-mix(in oklab, var(--surface) 92%, transparent);width:100%;color:var(--ink);border:none;border-radius:0;font-size:1rem;position:absolute;inset:0}.focus-overlay:focus-visible{outline-offset:-4px}.warning{color:var(--err);font-weight:500}.helpers{gap:var(--s4);justify-items:center;display:grid}.practice-actions,.result-actions{gap:var(--s2);flex-wrap:wrap;display:flex}.keyboard{width:100%;max-width:900px;height:auto;margin:0 auto;display:block}.key-edge{fill:var(--key-edge)}.key-cap{fill:color-mix(in oklab, var(--key-finger) 22%, var(--key-surface))}.key-stripe,.key.active .key-cap{fill:var(--key-finger)}.key-cap-group{transition:transform 80ms ease-out}.key.active .key-cap-group{transform:translateY(-2px)}.key.active .key-cap{stroke:var(--accent);stroke-width:3px}.key text{fill:var(--ink);font-family:var(--font-sans)}.key .key-main{font-family:var(--font-mono);font-size:14px;font-weight:500}.key .key-main.special{font-family:var(--font-sans);font-size:12px}.key .key-top,.key .key-altgr{fill:var(--key-ink-soft);font-size:10px}.key-home{fill:var(--key-ink-soft)}.key.active text,.key.active .key-home{fill:var(--key-active-ink)}.keyboard.editable .key{cursor:pointer}.keyboard.editable .key:focus{outline:none}.keyboard.editable .key:not(.active):not(:focus-visible):hover .key-cap{stroke:var(--ink-soft);stroke-width:1.5px}.keyboard.editable .key:focus-visible .key-cap{stroke:var(--accent);stroke-width:2.5px}.keyboard.editable .key.active:focus-visible .key-cap{stroke-width:4px}.keyboard .key.dimmed:not(.active) .key-cap{fill:color-mix(in oklab, var(--key-finger) 6%, var(--key-surface))}.keyboard .key.dimmed .key-stripe{opacity:.35}.keyboard.heat .key:not(.on-dark):not([data-heat=""]) text{fill:#1d1d1f}.key.on-dark text{fill:#fff}@media (prefers-reduced-motion:reduce){.key-cap-group{transition:none}}.hands{width:100%;max-width:420px;height:auto;display:block}.palm{fill:var(--key-surface);stroke:var(--rule);stroke-width:1px}.finger rect{stroke:var(--rule);stroke-width:1px}.finger.active rect{stroke:var(--accent);stroke-width:3px}.finger-label{fill:var(--ink-soft);font-size:10px;font-family:var(--font-sans)}.hatch-bg{fill:var(--surface)}.hatch-line{stroke:var(--finger-unused);stroke-width:3px}.result-verdict{font-weight:500}.result-figures{gap:var(--s3);display:grid}.result-main{align-items:baseline;gap:var(--s2);margin:0;display:flex}.result-main dd{font-size:var(--fs-figure);font-variant-numeric:tabular-nums;order:-1;margin:0;font-weight:600;line-height:1.1}.result-main dt{color:var(--ink-soft);font-size:var(--fs-small)}.result-grid{gap:var(--s2) var(--s6);flex-wrap:wrap;margin:0;display:flex}.result-grid>div{align-items:baseline;gap:6px;display:flex}.result-grid dt{color:var(--ink-soft);font-size:var(--fs-label);order:2}.result-grid dd{font-variant-numeric:tabular-nums;margin:0;font-weight:600}.result-actions{margin-top:var(--s2)}.settings{gap:var(--s7)}.settings-group{gap:var(--s4);display:grid}.settings-group h3{padding-bottom:var(--s2);border-bottom:1px solid var(--rule)}.about-note{font-size:var(--fs-small);display:block}.about-sources{gap:var(--s2);padding-left:var(--s5);margin:0;display:grid}.settings-group a{color:var(--accent);text-underline-offset:.15em}.field{gap:var(--s2) var(--s5);border:none;grid-template-columns:14rem minmax(0,1fr);align-items:center;min-width:0;margin:0;padding:0;display:grid}fieldset.field{align-items:start}.field>legend{float:left;padding:0}.field>label,.field>legend{color:var(--ink);font-size:var(--fs-small);font-weight:500}.control{align-items:center;gap:var(--s2) var(--s4);flex-wrap:wrap;display:flex}.control-value{color:var(--ink-soft);font-size:var(--fs-small);font-variant-numeric:tabular-nums}.choices{gap:var(--s2);display:grid}.settings-group>.choices{margin-left:calc(14rem + var(--s5))}.check{align-items:center;gap:var(--s2);font-size:var(--fs-small);cursor:pointer;display:inline-flex}.check:has(input:disabled){color:var(--ink-soft);cursor:not-allowed}.hint{margin-left:calc(1rem + var(--s2));color:var(--ink-soft);font-size:var(--fs-label);display:block}.field>.hint{grid-column:2;margin-left:0}.stats{gap:var(--s7)}.view-head{gap:var(--s4);display:grid}.stats-section{gap:var(--s4);grid-template-columns:minmax(0,1fr);display:grid}.stats-controls{gap:var(--s3);flex-wrap:wrap;align-items:center;display:flex}.stats-controls label{font-size:var(--fs-small);font-weight:500}.stats-controls button{margin-left:auto}.kpis{gap:var(--s4) var(--s7);flex-wrap:wrap;margin:0;display:flex}.kpis .stat{flex-direction:column-reverse;display:flex}.kpis dd{font-size:var(--fs-h2);font-variant-numeric:tabular-nums;white-space:nowrap;margin:0;font-weight:600;line-height:1.2}.kpis dt{color:var(--ink-soft);font-size:var(--fs-label)}.toggle{gap:var(--s5);border:none;flex-wrap:wrap;margin:0;padding:0;display:flex}.toggle label{align-items:center;gap:var(--s2);font-size:var(--fs-small);cursor:pointer;display:inline-flex}.table-scroll{padding:2px;overflow-x:auto}.stats-table{border-collapse:collapse;width:100%;font-size:var(--fs-small);font-variant-numeric:tabular-nums}.stats-table th,.stats-table td{text-align:left;padding:var(--s2) var(--s3);border-bottom:1px solid var(--rule);vertical-align:baseline}.stats-table thead th{color:var(--ink-soft);font-size:var(--fs-label);white-space:nowrap;font-weight:500}.stats-table tbody th{font-weight:500}.stats-table .num{text-align:right;white-space:nowrap}.stats-table .nowrap{white-space:nowrap}.stats-table th:first-child,.stats-table td:first-child{padding-left:0}.stats-table th:last-child,.stats-table td:last-child{padding-right:0}.stats-table td.action{text-align:right;padding-right:var(--s1);padding-top:var(--s2);padding-bottom:var(--s2)}.stats-table td.action:last-child{padding-right:var(--s1)}.char-cell{font-family:var(--font-mono)}.badge-heavy,.badge-active{margin-left:var(--s2);border:1px solid var(--accent);border-radius:var(--r-small);color:var(--accent);font-size:var(--fs-label);white-space:nowrap;padding:0 6px;font-weight:500;line-height:1.4;display:inline-block}.line-chart{min-width:0;margin:0}.line-chart-canvas{width:100%;min-width:0;overflow:hidden}.chart-legend{gap:var(--s2) var(--s5);margin:var(--s2) 0 0;font-size:var(--fs-label);color:var(--ink-soft);flex-wrap:wrap;padding:0;list-style:none;display:flex}.chart-legend li{align-items:center;gap:var(--s2);display:inline-flex}.chart-swatch{background:currentColor;border-radius:1px;width:26px;height:3px;display:inline-block}.chart-swatch.dashed{background:repeating-linear-gradient(90deg,currentColor 0 6px,#0000 6px 10px)}.heatmap .keyboard{margin:0}.heat-legend{gap:var(--s2);color:var(--ink-soft);font-size:var(--fs-label);flex-wrap:wrap;align-items:center;display:flex}.heat-gradient{border-radius:var(--r-small);border:1px solid var(--rule);width:8rem;height:.75rem;display:inline-block}.swatch{width:1rem;height:1rem;margin-left:var(--s4);border-radius:var(--r-small);border:1px solid var(--rule);display:inline-block}.session-detail>button{justify-self:start}.session-text{gap:var(--s3);display:grid}.session-text p{padding:var(--s4) var(--s5);background:var(--surface);border:1px solid var(--rule);border-radius:var(--r);font-family:var(--font-mono);white-space:pre-wrap;line-height:1.7}.session-text .ch.error{color:var(--err);-webkit-text-decoration:underline wavy var(--err);text-decoration:underline wavy var(--err);text-underline-offset:.2em;text-decoration-thickness:1px}.input-lab .form-stack{gap:var(--s4);max-width:640px;display:grid}.input-lab .form-stack label{gap:var(--s1);font-size:var(--fs-small);font-weight:500;display:grid}.input-lab code{font-size:var(--fs-small)}.log{padding:var(--s3) var(--s4);background:var(--surface);border:1px solid var(--rule);border-radius:var(--r);max-height:24rem;font-size:var(--fs-label);margin:0;overflow:auto}.profile-editor{gap:var(--s6);grid-template-columns:minmax(0,1fr);display:grid}.editor-name{width:min(100%,24rem)}.finger-section{gap:var(--s4);display:grid}.finger-palette{gap:var(--s2);border:0;grid-template-columns:repeat(5,minmax(0,1fr));min-width:0;margin:0;padding:0;display:grid}.finger-palette>legend{margin-bottom:var(--s1);font-size:var(--fs-small);padding:0;font-weight:500}.finger-palette>.hint{margin:0 0 var(--s2);grid-column:1/-1}.finger-choice{align-content:start;gap:2px var(--s2);padding:var(--s2) var(--s3);border:1px solid var(--rule);border-radius:var(--r);background:var(--surface);font-size:var(--fs-small);cursor:pointer;grid-template-columns:12px minmax(0,1fr);line-height:1.35;display:grid;position:relative}.finger-choice>input{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;position:absolute;top:0;left:0}.finger-choice:hover{border-color:var(--ink-soft)}.finger-choice:has(input:checked){border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);background:color-mix(in srgb, var(--accent) 8%, var(--surface))}.finger-choice:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}@media (forced-colors:active){.finger-choice:has(input:checked){padding:calc(var(--s2) - 2px) calc(var(--s3) - 2px);border:3px solid highlight}}.finger-swatch{border-radius:var(--r-small);background:var(--key-finger);width:12px;height:12px;margin-top:calc(.5lh - 6px)}.finger-name{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;font-weight:500}.finger-count{color:var(--ink-soft);font-size:var(--fs-label);font-variant-numeric:tabular-nums;grid-column:2}.home-key{align-items:center;gap:var(--s2) var(--s3);flex-wrap:wrap;display:flex}.home-key>label{font-size:var(--fs-small);font-weight:500}.profile-editor .keyboard{margin:0 auto}.profile-editor>.hint{margin-left:0}.editor-review{gap:var(--s6);grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr));align-items:start;display:grid}.editor-review h3{padding-bottom:var(--s2);border-bottom:1px solid var(--rule)}.issue-list{gap:var(--s1);margin:0;padding:0;list-style:none;display:grid}.issue-list:empty{display:none}.issue-list .warning{color:var(--ink);font-weight:400}.issue-list strong{font-weight:600}.first-lesson{align-items:center;gap:var(--s2) var(--s3);flex-wrap:wrap;display:flex}.first-lesson-label{font-weight:500}.profiles-intro{align-items:center;gap:var(--s3) var(--s5);flex-wrap:wrap;display:flex}.profiles-intro>p{flex:20rem}.profiles-intro>button{margin-left:auto}.row-actions{justify-content:flex-end;gap:var(--s2);flex-wrap:wrap;display:flex}.compare-body{gap:var(--s3);grid-template-columns:minmax(0,1fr);display:grid}.compare-table{--metric-col:10rem;--profile-col-min:8rem;table-layout:fixed;min-width:calc(var(--metric-col) + var(--profiles,1) * var(--profile-col-min))}.compare-table .metric-col{width:var(--metric-col)}.compare-table thead th.profile-col{color:var(--ink);font-size:var(--fs-small);white-space:normal;overflow-wrap:break-word;vertical-align:bottom}.compare-table thead th:first-child{vertical-align:bottom}.compare-table td.best{font-weight:600}.guide{max-width:44rem}.guide section{gap:var(--s3);display:grid}.guide h3{padding-top:var(--s3)}.guide ol,.guide ul{gap:var(--s2);padding-left:1.5rem;display:grid}.guide a{color:var(--accent);text-underline-offset:.15em}.guide-toc ol{gap:var(--s1);display:grid}.guide-note{padding:var(--s4);border-left:3px solid var(--accent);background:var(--surface);border-radius:4px}.link-button{font:inherit;color:var(--accent);text-underline-offset:.15em;cursor:pointer;background:0 0;border:0;min-height:0;padding:0;text-decoration:underline}.guide-hint{gap:var(--s2);padding:var(--s4) calc(var(--s4) + 2rem) var(--s4) var(--s4);border:1px solid var(--rule);border-left:3px solid var(--accent);background:var(--surface);margin-bottom:var(--s5);border-radius:4px;display:grid;position:relative}.guide-hint-close{top:var(--s2);right:var(--s2);width:2rem;height:2rem;min-height:0;color:var(--ink-soft);cursor:pointer;background:0 0;border:0;padding:0;font-size:1.25rem;position:absolute}.guide-hint-close:hover{color:var(--ink)}.app-footer{padding-bottom:var(--s6);font-size:var(--fs-small);color:var(--ink-soft)}
