:root{--bg:#f6f5f1;--surface:#fff;--ink:#1e1e1c;--ink-strong:#000;--on-ink:#fff;--ink-2:#5c5b56;--ink-3:#9b9991;--line:#e4e1da;--line-strong:#c9c5bb;--accent:#33598a;--accent-dark:#22416a;--accent-soft:#e6ecf3;--root:#a8693a;--root-soft:#f3e8dc;--good:#3c7356;--warn:#9a5b23;--key-white:#fff;--key-white-label:#5c5b56;--key-black:#2a2a28;--key-black-label:#c9c7c0;--row:#fff;--row-dark:#f1efea;--row-line:#eeece6;--row-scale:#fff;--row-out:#e7e5df;--row-root:#f4e4d3;--row-marked:#f6efd9;--grid-step:#00000009;--grid-beat:#00000017;--grid-bar:#00000038;--note:#33598a;--note-edge:#22416a;--note-text:#fff;--note-grip:#ffffff73;--note-active:#22416a;--note-locked:#b7c0c9;--note-locked-text:#1e1e1c;--note-locked-active:#8f9ba7;--note-locked-active-text:#fff;--interval-bg:#ffffffd9;--target:#9b9991;--guide:#33598a29;--guide-root:#a8693a4d;--backing-note:#1e1e1c14;--backing-note-edge:#1e1e1c47;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:16px;line-height:1.55}:root[data-theme=dark]{--bg:#1a1a19;--surface:#222221;--ink:#e9e7e1;--ink-strong:#fff;--on-ink:#1a1a19;--ink-2:#a8a69f;--ink-3:#75736d;--line:#31302d;--line-strong:#46443f;--accent:#86a3c9;--accent-dark:#a7bfdc;--accent-soft:#2a3340;--root:#c98f60;--root-soft:#3a2f25;--good:#8dbb9f;--warn:#d6a06c;--key-white:#bebcb5;--key-white-label:#3d3c38;--key-black:#121211;--key-black-label:#8f8d86;--row:#252524;--row-dark:#1f1f1e;--row-line:#2c2b29;--row-scale:#30302e;--row-out:#1a1a19;--row-root:#3b3026;--row-marked:#36321f;--grid-step:#ffffff08;--grid-beat:#ffffff12;--grid-bar:#ffffff2e;--note:#5f80aa;--note-edge:#86a3c9;--note-text:#fff;--note-grip:#fff6;--note-active:#7d9cc4;--note-locked:#4e565e;--note-locked-text:#e9e7e1;--note-locked-active:#69737d;--note-locked-active-text:#fff;--interval-bg:#1a1a19d9;--target:#a8a69f;--guide:#86a3c942;--guide-root:#c98f605c;--backing-note:#e9e7e114;--backing-note-edge:#e9e7e14d;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{min-height:100vh;margin:0}a{color:var(--ink)}h1,h2{letter-spacing:-.015em;font-weight:600}button:focus-visible,a:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}code{background:var(--row-dark);border-radius:3px;padding:1px 5px}.btn{font:inherit;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);cursor:pointer;border-radius:4px;align-items:center;gap:8px;padding:8px 16px;font-size:15px;font-weight:500;line-height:1.3;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--ink-3)}.btn.primary{background:var(--ink);border-color:var(--ink);color:var(--on-ink)}.btn.primary:hover{background:var(--ink-strong);border-color:var(--ink-strong)}.btn:disabled{opacity:.4;cursor:not-allowed}.textlink{color:var(--ink-2);font-size:15px;text-decoration:none}.textlink:hover{color:var(--ink);text-decoration:underline}.toggle.svelte-1kenrq5{font:inherit;color:var(--ink-2);cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:4px 0;font-size:14px;display:inline-flex}.toggle.svelte-1kenrq5:hover{color:var(--ink)}svg.svelte-1kenrq5{width:14px;height:14px}main.svelte-1ary22t{max-width:720px;margin:0 auto;padding:72px 24px 96px}header.svelte-1ary22t{margin-bottom:48px}.bar.svelte-1ary22t{justify-content:space-between;align-items:baseline;margin-bottom:10px;display:flex}.kicker.svelte-1ary22t{color:var(--ink-3);margin:0;font-size:15px}h1.svelte-1ary22t{max-width:14em;margin:0 0 16px;font-size:40px;line-height:1.15}.lead.svelte-1ary22t{color:var(--ink-2);max-width:32em;margin:0;font-size:19px}.lessons.svelte-1ary22t{border-top:1px solid var(--line-strong);margin:0;padding:0;list-style:none}.lessons.svelte-1ary22t li:where(.svelte-1ary22t){border-bottom:1px solid var(--line)}.row.svelte-1ary22t{color:var(--ink);align-items:baseline;gap:18px;padding:16px 4px;text-decoration:none;display:flex}a.row.svelte-1ary22t:hover .name:where(.svelte-1ary22t){text-underline-offset:3px;text-decoration:underline}.row.soon.svelte-1ary22t{color:var(--ink-3)}.num.svelte-1ary22t{width:22px;color:var(--ink-3);font-variant-numeric:tabular-nums;flex:none}.body.svelte-1ary22t{flex-direction:column;flex:1;display:flex}.name.svelte-1ary22t{font-size:17px;font-weight:500}.summary.svelte-1ary22t{color:var(--ink-2);font-size:15px}.soon.svelte-1ary22t .summary:where(.svelte-1ary22t){color:var(--ink-3)}.genre.svelte-1ary22t{color:var(--ink-3);white-space:nowrap;font-size:13px}.meta.svelte-1ary22t{white-space:nowrap}.state.svelte-1ary22t{color:var(--ink-2);font-size:13px}.state.done.svelte-1ary22t{color:var(--good)}.plain.svelte-1ary22t{font:inherit;cursor:pointer;background:0 0;border:none;margin-left:6px;padding:0;font-size:14px;text-decoration:underline}.practice.svelte-1ary22t{margin-top:56px}.practice.svelte-1ary22t h2:where(.svelte-1ary22t){margin:0 0 6px;font-size:24px}.lead.small.svelte-1ary22t{margin-bottom:20px;font-size:16px}footer.svelte-1ary22t{color:var(--ink-3);margin-top:40px;font-size:14px}.roll.svelte-1dgguf6{background:var(--surface);border:1px solid var(--line-strong);-webkit-user-select:none;user-select:none;position:relative;overflow:auto}.inner.svelte-1dgguf6{position:relative}.ruler.svelte-1dgguf6{background:var(--bg);border-bottom:1px solid var(--line-strong);height:22px;position:relative}.beat.svelte-1dgguf6{border-left:1px solid var(--line);height:100%;color:var(--ink-3);font-variant-numeric:tabular-nums;padding:3px 0 0 5px;font-size:11px;position:absolute;top:0}.beat.bar.svelte-1dgguf6{border-left-color:var(--line-strong);color:var(--ink-2)}.body.svelte-1dgguf6{display:flex}.keys.svelte-1dgguf6{z-index:3;background:var(--surface);border-right:1px solid var(--line-strong);flex-direction:column;flex:none;display:flex;position:sticky;left:0}.key.svelte-1dgguf6{all:unset;box-sizing:border-box;background:var(--key-white);border-bottom:1px solid var(--line);cursor:pointer;color:var(--key-white-label);touch-action:none;justify-content:flex-end;align-items:center;padding-right:6px;font-size:10px;display:flex;position:relative}.key.black.svelte-1dgguf6{background:var(--key-black);color:var(--key-black-label);border-bottom-color:var(--key-black);margin-right:22px}.key.svelte-1dgguf6:active{background:var(--accent-soft)}.key.black.svelte-1dgguf6:active{background:var(--accent)}.key.root.svelte-1dgguf6,.key.black.root.svelte-1dgguf6{box-shadow:inset -3px 0 0 var(--root)}.key.out-scale.svelte-1dgguf6{color:var(--ink-3)}.key.marked.svelte-1dgguf6:before{content:"";background:var(--root);border-radius:50%;width:6px;height:6px;position:absolute;left:6px}.label.svelte-1dgguf6{pointer-events:none;font-weight:500}.grid.svelte-1dgguf6{touch-action:none;flex:none;position:relative;overflow:hidden}.row.svelte-1dgguf6{box-sizing:border-box;background:var(--row);border-bottom:1px solid var(--row-line)}.row.black-row.svelte-1dgguf6{background:var(--row-dark)}.row.c-row.svelte-1dgguf6{border-bottom-color:var(--line-strong)}.row.in-scale.svelte-1dgguf6{background:var(--row-scale)}.row.out-scale.svelte-1dgguf6{background:var(--row-out)}.row.root.svelte-1dgguf6{background:var(--row-root)}.row.marked.svelte-1dgguf6{background:var(--row-marked)}.lines.svelte-1dgguf6{pointer-events:none;position:absolute;inset:0}.note.svelte-1dgguf6{box-sizing:border-box;background:var(--note);border:1px solid var(--note-edge);pointer-events:none;color:var(--note-text);border-radius:2px;align-items:center;padding-left:4px;font-size:10px;font-weight:500;display:flex;position:absolute;overflow:hidden}.note.svelte-1dgguf6:after{content:"";background:var(--note-grip);width:1px;position:absolute;top:30%;bottom:30%;right:2px}.note.selected.svelte-1dgguf6{box-shadow:0 0 0 1.5px var(--surface), 0 0 0 3px var(--ink);z-index:1}.selbox.svelte-1dgguf6{border:1px dashed var(--ink-2);background:var(--accent-soft);opacity:.6;pointer-events:none;z-index:2;position:absolute}.note.locked.svelte-1dgguf6{background:var(--note-locked);border-color:var(--note-locked-active);color:var(--note-locked-text)}.note.locked.svelte-1dgguf6:after{display:none}.note.active.svelte-1dgguf6{background:var(--note-active)}.note.locked.active.svelte-1dgguf6{background:var(--note-locked-active);color:var(--note-locked-active-text)}.head.svelte-1dgguf6{z-index:4;position:sticky;top:0}.strip.svelte-1dgguf6{background:var(--surface);border-bottom:1px solid var(--line-strong);height:24px;position:relative}.strip-label.svelte-1dgguf6{height:100%;color:var(--ink-3);background:var(--surface);border-right:1px solid var(--line-strong);align-items:center;padding-left:6px;font-size:10px;display:flex;position:absolute;top:0;left:0}.strip-chord.svelte-1dgguf6{height:100%;color:var(--ink);border-left:1px solid var(--line-strong);white-space:nowrap;align-items:center;padding-left:6px;font-size:12px;font-weight:600;display:flex;position:absolute;top:0;overflow:hidden}.strip-chord.now.svelte-1dgguf6{background:var(--accent-soft)}.guide.svelte-1dgguf6{background:var(--guide);pointer-events:none;position:absolute}.guide.root.svelte-1dgguf6{background:var(--guide-root)}.backing.svelte-1dgguf6{box-sizing:border-box;background:var(--backing-note);border:1px solid var(--backing-note-edge);pointer-events:none;border-radius:2px;position:absolute}.target.svelte-1dgguf6{box-sizing:border-box;border:1.5px dashed var(--target);pointer-events:none;border-radius:2px;position:absolute}.target.hit.svelte-1dgguf6{border-style:solid;border-color:var(--note-edge)}.interval.svelte-1dgguf6{background:var(--interval-bg);color:var(--ink-2);pointer-events:none;white-space:nowrap;z-index:2;font-variant-numeric:tabular-nums;padding:0 3px;font-size:10px;font-weight:600;line-height:14px;position:absolute}.interval.whole.svelte-1dgguf6{color:var(--accent)}.interval.half.svelte-1dgguf6{color:var(--root)}.interval.stack.svelte-1dgguf6{color:var(--ink)}.playhead.svelte-1dgguf6{background:var(--ink);pointer-events:none;z-index:3;width:1px;position:absolute;top:0;bottom:0;left:0}.player.svelte-1fwbpnu{flex-direction:column;gap:10px;display:flex}.toolbar.svelte-1fwbpnu{flex-wrap:wrap;align-items:center;gap:6px 18px;font-size:14px;display:flex}button.svelte-1fwbpnu{font:inherit;cursor:pointer}.play.svelte-1fwbpnu{justify-content:center;min-width:92px}.play.svelte-1fwbpnu svg:where(.svelte-1fwbpnu){fill:currentColor;width:12px;height:12px}.muted.svelte-1fwbpnu{color:var(--ink-3)}.group.svelte-1fwbpnu{align-items:center;gap:8px;display:inline-flex}.tempo.svelte-1fwbpnu span:where(.svelte-1fwbpnu){color:var(--ink-3);font-variant-numeric:tabular-nums}.tempo.svelte-1fwbpnu b:where(.svelte-1fwbpnu){color:var(--ink);font-weight:600}.tempo.svelte-1fwbpnu button:where(.svelte-1fwbpnu){border:1px solid var(--line-strong);background:var(--surface);width:26px;height:26px;color:var(--ink);border-radius:4px;line-height:1}.toggle.svelte-1fwbpnu{color:var(--ink);background:0 0;border:none;align-items:center;gap:7px;padding:4px 0;display:inline-flex}.box.svelte-1fwbpnu{border:1.5px solid var(--ink-2);border-radius:3px;width:14px;height:14px;position:relative}.box.on.svelte-1fwbpnu{background:var(--ink);border-color:var(--ink)}.box.on.svelte-1fwbpnu:after{content:"";border:solid var(--on-ink);border-width:0 1.5px 1.5px 0;width:4px;height:8px;position:absolute;top:.5px;left:3.5px;transform:rotate(45deg)}.meta.svelte-1fwbpnu{align-items:center;gap:6px;display:inline-flex}.scalepick.svelte-1fwbpnu select:where(.svelte-1fwbpnu){font:inherit;background:var(--surface);color:var(--ink);border:1px solid var(--line-strong);border-radius:4px;padding:3px 4px}.segmented.svelte-1fwbpnu{border:1px solid var(--line-strong);border-radius:4px;display:inline-flex;overflow:hidden}.segmented.svelte-1fwbpnu button:where(.svelte-1fwbpnu){background:var(--surface);color:var(--ink-2);border:none;padding:6px 14px}.segmented.svelte-1fwbpnu button:where(.svelte-1fwbpnu)+button:where(.svelte-1fwbpnu){border-left:1px solid var(--line-strong)}.segmented.svelte-1fwbpnu button[aria-pressed=true]:where(.svelte-1fwbpnu){background:var(--ink);color:var(--on-ink)}.end.svelte-1fwbpnu{gap:16px;margin-left:auto;display:inline-flex}.plain.svelte-1fwbpnu{background:0 0;border:none;padding:4px 0}.plain.svelte-1fwbpnu:disabled{opacity:.35;cursor:default;text-decoration:none}.keys.svelte-1fwbpnu{position:relative}.keys.svelte-1fwbpnu summary:where(.svelte-1fwbpnu){cursor:pointer;padding:4px 0;list-style:none}.keys.svelte-1fwbpnu summary:where(.svelte-1fwbpnu)::-webkit-details-marker{display:none}.keys.svelte-1fwbpnu dl:where(.svelte-1fwbpnu){z-index:10;background:var(--surface);border:1px solid var(--line-strong);border-radius:4px;grid-template-columns:auto 1fr;gap:6px 14px;width:340px;margin:6px 0 0;padding:12px 14px;font-size:13px;display:grid;position:absolute;top:100%;right:0}.keys.svelte-1fwbpnu dt:where(.svelte-1fwbpnu){white-space:nowrap;font-weight:600}.keys.svelte-1fwbpnu dd:where(.svelte-1fwbpnu){color:var(--ink-2);margin:0}.builder.svelte-1q4go2r{flex-direction:column;gap:14px;display:flex}.panel.svelte-1q4go2r{flex-direction:column;gap:12px;display:flex}.line.svelte-1q4go2r{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.label.svelte-1q4go2r{width:84px;color:var(--ink-3);flex:none;font-size:14px}.formula.svelte-1q4go2r{gap:4px;display:flex}.slot.svelte-1q4go2r{border:1px solid var(--line-strong);background:var(--surface);width:34px;height:34px;color:var(--ink-3);border-radius:3px;place-items:center;font-size:15px;font-weight:600;display:grid}.slot.current.svelte-1q4go2r{border-color:var(--ink);color:var(--ink);box-shadow:inset 0 -2px 0 var(--ink)}.slot.right.svelte-1q4go2r{background:var(--ink);border-color:var(--ink);color:var(--on-ink)}.slot.wrong.svelte-1q4go2r{border-color:var(--warn);color:var(--warn);background:var(--root-soft)}.controls.svelte-1q4go2r{flex-wrap:wrap;align-items:center;gap:8px 14px;display:flex}.step.svelte-1q4go2r b:where(.svelte-1q4go2r){font-weight:700}.step.svelte-1q4go2r span:where(.svelte-1q4go2r){color:var(--ink-3);font-size:13px}.plain.svelte-1q4go2r{font:inherit;cursor:pointer;background:0 0;border:none;padding:4px 0;font-size:14px}.plain.svelte-1q4go2r:disabled{opacity:.4;cursor:default;text-decoration:none}.roots.svelte-1q4go2r{flex-wrap:wrap;gap:3px;display:flex}.roots.svelte-1q4go2r button:where(.svelte-1q4go2r){font:inherit;border:1px solid var(--line-strong);background:var(--key-white);min-width:36px;color:var(--key-white-label);cursor:pointer;border-radius:3px;padding:6px 4px;font-size:13px}.roots.svelte-1q4go2r button.black:where(.svelte-1q4go2r){background:var(--key-black);border-color:var(--key-black);color:var(--key-black-label)}.roots.svelte-1q4go2r button[aria-pressed=true]:where(.svelte-1q4go2r){outline:2px solid var(--root);outline-offset:1px}.message.svelte-1q4go2r{color:var(--ink-2);min-height:1.5em;margin:0}.message.done.svelte-1q4go2r{color:var(--good)}.message.oops.svelte-1q4go2r{color:var(--warn)}.drill.svelte-g59hqz{flex-direction:column;gap:12px;display:flex}.lead.svelte-g59hqz{margin:0;font-size:18px}.small.svelte-g59hqz{color:var(--ink-2);margin:0}.drill.svelte-g59hqz>.btn:where(.svelte-g59hqz){align-self:flex-start}.head.svelte-g59hqz{color:var(--ink-3);justify-content:space-between;font-size:14px;display:flex}.head.svelte-g59hqz p:where(.svelte-g59hqz){margin:0}.prompt.svelte-g59hqz{margin:0;font-size:22px}.options.svelte-g59hqz{flex-wrap:wrap;gap:8px;display:flex}.option.svelte-g59hqz{justify-content:center;min-width:120px}.option.svelte-g59hqz:disabled{opacity:1;cursor:default;color:var(--ink-3)}.option.right.svelte-g59hqz{border-color:var(--good);color:var(--good);box-shadow:inset 0 0 0 1px var(--good)}.option.wrong.svelte-g59hqz{border-color:var(--warn);color:var(--warn)}.plain.svelte-g59hqz{font:inherit;cursor:pointer;background:0 0;border:none;padding:4px 0;font-size:15px}.feedback.svelte-g59hqz{border-left:2px solid var(--warn);justify-content:space-between;align-items:center;gap:16px;padding:2px 0 2px 16px;display:flex}.feedback.good.svelte-g59hqz{border-left-color:var(--good)}.feedback.svelte-g59hqz p:where(.svelte-g59hqz){margin:0;font-size:17px}.done.svelte-g59hqz .big:where(.svelte-g59hqz){margin:0;font-size:40px;font-weight:600}.done.svelte-g59hqz p:where(.svelte-g59hqz){margin:0 0 12px;font-size:17px}.lesson.svelte-fyei7f{max-width:1040px;margin:0 auto;padding:0 24px 72px}.top.svelte-fyei7f{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;padding:18px 0;font-size:15px;display:flex}.sep.svelte-fyei7f{color:var(--ink-3)}.title.svelte-fyei7f{font-weight:500}.steps.svelte-fyei7f{gap:4px;margin:0 12px 0 auto;padding:0;list-style:none;display:flex}.steps.svelte-fyei7f a:where(.svelte-fyei7f){background:var(--line);width:28px;height:4px;display:block}.steps.svelte-fyei7f a.done:where(.svelte-fyei7f){background:var(--ink-3)}.steps.svelte-fyei7f a.current:where(.svelte-fyei7f){background:var(--ink)}main.svelte-fyei7f{padding-top:36px}.intro.svelte-fyei7f{max-width:640px}.count.svelte-fyei7f{color:var(--ink-3);margin:0;font-size:14px}h1.svelte-fyei7f{margin:2px 0 10px;font-size:32px;line-height:1.2}.text.svelte-fyei7f{max-width:640px;color:var(--ink);font-size:18px}.text.svelte-fyei7f p{margin:0 0 10px}.text.svelte-fyei7f strong{font-weight:600}.stage.svelte-fyei7f{margin:22px 0 18px}.feedback.svelte-fyei7f{flex-direction:column;gap:12px;max-width:640px;min-height:56px;display:flex}.win.svelte-fyei7f{border-left:2px solid var(--good);padding:2px 0 2px 16px}.win.svelte-fyei7f .text:where(.svelte-fyei7f){font-size:17px}.win.svelte-fyei7f .text:where(.svelte-fyei7f) p:last-child{margin-bottom:0}.term.svelte-fyei7f{margin:12px 0 0;font-size:15px}.term.svelte-fyei7f dt:where(.svelte-fyei7f){font-weight:600;display:inline}.term.svelte-fyei7f dt:where(.svelte-fyei7f):after{content:" — ";color:var(--ink-3);font-weight:400}.term.svelte-fyei7f dd:where(.svelte-fyei7f){color:var(--ink-2);margin:0;display:inline}.hint.svelte-fyei7f{color:var(--warn);margin:0;font-size:16px}.tip.svelte-fyei7f{color:var(--ink-2);margin:0;font-size:15px}.tip.svelte-fyei7f b:where(.svelte-fyei7f){color:var(--ink);font-weight:600}.nav.svelte-fyei7f{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;margin-top:32px;padding-top:20px;display:flex}.complete.svelte-fyei7f{max-width:640px;padding-top:80px}.complete.svelte-fyei7f .nav:where(.svelte-fyei7f){justify-content:flex-start}.page.svelte-k4o4o4{max-width:1040px;margin:0 auto;padding:0 24px 72px}.top.svelte-k4o4o4{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:18px 0;font-size:15px;display:flex}.sep.svelte-k4o4o4{color:var(--ink-3)}.spacer.svelte-k4o4o4{flex:1}main.svelte-k4o4o4{padding-top:36px}h1.svelte-k4o4o4{margin:0 0 4px;font-size:32px}.meta.svelte-k4o4o4{color:var(--ink-3);min-height:1.4em;margin:0 0 20px;font-size:14px}.meta.svelte-k4o4o4 a:where(.svelte-k4o4o4){color:var(--ink-2)}.missing.svelte-1n46o8q{text-align:center;padding:80px 20px}
