:root{color:#172033;font-synthesis:none;background:#eef1f6;font-family:Inter,ui-sans-serif,system-ui,sans-serif}*{box-sizing:border-box}body{min-width:320px;margin:0}button,input,select{font:inherit}main{width:min(1180px,100% - 32px);margin:0 auto;padding:8px 0}.scale-header{color:#fff;background:linear-gradient(130deg,#111827,#273855);border-radius:16px;padding:8px 14px;box-shadow:0 8px 24px #17203324}.scale-header h1{text-transform:capitalize;margin:0;font-size:clamp(1.35rem,2.2vw,1.8rem)}.scale-header p{margin:0 0 .25em}.eyebrow{color:#9fb6d8;letter-spacing:.12em;text-transform:uppercase;margin:0;font-weight:700}.scale-notes{flex-wrap:wrap;gap:9px;display:flex}.scale-notes span{background:#ffffff17;border:1px solid #ffffff38;border-radius:99px;padding:2px 8px}.panel,.practice{background:#fff;border:1px solid #dfe4ec;border-radius:18px;margin-top:10px;box-shadow:0 8px 28px #1720330c}.settings{padding:0}.settings summary{cursor:pointer;padding:12px 16px;font-weight:750}.settings-grid{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;padding:0 16px 14px;display:grid}.settings label,.controls label{color:#536079;gap:6px;font-size:.78rem;font-weight:700;display:grid}.settings select,.settings input{color:#172033;background:#fff;border:1px solid #cdd4df;border-radius:9px;width:100%;padding:9px}.practice{padding:12px}.progress{justify-content:space-between;margin-bottom:10px;font-weight:750;display:flex}.fretboard-scroll{background:#f8fafc;border-radius:12px;width:100%;overflow-x:auto}.fretboard{width:100%;height:auto;display:block}.grid line{stroke:#9aa5b5;stroke-width:1px}.grid text{fill:#1e293b;font-synthesis:weight;text-anchor:middle;font-size:11px;font-weight:700}.tone{fill:#c5ced8;stroke:none}.tone.path{fill:#dbeafe;stroke:#2563eb;stroke-width:1px}.tone.current{fill:#f5c400;stroke:#7a5b00;stroke-width:2px}text.tone,text.tone.path,text.tone.current{fill:#020617;stroke:none;font-synthesis:weight;text-anchor:middle;dominant-baseline:central;pointer-events:none;font-size:12px;font-weight:800}.keyboard{background:#fff;border:1px solid #dfe4ec;border-radius:18px;margin-top:10px;padding:8px 12px 10px;overflow-x:auto;box-shadow:0 8px 28px #1720330c}.piano{height:100px;position:relative}.white-key,.black-key{border:1px solid #94a3b8;flex-direction:column;justify-content:flex-end;align-items:center;display:flex;position:relative}.white-key{float:left;background:#f8fafc;border-radius:0 0 6px 6px;width:42px;height:100px;padding-bottom:4px}.black-key{z-index:1;background:#1e293b;border-color:#0f172a;border-radius:0 0 4px 4px;width:26px;height:62px;padding-bottom:4px;position:absolute;top:0}.white-key .key-name{color:#0f172a;font-size:13px;font-weight:750;line-height:1}.black-key .key-name{color:#f8fafc;font-size:11px;font-weight:750;line-height:1}.key-dot{background:#334155;border-radius:50%;width:16px;height:16px;margin-bottom:6px;box-shadow:inset 0 0 0 1.5px #fff}.black-key .key-dot{box-shadow:none;background:#e2e8f0}.key-dot.current{background:#f5c400;box-shadow:inset 0 0 0 1.5px #7a5b00}.root-ring{fill:none;stroke:#7d8b9c;stroke-width:1px;opacity:.8;pointer-events:none}.root-ring.inner{stroke-width:1px}.legend{color:#334155;flex-wrap:wrap;gap:8px 14px;margin:8px 0 0;padding:0;font-size:.78rem;font-weight:700;list-style:none;display:flex}.legend li{align-items:center;gap:6px;display:inline-flex}.swatch{box-sizing:border-box;border-radius:99px;width:16px;height:16px}.swatch.scale{background:#c5ced8}.swatch.path{background:#dbeafe;border:1px solid #2563eb}.swatch.root{background:#dbeafe;border:2px solid #2563eb;box-shadow:0 0 0 1px #fff,0 0 0 2px #7d8b9c}.swatch.current{background:#f5c400;border:2px solid #7a5b00}.scale-notes span.tonic{border-color:#ffffff80}.controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:24px;margin-top:10px;display:flex}.transport{color:#fff;cursor:pointer;background:#236d5a;border:0;border-radius:99px;padding:13px 28px;font-weight:800}.transport.stop{background:#ae3940}.transport:disabled{opacity:.55}.transport kbd{background:#ffffff20;border-radius:4px;margin-left:10px;padding:2px 6px}.debug{padding:15px 20px}.debug summary{cursor:pointer;font-weight:700}.debug dl{grid-template-columns:auto 1fr;gap:5px 16px;display:grid}.debug dd{margin:0}.error,.update{border-radius:10px;padding:12px 16px}.error{color:#8c1d28;background:#feecef}.update{z-index:2;background:#fff3c4;border:1px solid #e4c764;margin-bottom:10px;position:sticky;top:12px}@media (max-width:600px){main{width:min(100% - 18px,1180px)}.settings-grid{grid-template-columns:1fr 1fr}.practice{padding:10px}}
