:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--text:#1a1a1a;--muted:#3f3f46;--panel:#fff;--key-fill:#fff;--key-border:#3f3f46;--key-label:#1a1a1a;--correct-fill:#d1fae5;--correct-text:#064e3b;--wrong-fill:#fee2e2;--wrong-text:#7f1d1d;--pattern:#1a1a1a;--mastery-0:#fff;--mastery-1:#f3f3f5;--mastery-2:#e6e6ea;--mastery-3:#d8d8de;--mastery-4:#c9c9d1;--mastery-5:#b9b9c4}@media (prefers-color-scheme:dark){:root:not([data-theme]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#111113;--text:#f4f4f5;--muted:#d4d4d8;--panel:#18181b;--key-fill:#1c1c21;--key-border:#e4e4e7;--key-label:#f4f4f5;--correct-fill:#166534;--correct-text:#f0fdf4;--wrong-fill:#991b1b;--wrong-text:#fef2f2;--pattern:#f4f4f5;--mastery-0:#1c1c21;--mastery-1:#26262d;--mastery-2:#32323b;--mastery-3:#3c3c48;--mastery-4:#444452;--mastery-5:#4a4a5c}}:root[data-theme=white]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--text:#1a1a1a;--muted:#3f3f46;--panel:#fff;--key-fill:#fff;--key-border:#3f3f46;--key-label:#1a1a1a;--correct-fill:#d1fae5;--correct-text:#064e3b;--wrong-fill:#fee2e2;--wrong-text:#7f1d1d;--pattern:#1a1a1a;--mastery-0:#fff;--mastery-1:#f3f3f5;--mastery-2:#e6e6ea;--mastery-3:#d8d8de;--mastery-4:#c9c9d1;--mastery-5:#b9b9c4}:root[data-theme=black]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#111113;--text:#f4f4f5;--muted:#d4d4d8;--panel:#18181b;--key-fill:#1c1c21;--key-border:#e4e4e7;--key-label:#f4f4f5;--correct-fill:#166534;--correct-text:#f0fdf4;--wrong-fill:#991b1b;--wrong-text:#fef2f2;--pattern:#f4f4f5;--mastery-0:#1c1c21;--mastery-1:#26262d;--mastery-2:#32323b;--mastery-3:#3c3c48;--mastery-4:#444452;--mastery-5:#4a4a5c}:root[data-theme=floral-blue]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f7f4ee;--text:#1a2744;--muted:#243656;--panel:#fbf9f5;--key-fill:#f8fafc;--key-border:#1e3a8a;--key-label:#1a2744;--correct-fill:#d1fae5;--correct-text:#064e3b;--wrong-fill:#fee2e2;--wrong-text:#7f1d1d;--pattern:#1e4b9e;--mastery-0:#f8fafc;--mastery-1:#eef3fb;--mastery-2:#e0eaf8;--mastery-3:#d0e0f4;--mastery-4:#bdd2ed;--mastery-5:#a9c0e4}:root[data-theme=toile-blue]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f6f1e7;--text:#1e2a44;--muted:#2a3a52;--panel:#fbf7f0;--key-fill:#fbf8f3;--key-border:#1e3a6e;--key-label:#1e2a44;--correct-fill:#d1fae5;--correct-text:#064e3b;--wrong-fill:#fee2e2;--wrong-text:#7f1d1d;--pattern:#1e3a6e;--mastery-0:#fbf8f3;--mastery-1:#eef3f8;--mastery-2:#dfe8f4;--mastery-3:#d0def0;--mastery-4:#c3d4eb;--mastery-5:#b7cbe6}:root[data-theme=floral-sage]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f3f6f1;--text:#1c2e24;--muted:#24382e;--panel:#f7faf4;--key-fill:#f7faf6;--key-border:#1b4332;--key-label:#1c2e24;--correct-fill:#d1fae5;--correct-text:#064e3b;--wrong-fill:#fee2e2;--wrong-text:#7f1d1d;--pattern:#1b4332;--mastery-0:#f7faf6;--mastery-1:#e7f2eb;--mastery-2:#d5e8dc;--mastery-3:#c6dece;--mastery-4:#bed7c8;--mastery-5:#b7d0c2}:root[data-theme=toile-rose]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#faf6f4;--text:#2c1218;--muted:#4a2430;--panel:#fff8f6;--key-fill:#fffaf9;--key-border:#6b1224;--key-label:#2c1218;--correct-fill:#d1fae5;--correct-text:#064e3b;--wrong-fill:#fee2e2;--wrong-text:#7f1d1d;--pattern:#6b1224;--mastery-0:#fffaf9;--mastery-1:#fdf0f2;--mastery-2:#fbe4e8;--mastery-3:#f8d7dd;--mastery-4:#f4d0d6;--mastery-5:#f0c9d0}:root{--font-display:"Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--font-body:ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);min-height:100%;color:var(--text);margin:0}body{font-family:var(--font-body);font-size:1rem;line-height:1.45}button,input{font:inherit}h1,h2{font-family:var(--font-display);letter-spacing:-.02em;font-weight:500;line-height:1.15}.app{z-index:0;min-height:100vh;position:relative}.page-pattern{z-index:-1;pointer-events:none;width:100%;height:100%;color:var(--pattern);opacity:.11;position:fixed;inset:0}.shell{flex-direction:column;gap:16px;width:min(960px,100%);margin:0 auto;padding:28px 16px 64px;display:flex}.card{background:var(--panel);color:var(--text);border-radius:18px;padding:18px 20px}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 20px;display:flex}.title-block h1{margin:0;font-size:clamp(1.8rem,4vw,2.5rem)}.lede{color:var(--muted);margin:6px 0 0}.counters{gap:18px;margin:0;padding:0;list-style:none;display:flex}.counters li{flex-direction:column;min-width:4.6rem;display:flex}.counters strong{font-family:var(--font-display);color:var(--text);font-variant-numeric:tabular-nums;font-size:1.7rem;font-weight:500;line-height:1}.counters span{color:var(--muted);font-size:.78rem}.nav{flex-wrap:wrap;gap:8px;display:flex}.btn{appearance:none;background:var(--panel);color:var(--text);border:2px solid var(--key-border);cursor:pointer;border-radius:999px;min-height:44px;padding:0 16px;font-weight:650}.btn[aria-pressed=true],.btn[aria-checked=true]{background:var(--text);color:var(--bg);border-color:var(--text)}.btn.danger{color:var(--wrong-text);border-color:var(--wrong-text)}.btn:focus-visible,.key:focus-visible,.check input:focus-visible{outline:3px solid var(--key-border);outline-offset:2px}.prompt h2{margin:0;font-size:clamp(1.45rem,3.4vw,2.15rem)}.feedback{min-height:1.5em;margin:10px 0 0;font-weight:700}.hint{color:var(--muted);margin:8px 0 0;font-size:.92rem}.hint.error{color:var(--wrong-text);font-weight:700}.board-card{flex-direction:column;gap:4px;display:flex}.board-scroll{padding-bottom:4px;overflow-x:auto}.board{grid-template-columns:repeat(10,minmax(44px,1fr));grid-auto-rows:minmax(48px,auto);gap:8px;min-width:512px;display:grid}.key{appearance:none;border:2px solid var(--key-border);background:var(--key-fill);color:#0000;letter-spacing:.02em;cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;border-radius:10px;min-height:48px;padding:4px;font-weight:700}.key[data-mastery="0"]{background:var(--mastery-0)}.key[data-mastery="1"]{background:var(--mastery-1)}.key[data-mastery="2"]{background:var(--mastery-2)}.key[data-mastery="3"]{background:var(--mastery-3)}.key[data-mastery="4"]{background:var(--mastery-4)}.key[data-mastery="5"]{background:var(--mastery-5)}.key.has-label{color:var(--key-label)}.key[data-state=correct]{background:var(--correct-fill);color:var(--correct-text);border-color:var(--correct-text)}.key[data-state=wrong]{background:var(--wrong-fill);color:var(--wrong-text);border-color:var(--wrong-text)}.key:disabled{opacity:1;cursor:default}.key.number{letter-spacing:.14em}.theme-list{flex-direction:column;gap:8px;margin:8px 0 16px;display:flex}.check{align-items:center;gap:12px;min-height:44px;font-weight:700;display:flex}.check input{width:1.25rem;height:1.25rem;accent-color:var(--key-border)}.backdrop{z-index:20;background:color-mix(in srgb, var(--text) 35%, transparent);place-items:center;padding:16px;display:grid;position:fixed;inset:0}.dialog{width:min(460px,100%);max-height:min(90vh,760px);overflow:auto}.dialog h2{margin:0;font-size:1.8rem}.dialog-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.stats h2{margin:0;font-size:1.8rem}.actions{flex-wrap:wrap;gap:8px;margin-top:14px;display:flex}.file-btn{justify-content:center;align-items:center;display:inline-flex}.stat-table{margin-top:18px}.stat-list{margin:0;padding:0;list-style:none}.stat-row{border-top:1px solid color-mix(in srgb, var(--text) 16%, transparent);grid-template-columns:minmax(150px,1.6fr) repeat(4,minmax(72px,1fr));align-items:baseline;gap:8px 12px;padding:10px 0;display:grid}.stat-head{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;border-top:0;font-size:.75rem;font-weight:700}.name .token{color:var(--muted);margin-top:2px;font-size:.78rem;font-style:normal;font-weight:650;display:block}.cell em{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;margin-bottom:2px;font-size:.72rem;font-style:normal;font-weight:700;display:none}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (width<=720px){.stat-head{display:none}.stat-row{grid-template-columns:1fr 1fr}.stat-row .name{grid-column:1/-1}.cell em{display:block}}@media (prefers-reduced-motion:reduce){.key,.btn{transition:none}}
