:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;text-rendering:optimizelegibility;--font-display:"Gabarito", "Avenir Next", sans-serif;--font-body:"Figtree", "Avenir Next", system-ui, sans-serif;--font-hand:"Shantell Sans", "Comic Sans MS", cursive;--bg:#f2f5ec;--surface:#fff;--surface-strong:#edf1e8;--text:#23281f;--muted:#65705d;--faint:#65705d;--line:#23281f1f;--accent:#377a45;--accent-deep:#2f6b3c;--accent-ink:#fff;--accent-soft:#e4f0e2;--error:#a83c24;--error-soft:color-mix(in srgb, var(--error) 12%, var(--bg));--shadow:0 1px 2px #1c1b170a, 0 12px 32px -16px #1c1b1729;--shadow-lift:0 2px 6px #1c1b170d, 0 28px 60px -28px #1c1b1738;--sprig-pattern:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='64' height='64'><g fill='none' stroke='%233f8a4f' stroke-opacity='0.11' stroke-width='1.3' stroke-linecap='round'><path d='M18 50c0-10 5-17 12-22'/><path d='M25 37c-5-1-9-5-10-10 5 0 10 2 12 6'/><path d='M28 30c0-5 3-10 8-12 1 5-1 10-4 13'/></g></svg>");--radius-control:8px;--radius-surface:14px;--ease:cubic-bezier(.22, .61, .36, 1);font-family:Figtree,Avenir Next,system-ui,sans-serif}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#172019;--surface:#202a22;--surface-strong:#29342b;--text:#edf3e9;--muted:#a9b5a4;--faint:#99a694;--line:#edf3e924;--accent:#78b884;--accent-deep:#9bcea4;--accent-ink:#152018;--accent-soft:#293f2e;--error:#f08a6e;--error-soft:color-mix(in srgb, var(--error) 12%, var(--bg));--shadow:0 1px 2px #050a0638, 0 18px 42px -18px #050a0685;--shadow-lift:0 2px 8px #050a0647, 0 30px 64px -28px #050a06a8;--sprig-pattern:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='64' height='64'><g fill='none' stroke='%2378b884' stroke-opacity='0.09' stroke-width='1.3' stroke-linecap='round'><path d='M18 50c0-10 5-17 12-22'/><path d='M25 37c-5-1-9-5-10-10 5 0 10 2 12 6'/><path d='M28 30c0-5 3-10 8-12 1 5-1 10-4 13'/></g></svg>")}*{box-sizing:border-box}html{background:var(--bg);min-width:320px}body{background-color:var(--bg);background-image:var(--sprig-pattern);min-width:320px;min-height:100dvh;color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;background-size:56px 56px;margin:0;transition:background-color .18s,color .18s;overflow-x:hidden}::selection{background:var(--accent-soft);color:var(--accent-deep)}button,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{border:0}button:focus-visible,a:focus-visible,.typing-stage:focus-within{outline:2px solid var(--accent);outline-offset:4px}button:active{transform:translateY(1px)}.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}.app-shell{grid-template-rows:auto 1fr auto;width:min(100%,1240px);min-height:100dvh;margin:0 auto;padding:0 clamp(18px,4vw,52px);display:grid}.site-header{justify-content:space-between;align-items:center;gap:24px;min-height:72px;display:flex}.brand{color:var(--accent);font-family:var(--font-display);letter-spacing:-.01em;align-items:center;gap:8px;font-size:1.125rem;font-weight:600;text-decoration:none;display:inline-flex}.brand-key{color:var(--accent);font-family:var(--font-hand);letter-spacing:-.03em;font-size:.9rem;font-weight:650;display:inline-block;transform:rotate(-5deg)}.header-actions{align-items:center;gap:clamp(12px,2.5vw,28px);display:flex}.layout-label,.text-button,.mode-subtitle,.control-label,.focus-hint,.hand-label,.site-footer,.tutorial-topline{color:var(--muted);font-family:var(--font-body);letter-spacing:.01em;font-size:.76rem}.layout-label{color:var(--accent);font-family:var(--font-display);font-weight:600}.text-button{font-family:var(--font-display);cursor:pointer;transition:color .18s var(--ease);background:0 0;padding:7px 0;font-size:.9rem;font-weight:500}.text-button:hover{color:var(--text)}.practice-main{align-self:center;width:100%;padding:clamp(22px,4vh,44px) 0 clamp(28px,4vh,44px)}.practice-toolbar{justify-content:space-between;align-items:center;gap:24px;margin-bottom:clamp(20px,3vh,34px);display:flex}.mode-label{color:var(--accent);font-family:var(--font-body);align-items:baseline;gap:12px;font-size:.9rem;display:flex}.mode-label>span:first-child{font-family:var(--font-display);font-weight:600}.mode-subtitle{color:var(--faint)}.word-count-control{border-radius:var(--radius-control);background:color-mix(in srgb, var(--text) 5%, transparent);align-items:center;gap:3px;padding:4px;display:flex}.control-label{margin:0 8px 0 6px}.word-count-control button{border-radius:calc(var(--radius-control) - 2px);min-width:36px;color:var(--muted);font-family:var(--font-display);font-variant-numeric:tabular-nums;cursor:pointer;background:0 0;padding:6px 8px;font-weight:550;transition:background-color .14s,color .14s}.word-count-control button:hover{color:var(--text)}.word-count-control button.selected{background:var(--surface);color:var(--text);box-shadow:0 1px 2px #1c1b1724}.typing-layout{display:block}.prompt-column{min-width:0}.live-stats{align-items:start;gap:clamp(24px,4vw,48px);min-height:38px;margin-bottom:15px;display:flex}.stat{font-family:var(--font-display);align-items:baseline;gap:7px;display:flex}.stat strong{color:var(--accent);font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:650}.stat span{color:var(--faint);font-size:.68rem}.typing-stage{border:1px solid var(--line);border-radius:var(--radius-surface);background:var(--surface);min-height:166px;box-shadow:var(--shadow);cursor:text;transition:border-color .22s var(--ease), box-shadow .22s var(--ease);padding:clamp(18px,2.5vw,26px) clamp(18px,3vw,30px) 16px}.typing-stage.is-focused{border-color:color-mix(in srgb, var(--accent) 40%, var(--line));box-shadow:var(--shadow-lift)}.prompt-text{height:3.1em;color:var(--faint);font-family:var(--font-body);font-variant-ligatures:none;letter-spacing:-.025em;overflow-wrap:break-word;white-space:pre-wrap;font-size:clamp(1.62rem,2.8vw,2.35rem);font-weight:520;line-height:1.55;position:relative;overflow:hidden}.prompt-character{transition:color 90ms linear;position:relative}.prompt-character.correct{color:var(--text)}.prompt-character.incorrect{color:var(--error);background:var(--error-soft);border-radius:3px}.prompt-character.current{color:var(--text)}.prompt-character.current:before{content:"";background:var(--accent);border-radius:2px;width:2px;animation:1.05s step-end infinite caret-blink;position:absolute;top:.08em;bottom:.06em;left:-.07em}.prompt-character.is-space{width:.58em;display:inline-block}.focus-hint{font-family:var(--font-hand);transition:color .18s var(--ease);margin:14px 0 0;font-weight:500}.typing-stage.is-focused .focus-hint{color:var(--accent)}.guidance-zone{grid-template-columns:minmax(0,1fr) 380px;grid-template-areas:"keyboard hands";align-items:center;gap:clamp(24px,4vw,48px);width:100%;margin:clamp(16px,2.5vh,26px) auto 0;display:grid}.guidance-zone>.keyboard{grid-area:keyboard}.guidance-zone>.hands-guide{grid-area:hands;grid-template-columns:minmax(140px,1fr) 44px minmax(140px,1fr);gap:0;min-height:148px;margin-top:0}.guidance-zone>.keyboard .keycap{height:clamp(30px,3vw,38px)}.guidance-zone>.keyboard .space-key{height:30px}.keyboard{-webkit-user-select:none;user-select:none;gap:clamp(4px,.65vw,8px);width:100%;display:grid}.keyboard-row{justify-content:center;gap:clamp(4px,.65vw,8px);display:flex}.keyboard-row.row-2{width:95%;margin-inline:auto}.keyboard-row.row-3{width:89%;margin-inline:auto}.keycap{border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface);min-width:0;height:clamp(34px,5.4vw,52px);color:var(--muted);font-family:var(--font-display);text-transform:uppercase;border-bottom-width:2px;flex:1 1 0;place-items:center;font-size:clamp(.7rem,1.4vw,.96rem);font-weight:600;line-height:1;transition:transform .15s cubic-bezier(.16,1,.3,1),background-color .15s,border-color .15s,color .15s,opacity .15s;display:grid;position:relative;box-shadow:0 1px 2px #1c1b170d}.keycap.uses-current-finger{border-color:color-mix(in srgb, var(--accent) 32%, var(--line));background:var(--accent-soft);color:var(--accent-deep)}.keycap.is-highlighted,.keycap.is-target{border-color:var(--accent);background:var(--accent);color:var(--accent-ink);transform:translateY(-4px)}.keycap.is-target{box-shadow:0 2px 0 color-mix(in srgb, var(--accent-deep) 72%, transparent), 0 8px 18px -10px color-mix(in srgb, var(--accent) 65%, transparent)}.keycap.is-error:not(.is-target){border-color:var(--error);background:var(--error);color:#fff;animation:.22s key-error}.homing-bump{opacity:.7;background:currentColor;border-radius:2px;width:10px;height:2px;position:absolute;bottom:5px}.space-row{margin-top:2px}.space-key{text-transform:lowercase;max-width:46%;height:clamp(30px,4vw,40px)}.hands-guide{-webkit-user-select:none;user-select:none;grid-template-columns:minmax(160px,1fr) minmax(64px,.35fr) minmax(160px,1fr);align-items:end;gap:clamp(8px,2vw,24px);min-height:158px;margin-top:clamp(16px,3vh,28px);display:grid}.hand-map{min-width:0}.hand-label{text-align:center;margin-bottom:4px;display:block}.hand-silhouette{width:160px;height:132px;margin:0 auto;position:relative}.hand-wrist,.hand-palm,.hand-finger,.hand-thumb{border:1px solid var(--line);background:var(--surface);transition:transform .16s cubic-bezier(.16,1,.3,1),background-color .16s,border-color .16s,box-shadow .16s;position:absolute;box-shadow:0 1px 2px #1c1b170a}.hand-wrist{z-index:0;border-radius:0 0 18px 18px;width:62px;height:30px;bottom:0;left:49px}.hand-palm{z-index:1;border-radius:28px 28px 34px 34px;width:126px;height:62px;bottom:15px;left:17px}.hand-finger,.hand-thumb{z-index:2;border-radius:16px 16px 9px 9px;width:28px}.hand-finger{border-bottom-color:#0000;bottom:70px}.hand-finger.finger-pinky{height:48px}.hand-finger.finger-ring{height:64px}.hand-finger.finger-middle{height:76px}.hand-finger.finger-index{height:69px}.hand-left .finger-pinky,.hand-right .finger-index{left:20px}.hand-left .finger-ring,.hand-right .finger-middle{left:48px}.hand-left .finger-middle,.hand-right .finger-ring{left:76px}.hand-left .finger-index,.hand-right .finger-pinky{left:104px}.hand-thumb{width:27px;height:60px;bottom:30px}.hand-left .hand-thumb{transform-origin:50% 88%;left:124px;transform:rotate(46deg)}.hand-right .hand-thumb{transform-origin:50% 88%;left:9px;transform:rotate(-46deg)}.finger-nail{border:1px solid color-mix(in srgb, var(--muted) 52%, transparent);border-radius:8px 8px 5px 5px;width:12px;height:15px;position:absolute;top:8px;left:50%;transform:translate(-50%)}.hand-finger.is-active,.hand-thumb.is-active{border-color:var(--accent);border-bottom-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent)}.hand-finger.is-active{transform:translateY(-4px)}.hand-left .hand-thumb.is-active{transform:rotate(46deg)translateY(-4px)}.hand-right .hand-thumb.is-active{transform:rotate(-46deg)translateY(-4px)}.hand-finger.is-active .finger-nail,.hand-thumb.is-active .finger-nail{border-color:var(--accent-deep)}.space-guide{border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface);height:32px;color:var(--faint);font-family:var(--font-display);place-items:center;margin-bottom:20px;font-size:.62rem;transition:transform .16s cubic-bezier(.16,1,.3,1),background-color .16s,border-color .16s,color .16s;display:grid}.space-guide.is-active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-deep);transform:translateY(-4px)}.typing-capture{opacity:0;pointer-events:none;resize:none;border:0;width:1px;height:1px;padding:0;position:fixed;bottom:8px;left:50%}.site-footer{min-height:58px;color:var(--faint);font-family:var(--font-body);justify-content:center;align-items:center;gap:clamp(18px,4vw,42px);display:flex}.site-footer kbd{color:var(--muted);font:inherit}.result-view{border:1px solid var(--line);border-radius:var(--radius-surface);background:var(--surface);min-height:430px;box-shadow:var(--shadow);grid-template-columns:minmax(220px,.75fr) minmax(280px,1fr);grid-template-areas:"primary details""primary message";align-items:center;gap:34px clamp(54px,10vw,140px);padding:clamp(28px,5vw,54px);display:grid}.result-primary{flex-direction:column;grid-area:primary;align-items:flex-start;display:flex}.result-primary span,.result-details dt{color:var(--muted);font-family:var(--font-body);font-size:.72rem}.result-primary strong{color:var(--accent);font-family:var(--font-display);font-variant-numeric:tabular-nums;letter-spacing:-.06em;margin-left:-.08em;font-size:clamp(5rem,14vw,10rem);font-weight:700;line-height:.9}.result-details{grid-area:details;grid-template-columns:repeat(3,1fr);gap:18px;margin:0;display:grid}.result-details div{min-width:0}.result-details dt{margin-bottom:5px}.result-details dd{color:var(--text);font-family:var(--font-display);font-variant-numeric:tabular-nums;margin:0;font-size:clamp(1.5rem,3vw,2.4rem)}.result-message{grid-area:message;align-self:start}.result-message p{max-width:39ch;color:var(--muted);margin:0 0 22px;line-height:1.55}.primary-button,.secondary-button{border-radius:var(--radius-control);cursor:pointer;min-height:42px;font-family:var(--font-display);white-space:nowrap;padding:10px 17px;font-size:.9rem;font-weight:600;transition:transform .12s,background-color .14s,color .14s,border-color .14s}.primary-button{background:var(--accent);color:var(--accent-ink);box-shadow:0 1px 2px #1c1b171f}.primary-button:hover{background:var(--accent-deep)}.secondary-button{border:1px solid var(--line);background:var(--surface);color:var(--text)}.secondary-button:hover{border-color:var(--accent);color:var(--accent-deep)}.tutorial-backdrop{z-index:20;background:color-mix(in srgb, var(--bg) 74%, transparent);-webkit-backdrop-filter:blur(16px);place-items:center;padding:clamp(12px,3vw,34px);display:grid;position:fixed;inset:0}.tutorial-panel{border:1px solid var(--line);border-radius:var(--radius-surface);background:var(--surface);width:min(100%,1080px);max-height:calc(100dvh - 32px);box-shadow:var(--shadow-lift);padding:clamp(20px,4vw,46px);overflow:auto}.tutorial-topline{color:var(--accent);font-family:var(--font-display);justify-content:space-between;align-items:center;gap:20px;font-weight:600;display:flex}.tutorial-progress{color:var(--faint);font-family:var(--font-body);align-items:center;gap:18px;margin-top:22px;font-size:.72rem;display:flex}.tutorial-progress span{padding-left:18px;position:relative}.tutorial-progress span:before{content:"";border:1px solid var(--line);background:var(--surface);border-radius:3px;width:9px;height:9px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.tutorial-progress span.is-current{color:var(--text)}.tutorial-progress span.is-current:before,.tutorial-progress span.is-complete:before{border-color:var(--accent);background:var(--accent-soft)}.tutorial-copy{max-width:720px;margin:clamp(20px,3vh,30px) 0 18px}.tutorial-copy h1{color:var(--text);font-family:var(--font-display);letter-spacing:-.025em;margin:0;font-size:clamp(2rem,4.2vw,3.6rem);font-weight:600;line-height:1.05}.tutorial-copy p{max-width:62ch;color:var(--muted);margin:14px 0 0;font-size:clamp(.92rem,1.5vw,1.05rem);line-height:1.6}.tutorial-type-area{border:1px solid var(--line);border-radius:var(--radius-control);background:var(--bg);cursor:text;margin-bottom:clamp(22px,3vh,32px);padding:18px 20px 16px}.tutorial-type-label{color:var(--faint);font-family:var(--font-display);margin-bottom:8px;font-size:.68rem;font-weight:600;display:block}.tutorial-sequence{min-height:1.25em;color:var(--faint);font-family:var(--font-body);font-variant-ligatures:none;letter-spacing:-.02em;flex-wrap:wrap;align-items:baseline;gap:.08em;font-size:clamp(1.8rem,4vw,2.9rem);font-weight:650;line-height:1.2;display:flex}.tutorial-sequence-character{text-align:center;min-width:.62em;transition:color .1s,background-color .1s;position:relative}.tutorial-sequence-character.correct{color:var(--text)}.tutorial-sequence-character.current{color:var(--accent)}.tutorial-sequence-character.current:after{content:"";background:var(--accent);border-radius:3px;height:3px;position:absolute;bottom:-.12em;left:.08em;right:.08em}.tutorial-sequence-character.current.is-error{color:var(--error);animation:.22s key-error}.tutorial-sequence-character.current.is-error:after{background:var(--error)}.tutorial-sequence-character.is-space{border:1px solid var(--line);letter-spacing:0;vertical-align:middle;border-radius:7px;min-width:3.7em;padding:.32em .7em;font-size:.34em}.tutorial-sequence-character.is-space.current{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-deep)}.tutorial-sequence-character.is-space.current:after{display:none}.tutorial-feedback{min-height:1.4em;color:var(--muted);font-family:var(--font-hand);margin:12px 0 0;font-size:.82rem;line-height:1.4}.tutorial-feedback.is-error{color:var(--error)}.tutorial-feedback.is-complete{color:var(--accent)}.tutorial-demo{grid-template-columns:minmax(170px,.36fr) minmax(480px,1fr);grid-template-areas:"callout keyboard""callout hands";align-items:center;gap:20px clamp(34px,6vw,72px);display:grid}.tutorial-callout{border-left:1px solid var(--line);grid-area:callout;align-self:center;padding-left:20px}.demo-key{color:var(--accent);font-family:var(--font-display);letter-spacing:-.08em;margin:0 0 8px -.08em;font-size:3.4rem;font-weight:720;line-height:1;display:block}.tutorial-callout strong{font-family:var(--font-display);font-size:.94rem;font-weight:600;display:block}.tutorial-callout p{max-width:25ch;color:var(--muted);margin:7px 0 0;font-size:.82rem;line-height:1.45}.tutorial-demo .keyboard{grid-area:keyboard}.tutorial-demo .hands-guide{grid-area:hands;min-height:112px;margin-top:0}.tutorial-demo .hand-silhouette{transform-origin:bottom;margin-top:-22px;margin-bottom:-18px;transform:scale(.74)}.tutorial-footer{color:var(--faint);font-family:var(--font-body);justify-content:space-between;align-items:center;gap:24px;margin-top:18px;font-size:.7rem;display:flex}.tutorial-footer kbd{color:var(--muted);font:inherit}@keyframes caret-blink{0%,52%{opacity:1}53%,to{opacity:0}}@keyframes key-error{0%,to{transform:translate(0)}35%{transform:translate(-4px)}70%{transform:translate(4px)}}@media (width<=800px){.app-shell{padding-inline:18px}.site-header{min-height:64px}.layout-label,.header-actions .text-button:last-child{display:none}.practice-main{align-self:start;padding-top:24px}.prompt-text{height:4.65em;font-size:clamp(1.35rem,5.7vw,1.8rem)}.guidance-zone{grid-template-columns:1fr;grid-template-areas:"hands""keyboard";gap:10px;margin-top:18px}.guidance-zone>.hands-guide{grid-template-columns:1fr 58px 1fr;gap:10px;min-height:128px}.keycap{height:clamp(31px,8.5vw,42px)}.hands-guide{grid-template-columns:1fr 58px 1fr;gap:10px;min-height:138px}.hand-label{font-size:.62rem}.hand-silhouette{transform-origin:bottom;margin-bottom:-8px;transform:scale(.86)}.result-view{grid-template-columns:1fr;grid-template-areas:"primary""details""message";align-content:center;gap:34px;min-height:470px}.result-primary strong{font-size:clamp(5rem,30vw,8rem)}.tutorial-panel{min-height:calc(100dvh - 24px)}.tutorial-demo{grid-template-columns:1fr;grid-template-areas:"callout""keyboard""hands";gap:20px}.tutorial-callout{grid-template-columns:auto 1fr;grid-template-areas:"key label""key hint";align-items:center;column-gap:18px;min-height:70px;display:grid}.demo-key{grid-area:key;margin-bottom:0}.tutorial-callout strong{grid-area:label}.tutorial-callout p{grid-area:hint;margin-top:2px}.tutorial-demo .hands-guide{min-height:104px}.tutorial-footer{align-items:flex-end}}@media (width<=520px){.header-actions{gap:12px}.practice-toolbar{align-items:flex-start;margin-bottom:28px}.mode-label{flex-direction:column;gap:3px}.control-label{display:none}.live-stats{gap:18px}.stat{flex-direction:column;align-items:flex-start;gap:1px}.typing-stage{min-height:190px}.keyboard,.keyboard-row{gap:3px}.keycap{border-radius:6px;height:clamp(28px,8.7vw,38px);font-size:.68rem}.space-key{max-width:56%}.hands-guide{grid-template-columns:1fr 42px 1fr;gap:0;min-height:112px}.hand-silhouette{margin:-28px auto -14px;transform:scale(.68)}.space-guide{height:28px;margin-bottom:15px;font-size:.54rem}.site-footer{justify-content:space-between;gap:10px;font-size:.62rem}.site-footer span:last-child{display:none}.tutorial-backdrop{padding:6px}.tutorial-panel{border-radius:var(--radius-surface);min-height:calc(100dvh - 12px);max-height:calc(100dvh - 12px);padding:18px 15px}.tutorial-topline>span{font-size:.68rem}.tutorial-copy{margin:16px 0 14px}.tutorial-copy h1{font-size:clamp(1.85rem,10vw,2.7rem)}.tutorial-copy p{margin-top:9px;font-size:.86rem}.tutorial-progress{gap:10px;margin-top:15px;font-size:.62rem}.tutorial-progress span{padding-left:14px}.tutorial-type-area{margin-bottom:16px;padding:13px 12px 12px}.tutorial-sequence{font-size:clamp(1.6rem,8vw,2.15rem)}.tutorial-demo{gap:14px}.tutorial-callout{min-height:54px;padding-left:12px}.demo-key{font-size:2.6rem}.tutorial-demo .hands-guide{min-height:72px;margin-top:-14px}.tutorial-demo .hand-label{display:none}.tutorial-demo .hand-silhouette{margin:-44px auto -28px;transform:scale(.56)}.tutorial-footer{align-items:center;margin-top:14px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (prefers-reduced-transparency:reduce){.tutorial-backdrop{background:var(--bg);-webkit-backdrop-filter:none}}
