.dropdown[data-v-2ca704f4]{display:inline-block;position:relative}.dropdown-trigger[data-v-2ca704f4]{border:1px solid var(--border);background:var(--bg-surface);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:.3rem;padding:.3rem .5rem;font-size:.85rem;display:inline-flex}.dropdown-trigger[data-v-2ca704f4]:hover{background:var(--bg-surface-hover)}.dropdown-caret[data-v-2ca704f4]{opacity:.7;font-size:.7rem}.dropdown-list[data-v-2ca704f4]{background:var(--bg-surface);border:1px solid var(--border);z-index:200;border-radius:6px;min-width:100%;margin:0;padding:.25rem;list-style:none;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 6px 20px #0000002e}.dropdown-list li[data-v-2ca704f4]{white-space:nowrap;cursor:pointer;color:var(--text);border-radius:4px;padding:.3rem .6rem}.dropdown-list li[data-v-2ca704f4]:hover{background:var(--bg-surface-hover)}.dropdown-list li.active[data-v-2ca704f4]{background:var(--accent);color:#fff}.keyboard-wrap[data-v-33f1bfcc]{flex-direction:column;align-items:center;gap:1rem;display:flex}.keyboard-svg[data-v-33f1bfcc]{width:100%;max-width:860px}.key-label[data-v-33f1bfcc]{fill:var(--text);font-size:13px;font-weight:600}.key-label-shift[data-v-33f1bfcc]{fill:var(--text);opacity:.75;font-size:11px;font-weight:500}.key-label-small[data-v-33f1bfcc]{fill:var(--text);font-size:9px;font-weight:500}.legend[data-v-33f1bfcc]{flex-wrap:wrap;justify-content:center;gap:1.2rem;display:flex}.legend-item[data-v-33f1bfcc]{align-items:center;gap:6px;font-size:.85rem;display:flex}.legend-swatch[data-v-33f1bfcc]{border:1px solid var(--border);border-radius:3px;width:16px;height:16px}.shift-note[data-v-33f1bfcc]{color:var(--text-muted);text-align:center;max-width:480px;font-size:.8rem;line-height:1.4}.key-label-altgr[data-v-33f1bfcc]{fill:var(--accent);font-size:13px;font-weight:700}.intro[data-v-9fdc277c]{max-width:860px;margin:0 auto;padding:2rem 1rem}h1[data-v-9fdc277c]{margin-bottom:.25rem;font-size:2rem}.subtitle[data-v-9fdc277c]{color:var(--text-muted);margin-bottom:2rem;font-size:1.1rem}.section[data-v-9fdc277c]{margin-bottom:2rem}.section h2[data-v-9fdc277c]{border-bottom:1px solid var(--border);margin-bottom:.75rem;padding-bottom:.4rem;font-size:1.25rem}ol[data-v-9fdc277c],ul[data-v-9fdc277c]{padding-left:1.4rem}li[data-v-9fdc277c]{margin-bottom:.5rem}kbd[data-v-9fdc277c]{background:var(--bg-surface);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:monospace;font-size:.85em}.tip[data-v-9fdc277c]{color:var(--text-muted);margin-top:.5rem;font-size:.85rem;font-style:italic}.cta[data-v-9fdc277c]{text-align:center;margin-top:2.5rem}.cta button[data-v-9fdc277c]{padding:.7rem 2rem;font-size:1.1rem}.lesson-list[data-v-d8e6ac48]{max-width:960px;margin:0 auto;padding:2rem 1rem}.list-header[data-v-d8e6ac48]{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:2rem;margin-bottom:2rem;display:flex}h1[data-v-d8e6ac48]{margin-bottom:.25rem;font-size:1.8rem}.subtitle[data-v-d8e6ac48]{color:var(--text-muted)}.progress-block[data-v-d8e6ac48]{flex-direction:column;align-items:flex-end;gap:6px;min-width:180px;display:flex}.progress-label[data-v-d8e6ac48]{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.9rem}.progress-bar-track[data-v-d8e6ac48]{background:var(--border);border-radius:99px;width:180px;height:8px;overflow:hidden}.progress-bar-fill[data-v-d8e6ac48]{background:var(--correct);border-radius:99px;height:100%;transition:width .4s}.section[data-v-d8e6ac48]{border:1px solid var(--border);border-radius:10px;margin-bottom:.5rem;overflow:hidden}.section-header[data-v-d8e6ac48]{background:var(--bg-surface);cursor:pointer;text-align:left;border:none;border-radius:0;justify-content:space-between;align-items:center;gap:1rem;width:100%;padding:.85rem 1rem;display:flex}.section-header[data-v-d8e6ac48]:hover{background:var(--bg-surface-hover)}.section-title-group[data-v-d8e6ac48]{flex-wrap:wrap;align-items:baseline;gap:.75rem;display:flex}.section-title[data-v-d8e6ac48]{font-size:.95rem;font-weight:700}.section-keys[data-v-d8e6ac48]{color:var(--text-muted);letter-spacing:.04em;font-family:monospace;font-size:.78rem}.section-chevron[data-v-d8e6ac48]{color:var(--text-muted);flex-shrink:0;font-size:1.2rem;transition:transform .2s;transform:rotate(90deg)}.section-chevron.open[data-v-d8e6ac48]{transform:rotate(270deg)}.grid[data-v-d8e6ac48]{border-top:1px solid var(--border);grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;padding:1rem;display:grid}.card[data-v-d8e6ac48]{background:var(--bg);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:.5rem;padding:1.2rem;display:flex}.card.locked[data-v-d8e6ac48]{opacity:.55}.card-header[data-v-d8e6ac48]{justify-content:space-between;align-items:center;display:flex}.lesson-num[data-v-d8e6ac48]{color:var(--text-muted);font-size:1.5rem;font-weight:700}.badge[data-v-d8e6ac48]{border:1px solid var(--border);border-radius:99px;padding:2px 8px;font-size:.75rem}.badge.completed[data-v-d8e6ac48]{background:var(--correct);color:#fff;border-color:var(--correct)}.badge.unlocked[data-v-d8e6ac48]{color:var(--text);border-color:var(--border);background:0 0}.badge.locked[data-v-d8e6ac48]{background:0 0}.desc[data-v-d8e6ac48]{color:var(--text-muted);flex:1;font-size:.85rem}.card-footer[data-v-d8e6ac48]{justify-content:space-between;align-items:center;gap:.5rem;margin-top:.5rem;display:flex}.locked-hint[data-v-d8e6ac48]{color:var(--text-muted);font-size:.8rem}.lesson-score[data-v-d8e6ac48]{color:var(--text-muted);align-items:center;gap:.35rem;font-size:.8rem;display:flex}.score-sep[data-v-d8e6ac48]{opacity:.5}.practice-list[data-v-75302429]{max-width:960px;margin:0 auto;padding:2rem 1rem}.list-header[data-v-75302429]{margin-bottom:1.5rem}h1[data-v-75302429]{margin-bottom:.25rem;font-size:1.8rem}.subtitle[data-v-75302429]{color:var(--text-muted)}.filter-bar[data-v-75302429]{flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem;display:flex}.filter-bar button[data-v-75302429]{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:99px;padding:.4rem 1rem;font-size:.9rem;transition:border-color .15s,color .15s}.filter-bar button[data-v-75302429]:hover{border-color:var(--accent);color:var(--accent)}.filter-bar button.active[data-v-75302429]{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent)}.grid[data-v-75302429]{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;display:grid}.card[data-v-75302429]{appearance:none;font:inherit;color:inherit;text-align:left;background:var(--bg-surface);border:1px solid var(--border);cursor:pointer;border-radius:10px;flex-direction:column;gap:.6rem;width:100%;padding:1.2rem;transition:border-color .15s,transform .1s;display:flex}.card[data-v-75302429]:hover{border-color:var(--accent);transform:translateY(-2px)}.card-header[data-v-75302429]{justify-content:space-between;align-items:flex-start;gap:.5rem;display:flex}.card-title[data-v-75302429]{margin:0;font-size:1rem;font-weight:600}.badge[data-v-75302429]{white-space:nowrap;border:1px solid;border-radius:99px;flex-shrink:0;padding:2px 8px;font-size:.72rem}.badge.quotes[data-v-75302429]{color:var(--accent)}.badge.prose[data-v-75302429]{color:var(--correct)}.badge.code[data-v-75302429]{color:var(--error)}.preview[data-v-75302429]{color:var(--text-muted);flex:1;margin:0;font-size:.85rem;line-height:1.5}.card-footer[data-v-75302429]{margin-top:.25rem}.char-count[data-v-75302429]{color:var(--text-muted);font-size:.78rem}.exercise[data-v-5541fe31]{-webkit-user-select:none;user-select:none;max-width:700px;margin:0 auto;padding:2rem 1rem}.meta[data-v-5541fe31]{color:var(--text-muted);justify-content:space-between;margin-bottom:1.5rem;font-size:.9rem;display:flex}.lesson-title[data-v-5541fe31]{color:var(--text);font-weight:600}.text-display[data-v-5541fe31]{background:var(--bg-surface);border:1px solid var(--border);letter-spacing:.05em;word-break:break-all;cursor:text;border-radius:10px;min-height:120px;padding:1.5rem;font-family:Courier New,monospace;font-size:1.5rem;line-height:2}.char[data-v-5541fe31]{transition:color .1s}.char.correct[data-v-5541fe31]{color:var(--correct)}.char.error[data-v-5541fe31]{color:var(--error);background:#dc262626;border-radius:2px}.char.cursor[data-v-5541fe31]{border-bottom:2px solid var(--cursor);color:var(--text)}.char.pending[data-v-5541fe31]{color:var(--text-muted)}.stats[data-v-5541fe31]{color:var(--text-muted);align-items:center;gap:2rem;margin-top:1.2rem;font-size:1rem;display:flex}.reset-btn[data-v-5541fe31]{margin-left:auto;padding:.25rem .75rem;font-size:.85rem}.hidden-input[data-v-5541fe31]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.result[data-v-4c32ea48]{text-align:center;max-width:500px;margin:4rem auto;padding:2rem}.icon[data-v-4c32ea48]{margin-bottom:.5rem;font-size:3rem}h1[data-v-4c32ea48]{margin-bottom:.5rem;font-size:2rem}.sub[data-v-4c32ea48]{color:var(--text-muted);margin-bottom:2rem}.stats-grid[data-v-4c32ea48]{justify-content:center;gap:3rem;margin-bottom:2.5rem;display:flex}.stat[data-v-4c32ea48]{flex-direction:column;align-items:center;gap:.25rem;display:flex}.stat-value[data-v-4c32ea48]{font-size:2.5rem;font-weight:700}.stat-value.pass[data-v-4c32ea48]{color:var(--correct)}.stat-value.fail[data-v-4c32ea48]{color:var(--error)}.stat-label[data-v-4c32ea48]{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.85rem}.stat-req[data-v-4c32ea48]{font-size:.8rem}.stat-req.pass[data-v-4c32ea48]{color:var(--correct)}.stat-req.fail[data-v-4c32ea48]{color:var(--error)}.actions[data-v-4c32ea48]{justify-content:center;gap:1rem;display:flex}.new-best[data-v-4c32ea48]{background:var(--accent);color:#fff;border-radius:99px;margin-bottom:1.5rem;padding:.3rem .9rem;font-size:.85rem;font-weight:600;display:inline-block}.sandbox[data-v-2a874064]{max-width:700px;margin:0 auto;padding:2rem 1rem}.sandbox-title[data-v-2a874064]{color:var(--text);margin:0 0 1rem;font-size:1.3rem}.sandbox-area[data-v-2a874064]{box-sizing:border-box;background:var(--bg-surface);border:1px solid var(--border);letter-spacing:.05em;width:100%;color:var(--text);resize:vertical;border-radius:10px;min-height:200px;padding:1.5rem;font-family:Courier New,monospace;font-size:1.5rem;line-height:2}.sandbox-area[data-v-2a874064]:focus{outline:2px solid var(--accent);outline-offset:2px}.sandbox-area[data-v-2a874064]::placeholder{color:var(--text-muted)}.stats[data-v-2a874064]{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:2rem;margin-top:1.2rem;font-size:1rem;display:flex}.clear-btn[data-v-2a874064]{margin-left:auto;padding:.25rem .75rem;font-size:.85rem}.app-wrapper{flex-direction:column;min-height:100vh;display:flex}.app-main{flex:1;padding:1rem 0}.app-footer{text-align:center;color:var(--text-muted);border-top:1px solid var(--border);padding:1.5rem;font-size:.8rem}.app-header{z-index:100;background:var(--bg-surface);border-bottom:1px solid var(--border);padding:.6rem 1.5rem;position:sticky;top:0}.header-inner{justify-content:space-between;align-items:center;max-width:900px;margin:0 auto;display:flex}.logo-btn{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:1.2rem;font-weight:700}.logo-btn:hover{background:0 0}.header-nav{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.4rem .5rem;display:flex}.toggle-labeled{align-items:center;gap:4px;display:flex}.toggle-icon{cursor:default;font-size:.9rem;line-height:1}:root,[data-theme=light]{--bg:#f5f5f5;--bg-surface:#fff;--bg-surface-hover:#e8e8e8;--text:#1a1a1a;--text-muted:#666;--border:#d0d0d0;--accent:#2563eb;--accent-hover:#1d4ed8;--correct:#16a34a;--error:#dc2626;--cursor:#2563eb;--finger-pinky:#f87171;--finger-ring:#fb923c;--finger-middle:#fbbf24;--finger-index:#4ade80;--finger-thumb:#94a3b8}[data-theme=dark]{--bg:#0f0f0f;--bg-surface:#1a1a1a;--bg-surface-hover:#2a2a2a;--text:#e5e5e5;--text-muted:#999;--border:#333;--accent:#3b82f6;--accent-hover:#60a5fa;--correct:#22c55e;--error:#ef4444;--cursor:#3b82f6;--finger-pinky:#f87171;--finger-ring:#fb923c;--finger-middle:#fbbf24;--finger-index:#4ade80;--finger-thumb:#64748b}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5;transition:background .2s,color .2s}button{cursor:pointer;font:inherit;border:1px solid var(--border);background:var(--bg-surface);color:var(--text);border-radius:6px;padding:.4rem .8rem;transition:background .15s}button:hover{background:var(--bg-surface-hover)}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button.success{background:var(--correct);color:#fff;border-color:var(--correct)}button.success:hover{background:var(--correct);opacity:.88;border-color:var(--correct)}
