@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500&family=DM+Mono:wght@400;500&display=swap');
:root{color-scheme:dark;--bg:#323437;--surface:#2c2e31;--ink:#d1d0c5;--muted:#999c9f;--untyped:#777b80;--accent:#b9d38f;--line:#424549;--soft:#393c40;--error:#ec999c;--error-bg:#4c3033;--button:#b9d38f;--button-ink:#283223}
:root[data-theme=light]{color-scheme:light;--bg:#f5f3e9;--surface:#edece2;--ink:#2e4034;--muted:#637464;--untyped:#6a7a6b;--accent:#50703b;--line:#d6dbce;--soft:#e3e8d8;--error:#a5363b;--error-bg:#f4ded8;--button:#50703b;--button-ink:#f6f8ee}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 'DM Mono',monospace}button,input,textarea{font:inherit;color:inherit}button,a{touch-action:manipulation;-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:default;opacity:.45}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}[hidden]{display:none!important}.app-shell{max-width:1250px;min-height:100svh;padding:0 55px;margin:auto;display:flex;flex-direction:column}.site-header{display:flex;align-items:center;gap:15px;padding-top:36px;min-height:94px}.brand{display:flex;align-items:center;gap:9px;text-decoration:none;font:500 30px/1 'DM Sans',sans-serif;letter-spacing:-1.4px;color:var(--ink)}.brand span{color:var(--accent);margin-left:-9px}.brand img{width:29px;height:29px}.brand-note{font-size:10px;color:var(--muted);margin-top:4px}nav{margin-left:auto;display:flex;align-items:center;gap:24px}.text-button{border:0;background:none;display:inline-flex;align-items:center;gap:8px;padding:8px 0;color:var(--muted);font-size:11px}.text-button:hover{color:var(--ink)}.icon-button{background:none;border:0;width:34px;height:34px;display:inline-grid;place-items:center;color:var(--muted);font-size:23px}.icon-button:hover{color:var(--accent)}main{flex:1;display:flex;align-items:center;padding:45px 0 75px}.workspace{width:100%;margin:auto}.controls{display:flex;justify-content:center;align-items:center;gap:25px;margin-bottom:62px}.mode-picker,.duration-picker{display:flex;gap:18px}.duration-picker{border-left:1px solid var(--line);padding-left:25px}.mode-picker button,.duration-picker button{border:0;background:none;color:var(--muted);font-size:12px;padding:6px 3px;min-width:25px}.mode-picker button[aria-pressed=true],.duration-picker button[aria-pressed=true]{color:var(--accent)}.mode-picker button:hover,.duration-picker button:hover{color:var(--ink)}.title-row{display:flex;justify-content:space-between;color:var(--muted);font-size:10px;margin-bottom:8px}.title-row #practice-kind{display:none}.title-row #session-state{margin-left:auto;opacity:0}.prompt-header{display:flex;justify-content:center;align-items:center;position:relative;font-size:12px;color:var(--muted);margin-bottom:25px}.quiet-control{position:absolute;right:0;font-size:10px;gap:6px}.quiet-control svg{width:14px;height:14px}.typing-surface{position:relative;cursor:text;padding:6px 0;min-height:177px}.words-viewport{height:165px;overflow:hidden;position:relative}#words{font:400 29px/55px 'DM Mono',monospace;letter-spacing:-.5px;position:relative;color:var(--untyped);transition:transform .1s ease}.word{display:inline-block;white-space:pre}.char.correct{color:var(--ink)}.char.incorrect{color:var(--error);text-decoration:underline;text-underline-offset:5px}#typing-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;resize:none;cursor:text;font-size:18px;z-index:2}#typing-input:focus{outline:none}.typing-surface:has(#typing-input:focus-visible){outline:1px solid var(--line);outline-offset:12px;border-radius:3px}.focus-cue{position:absolute;bottom:-28px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:10px;color:var(--muted);pointer-events:none}.typing-surface:focus-within .focus-cue{visibility:hidden}.practice-bottom{position:relative;display:flex;justify-content:center;align-items:center;gap:20px;margin-top:46px;font-size:11px;color:var(--muted)}.time-display{position:absolute;left:0;min-width:130px;font-variant-numeric:tabular-nums}#remaining{font:22px 'DM Mono',monospace;color:var(--accent);margin-right:3px}#remaining-label{font-size:10px}#typing-help{position:absolute;right:0;font-size:10px}.restart-button{background:none;border:0;display:flex;align-items:center;gap:8px;color:var(--muted);padding:10px 12px;font-size:11px}.restart-button:hover{color:var(--ink)}.restart-button svg{width:17px;height:17px}.progress-track{height:1px;background:var(--line);margin-top:28px;overflow:hidden}#progress-fill{width:0;height:100%;background:var(--accent);transition:width .2s linear}.beneath-test{display:flex;justify-content:center;margin-top:55px;color:var(--muted);font-size:10px}kbd{font:10px 'DM Mono',monospace;background:var(--surface);padding:2px 6px;border-radius:3px;margin-right:7px}footer{min-height:70px;display:flex;justify-content:space-between;gap:20px;align-items:center;font-size:10px;color:var(--muted)}footer .text-button{font-size:10px}.footer-separator{opacity:.45;margin:0 10px}body.running .site-header,body.running .beneath-test{opacity:0}body.running .quiet-control{opacity:.6}body.running .focus-cue{visibility:hidden}.eyebrow{color:var(--muted);font-size:10px;letter-spacing:1.5px}h1{font:400 29px/1.3 'DM Mono',monospace;letter-spacing:-.8px;margin:12px 0 0}.result-summary{color:var(--muted);font-size:12px;margin:12px 0 0}.result-summary:empty{display:none}.metrics{display:grid;grid-template-columns:1fr 1fr 1fr;gap:25px;margin:32px 0 30px;padding-bottom:30px;border-bottom:1px solid var(--line)}.metrics>div{display:flex;flex-direction:column}.metrics span{font-size:10px;color:var(--muted)}.metrics .metric-name{font-size:13px}.metrics strong{font:400 58px/1.3 'DM Mono',monospace;letter-spacing:-2.5px;color:var(--accent)}.metrics strong span{font:inherit;font-size:34px;color:var(--accent)}.result-insight{display:flex;align-items:center;gap:17px;margin:0 0 25px}.insight-mark{display:none}.result-insight h2{font-size:12px;font-weight:400;margin:0 0 5px;color:var(--muted)}.result-insight p{font-size:12px;color:var(--ink);margin:0}.result-insight button{margin-left:auto;flex-shrink:0}.result-actions{display:flex;align-items:center;gap:28px}.primary-button{background:var(--surface);color:var(--ink);border:0;border-radius:5px;padding:12px 20px;font-size:12px;display:inline-flex;align-items:center;gap:18px}.primary-button:hover{background:var(--accent);color:var(--button-ink)}.saved-note{margin-left:auto;font-size:10px;color:var(--muted)}.metric-explainer{margin-top:25px;color:var(--muted);font-size:10px;max-width:750px}.metric-explainer summary{cursor:pointer;width:fit-content}.metric-explainer p{line-height:1.8}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}dialog{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:10px;max-width:650px;width:calc(100% - 32px);max-height:85svh;padding:30px}dialog::backdrop{background:#111913b8;backdrop-filter:blur(4px)}.dialog-heading{display:flex;align-items:flex-start;gap:20px;justify-content:space-between}.dialog-heading h2{font:400 22px/1.3 'DM Mono',monospace;margin:7px 0 15px}.dialog-intro,dialog>p{font-size:12px;color:var(--muted);line-height:1.8}.privacy-note{font-size:10px!important;color:var(--muted);margin-top:25px}.history-row{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:10px;padding:13px 0;border-bottom:1px solid var(--line);align-items:center;font-size:11px}.history-row time{font-size:10px;color:var(--muted)}.history-row small{font-size:10px;color:var(--muted)}.history-empty{padding:35px 10px;text-align:center;color:var(--muted);font-size:11px}.history-empty span{display:block;font-size:18px;margin-bottom:12px;color:var(--ink)}
@media(min-height:900px){.controls{margin-bottom:75px}}
@media(max-width:900px){.app-shell{padding:0 34px}#words{font-size:26px;line-height:50px}.words-viewport{height:150px}.typing-surface{min-height:162px}.brand-note{display:none}}
@media(max-width:600px){.app-shell{padding:0 23px}.site-header{padding-top:22px;min-height:78px}.brand{font-size:25px}.brand img{width:26px;height:26px}nav{gap:10px}nav .text-button{font-size:10px}main{align-items:flex-start;padding:55px 0 45px}.controls{gap:20px;margin-bottom:48px}.mode-picker,.duration-picker{gap:14px}.duration-picker{padding-left:20px}.mode-picker button,.duration-picker button{font-size:11px}.prompt-header{justify-content:flex-start;margin-bottom:23px;font-size:11px}.quiet-control{font-size:9px}#words{font-size:23px;line-height:43px}.words-viewport{height:172px}.typing-surface{min-height:184px}.practice-bottom{margin-top:50px;justify-content:flex-end}.time-display{min-width:100px}#typing-help{display:none}.focus-cue{font-size:9px}.beneath-test{font-size:9px;margin-top:44px}footer{flex-wrap:wrap;align-items:flex-start;padding:20px 0;font-size:9px;min-height:75px}.metrics{gap:15px}.metrics strong{font-size:43px}.metrics strong span{font-size:25px}.metrics .metric-name{font-size:11px}.metrics span{font-size:9px}.result-insight{flex-wrap:wrap}.result-insight button{margin-left:0}.result-actions{flex-wrap:wrap;gap:12px 20px}.saved-note{margin-left:0;width:100%}#results h1{font-size:25px}.history-row{grid-template-columns:1.3fr 1fr 1fr;font-size:10px}.history-row .history-mode{display:none}dialog{padding:22px}.dialog-heading h2{font-size:19px}}
@media(max-width:360px){.app-shell{padding:0 18px}.brand{font-size:22px}.brand img{width:24px;height:24px}nav{gap:4px}#words{font-size:21px}.focus-cue{font-size:8px}.metrics strong{font-size:36px}.metrics strong span{font-size:22px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;scroll-behavior:auto!important}}

/* A single composited caret follows the glyphs without rebuilding or blinking on each key. */
#caret{position:absolute;top:0;left:0;width:2px;border-radius:2px;background:var(--accent);pointer-events:none;transition:transform 85ms ease-out;will-change:transform}
#caret.resetting{transition:none}
.typing-surface:not(:focus-within) #caret{opacity:0}
.typing-surface:focus-within #caret{animation:caret-blink 1.1s ease-in-out infinite}
.running .typing-surface #caret{animation:none;opacity:1}
@keyframes caret-blink{0%,45%,100%{opacity:1}65%,85%{opacity:0}}
.char{transition:color 100ms ease}
.char.incorrect{text-decoration:none}
#words{transition:transform 100ms ease-out}
.brand img{width:43px;height:31px;margin-right:3px}
.brand{font-size:32px;letter-spacing:-1.1px}
.controls{width:fit-content;margin-left:auto;margin-right:auto;background:var(--surface);border-radius:8px;padding:7px 22px;gap:22px}
.duration-picker{padding-left:22px;border-left:3px solid var(--bg)}
.site-header,.controls,.prompt-header,footer,.beneath-test,#typing-help{transition:opacity 220ms ease}
.running .site-header,.running .controls,.running footer,.running .beneath-test,.running .prompt-header,.running #typing-help{opacity:0}
.running .site-header,.running .controls,.running footer{pointer-events:none}
.typing-surface:has(#typing-input:focus-visible){outline:none}
.progress-track{background:transparent;opacity:.5}
#progress-fill{height:1px}
.restart-button{padding:12px 20px}
.restart-button svg{width:21px;height:21px}
#typing-help{display:none}
.focus-cue{font-size:11px}
@media(max-width:600px){.brand{font-size:27px}.brand img{width:35px;height:27px}.controls{padding:6px 15px;gap:18px}.practice-bottom{justify-content:center}.duration-picker{padding-left:18px}}
@media(prefers-reduced-motion:reduce){#caret,.char,#words{transition:none!important;animation:none!important}}
/* Plus keeps the test itself quiet while placing the invitation at the page edge. */
.upgrade-banner{min-height:40px;background:#e2b714;color:#292b2e;display:flex;justify-content:center;align-items:center;gap:20px;padding:8px 20px;font-size:11px;line-height:1.3;text-align:center}
.upgrade-banner button{border:0;background:#292b2e;color:#f4e5a0;border-radius:4px;padding:7px 12px;font-size:11px;white-space:nowrap}
.upgrade-banner button:hover{background:#151719}
.plus-list{list-style:none;margin:20px 0 27px;padding:0;display:grid;gap:10px;color:var(--ink);font-size:12px}
.plus-list li::before{content:'↗';color:var(--accent);margin-right:12px}
#upgrade-dialog .primary-button{background:var(--accent);color:var(--button-ink)}
#upgrade-status{min-height:1.5em}
.progress-empty{display:grid;gap:14px;padding:32px 0;color:var(--muted);font-size:12px}
.progress-empty strong{font-size:17px;color:var(--ink);font-weight:400}
.progress-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:22px 0}
.progress-cards article{padding:16px;background:var(--bg);border:1px solid var(--line);border-radius:6px}
.progress-cards span{display:block;color:var(--muted);font-size:10px}
.progress-cards strong{display:block;font-size:26px;color:var(--accent);font-weight:400}
.progress-section{border-top:1px solid var(--line);padding:17px 0}
.progress-section h3{font-size:12px;font-weight:400;margin:0 0 10px}
.progress-section p{font-size:11px;color:var(--muted)}
.progress-word-list{display:flex;flex-wrap:wrap;gap:8px}
.progress-word-list span{background:var(--bg);border:1px solid var(--line);padding:4px 8px;border-radius:3px;font-size:11px}
@media(max-width:600px){.upgrade-banner{gap:8px;justify-content:space-between;font-size:9px;padding:8px 12px}.upgrade-banner button{font-size:9px;padding:6px 8px}.progress-cards{gap:6px}.progress-cards article{padding:10px}.progress-cards strong{font-size:20px}}
.account-button{font-size:11px}
#account-dialog{max-width:460px}
#account-form{display:grid;gap:15px;margin:22px 0 15px}
#account-form label{display:grid;gap:6px;color:var(--muted);font-size:11px}
#account-form input{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:5px;background:var(--bg);color:var(--ink);outline:none}
#account-form input:focus{border-color:var(--accent)}
#account-form .primary-button{justify-content:center;margin-top:5px;background:var(--accent);color:var(--button-ink)}
#account-status{min-height:1.5em}
.progress-caption{font-size:11px;color:var(--muted)}
.progress-chart{height:110px;display:flex;gap:3px;align-items:flex-end;padding:7px 0;border-bottom:1px solid var(--line)}
.progress-chart span{flex:1;min-width:3px;max-width:18px;background:var(--accent);border-radius:2px 2px 0 0;opacity:.8}
.progress-chart span:hover{opacity:1}
.progress-section .text-button{margin-top:10px}
body.privacy main{align-items:flex-start}
.privacy-copy{width:100%;max-width:720px}
.privacy-copy h1{margin-top:0}
.privacy-copy h2{font:400 16px/1.4 'DM Mono',monospace;margin:28px 0 8px}
.privacy-copy p,.privacy-copy li{font-size:13px;line-height:1.75}
.privacy-copy a{color:var(--accent)}
.privacy-copy .dated{color:var(--muted);font-size:10px;margin-bottom:0}
.privacy-copy .primary-button{margin-top:8px}

/* Keep the turtle mark in sync with the site's dark/light accent palette. */
.brand img{display:none}
.brand::before{content:"";display:block;flex:none;width:43px;height:31px;margin-right:3px;background:var(--accent);-webkit-mask:url("icon.svg") center/contain no-repeat;mask:url("icon.svg") center/contain no-repeat}
@media(max-width:600px){.brand::before{width:35px;height:27px}}


/* Plus progress dashboard — inherits the site's theme tokens. */
.progress-toolbar,.progress-section-header,.progress-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.progress-toolbar{margin:8px 0 20px}.progress-toolbar .progress-caption{margin:0}
.progress-range{display:flex;align-items:center;gap:4px;background:var(--surface);border:1px solid var(--line);padding:4px;border-radius:9px}
.progress-range button{border:0;border-radius:6px;background:transparent;color:var(--muted);padding:6px 9px;font-size:11px}
.progress-range button[aria-pressed=true]{background:var(--soft);color:var(--accent)}
.progress-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.progress-cards article{min-width:0}
.progress-section-header{margin-bottom:16px}.progress-section-header h3{margin:0}
.progress-section-header span{font-size:11px;color:var(--muted)}
.progress-chart-panel{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:15px 10px;overflow:hidden}
.progress-line-chart{display:block;width:100%;height:auto;min-height:150px;max-height:245px;overflow:visible}
.progress-grid-line{stroke:var(--line);stroke-width:1;stroke-dasharray:4 7}
.progress-trend-line{fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.progress-trend-point{fill:var(--accent);stroke:var(--surface);stroke-width:2}
.progress-actions{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
@media(max-width:540px){.progress-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.progress-toolbar{align-items:flex-start}.progress-range{width:100%;justify-content:space-between}.progress-range button{flex:1}.progress-chart-panel{padding:8px 4px}}

/* Softer, more welcoming account and progress surfaces. */
dialog{border-radius:20px;box-shadow:0 24px 90px #080d0a66;background:radial-gradient(ellipse at 100% 0%,color-mix(in srgb,var(--accent) 10%,transparent),transparent 34%),var(--surface);padding:clamp(24px,4vw,38px)}
dialog::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 8%,transparent) 78%,transparent)}
.dialog-heading{align-items:center}
.dialog-heading h2{font:500 25px/1.2 'DM Sans',sans-serif;letter-spacing:-.8px;margin:7px 0 10px}
.dialog-heading .icon-button{width:38px;height:38px;border:1px solid color-mix(in srgb,var(--line) 75%,transparent);border-radius:50%;background:color-mix(in srgb,var(--bg) 52%,transparent);transition:transform .2s ease,color .2s ease,border-color .2s ease}
.dialog-heading .icon-button:hover{transform:rotate(8deg);border-color:var(--accent)}
.dialog-intro{max-width:58ch}
#account-dialog{max-width:480px;overflow:hidden}
#account-dialog .dialog-heading{padding-right:48px;min-height:66px}
#account-dialog .dialog-heading::after{content:"";position:absolute;right:38px;top:78px;width:48px;height:36px;background:var(--accent);opacity:.82;-webkit-mask:url("icon.svg") center/contain no-repeat;mask:url("icon.svg") center/contain no-repeat;transform:rotate(-8deg)}
#account-dialog .dialog-intro{margin-top:14px}
#account-dialog #account-status{padding:10px 13px;border-radius:12px;background:color-mix(in srgb,var(--accent) 7%,var(--surface));}
#account-dialog #account-status:empty{display:none}
#account-form input{border-radius:12px}
#account-form .primary-button{border-radius:999px;min-height:46px}
#account-form label{font-size:10px;letter-spacing:.06em;text-transform:uppercase}
#progress-dialog{max-width:820px;width:min(820px,calc(100% - 32px))}
#progress-dialog .dialog-heading{padding-bottom:10px}
#progress-dialog .dialog-heading h2{font-size:29px}
.progress-toolbar{margin:6px 0 26px;align-items:center}
.progress-caption{line-height:1.8}
.progress-toolbar .progress-caption{font-size:12px}
.progress-toolbar .progress-caption::before{content:"✳";display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;margin-right:9px;background:color-mix(in srgb,var(--accent) 16%,var(--surface));color:var(--accent);font-size:13px}
.progress-range{background:color-mix(in srgb,var(--bg) 55%,var(--surface));border:1px solid color-mix(in srgb,var(--line) 65%,transparent);border-radius:999px;padding:4px}
.progress-range button{border-radius:999px;padding:7px 13px;transition:background .18s ease,color .18s ease}
.progress-range button[aria-pressed=true]{background:var(--accent);color:var(--button-ink)}
.progress-cards{gap:0;margin:0 0 24px;padding:18px 0;border-top:1px solid color-mix(in srgb,var(--line) 75%,transparent);border-bottom:1px solid color-mix(in srgb,var(--line) 75%,transparent)}
.progress-cards article{padding:3px 18px;background:transparent;border:0;border-left:1px solid color-mix(in srgb,var(--line) 75%,transparent);border-radius:0}
.progress-cards article:first-child{border-left:0;padding-left:0}
.progress-cards span{font-size:10px;letter-spacing:.07em;text-transform:uppercase}
.progress-cards strong{font:500 32px/1.25 'DM Sans',sans-serif;letter-spacing:-1px;margin-top:6px}
.progress-section{border-top:0;padding:15px 0 20px}
.progress-section-header{margin-bottom:10px}
.progress-section-header h3{font:500 16px 'DM Sans',sans-serif;letter-spacing:-.2px}
.progress-section-header span{font-size:10px;letter-spacing:.05em;text-transform:uppercase}
.progress-chart-panel{padding:5px 0;background:transparent;border:0;border-radius:0}
.progress-grid-line{stroke-dasharray:2 8;opacity:.75}
.progress-trend-line{stroke-width:3.5}
.progress-trend-point{stroke:var(--bg);stroke-width:3}
.progress-empty-note{max-width:50ch;padding:17px 0 21px 19px;border-left:2px solid var(--accent);color:var(--ink)}
.progress-word-list{gap:9px}
.progress-word-list span{padding:7px 12px;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line));border-radius:999px;background:color-mix(in srgb,var(--accent) 7%,var(--surface));transition:transform .18s ease,border-color .18s ease}
.progress-word-list span:hover{transform:translateY(-2px);border-color:var(--accent)}
.progress-actions{border-top:1px solid color-mix(in srgb,var(--line) 75%,transparent);padding-top:17px}
.progress-actions .text-button{padding:9px 13px;border-radius:999px;background:color-mix(in srgb,var(--accent) 8%,var(--surface));transition:background .18s ease,color .18s ease}
.progress-actions .text-button:hover{background:var(--accent);color:var(--button-ink)}
.progress-empty{position:relative;overflow:hidden;min-height:160px;padding:25px 20px 25px 96px;border-radius:18px;background:color-mix(in srgb,var(--accent) 8%,var(--surface))}
.progress-empty::before{content:"";position:absolute;left:26px;top:31px;width:46px;height:38px;border-radius:50%;background:var(--accent);opacity:.8;-webkit-mask:url("icon.svg") center/contain no-repeat;mask:url("icon.svg") center/contain no-repeat;transform:rotate(-10deg)}
.progress-empty strong{font:500 21px 'DM Sans',sans-serif;letter-spacing:-.5px;color:var(--ink)}
.progress-empty .primary-button{width:fit-content;border-radius:999px;background:var(--accent);color:var(--button-ink)}
@media(max-width:600px){.dialog-heading h2{font-size:22px}#progress-dialog .dialog-heading h2{font-size:25px}.progress-cards{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:17px}.progress-cards article:nth-child(3){border-left:0;padding-left:0}.progress-cards article{padding-left:13px}.progress-cards strong{font-size:29px}.progress-toolbar{gap:14px}.progress-empty{padding:85px 18px 20px}.progress-empty::before{top:22px;left:20px}}
@media(prefers-reduced-motion:reduce){.dialog-heading .icon-button,.progress-range button,.progress-word-list span,.progress-actions .text-button{transition:none!important}}

/* A TurtleType-styled alternative to the browser's native share sheet. */
#share-dialog{max-width:540px;width:min(540px,calc(100% - 32px));max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow-y:auto;overscroll-behavior:contain}
#share-dialog .dialog-heading{padding-right:40px}
#share-dialog .dialog-heading h2{font-size:28px}
#share-dialog .dialog-intro{margin:5px 0 0}
.share-preview{display:flex;align-items:center;gap:17px;margin:23px 0 19px;padding:17px 19px;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line));border-radius:16px;background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.share-turtle{display:block;flex:0 0 42px;width:42px;height:36px;background:var(--accent);opacity:.9;-webkit-mask:url("icon.svg") center/contain no-repeat;mask:url("icon.svg") center/contain no-repeat;transform:rotate(-8deg)}
.share-preview>div{display:flex;flex-direction:column;gap:5px}
.share-preview strong{font:500 19px 'DM Sans',sans-serif;color:var(--ink);letter-spacing:-.35px}
.share-preview span:not(.share-turtle){font-size:11px;color:var(--muted)}
.share-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.social-share{min-width:0;min-height:54px;display:flex;align-items:center;gap:11px;padding:0 14px;border:1px solid color-mix(in srgb,var(--line) 75%,transparent);border-radius:14px;background:color-mix(in srgb,var(--bg) 28%,var(--surface));color:var(--ink);text-decoration:none;font-size:12px;transition:transform .16s ease,border-color .16s ease,background .16s ease}
.social-share:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 60%,var(--line));background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.social-mark{width:27px;height:27px;display:grid;place-items:center;flex:none;border-radius:9px;background:color-mix(in srgb,var(--ink) 8%,var(--surface));color:var(--ink);font:600 15px/1 'DM Sans',sans-serif}
.facebook-mark{background:#1877f2;color:white;font:700 20px/1 Arial,sans-serif;padding-top:5px}
.linkedin-mark{background:#0a66c2;color:white;font:700 12px/1 Arial,sans-serif}
.whatsapp-mark{background:#25d366;color:#10251a;font-size:19px}
.reddit-mark{background:#ff4500;color:white;font-size:17px}
.telegram-mark{background:#229ed9;color:white;font-size:14px}
.social-arrow{margin-left:auto;color:var(--muted);font-size:12px}
.more-share{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:14px;padding:10px;border:0;border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:11px;cursor:pointer;transition:color .16s ease,background .16s ease}
.more-share:hover{color:var(--ink);background:color-mix(in srgb,var(--accent) 7%,var(--surface))}
@media(max-width:600px){#share-dialog{padding:24px 20px}#share-dialog .dialog-heading h2{font-size:25px}.share-grid{gap:8px}.social-share{padding:0 10px;gap:9px;font-size:11px}.social-mark{width:25px;height:25px}}
@media(prefers-reduced-motion:reduce){.social-share,.more-share{transition:none}}
.share-card-block{display:grid;justify-items:center;gap:11px;margin:20px 0 8px}
.share-card-frame{position:relative;width:min(100%,300px);aspect-ratio:1;border:1px solid var(--line);border-radius:15px;overflow:hidden;background:var(--bg);display:grid;place-items:center}
.share-card-frame img{width:100%;height:100%;object-fit:cover;display:block}
.share-card-frame p{position:absolute;margin:0;padding:12px;color:var(--muted);font-size:10px;text-align:center}
.share-save-button{border:1px solid color-mix(in srgb,var(--accent) 40%,var(--line));border-radius:10px;padding:9px 17px;background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:var(--accent);font:400 11px 'DM Mono',monospace;transition:background .16s ease,color .16s ease}
.share-save-button:hover:not(:disabled){background:var(--accent);color:var(--button-ink)}
.share-save-button:disabled{opacity:.5}
.share-hint{max-width:46ch;margin:0 auto 17px;color:var(--muted);font-size:10px;line-height:1.55;text-align:center}
.more-share:disabled{opacity:.5;cursor:wait}

/* A data-forward test summary inspired by Monkeytype's result hierarchy. */
#results{max-width:1160px;margin:0 auto;width:100%}
#results h1{font:500 clamp(28px,3.5vw,42px)/1.2 'DM Sans',sans-serif;letter-spacing:-1.6px;margin:8px 0 0}
.result-dashboard{display:grid;grid-template-columns:minmax(150px,190px) minmax(0,1fr);gap:30px;margin:30px 0 23px;align-items:stretch}
.score-rail{display:flex;flex-direction:column;justify-content:center;gap:19px}
.score-stat{display:flex;flex-direction:column;line-height:1.05}
.score-stat>span{font:500 13px 'DM Sans',sans-serif;color:var(--muted);letter-spacing:.02em;text-transform:lowercase}
.score-stat strong{font:500 clamp(46px,6vw,72px)/1.05 'DM Sans',sans-serif;letter-spacing:-3px;color:var(--accent);font-variant-numeric:tabular-nums}
.score-stat strong span{font:inherit;letter-spacing:-2px}
.result-trend{min-width:0;padding:14px 0 4px;border-bottom:1px solid var(--line)}
.trend-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;color:var(--muted);font-size:10px;letter-spacing:.04em;text-transform:uppercase}
#result-chart{width:100%;height:auto;display:block;overflow:visible}
.result-chart-grid{stroke:var(--line);stroke-width:1;opacity:.65}
.result-chart-axis{fill:var(--muted);font:10px 'DM Mono',monospace}
.result-chart-area{fill:color-mix(in srgb,var(--accent) 12%,transparent);stroke:none}
.result-chart-line{fill:none;stroke:var(--accent);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.result-chart-dot{fill:var(--accent);stroke:var(--surface);stroke-width:2;vector-effect:non-scaling-stroke}
#result-chart-note{height:150px;display:grid;place-items:center;color:var(--muted);font-size:11px;border-bottom:1px solid var(--line)}
.result-details{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;margin:24px 0 29px}
.result-details>div{display:flex;flex-direction:column;gap:3px;min-width:0}
.result-details span{font-size:10px;color:var(--muted);text-transform:lowercase}
.result-details strong{font:500 clamp(14px,1.6vw,19px)/1.4 'DM Sans',sans-serif;color:var(--accent);overflow-wrap:anywhere}
.result-insight{border-top:1px solid var(--line);padding-top:17px}
.result-actions{padding-top:5px}
@media(max-width:700px){.result-dashboard{grid-template-columns:1fr;gap:17px;margin-top:22px}.score-rail{display:grid;grid-template-columns:1fr 1fr;gap:16px}.score-stat strong{font-size:49px}.result-trend{padding-top:5px}.result-details{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:14px;margin:18px 0 23px}.trend-heading{font-size:9px}#result-chart-note{height:110px}}
.result-details{grid-template-columns:repeat(4,minmax(0,1fr))}
.result-details>div:nth-child(2){grid-column:auto}
.result-actions{gap:24px}
.result-actions .share-cta{min-width:142px;min-height:40px;justify-content:center;text-align:center;padding:0 16px;border:1px solid color-mix(in srgb,var(--accent) 38%,var(--line));border-radius:10px;background:color-mix(in srgb,var(--accent) 13%,var(--surface));color:var(--accent);font:400 11px/1.2 'DM Mono',monospace;box-shadow:none;transition:background .16s ease,border-color .16s ease,color .16s ease}
.result-actions .share-cta:hover{background:var(--accent);border-color:var(--accent);color:var(--button-ink);box-shadow:none}
.result-actions #next-test,.result-actions #repeat-test{padding:10px 0;border-radius:0;background:transparent}
.result-actions #next-test:hover,.result-actions #repeat-test:hover{color:var(--accent)}
@media(max-width:700px){.result-details{grid-template-columns:repeat(2,minmax(0,1fr))}.result-actions{gap:12px 20px}.result-actions .share-cta{width:auto;justify-content:center}}

/* A dedicated, calm home for a typist's profile and progress. */
.account-page .app-shell{max-width:1320px}
.account-page .dashboard-main{display:block;padding:54px 0 76px}
.dashboard-main h1,.dashboard-main h2{font-family:'DM Sans',sans-serif;letter-spacing:-.045em}
.dashboard-title{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:25px}
.dashboard-title h1{font-size:clamp(28px,4vw,42px);line-height:1.1;margin:8px 0 0;font-weight:500}
.eyebrow{font-size:10px;letter-spacing:.13em;color:var(--muted)}
.plan-pill{border:1px solid var(--line);border-radius:999px;padding:6px 12px;color:var(--accent);font-size:10px;text-transform:lowercase}
.profile-card,.dashboard-panel,.dashboard-stats article{border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 76%,transparent);border-radius:16px}
.profile-card{display:grid;grid-template-columns:minmax(260px,1fr) minmax(250px,.72fr);align-items:center;gap:28px;padding:24px 27px;margin-bottom:16px}
.profile-identity{display:flex;align-items:center;gap:18px;min-width:0}
.profile-avatar{width:68px;height:68px;flex:none;display:grid;place-items:center;border-radius:50%;background:color-mix(in srgb,var(--accent) 17%,var(--surface));color:var(--accent);font:500 28px 'DM Sans',sans-serif}
.profile-identity h2{font-size:clamp(21px,3vw,30px);font-weight:500;margin:0 0 2px;overflow-wrap:anywhere}
.profile-identity p,.profile-identity span{display:block;color:var(--muted);font-size:10px;margin:0}
.profile-identity .plan-pill{display:inline-flex;width:max-content;margin-top:8px;color:var(--accent);font-size:10px}
.profile-form{border-left:1px solid var(--line);padding-left:26px;display:grid;gap:7px}
.profile-form>label{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.profile-edit-row{display:flex;align-items:center;gap:8px}
.profile-edit-row>span{color:var(--accent);font-size:14px}
.profile-edit-row input{min-width:0;flex:1;border:1px solid var(--line);border-radius:9px;background:var(--bg);padding:9px 11px;outline:none}
.profile-edit-row input:focus{border-color:var(--accent)}
.profile-edit-row .primary-button{border-radius:9px;padding:8px 14px;background:var(--accent);color:var(--button-ink)}
.profile-help{min-height:1.4em;margin:0;color:var(--muted);font-size:9px}
.dashboard-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.dashboard-stats article{padding:16px 19px;min-width:0}
.dashboard-stats article>span{display:block;color:var(--muted);font-size:10px}
.dashboard-stats strong{display:block;color:var(--accent);font:500 clamp(25px,4vw,36px)/1.2 'DM Sans',sans-serif;font-variant-numeric:tabular-nums}
.dashboard-stats strong small{font:400 12px 'DM Mono',monospace;color:var(--muted)}
.dashboard-panel{padding:22px 24px;min-width:0}
.dashboard-panel-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:15px;margin-bottom:17px}
.dashboard-panel-heading h2{font-size:18px;font-weight:500;margin:3px 0 0}
.dashboard-panel-heading>span{font-size:10px;color:var(--muted)}
#dashboard-chart{width:100%;height:auto;min-height:190px;overflow:visible}
.dashboard-chart-grid{stroke:var(--line);stroke-width:1;stroke-dasharray:3 7}
.dashboard-chart-axis{fill:var(--muted);font:10px 'DM Mono',monospace}
.dashboard-chart-area{fill:color-mix(in srgb,var(--accent) 12%,transparent)}
.dashboard-chart-line{fill:none;stroke:var(--accent);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.dashboard-chart-dot{fill:var(--accent);stroke:var(--surface);stroke-width:2;vector-effect:non-scaling-stroke}
.dashboard-empty{min-height:180px;display:flex;align-items:center;justify-content:center;gap:20px;color:var(--muted)}
.dashboard-turtle{width:43px;height:32px;background:var(--accent);opacity:.8;-webkit-mask:url('icon.svg') center/contain no-repeat;mask:url('icon.svg') center/contain no-repeat;transform:rotate(-8deg)}
.dashboard-empty strong{color:var(--ink);font:500 16px 'DM Sans',sans-serif}
.dashboard-empty p,.dashboard-note{color:var(--muted);font-size:11px;margin:5px 0 10px}
.dashboard-empty .text-button{color:var(--accent)}
.dashboard-lower{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}
.dashboard-words{display:flex;flex-wrap:wrap;gap:8px}
.dashboard-words span{padding:6px 10px;border-radius:999px;background:var(--soft);color:var(--ink);font-size:10px}
.dashboard-history{display:grid}
.dashboard-history-row{display:grid;grid-template-columns:1fr auto auto auto;align-items:center;gap:14px;padding:10px 0;border-top:1px solid var(--line);font-size:10px}
.dashboard-history-row time,.dashboard-history-row small{color:var(--muted)}
.dashboard-history-row strong{color:var(--accent);font-weight:500}
.plus-prompt{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-top:16px;padding:22px 24px;border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:16px;background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.plus-prompt h2{font-size:20px;font-weight:500;margin:5px 0}
.plus-prompt p{font-size:11px;color:var(--muted);margin:0}
.plus-prompt .primary-button,.dashboard-message .primary-button{border-radius:999px;background:var(--accent);color:var(--button-ink);padding:11px 17px;white-space:nowrap}
.dashboard-message{max-width:650px;margin:8vh auto;text-align:center}
.dashboard-message h1{font-size:clamp(28px,5vw,44px);line-height:1.15;font-weight:500;margin:15px 0}
.dashboard-message p{color:var(--muted);font-size:12px;margin:0 0 24px}
.dashboard-message .primary-button{display:inline-flex;text-decoration:none}
.account-page footer{margin-top:auto}
.account-mode-toggle{margin-top:4px}
@media(max-width:740px){.account-page .app-shell{padding:0 22px}.account-page .dashboard-main{padding:35px 0 50px}.profile-card{grid-template-columns:1fr;gap:18px;padding:20px}.profile-form{border-left:0;border-top:1px solid var(--line);padding:16px 0 0}.dashboard-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-lower{grid-template-columns:1fr}.plus-prompt{align-items:flex-start;flex-direction:column}.plus-prompt .primary-button{white-space:normal}}
@media(max-width:440px){.account-page .app-shell{padding:0 15px}.account-page .site-header{padding-top:20px}.account-page .site-header nav{gap:12px}.dashboard-panel{padding:17px 15px}.dashboard-history-row{grid-template-columns:1fr auto auto;gap:8px}.dashboard-history-row small{display:none}.dashboard-title h1{font-size:29px}}

/* Cleaner share preview and a single-plan Plus pricing card. */
#share-dialog{position:relative;width:min(680px,calc(100% - 28px));max-width:680px;max-height:92dvh;padding:26px;overflow-y:auto}
#share-dialog .share-close{position:absolute;top:14px;right:14px;z-index:2}
#share-dialog .share-card-block{width:100%;margin:0 auto 18px;gap:12px}
#share-dialog .share-card-frame{width:min(100%,460px);border-radius:18px}
#share-dialog .share-grid{gap:9px}
#share-dialog .share-hint{display:none}
#upgrade-dialog.pricing-dialog{position:relative;width:min(590px,calc(100% - 28px));max-width:590px;padding:30px;border-radius:24px;background:var(--surface)}
#upgrade-dialog .pricing-close{position:absolute;top:17px;right:17px;z-index:2}
#upgrade-dialog .pricing-card{padding:26px 28px 12px;border:0;border-radius:19px;background:color-mix(in srgb,var(--bg) 18%,var(--surface));text-align:center}
#upgrade-dialog #upgrade-title{max-width:420px;margin:16px auto 20px;font:500 clamp(23px,4vw,31px)/1.2 'DM Sans',sans-serif;letter-spacing:-.8px}
#upgrade-dialog .pricing-amount{display:flex;justify-content:center;align-items:baseline;gap:7px}
#upgrade-dialog .pricing-amount strong{font:500 clamp(55px,10vw,76px)/1 'DM Sans',sans-serif;letter-spacing:-4px;color:var(--ink)}
#upgrade-dialog .pricing-amount span{font-size:16px;color:var(--muted)}
#upgrade-dialog .pricing-billing{margin:10px 0 27px;color:var(--muted);font-size:12px}
#upgrade-dialog .plus-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 20px;margin:0 0 29px;text-align:left;font:12px/1.55 'DM Sans',sans-serif;color:var(--ink)}
#upgrade-dialog .plus-list li{display:flex;align-items:flex-start;gap:9px}
#upgrade-dialog .plus-list li::before{content:'✓';flex:none;margin:0;color:var(--accent);font:500 14px/1.4 'DM Sans',sans-serif}
#upgrade-dialog .pricing-cta{width:100%;min-height:54px;margin:0;border-radius:12px;justify-content:center;gap:10px;font:500 14px 'DM Sans',sans-serif}
#upgrade-dialog .pricing-note{margin:14px 0 0;color:var(--muted);font:11px/1.5 'DM Sans',sans-serif}
#upgrade-dialog .pricing-status{min-height:0;margin:0;color:var(--muted);font-size:11px}
#upgrade-dialog .pricing-status:empty{display:none}
@media(max-width:520px){#share-dialog{padding:20px 15px}#share-dialog .share-card-frame{width:min(100%,390px)}#upgrade-dialog.pricing-dialog{padding:17px}#upgrade-dialog .pricing-card{padding:28px 17px 13px}#upgrade-dialog .plus-list{grid-template-columns:1fr;gap:12px;margin-bottom:23px}}

.site-activity{position:fixed;right:24px;bottom:max(16px,env(safe-area-inset-bottom));z-index:12;display:flex;align-items:center;justify-content:flex-end;gap:12px;width:auto;max-width:calc(100vw - 24px);padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;backdrop-filter:none}
.site-activity-top,.site-activity-main{display:flex;align-items:center}
.site-activity-top{margin:0}
.activity-live{display:inline-flex;align-items:center;gap:5px;padding:0;border:0;border-radius:0;background:transparent;color:var(--accent);font:500 8px/1 'DM Mono',monospace;letter-spacing:.08em;text-transform:uppercase}
.activity-live i{width:5px;height:5px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 13%,transparent);animation:activityPulse 1.8s ease-out infinite}
.site-activity-main{justify-content:flex-start;gap:9px}
.activity-stat{display:flex;min-width:0;flex-direction:row;align-items:baseline;gap:4px}
.activity-stat strong{font:500 12px/1.1 'DM Mono',monospace;letter-spacing:0;color:var(--ink);transition:color .22s ease}
.activity-stat span{color:var(--muted);font:8px 'DM Mono',monospace;letter-spacing:.02em}
.activity-divider{align-self:center;width:1px;height:14px;background:var(--line)}
.site-activity.activity-flash #site-tests-today{color:var(--accent)}
@keyframes activityPulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 36%,transparent)}70%{box-shadow:0 0 0 5px transparent}100%{box-shadow:0 0 0 0 transparent}}
@media(max-width:520px){.site-activity{right:12px;bottom:max(12px,env(safe-area-inset-bottom));gap:8px}.site-activity-main{gap:7px}.activity-stat{flex-wrap:wrap;gap:2px}.activity-stat strong{font-size:11px}.activity-stat span{font-size:7px}}

/* Keep the footer in the viewport and make the live figures part of it. */
body{min-height:100svh;display:flex;flex-direction:column}
.upgrade-banner{flex:none}
.app-shell{width:100%;min-height:0;flex:1;margin:0 auto}
footer{display:grid;grid-template-columns:1fr auto 1fr;align-items:center}
.footer-links{justify-self:end}
.footer-links{white-space:nowrap}
.site-activity{position:static;right:auto;bottom:auto;z-index:auto;gap:12px;width:auto;max-width:100%;padding:0;flex:none}
.site-activity-main{gap:10px}
.activity-live{font-size:9px}
.activity-stat{flex-direction:row;flex-wrap:nowrap;gap:5px}
.activity-stat strong{font-size:16px;letter-spacing:-.4px}
.activity-stat span{font-size:10px}
.activity-divider{height:18px}
#upgrade-dialog .pricing-close{top:8px;right:8px;width:36px;height:36px;border:0;border-radius:50%;outline:none;background:transparent;color:var(--muted);font-size:24px;line-height:1;transition:color .16s ease,background .16s ease}
#upgrade-dialog .pricing-close:hover{color:var(--ink);background:color-mix(in srgb,var(--ink) 7%,transparent)}
#upgrade-dialog .pricing-close:focus-visible{outline:none;box-shadow:none;color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
@media(max-width:600px){main{padding:28px 0 24px}.controls{margin-bottom:32px}.beneath-test{margin-top:32px}footer{grid-template-columns:1fr;justify-items:center;gap:5px;padding:12px 0;min-height:0;text-align:center}.footer-links{justify-self:center}.site-activity{gap:8px}.site-activity-main{gap:7px}.activity-stat{gap:3px}.activity-stat strong{font-size:14px}.activity-stat span{font-size:9px}.activity-divider{height:16px}.footer-links{font-size:9px}.footer-links .text-button{font-size:9px}}
