@font-face{font-family:Inter;src:url(../fonts/inter-v1.woff2) format("woff2");font-weight:100 900;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(../fonts/jbmono-v1.woff2) format("woff2");font-weight:100 800;font-display:swap}:root,[data-theme=midnight]{--bg:#0e1116;--surface:#151922;--surface-2:#1c212b;--line:#262d39;--text:#e7eaf0;--sub:#798498;--sub-2:#9aa4b6;--accent:#3ee6a8;--accent-ink:#04261a;--err:#ff6b6b;--warn:#ffc35a;--good:#3ee6a8;--shadow:0 20px 50px rgba(0,0,0,.35);--heat-good:62,230,168;--heat-bad:255,107,107;color-scheme:dark}[data-theme=paper]{--bg:#f6f4ee;--surface:#ffffff;--surface-2:#eeebe3;--line:#e0dbcf;--text:#1e2228;--sub:#6a6e77;--sub-2:#5f646d;--accent:#0b8f63;--accent-ink:#ffffff;--err:#d43d3d;--warn:#b7791f;--good:#0b8f63;--shadow:0 18px 40px rgba(60,50,30,.12);--heat-good:11,143,99;--heat-bad:212,61,61;color-scheme:light}[data-theme=graphite]{--bg:#1e1f22;--surface:#26282c;--surface-2:#2e3035;--line:#383b41;--text:#dcdcd8;--sub:#8e9094;--sub-2:#a3a5a9;--accent:#ff8f6b;--accent-ink:#2a120a;--err:#ff5d73;--warn:#ffc35a;--good:#7bd88f;--shadow:0 20px 50px rgba(0,0,0,.35);--heat-good:123,216,143;--heat-bad:255,93,115;color-scheme:dark}[data-theme=ocean]{--bg:#0a1828;--surface:#0f2136;--surface-2:#142a44;--line:#1d3654;--text:#dcebf8;--sub:#708ca9;--sub-2:#93acc6;--accent:#4fc3f7;--accent-ink:#04202e;--err:#ff7a90;--warn:#ffd166;--good:#4fc3f7;--shadow:0 20px 50px rgba(0,0,0,.4);--heat-good:79,195,247;--heat-bad:255,122,144;color-scheme:dark}[data-theme=ember]{--bg:#18110f;--surface:#211815;--surface-2:#2a1f1b;--line:#3a2b25;--text:#f4e6da;--sub:#9a7e72;--sub-2:#bba090;--accent:#ff7a45;--accent-ink:#2b0f03;--err:#ff4d6d;--warn:#ffc35a;--good:#ffb36b;--shadow:0 20px 50px rgba(0,0,0,.4);--heat-good:255,179,107;--heat-bad:255,77,109;color-scheme:dark}[data-theme=meadow]{--bg:#edf3ea;--surface:#ffffff;--surface-2:#e2ebde;--line:#d1dccc;--text:#1c2a1e;--sub:#607062;--sub-2:#526354;--accent:#2b8a3e;--accent-ink:#ffffff;--err:#d9480f;--warn:#b7791f;--good:#2b8a3e;--shadow:0 18px 40px rgba(30,60,30,.12);--heat-good:43,138,62;--heat-bad:217,72,15;color-scheme:light}[data-theme=dusk]{--bg:#16131e;--surface:#1f1b29;--surface-2:#272233;--line:#332d42;--text:#ebe6f6;--sub:#89829c;--sub-2:#ada5c2;--accent:#b794f6;--accent-ink:#1e0f38;--err:#ff6b8b;--warn:#ffd166;--good:#b794f6;--shadow:0 20px 50px rgba(0,0,0,.4);--heat-good:183,148,246;--heat-bad:255,107,139;color-scheme:dark}[data-theme=contrast]{--bg:#000000;--surface:#0b0b0b;--surface-2:#151515;--line:#3a3a3a;--text:#ffffff;--sub:#a8a8a8;--sub-2:#d6d6d6;--accent:#ffd400;--accent-ink:#000000;--err:#ff4545;--warn:#ffd400;--good:#4dff88;--shadow:none;--heat-good:77,255,136;--heat-bad:255,69,69;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:400 16px/1.6 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;min-height:100vh;display:flex;flex-direction:column;transition:background-color .25s,color .25s;overflow-x:hidden}a{color:var(--accent);text-underline-offset:3px}a:hover{color:var(--text)}img,svg{max-width:100%}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}h1,h2,h3,h4{line-height:1.2;margin:0 0 .6em;letter-spacing:-.015em;font-weight:700;text-wrap:balance}h1{font-size:clamp(1.9rem,4.5vw,2.8rem)}h2{font-size:clamp(1.4rem,3vw,1.9rem)}h3{font-size:1.12rem}p{margin:0 0 1em}.sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip{position:absolute;left:-999px;top:8px;z-index:100;background:var(--accent);color:var(--accent-ink);padding:10px 14px;border-radius:8px;font-weight:600}.skip:focus{left:12px}.wrap{width:100%;max-width:1120px;margin:0 auto;padding:0 20px}.muted{color:var(--sub-2)}.small{font-size:.86rem}.mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}main{flex:1}.top{border-bottom:1px solid transparent}.top__in{display:flex;align-items:center;gap:18px;height:68px}.logo{display:flex;align-items:center;gap:10px;color:var(--text);text-decoration:none;font-weight:700;font-size:1.18rem;letter-spacing:-.02em;flex:none}.logo svg{width:30px;height:30px;flex:none}.logo:hover{color:var(--text)}.logo b{color:var(--accent);font-weight:700}.nav{display:flex;align-items:center;gap:2px;margin-left:8px}.nav a{color:var(--sub-2);text-decoration:none;padding:8px 12px;border-radius:8px;font-size:.93rem;font-weight:500;transition:color .15s,background .15s}.nav a:hover{color:var(--text);background:var(--surface)}.nav a[aria-current=page]{color:var(--text)}.nav a[aria-current=page]:after{content:"";display:block;height:2px;border-radius:2px;background:var(--accent);margin-top:3px}.top__tools{margin-left:auto;display:flex;align-items:center;gap:6px}.icon-btn{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:10px;border:0;background:transparent;color:var(--sub-2);cursor:pointer;transition:color .15s,background .15s}.icon-btn:hover{color:var(--text);background:var(--surface)}.icon-btn svg{width:20px;height:20px}.menu-btn{display:none}@media (max-width:860px){.menu-btn{display:inline-grid}.nav{position:fixed;inset:68px 0 auto;z-index:60;flex-direction:column;align-items:stretch;gap:0;margin:0;padding:8px 16px 18px;background:var(--bg);border-bottom:1px solid var(--line);box-shadow:var(--shadow);transform:translateY(-8px);opacity:0;visibility:hidden;transition:opacity .18s,transform .18s,visibility .18s}.nav.open{opacity:1;visibility:visible;transform:none}.nav a{padding:14px 8px;border-bottom:1px solid var(--line);font-size:1rem}.nav a[aria-current=page]:after{display:none}.nav a[aria-current=page]{color:var(--accent)}}body.typing-active .top,body.typing-active .cfg,body.typing-active .foot,body.typing-active .below,body.typing-active .test-hint{opacity:0;pointer-events:none;transition:opacity .25s}.top,.cfg,.foot,.below,.test-hint{transition:opacity .25s}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--text);font-weight:600;font-size:.93rem;cursor:pointer;text-decoration:none;transition:background .15s,border-color .15s,transform .15s}.btn:hover{border-color:var(--sub);color:var(--text)}.btn:active{transform:translateY(1px)}.btn svg{width:18px;height:18px;flex:none}.btn--accent{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn--accent:hover{filter:brightness(1.07);color:var(--accent-ink);border-color:var(--accent)}.btn--ghost{background:transparent}.btn--sm{min-height:36px;padding:0 12px;font-size:.85rem;border-radius:8px}.btn-row{display:flex;flex-wrap:wrap;gap:10px}.chip{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:0 9px;border-radius:8px;border:0;background:transparent;color:var(--sub);font-size:.84rem;font-weight:500;cursor:pointer;transition:color .15s,background .15s;white-space:nowrap}.chip:hover{color:var(--text)}.chip[aria-pressed=true],.chip.on{color:var(--accent)}.chip svg{width:15px;height:15px}.kbd,kbd{display:inline-block;font:500 .78rem/1 JetBrains Mono,monospace;padding:4px 6px;border-radius:5px;background:var(--surface-2);color:var(--sub-2);border:1px solid var(--line);border-bottom-width:2px}select,.input{min-height:42px;padding:0 12px;border-radius:9px;border:1px solid var(--line);background:var(--surface);color:var(--text)}textarea.input{padding:12px;min-height:140px;width:100%;resize:vertical;line-height:1.5}select:focus,.input:focus{outline:none;border-color:var(--accent)}label{font-size:.9rem}.cfg{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 6px;margin:6px auto 0;padding:6px 10px;border-radius:12px;background:var(--surface);width:max-content;max-width:100%}.cfg .sep{width:1px;height:20px;background:var(--line);margin:0 2px}.cfg select{min-height:34px;border:0;background:transparent;color:var(--sub);font-size:.86rem;padding:0 6px;cursor:pointer}.cfg select:hover{color:var(--text)}@media (max-width:760px){.cfg{width:100%;justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}.cfg::-webkit-scrollbar{display:none}}.page-title{text-align:center;margin:26px 0 4px}.page-title h1{font-size:1rem;font-weight:600;color:var(--sub-2);letter-spacing:.02em;margin:0}.page-title p{margin:4px 0 0;color:var(--sub);font-size:.88rem}.test{position:relative;max-width:1000px;margin:0 auto;padding:clamp(28px,6vh,64px) 0 10px}.live{display:flex;align-items:baseline;gap:22px;min-height:2.2rem;padding:0 2px;color:var(--accent);font:600 1.5rem/1.2 JetBrains Mono,monospace;font-variant-numeric:tabular-nums}.live span{opacity:0;transition:opacity .2s}.running-any .live span,.live.show span{opacity:1}.live .live-acc,.live .live-wpm{color:var(--sub-2);font-size:1.1rem}.typing{position:relative;outline:none}:root{--fs:1.6rem}#typing{min-height:calc(var(--fs) * 4.65)}#typing.code-host{min-height:calc(var(--fs) * 18)}#cfg:empty{min-height:46px;min-width:min(860px,100%)}#stats{min-height:100vh}[data-tsize=s]{--fs:1.3rem}[data-tsize=m]{--fs:1.6rem}[data-tsize=l]{--fs:2rem}[data-tsize=xl]{--fs:2.5rem}.t-viewport{position:relative;overflow:hidden;font-size:var(--fs);line-height:1.5}.t-words{position:relative;display:flex;flex-wrap:wrap;align-content:flex-start;column-gap:.58em;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace;user-select:none;transition:transform .14s ease;padding-top:.05em}[data-tfont=sans] .t-words{font-family:Inter,system-ui,sans-serif;column-gap:.32em;letter-spacing:.01em}[data-spacing=wide] .t-words{letter-spacing:.08em;column-gap:.9em}.w{position:relative;display:inline-flex;height:1.5em;align-items:center;border-bottom:2px solid transparent;margin-bottom:.12em}.l{color:var(--sub);transition:color .06s}.l.ok{color:var(--text)}.l.err{color:var(--err)}.l.extra{opacity:.72}.l.miss{color:var(--sub);text-decoration:underline dotted var(--err);text-underline-offset:6px}.w.w-err{border-bottom-color:color-mix(in srgb,var(--err) 70%,transparent)}.l.nl{color:var(--sub);opacity:.6;font-size:.8em;margin-left:.15em}.l.nl.ok{color:var(--text);opacity:.45}.l.nl.err{color:var(--err);opacity:1}.br{flex-basis:100%;height:0}.is-code .t-words{column-gap:1ch}.is-code .w{margin-bottom:0}.caret{position:absolute;left:0;top:0;width:2px;height:1.5em;border-radius:2px;background:var(--accent);pointer-events:none;z-index:2}.smooth-caret .caret{transition:transform .09s ease-out}[data-caret=block] .caret:not(.pace){width:var(--cw,.6em);opacity:.35;border-radius:3px}[data-caret=underline] .caret:not(.pace){width:var(--cw,.6em);height:3px!important;margin-top:1.35em;border-radius:2px}.caret.blink{animation:blink 1s step-end .5s infinite}.running .caret.blink{animation:none}@keyframes blink{50%{opacity:0}}.caret.pace{background:var(--sub);opacity:.55;transition:transform .2s linear}.t-input{position:absolute;opacity:0;left:0;top:0;width:100%;height:100%;z-index:-1;resize:none;border:0;padding:0;font-size:16px;pointer-events:none}.t-blur{position:absolute;inset:0;z-index:3;display:grid;place-items:center;border:0;background:color-mix(in srgb,var(--bg) 55%,transparent);color:var(--sub-2);font-size:.95rem;cursor:pointer;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);border-radius:12px;opacity:0;pointer-events:none;transition:opacity .2s}.typing:not(.focused):not(.done):not(.replay) .t-blur.armed{opacity:1;pointer-events:auto}.typing.shake{animation:shake .18s}@keyframes shake{25%{transform:translate(-3px)}75%{transform:translate(3px)}}.test-hint .keys-hint{display:inline}@media (pointer:coarse){.test-hint .keys-hint{display:none}}.test-hint{display:flex;justify-content:center;align-items:center;gap:16px;margin:26px 0 0;color:var(--sub);font-size:.83rem;flex-wrap:wrap}.restart{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:10px;border:0;background:transparent;color:var(--sub);cursor:pointer}.restart:hover{color:var(--text);background:var(--surface)}.restart svg{width:20px;height:20px}.test-meta{display:flex;justify-content:space-between;align-items:center;gap:12px;color:var(--sub);font-size:.85rem;margin-top:14px}.test-meta b{color:var(--sub-2);font-weight:600}.results{max-width:1000px;margin:0 auto;padding:30px 0 10px;animation:rise .35s ease}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.res-top{display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:start}.res-main{display:grid;gap:14px;min-width:170px}.big b{display:block;font:700 clamp(3rem,7vw,4.4rem)/1 "JetBrains Mono",monospace;color:var(--accent);letter-spacing:-.04em;font-variant-numeric:tabular-nums}.big>span,.stat>span{display:block;color:var(--sub);font-size:.82rem;text-transform:lowercase;letter-spacing:.04em}.big.acc b{font-size:clamp(2.2rem,5vw,3rem);color:var(--text)}.badge{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:4px 10px;border-radius:999px;background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);font-size:.8rem;font-weight:600}.badge.pb{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn)}.res-chart{min-height:220px}.res-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:18px 22px;margin-top:22px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.stat b{display:block;font:600 1.45rem/1.15 JetBrains Mono,monospace;color:var(--text);font-variant-numeric:tabular-nums}.stat b small{font-size:.65em;color:var(--sub-2);font-weight:500}.stat .chars b{letter-spacing:-.02em}.stat [data-tip]{cursor:help}.res-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:22px 0 4px}.tabs{display:flex;gap:4px;flex-wrap:wrap;margin:30px 0 16px;border-bottom:1px solid var(--line)}.tab{border:0;background:transparent;color:var(--sub);padding:10px 14px;font-weight:600;font-size:.9rem;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.tab:hover{color:var(--text)}.tab[aria-selected=true]{color:var(--text);border-bottom-color:var(--accent)}.tabpanel{animation:rise .25s ease}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:22px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}@media (max-width:820px){.res-top{grid-template-columns:1fr}.res-main{grid-template-columns:repeat(2,1fr)}.grid2,.grid3{grid-template-columns:1fr}}.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px}.panel h3{font-size:.95rem;color:var(--sub-2);font-weight:600;margin-bottom:12px}.list{list-style:none;margin:0;padding:0}.list li{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid var(--line);font-size:.92rem}.list li:last-child{border-bottom:0}.list .mono{color:var(--text)}.list small{color:var(--sub)}.wordcloud{display:flex;flex-wrap:wrap;gap:6px}.wordcloud span{font:500 .9rem JetBrains Mono,monospace;padding:4px 8px;border-radius:6px;background:var(--surface-2)}.wordcloud span.bad{color:var(--err)}.wordcloud del{color:var(--err);text-decoration:line-through;opacity:.8;margin-left:6px;font-size:.8em}.replay-box{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px}.replay-box .typing{--fs:1.25rem}.replay-box .t-viewport{max-height:none}.chart{width:100%;height:auto;display:block;overflow:visible}.chart .grid line{stroke:var(--line);stroke-width:1}.chart .grid text,.chart .m-label{fill:var(--sub);font-size:11px;font-family:JetBrains Mono,monospace}.chart .line{fill:none;stroke-width:2.4;stroke-linejoin:round;stroke-linecap:round;stroke:var(--accent)}.chart .line.raw{stroke:var(--sub);stroke-width:1.6;stroke-dasharray:3 4}.chart .line.acc{stroke:var(--warn)}.chart .line.avg{stroke:var(--sub-2);stroke-width:1.6}.chart .area{fill:color-mix(in srgb,var(--accent) 12%,transparent);stroke:none}.chart .dot{fill:var(--accent)}.chart .markers path{stroke:var(--err);stroke-width:2;stroke-linecap:round}.chart .hover-line{stroke:var(--sub);stroke-dasharray:2 3}.chart-tip{position:absolute;top:6px;z-index:5;pointer-events:none;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:.8rem;line-height:1.45;white-space:nowrap;opacity:0;transition:opacity .12s;box-shadow:var(--shadow)}.chart-tip.show{opacity:1}.chart-tip b{color:var(--accent)}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:.8rem;color:var(--sub-2);margin-top:6px}.legend i{display:inline-block;width:14px;height:3px;border-radius:2px;background:var(--accent);vertical-align:middle;margin-right:6px}.legend i.raw{background:var(--sub)}.legend i.err{background:var(--err);height:3px}.legend i.acc{background:var(--warn)}.bars{display:flex;align-items:flex-end;gap:6px}.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;min-width:0}.bar{width:100%;max-width:46px;border-radius:6px 6px 2px 2px;background:var(--accent);opacity:.85}.bar-v{font:600 .72rem JetBrains Mono,monospace;color:var(--sub-2);margin-bottom:4px}.bar-l{font-size:.7rem;color:var(--sub);margin-top:6px;white-space:nowrap}.kb{display:grid;gap:6px;font:500 .9rem JetBrains Mono,monospace;justify-content:center;user-select:none}.kb-row{display:flex;gap:6px}.key{--heat:-1;display:grid;place-items:center;width:2.4em;height:2.4em;border-radius:8px;background:var(--surface-2);color:var(--sub-2);border:1px solid var(--line);transition:transform .1s}.key[style*=--heat]{background:color-mix(in srgb,rgb(var(--heat-bad)) calc(var(--heat) * 100%),rgb(var(--heat-good)) calc((1 - var(--heat)) * 100%));color:#0b0b0b;border-color:transparent}.key.space{width:15em}.key.sel{outline:2px solid var(--text);outline-offset:1px}.key.pick{cursor:pointer}.key.pick:hover{transform:translateY(-1px)}@media (max-width:620px){.kb{font-size:.62rem;gap:4px}.kb-row{gap:4px}.key{width:2.25em;height:2.4em;border-radius:6px}.key.space{width:12em}}.heat-legend{display:flex;align-items:center;gap:8px;justify-content:center;font-size:.78rem;color:var(--sub);margin-top:12px}.heat-legend span.g{width:120px;height:8px;border-radius:4px;background:linear-gradient(90deg,rgb(var(--heat-good)),rgb(var(--heat-bad)))}.fingers{display:grid;grid-template-columns:repeat(9,1fr);gap:8px;align-items:end}.finger{text-align:center;font-size:.72rem;color:var(--sub)}.finger .fbar{height:110px;display:flex;align-items:flex-end;justify-content:center}.finger .fbar span{width:70%;border-radius:8px 8px 3px 3px;background:var(--accent)}.finger b{display:block;font:600 .8rem JetBrains Mono,monospace;color:var(--text);margin-top:6px}@media (max-width:620px){.fingers{grid-template-columns:repeat(5,1fr)}}.section{padding-top:clamp(48px,8vw,90px);padding-bottom:clamp(48px,8vw,90px)}.section--tight{padding-top:36px;padding-bottom:36px}.below{border-top:1px solid var(--line);margin-top:56px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:22px}.card h3{margin-bottom:.4em}.card p{color:var(--sub-2);font-size:.94rem;margin:0}.card .ic{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);margin-bottom:14px}.card .ic svg{width:20px;height:20px}.eyebrow{display:inline-block;font:600 .74rem/1 Inter,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:12px}.lead{font-size:1.08rem;color:var(--sub-2);max-width:62ch}.compare{width:100%;border-collapse:collapse;font-size:.92rem}.compare th,.compare td{text-align:left;padding:12px 10px;border-bottom:1px solid var(--line);vertical-align:top}.compare th{color:var(--sub-2);font-weight:600;font-size:.84rem}.compare td:first-child{color:var(--sub-2)}.compare td b{color:var(--good)}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:var(--surface)}.faq details{border-bottom:1px solid var(--line);padding:4px 0}.faq summary{cursor:pointer;list-style:none;padding:14px 0;font-weight:600;display:flex;justify-content:space-between;gap:16px}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";color:var(--accent);font-size:1.3rem;line-height:1}.faq details[open] summary:after{content:"\2212"}.faq details p{color:var(--sub-2);margin:0 0 16px}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px 18px}.kpi b{display:block;font:700 1.7rem/1.1 JetBrains Mono,monospace;color:var(--text);font-variant-numeric:tabular-nums}.kpi b.ac{color:var(--accent)}.kpi span{display:block;color:var(--sub);font-size:.8rem;margin-top:6px}.cal{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,12px);gap:3px;overflow-x:auto;padding-bottom:4px}.cal i{width:12px;height:12px;border-radius:3px;background:var(--surface-2)}.cal i[data-l="1"]{background:color-mix(in srgb,var(--accent) 30%,var(--surface-2))}.cal i[data-l="2"]{background:color-mix(in srgb,var(--accent) 55%,var(--surface-2))}.cal i[data-l="3"]{background:color-mix(in srgb,var(--accent) 80%,var(--surface-2))}.cal i[data-l="4"]{background:var(--accent)}.hist{width:100%;border-collapse:collapse;font-size:.88rem;font-variant-numeric:tabular-nums}.hist th,.hist td{padding:10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}.hist th{color:var(--sub);font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em}.hist td.n{font-family:JetBrains Mono,monospace}.hist tr.pbrow td:first-child{color:var(--warn)}.empty{padding:40px 20px;text-align:center;color:var(--sub-2)}.empty b{display:block;color:var(--text);font-size:1.1rem;margin-bottom:6px}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;justify-content:space-between;margin-bottom:14px}.lessons{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}.lesson{display:flex;flex-direction:column;gap:6px;text-align:left;padding:16px;border-radius:12px;border:1px solid var(--line);background:var(--surface);cursor:pointer;transition:border-color .15s,transform .15s}.lesson:hover{border-color:var(--accent);transform:translateY(-2px)}.lesson b{font-size:.98rem}.lesson span{color:var(--sub);font-size:.82rem}.lesson .keys{font:500 .82rem JetBrains Mono,monospace;color:var(--sub-2)}.lesson.done{border-color:color-mix(in srgb,var(--good) 50%,var(--line))}.lesson.done b:after{content:" \2713";color:var(--good)}.seg{display:inline-flex;padding:4px;border-radius:12px;background:var(--surface);gap:2px;flex-wrap:wrap}.seg button{border:0;background:transparent;color:var(--sub);padding:8px 14px;border-radius:9px;font-weight:600;font-size:.88rem;cursor:pointer}.seg button[aria-selected=true]{background:var(--surface-2);color:var(--text)}.focus-info{display:flex;flex-wrap:wrap;align-items:center;gap:10px;justify-content:center;color:var(--sub-2);font-size:.9rem;margin-top:14px}.focus-info .k{font:600 .9rem JetBrains Mono,monospace;color:var(--accent);background:var(--surface);padding:3px 8px;border-radius:6px}.mini-res{display:flex;flex-wrap:wrap;justify-content:center;gap:26px;padding:22px;margin:20px auto 0;max-width:720px;border-radius:14px;background:var(--surface);border:1px solid var(--line);animation:rise .3s ease}.mini-res .stat{text-align:center}.daily-head{text-align:center;margin:20px auto 6px;max-width:640px}.daily-head #streak,.daily-head .date{display:inline-block;min-height:1.5em}#daily-prev{min-height:1.4em}.focus-info{min-height:2.6em}.daily-head .date{font:600 .82rem JetBrains Mono,monospace;color:var(--accent);letter-spacing:.06em}.streak{display:inline-flex;align-items:center;gap:6px;color:var(--warn);font-weight:600;font-size:.9rem}.share-box{font:500 .92rem/1.6 JetBrains Mono,monospace;white-space:pre-wrap;background:var(--surface-2);border-radius:10px;padding:14px 16px;margin:14px auto;max-width:420px;text-align:left}.article{max-width:740px;margin:0 auto;padding:40px 0 70px}.article h1{margin-bottom:.4em}.article .meta{color:var(--sub);font-size:.88rem;margin-bottom:28px}.article h2{margin-top:1.8em;font-size:1.5rem}.article h3{margin-top:1.4em}.article p,.article li{color:color-mix(in srgb,var(--text) 86%,var(--sub));font-size:1.04rem;line-height:1.75}.article ul,.article ol{padding-left:1.3em}.article li{margin-bottom:.4em}.article code{font:500 .9em JetBrains Mono,monospace;background:var(--surface-2);padding:2px 6px;border-radius:5px}.article .formula{font:500 1rem/1.7 JetBrains Mono,monospace;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:10px;padding:16px 18px;margin:18px 0;overflow-x:auto}.article table{width:100%;border-collapse:collapse;margin:18px 0;font-size:.95rem}.article th,.article td{border-bottom:1px solid var(--line);padding:10px 8px;text-align:left}.article th{color:var(--sub-2);font-size:.85rem}.callout{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px 20px;margin:24px 0}.callout p:last-child{margin:0}.guide-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.guide-list a{display:block;text-decoration:none;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:22px;transition:border-color .15s,transform .15s}.guide-list a:hover{border-color:var(--accent);transform:translateY(-2px)}.guide-list a span{display:block;color:var(--sub-2);font-size:.92rem;margin-top:6px}.crumbs{font-size:.85rem;color:var(--sub);margin-bottom:14px}.crumbs a{color:var(--sub-2);text-decoration:none}.drawer-bg{position:fixed;inset:0;z-index:80;background:#00000073;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}.drawer{position:fixed;top:0;right:0;bottom:0;z-index:81;width:min(440px,100%);background:var(--bg);border-left:1px solid var(--line);box-shadow:var(--shadow);transform:translate(100%);transition:transform .25s ease;display:flex;flex-direction:column}.drawer.open{transform:none}.drawer.open+.drawer-bg,.drawer-bg.show{opacity:1;visibility:visible}.drawer header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}.drawer header h2{font-size:1.15rem;margin:0}.drawer .body{overflow-y:auto;padding:8px 20px 30px}.set{padding:16px 0;border-bottom:1px solid var(--line)}.set h3{font-size:.92rem;margin:0 0 4px}.set p{font-size:.82rem;color:var(--sub);margin:0 0 10px}.opts{display:flex;flex-wrap:wrap;gap:6px}.opts button{border:1px solid var(--line);background:var(--surface);color:var(--sub-2);padding:7px 12px;border-radius:8px;font-size:.84rem;font-weight:500;cursor:pointer}.opts button[aria-pressed=true]{border-color:var(--accent);color:var(--text);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.themes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.theme-btn{display:flex;align-items:center;gap:10px;padding:10px;border-radius:10px;border:1px solid var(--line);cursor:pointer;font-size:.86rem;font-weight:600;text-align:left}.theme-btn[aria-pressed=true]{outline:2px solid var(--accent);outline-offset:1px}.theme-btn i{display:flex;gap:3px}.theme-btn i b{width:12px;height:12px;border-radius:50%}.set input[type=range]{width:100%;accent-color:var(--accent)}.set .row{display:flex;gap:8px;align-items:center}.modal{position:fixed;inset:0;z-index:90;display:grid;place-items:center;padding:20px;background:#00000080}.modal[hidden]{display:none}.modal .box{width:min(560px,100%);background:var(--bg);border:1px solid var(--line);border-radius:16px;padding:22px;box-shadow:var(--shadow);max-height:90vh;overflow:auto}.modal .box h2{font-size:1.2rem}.share-img{width:100%;border-radius:12px;border:1px solid var(--line);margin:8px 0 14px}.consent{position:fixed;left:16px;right:16px;bottom:16px;z-index:85;max-width:560px;margin:0 auto;display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:14px 16px;border-radius:14px;background:var(--surface-2);border:1px solid var(--line);box-shadow:var(--shadow);font-size:.88rem;animation:rise .3s ease}.consent p{margin:0;flex:1 1 260px;color:var(--sub-2)}body.typing-active .consent{opacity:0;pointer-events:none}#toast{position:fixed;left:50%;bottom:26px;z-index:95;transform:translate(-50%,20px);background:var(--surface-2);color:var(--text);border:1px solid var(--line);padding:11px 16px;border-radius:10px;font-size:.9rem;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;max-width:calc(100% - 32px)}#toast.show{opacity:1;transform:translate(-50%)}.foot{border-top:1px solid var(--line);margin-top:40px;padding:34px 0 26px;color:var(--sub);font-size:.88rem}.foot__grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:26px}.foot .foot-h{font-weight:700;color:var(--sub-2);font-size:.8rem;text-transform:uppercase;letter-spacing:.1em;margin-bottom:12px}.foot ul{list-style:none;margin:0;padding:0}.foot li{margin-bottom:8px}.foot a{color:var(--sub-2);text-decoration:none}.foot a:hover{color:var(--accent)}.foot__base{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;border-top:1px solid var(--line);margin-top:26px;padding-top:18px}.foot__base a{color:var(--sub-2);text-decoration:underline;text-decoration-color:var(--line)}@media (max-width:820px){.foot__grid{grid-template-columns:1fr 1fr}}@media (max-width:520px){.foot__grid{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.article .tbl{overflow-x:auto;margin:18px 0;-webkit-overflow-scrolling:touch}.article .tbl table{margin:0}.article .sources{margin-top:2.6em;padding-top:1.2em;border-top:1px solid var(--line)}.article .sources h2{font-size:1.05rem;margin-top:0;color:var(--sub-2)}.article .sources ol{padding-left:1.4em}.article .sources li{font-size:.9rem;line-height:1.55;overflow-wrap:anywhere}.article .learn-h{font-size:1.15rem;margin:34px 0 14px;color:var(--sub-2)}@media (max-width:520px){.article table{font-size:.86rem}.article th,.article td{padding:9px 6px}}.article tbody th{color:inherit;font-size:inherit;font-weight:600}.schedule{list-style:none;padding:0;margin:14px 0 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}.schedule li{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 14px;display:flex;flex-direction:column;gap:2px}.schedule li b{font-size:.8rem;color:var(--sub-2);font-weight:600}.schedule li span{font-size:.95rem}.schedule li.on{border-color:var(--accent)}.schedule li.on b{color:var(--accent)}.daily-new{margin:14px auto 0;max-width:720px;text-align:center;border-color:var(--accent)}#daily-next{margin:6px 0 0;min-height:1.3em}@media (max-width:400px){#daily-next{min-height:2.6em}}
