:root{--bg:#f6f7f4;--surface:#fff;--surface-2:#eef0eb;--text:#1d2420;--muted:#66706a;--border:#d9ddd6;--accent:#13803e;--accent-ink:#fff;--accent-soft:#dff3e6;--warn:#b25e00;--danger:#c0392b;--star:#e6a700;--insert:#2f6fde;--visual:#9b4dca;--replace:#d0453a;--command:#b25e00;--target:#ffd84d;--diff:#fbe3e1;--ok:#e3f4e8;--shadow:0 1px 2px #0000000f, 0 4px 16px #0000000d;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--sans:system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, sans-serif;--radius:10px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#121614;--surface:#1a201d;--surface-2:#232a26;--text:#e4e9e5;--muted:#94a09a;--border:#2f3833;--accent:#3ccf73;--accent-ink:#0b130e;--accent-soft:#1d3326;--insert:#6ea1ff;--visual:#c792ea;--replace:#ff7a6e;--command:#f0a75a;--target:#b8932a;--diff:#3a2321;--ok:#1b3024;--shadow:0 1px 2px #0006;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#121614;--surface:#1a201d;--surface-2:#232a26;--text:#e4e9e5;--muted:#94a09a;--border:#2f3833;--accent:#3ccf73;--accent-ink:#0b130e;--accent-soft:#1d3326;--insert:#6ea1ff;--visual:#c792ea;--replace:#ff7a6e;--command:#f0a75a;--target:#b8932a;--diff:#3a2321;--ok:#1b3024;--shadow:0 1px 2px #0006;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--text);font:15px/1.55 var(--sans);-webkit-font-smoothing:antialiased}a{color:var(--accent)}h1{letter-spacing:-.01em;margin:.2em 0 .4em;font-size:1.7rem;line-height:1.2}h2{font-size:1.25rem}h3{margin:.3em 0;font-size:1.05rem}.muted{color:var(--muted)}.spacer{flex:1}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.topbar{z-index:10;background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:18px;padding:10px 24px;display:flex;position:sticky;top:0}.logo{color:var(--text);align-items:center;gap:8px;font-weight:700;text-decoration:none;display:flex}.logo-mark{background:var(--accent);width:28px;height:28px;color:var(--accent-ink);font:700 13px var(--mono);border-radius:7px;place-items:center;display:inline-grid}.topbar nav{gap:4px;display:flex}.topbar nav a{color:var(--muted);border-radius:6px;padding:6px 10px;font-weight:500;text-decoration:none}.topbar nav a:hover,.topbar nav a.active{color:var(--text);background:var(--surface-2)}.quick{gap:6px;display:flex}select,input[type=file]{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:5px 8px}main{min-height:calc(100vh - 140px)}.page{max-width:1180px;margin:0 auto;padding:24px}.page.narrow{max-width:760px}.lead{color:var(--muted);max-width:62ch;font-size:1.05rem}.crumbs{color:var(--muted);font-size:.9rem}.crumbs a{color:var(--muted)}.footer{text-align:center;color:var(--muted);padding:24px;font-size:.85rem}.btn{font:500 14px var(--sans);color:var(--text);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:7px 12px;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--muted)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.btn.primary:hover{filter:brightness(1.05)}.btn.big{padding:11px 18px;font-size:16px}.btn.danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 40%, var(--border))}.keys{vertical-align:baseline;flex-wrap:wrap;align-items:baseline;gap:2px;display:inline-flex}.key{min-width:1.6em;font:600 .88em/1.6 var(--mono);color:var(--text);background:var(--surface);border:1px solid var(--border);border-bottom-width:2px;border-radius:5px;flex-direction:column;justify-content:center;align-items:center;padding:0 .35em;display:inline-flex}.key-named{font-family:var(--sans);font-size:.8em;font-weight:600}.key-help{border-color:color-mix(in srgb, var(--warn) 55%, var(--border))}.key-combo{font:500 .62em/1.1 var(--sans);color:var(--warn);white-space:nowrap;padding-bottom:2px}.key-dead .key-combo:after{content:" ◌"}.key-var{font-family:var(--mono);color:var(--muted);padding:0 2px;font-size:.85em}.key-gap{width:6px}.badge{text-transform:capitalize;background:var(--surface-2);color:var(--muted);border-radius:99px;padding:1px 8px;font-size:.75rem;font-weight:600;display:inline-block}.level-rookie{color:#1c6b3a;background:#e3f4e8}.level-beginner{color:#23548f;background:#e2eefc}.level-intermediate{color:#8a5a00;background:#fff1d6}.level-advanced{color:#a33a1f;background:#fde4dd}.level-expert{color:#6232a0;background:#eee2fb}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .badge{background:var(--surface-2);filter:saturate(.9)brightness(1.35)}}:root[data-theme=dark] .badge{background:var(--surface-2);filter:saturate(.9)brightness(1.35)}.stars{letter-spacing:0;gap:1px;display:inline-flex}.star{color:var(--border)}.star.on{color:var(--star)}.bar{background:var(--surface-2);border-radius:99px;height:6px;margin:8px 0;overflow:hidden}.bar-fill{background:var(--accent);border-radius:99px;height:100%;transition:width .3s}.hero{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:32px;margin:12px 0 18px;display:flex}.hero h1{font-size:2.1rem}.hero-stats{flex-wrap:wrap;gap:12px;display:flex}.stat-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:88px;box-shadow:var(--shadow);flex-direction:column;align-items:center;padding:12px 14px;display:flex}.stat-box strong{font-size:1.5rem}.stat-box span{color:var(--muted);font-size:.82rem}.section-title{margin-top:28px}.cards{grid-template-columns:repeat(auto-fill,minmax(min(250px,100%),1fr));gap:14px;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);box-shadow:var(--shadow);flex-direction:column;padding:16px;text-decoration:none;transition:transform .12s,border-color .12s;display:flex;position:relative}a.card:hover{border-color:var(--accent);transform:translateY(-2px)}.card p{color:var(--muted);flex:1;margin:0 0 10px;font-size:.92rem}.card-top{justify-content:space-between;align-items:center;display:flex}.card-icon{font-size:1.6rem}.card-num{font:600 .8rem var(--mono);color:var(--muted)}.card-levels{color:var(--muted);text-transform:capitalize;font-size:.78rem}.card-foot{color:var(--muted);justify-content:space-between;font-size:.85rem;display:flex}.card.locked{opacity:.55}.card .lock{font-size:.85rem;position:absolute;top:16px;right:36px}.ex-list{gap:8px;margin:16px 0;padding:0;list-style:none;display:grid}.ex-row{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);grid-template-columns:32px 1fr auto auto 64px;align-items:center;gap:12px;padding:12px 14px;text-decoration:none;display:grid}a.ex-row:hover{border-color:var(--accent)}.ex-row.locked{opacity:.5}.ex-num{font:600 .85rem var(--mono);color:var(--muted)}.ex-title{font-weight:600}.ex-best{font-size:.85rem}.ex-head{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.ex-head h1{margin-bottom:.2em}.best{color:var(--muted);font-size:.9rem}.ex-grid{grid-template-columns:minmax(0,1fr) 290px;gap:20px;margin-top:6px;display:grid}.intro{margin-top:4px;font-size:1.02rem}.note{background:var(--surface-2);border-radius:8px;padding:8px 12px;font-size:.9rem}.editor-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);overflow:hidden}.statusbar{border-bottom:1px solid var(--border);background:var(--surface-2);font:13px var(--mono);flex-wrap:wrap;align-items:center;gap:12px;padding:6px 10px;display:flex}.mode{color:#fff;background:var(--accent);border-radius:4px;padding:1px 8px;font-weight:700}.mode-normal{background:var(--accent);color:var(--accent-ink)}.mode-insert{background:var(--insert)}.mode-visual{background:var(--visual)}.mode-replace{background:var(--replace)}.mode-command{background:var(--command)}.pending{color:var(--muted);min-width:2ch}.rec{color:var(--danger);font-weight:700}.stat strong.over{color:var(--warn)}.goal{color:var(--muted)}.editor-host .cm-editor{background:var(--surface);min-height:150px;max-height:60vh;color:var(--text);font-size:15px}.editor-host .cm-editor.cm-focused{outline:none}.editor-host .cm-scroller{font-family:var(--mono);line-height:1.6}.editor-host .cm-gutters{background:var(--surface);border-right:1px solid var(--border);color:var(--muted)}.editor-host .cm-activeLine{background:color-mix(in srgb, var(--accent) 6%, transparent)}.editor-host .cm-activeLineGutter{color:var(--text);background:0 0}.editor-host .cm-fat-cursor{background:var(--accent)!important;color:var(--accent-ink)!important}.editor-host .cm-editor:not(.cm-focused) .cm-fat-cursor{outline:1px solid var(--accent);background:0 0!important}.editor-host .cm-selectionBackground,.editor-host .cm-focused .cm-selectionBackground{background:color-mix(in srgb, var(--visual) 30%, transparent)!important}.editor-host .cm-panels{background:var(--surface-2);color:var(--text);border-top:1px solid var(--border);font-family:var(--mono)}.editor-host .cm-panels input{font-family:var(--mono);color:var(--text)}.editor-host .cm-searchMatch{background:color-mix(in srgb, var(--target) 45%, transparent)}.cm-target{background:var(--target);color:#1d2420;border-radius:3px;animation:1.2s ease-in-out infinite pulse}.cm-target-next{outline:1px dashed var(--target);border-radius:3px}@keyframes pulse{50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--target) 45%, transparent)}}.target{border:1px dashed var(--border);border-radius:var(--radius);background:var(--surface);margin-top:12px;padding:8px 12px}.target p{margin:4px 0}.target-text{font:14px/1.6 var(--mono);white-space:pre;margin:4px 0;overflow-x:auto}.tl{border-radius:4px;padding:0 6px}.tl.ok{background:var(--ok)}.tl.diff{background:var(--diff)}.tl.extra{color:var(--muted);font-style:italic}.tcursor{outline:2px solid var(--accent);border-radius:2px}.panel-title{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-size:.78rem;font-weight:700}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.keylog{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:3px;max-width:50%;max-height:64px;display:flex;overflow:hidden}.key-log{font-size:.78rem;animation:.2s ease-out pop}@keyframes pop{0%{transform:scale(1.3)}}.hints .hint{background:var(--accent-soft);border-radius:8px;margin:10px 0 0;padding:8px 12px}.ex-side{flex-direction:column;gap:12px;display:flex}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.cmds{grid-template-columns:auto 1fr;align-items:center;gap:6px 10px;margin:0;display:grid}.cmds dt{white-space:nowrap}.cmds dd{color:var(--muted);margin:0;font-size:.9rem}.docs{margin:0;padding-left:18px;font-size:.9rem}.tips p{color:var(--muted);margin:4px 0;font-size:.88rem}.kb-wrap{margin-top:16px;overflow-x:auto}.keyboard{background:var(--surface-2);border-radius:var(--radius);flex-direction:column;gap:4px;padding:10px;display:inline-flex}.kb-row{gap:4px;display:flex}.kb-row-1{padding-left:22px}.kb-row-2{padding-left:32px}.kb-row-4{justify-content:center}.kb-key{background:var(--surface);border:1px solid var(--border);width:40px;height:40px;font:600 14px var(--mono);color:var(--text);border-bottom-width:2px;border-radius:6px;flex:none;position:relative}.kb-base{position:absolute;bottom:3px;left:6px}.kb-shift{color:var(--muted);font-size:11px;position:absolute;top:1px;left:6px}.kb-alt{color:var(--warn);font-size:10px;position:absolute;bottom:2px;right:4px}.kb-mod{width:52px;font:600 12px var(--sans);color:var(--muted);place-items:center;display:grid}.kb-wide{width:88px}.kb-space{width:280px;font:12px var(--sans);color:var(--muted);place-items:center;display:grid}.kb-pressed{animation:.35s ease-out kbflash}@keyframes kbflash{0%{background:var(--accent);color:var(--accent-ink)}}.kb-hint{background:var(--target);color:#1d2420;border-color:var(--warn)}.kb-hint .kb-shift,.kb-hint .kb-alt{color:#1d2420}.overlay{z-index:50;background:#00000059;place-items:center;animation:.15s fade;display:grid;position:fixed;inset:0}.dialog{text-align:center;background:var(--surface);border-radius:14px;width:min(420px,100vw - 32px);padding:24px;box-shadow:0 20px 60px #0000004d}.dialog h2{margin:6px 0}.big-stars{font-size:2.6rem}.pb{color:var(--accent);font-weight:700}.dialog-actions{justify-content:center;gap:10px;margin-top:16px;display:flex}@keyframes fade{0%{opacity:0}}.toast{z-index:60;background:var(--text);max-width:calc(100vw - 32px);color:var(--bg);opacity:0;pointer-events:none;border-radius:10px;padding:10px 16px;font-size:.92rem;transition:opacity .2s,transform .2s;position:fixed;bottom:24px;left:50%;transform:translate(-50%,20px)}.toast.show{opacity:1;transform:translate(-50%)}.form{flex-direction:column;gap:12px;margin-bottom:16px;display:flex}.field{grid-template-columns:160px auto 1fr;align-items:center;gap:10px;display:grid}.toggle{cursor:pointer;align-items:flex-start;gap:10px;display:flex}.toggle input{accent-color:var(--accent);margin-top:4px}.symbol-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px 16px;font-size:.9rem;display:grid}.symbol{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:3px 0;display:flex}.symbol .key{min-width:2em}.cheat-grid{grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr));gap:14px;margin-top:14px;display:grid}.touch-only{display:none}@media (hover:none) and (pointer:coarse){.touch-only{display:inline-flex}p.touch-only{display:block}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}@media (width<=900px){.ex-grid{grid-template-columns:1fr}.keylog{justify-content:flex-start;max-width:100%}}@media (width<=640px){.page{padding:16px}.topbar{gap:10px;padding:10px 16px}.hero h1{font-size:1.6rem}.ex-row{grid-template-columns:26px 1fr auto}.ex-row .ex-best,.ex-row .badge{display:none}.field{grid-template-columns:1fr}}@media print{.topbar,.footer,.no-print{display:none}body{color:#000;background:#fff}.panel{break-inside:avoid}}
