@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root{font-family:'DM Sans',sans-serif;color:#392c42;background:#f4f0e8;font-synthesis:none;--ink:#392c42;--muted:#716875;--line:#cdc5cf;--lavender:#e4dceb;--mono:'IBM Plex Mono',monospace;--display:'Space Grotesk',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:25px}body{margin:0}button,a,input{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;color:inherit}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible{outline:3px solid #8f638f;outline-offset:4px}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:4px}button,input{touch-action:manipulation}[hidden]{display:none!important}header,main,footer{max-width:1240px;width:calc(100% - 80px);margin:auto}header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding:27px 0 24px}.wordmark{font:700 30px var(--display);letter-spacing:-1.3px;display:flex;align-items:center;gap:8px}.wordmark:hover{text-decoration:none}.logo{font-size:33px;font-weight:400}nav{display:flex;gap:32px;font-size:14px}.intro{display:flex;justify-content:space-between;align-items:flex-end;gap:44px;padding:40px 0}.intro>div{max-width:790px}.eyebrow,.section-label{font:11px var(--mono);letter-spacing:1px;line-height:1.5}.intro h1{font:600 clamp(45px,4.8vw,68px)/1.06 var(--display);letter-spacing:-3px;margin:0;max-width:790px}.intro>p{font-size:18px;line-height:1.6;max-width:340px;flex:0 0 28%;margin:0 0 6px}.heart{white-space:nowrap}.upper{display:grid;grid-template-columns:390px minmax(0,1fr);gap:20px}.capture-panel,.sound-panel,.play-panel{border:1px solid var(--line);border-radius:20px;padding:28px}.capture-panel{background:var(--lavender);border-color:#c6b8cd}.sound-panel{background:#fffdfa;display:flex;flex-direction:column;gap:20px;min-width:0}h2{font:600 28px/1.2 var(--display);letter-spacing:-.9px;margin:12px 0 14px}.help{font-size:15px;line-height:1.6;margin:0 0 22px}.primary{background:var(--ink);border:1px solid var(--ink);color:#fff;border-radius:10px;font-size:14px;font-weight:600;padding:14px 20px;transition:background .15s,transform .15s}.primary:hover{background:#57435e;transform:translateY(-1px)}.record{display:flex;align-items:center;width:100%;padding:18px 20px;font-size:16px;gap:12px}.record-dot{width:11px;height:11px;border-radius:50%;background:#fff;flex-shrink:0}.record #record-text{margin-right:auto}.record.recording .record-dot{animation:pulse .7s infinite}.capture-status{font-size:12px;line-height:1.6;margin:14px 0 0;min-height:39px}.capture-status.error{color:#9a2746;font-weight:600}#capture-meter{display:block;width:100%;height:12px;margin-top:10px;accent-color:#765080}.or{font:10px/1.6 var(--mono);letter-spacing:.15px;margin:22px 0 12px}.presets{display:flex;gap:10px}.presets button{flex:1;background:transparent;border:1px solid #a79bae;border-radius:8px;padding:10px 12px;font-size:19px;text-align:left}.presets button span{display:block;font-size:10px;color:#62576a;margin-top:3px}.presets button:hover{background:#f4edf8}.presets button.selected{background:#fffdfa;border-color:var(--ink);box-shadow:0 2px 0 #b2a1bc}.privacy{font-size:11px;line-height:1.5;margin:20px 0 0;color:#62576a;display:flex;gap:7px}.learning-title{display:flex;justify-content:space-between;align-items:center;gap:20px}.learning-title h2{margin-bottom:0}.state-badge{font:10px/1.4 var(--mono);text-transform:uppercase;color:var(--muted);text-align:right;max-width:95px}.state-badge.learning{color:#765080}.scope-panel{background:#f2edf5;padding:18px;border-radius:12px;min-width:0}.scope-top,.scope-bottom{display:flex;justify-content:space-between;gap:12px;font:10px/1.5 var(--mono)}.scope-top #pitch{white-space:nowrap;color:#62576a}.scope-panel canvas{display:block;width:100%;height:140px}.scope-bottom{align-items:center}.scope-bottom>span{font-size:8px;color:var(--muted)}.legend{display:flex;align-items:center;gap:7px;font:12px 'DM Sans',sans-serif}.target-key,.learned-key{width:16px;border-top:3px solid #ac93bc;display:inline-block}.learned-key{border-color:var(--ink);margin-left:12px}.learning-controls{display:flex;align-items:center;justify-content:space-between;gap:16px}.listen-row{display:flex;flex-wrap:wrap;gap:10px 18px}.listen-row button{background:none;border:0;padding:6px 0;font-size:13px;text-align:left}.listen-row button:hover,.listen-row button.active{color:#875184;text-decoration:underline;text-underline-offset:4px}#train{white-space:nowrap;display:flex;align-items:center;gap:20px}.status-row{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;font-size:12px;line-height:1.6;color:var(--muted)}#fit-label{font:9px/1.6 var(--mono);white-space:nowrap;display:flex;flex-direction:column;align-items:flex-end}#fit{font-size:17px;color:var(--ink)}.progress{height:4px;background:#eae2ef;border-radius:4px;overflow:hidden;margin-top:-10px}.progress>div{width:0;height:100%;background:#ac93bc;transition:width .1s}.play-panel{margin-top:20px;background:#dfb6b5;border-color:#c49ea4}.play-heading{display:flex;justify-content:space-between;align-items:center;gap:20px}.play-heading h2{margin-bottom:0}.volume{display:flex;align-items:center;gap:12px;font:10px var(--mono)}.volume input{width:100px;accent-color:var(--ink)}.play-hint{font-size:13px;line-height:1.6;margin:12px 0 22px}.keyboard{display:flex;gap:3px;height:150px;position:relative;user-select:none;touch-action:none}.key{border:1px solid #bbaab8;border-radius:0 0 9px 9px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding:0 0 14px;gap:7px;font:13px var(--mono);touch-action:none;transition:background .08s}.white{background:#fffdfa;width:12.5%;color:var(--ink);box-shadow:0 4px 0 #bbaab8}.black{position:absolute;top:0;width:7%;height:95px;background:var(--ink);border-color:#312437;color:#e4dceb;box-shadow:0 3px 0 #26192c;z-index:2;font-size:12px;border-radius:0 0 7px 7px}.key .note-name{font:10px 'DM Sans',sans-serif;color:var(--muted)}.black .note-name{display:none}.white.active{background:#e4dceb;box-shadow:0 1px 0 #bbaab8;transform:translateY(3px)}.black.active{background:#8b6d9b;transform:translateY(2px)}.keyboard-footer{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-top:20px;font-size:12px}.keyboard-footer p{margin:0;line-height:1.9}.melody{font:11px var(--mono);white-space:nowrap}.melody-caption{display:block;color:#66505d;font-size:11px}.keyboard-footer button{background:#f4f0e84d;border:1px solid #b58d96;border-radius:8px;padding:10px 14px;font-size:12px;white-space:nowrap}.keyboard-footer button:hover{background:#f4f0e8}.sound-shaping{margin-top:30px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}summary{cursor:pointer;list-style:none}summary::-webkit-details-marker{display:none}.sound-shaping>summary{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:24px 0;font-size:17px}.optional{font:10px var(--mono);color:var(--muted);display:flex;align-items:center;gap:14px}.optional b{font-size:20px;font-weight:400}.sound-shaping[open] .optional b{transform:rotate(45deg)}.harmonics-panel{padding:0 0 24px}.harmonics-heading{display:flex;justify-content:space-between;align-items:center;gap:24px;font-size:13px}.harmonics-heading p{margin:0;line-height:1.6}.quiet{background:none;border:0;font-size:12px;color:var(--muted);padding:10px 0;text-align:right}.harmonics{display:grid;grid-template-columns:repeat(16,minmax(0,1fr));gap:14px;height:152px;margin:24px 0 14px}.harmonic{display:flex;flex-direction:column;align-items:center;min-width:0}.fader{position:relative;height:118px;width:100%;display:flex;justify-content:center;background:repeating-linear-gradient(to top,transparent 0,transparent 28px,#e0d9e3 28px,#e0d9e3 29px)}.fader:before{content:'';position:absolute;inset:0 auto 0 calc(50% - 2px);width:4px;background:#ddd3e2;border-radius:3px}.fader input{position:relative;writing-mode:vertical-lr;direction:rtl;appearance:none;-webkit-appearance:none;width:26px;height:118px;background:transparent;cursor:ns-resize;margin:0;z-index:2}.fader input::-webkit-slider-thumb{appearance:none;width:26px;height:12px;border-radius:4px;background:var(--ink);border:1px solid #271e2d;box-shadow:0 2px 2px #0002}.fader input::-moz-range-thumb{width:26px;height:12px;border-radius:4px;background:var(--ink);border:1px solid #271e2d}.fader .marker{position:absolute;height:2px;width:34px;left:calc(50% - 17px);background:#ac93bc;pointer-events:none;bottom:0}.harmonic button{font:10px var(--mono);border:0;background:none;color:var(--muted);margin-top:10px;padding:5px;min-width:26px}.harmonic button[aria-pressed=true]{background:#dfb6b5;border-radius:4px;color:var(--ink)}.harmonic:has(button[aria-pressed=true]) input::-webkit-slider-thumb{background:#a85d76;border-color:#a85d76}.harmonics-footer{display:flex;justify-content:space-between;font:9px var(--mono);color:var(--muted);gap:12px}.harmonics-footer>span>span{padding:0 12px}.target-tick{display:inline-block;width:10px;border-top:2px solid #ac93bc;vertical-align:middle}.explanation{display:grid;grid-template-columns:390px 1fr;gap:40px;padding:56px 0}.explanation h2{font-size:36px;line-height:1.1;max-width:320px;margin:14px 0 22px}.text-link{font-size:13px;text-decoration:underline;text-underline-offset:4px}.explanation-copy{font-size:15px;line-height:1.8}.explanation-copy p{margin:0 0 18px}.explanation-copy strong{font-weight:600}.explanation-copy a{text-decoration:underline;text-underline-offset:3px}.explanation-copy details{margin-top:25px;font-size:13px;color:var(--muted)}.explanation-copy summary{display:flex;justify-content:space-between;padding-bottom:12px;border-bottom:1px solid var(--line);color:var(--ink)}.explanation-copy details p{margin:15px 0 0}footer{display:flex;justify-content:space-between;align-items:center;gap:20px;border-top:1px solid var(--line);padding:25px 0 32px;font-size:12px}footer>span:first-child{font:600 19px var(--display);letter-spacing:-.5px}.footer-note{font:12px 'DM Sans',sans-serif;color:var(--muted);letter-spacing:0;margin-left:20px}footer a{text-decoration:underline;text-underline-offset:3px}@keyframes pulse{50%{opacity:.25}}
@media(max-width:1150px){header,main,footer{width:calc(100% - 56px)}.upper{grid-template-columns:320px minmax(0,1fr)}.capture-panel,.sound-panel,.play-panel{padding:24px}h2{font-size:25px}.learning-title{align-items:flex-start}.state-badge{font-size:9px}.intro h1{font-size:56px}.intro>p{font-size:16px;flex-basis:29%}.learning-controls{flex-wrap:wrap;gap:12px}.listen-row{flex:1}.explanation{grid-template-columns:320px 1fr}.harmonics{gap:9px}.footer-note{display:none}}
@media(max-width:820px){header,main,footer{width:calc(100% - 40px)}.intro{display:block;padding:32px 0}.intro h1{max-width:700px;font-size:54px;letter-spacing:-2.5px}.intro>p{max-width:550px;margin:20px 0 0}.upper{grid-template-columns:1fr}.capture-panel{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}.capture-panel>.section-label,.capture-panel>h2,.capture-panel>.help{grid-column:1}.capture-panel>.record{grid-column:2;grid-row:1/3;align-self:center}.capture-status{grid-column:2;grid-row:3/5;margin-top:0}.capture-panel>.or{margin-top:10px;grid-column:1}.capture-panel>.presets{grid-column:1}.privacy{grid-column:2;align-self:end}.capture-panel>#capture-meter{grid-column:2;grid-row:5}.scope-panel canvas{height:160px}.learning-controls{flex-wrap:nowrap}.sound-panel{gap:22px}.explanation{grid-template-columns:1fr;gap:24px;padding:38px 0}.explanation h2{max-width:none;font-size:32px;margin-bottom:14px}.harmonics{gap:6px}.fader .marker{width:26px;left:calc(50% - 13px)}}
@media(max-width:640px){header,main,footer{width:calc(100% - 32px)}header{padding:18px 0}.wordmark{font-size:25px}.logo{font-size:28px}nav{gap:16px;font-size:11px}.intro{padding:30px 0}.intro .eyebrow{font-size:9px;letter-spacing:.7px}.intro h1{font-size:43px;letter-spacing:-2px;line-height:1.08;margin-top:0}.intro>p{font-size:15px;line-height:1.7;max-width:330px}.capture-panel,.sound-panel,.play-panel{padding:22px 20px;border-radius:16px}.capture-panel{display:block}.capture-panel h2{font-size:27px}.help{font-size:14px}.record{padding:17px 16px}.capture-status{margin-top:14px}.capture-panel>.or{margin-top:22px;font-size:9px}.privacy{margin-top:18px}.section-label{font-size:9px}.learning-title h2{font-size:25px}.learning-title{gap:14px}.state-badge{max-width:65px;font-size:8px;flex-shrink:0}.scope-panel{padding:14px}.scope-top{font-size:8px;gap:6px}.scope-bottom>span{display:none}.legend{font-size:10px;gap:5px}.learned-key{margin-left:9px}.scope-panel canvas{height:125px}.learning-controls{flex-direction:column;align-items:stretch;gap:16px}.listen-row{justify-content:space-between;gap:10px}.listen-row button{font-size:12px}#train{justify-content:space-between;width:100%}.status-row{font-size:11px;gap:14px}#fit-label{font-size:8px}#fit{font-size:16px}.play-panel{margin-top:20px}.play-heading{align-items:flex-start;gap:12px}.play-heading h2{font-size:25px;max-width:190px}.volume{flex-direction:column;gap:8px;font-size:8px;align-items:flex-end;padding-top:4px}.volume input{width:65px;margin:0}.play-hint{font-size:12px}.keyboard{height:130px;gap:2px}.black{height:82px;font-size:10px}.key{font-size:11px;padding-bottom:12px;gap:5px;border-radius:0 0 5px 5px}.key .note-name{font-size:8px}.keyboard-footer{flex-direction:column;align-items:flex-start;gap:16px;font-size:11px}.melody{display:block;white-space:normal;line-height:1.8;font-size:10px}.melody-caption{font-size:10px}.keyboard-footer button{width:100%;padding:12px}.optional{font-size:8px;gap:7px}.sound-shaping>summary{font-size:16px;padding:20px 0}.harmonics-heading{align-items:flex-start;gap:12px;font-size:11px}.quiet{font-size:10px;min-width:72px;padding-top:0}.harmonics{gap:3px;height:132px}.fader,.fader input{height:98px}.fader input{width:16px}.fader input::-webkit-slider-thumb{width:15px;height:11px}.fader input::-moz-range-thumb{width:15px;height:11px}.fader .marker{width:16px;left:calc(50% - 8px)}.harmonic button{font-size:8px;min-width:14px;padding:5px 0}.harmonics-footer{font-size:6px;line-height:1.7}.harmonics-footer>span>span{padding:0 3px}.explanation h2{font-size:32px;max-width:300px}.explanation-copy{font-size:14px}footer{align-items:flex-start;font-size:10px;line-height:1.6}footer>span:first-child{font-size:18px}footer>span:last-child{text-align:right;max-width:135px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}html{scroll-behavior:auto}}

/* Full piano: keep playable key sizes on small screens and scroll within the panel. */
.piano-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.piano-range{font:10px var(--mono);line-height:1.6}.piano-range>span{display:block;font:12px/1.6 'DM Sans',sans-serif;color:#66505d}.octave-controls{display:flex;align-items:center;gap:12px}.octave-controls button{border:1px solid #b58d96;border-radius:8px;background:#f4f0e84d;padding:9px 12px;font:18px var(--mono)}.octave-controls button span{font-size:11px;margin-left:6px}.octave-controls button:disabled{cursor:default}.octave-label{font:8px/1.5 var(--mono);text-align:center;min-width:90px}.octave-label strong{display:block;font-size:14px;font-weight:500}.keyboard-scroll{overflow-x:auto;padding:5px 3px 12px;scrollbar-color:#936d80 #d2a5a9;overscroll-behavior-x:contain}.keyboard{--piano-key-width:42px;display:block;width:calc(var(--piano-key-width) * 52);height:150px;touch-action:pan-x}.key{position:absolute;touch-action:pan-x}.white{width:calc(var(--piano-key-width) - 2px);height:150px;top:0}.black{width:calc(var(--piano-key-width) * .62);height:95px}.key .typing-key{height:16px;line-height:16px}.key.mapped.white{background:#f7f0fb;border-bottom:4px solid #a58bb4}.key.mapped.black{border-bottom:3px solid #bba0cc}.key.white.active{background:#c7b1d5}.key.black.active{background:#8b6d9b}.key:focus-visible{outline-offset:-4px;z-index:3}.keyboard-scroll:focus-visible{outline:2px solid #8f638f;outline-offset:3px}
@media(max-width:640px){.piano-toolbar{align-items:flex-start;gap:12px;flex-direction:column}.octave-controls{align-self:stretch;justify-content:space-between}.piano-range>span{display:inline;margin-left:10px;font-size:10px}.piano-range{font-size:9px}.keyboard{height:140px}.white{height:140px}.black{height:88px}.key .note-name{font-size:9px}}

.layout-picker{display:flex;flex-direction:column;gap:6px;font:9px var(--mono)}.layout-picker select{max-width:100%;font:13px 'DM Sans',sans-serif;color:var(--ink);background:#f4f0e880;border:1px solid #b58d96;border-radius:6px;padding:8px}.piano-toolbar{flex-wrap:wrap}.black .note-name{display:block;font-size:8px;color:#ded0e6}.black .typing-key{font-size:10px}.typing-instructions{margin-top:18px;border-top:1px solid #bc939c;padding-top:14px}.typing-instructions summary{font-size:13px;display:flex;justify-content:space-between;gap:12px}.typing-instructions summary>span{font:9px var(--mono)}.typing-instructions p{font-size:12px;line-height:1.6;margin:12px 0}.typing-guide{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:5px}.typing-guide-key{display:flex;flex-direction:column;align-items:center;gap:3px;background:#f4f0e84d;border:1px solid #bd969e;border-radius:5px;padding:7px 1px;font-size:10px}.typing-guide-key kbd{font:14px var(--mono)}.typing-guide-key small{font-size:9px;color:#66505d}.typing-guide-key:nth-child(21),.typing-guide-key:nth-child(30){grid-column:1}.keyboard-footer strong{display:block;font-weight:600}.keyboard-footer .melody{display:block;margin-top:5px;letter-spacing:1px;font-size:13px}
@media(max-width:640px){.layout-picker{width:100%}.typing-guide{gap:3px}.typing-guide-key{font-size:8px;padding:6px 0}.typing-guide-key kbd{font-size:11px}.typing-guide-key small{font-size:7px}.typing-instructions summary{font-size:12px}.typing-instructions summary>span{font-size:8px}}

.typing-guide-key.active{background:var(--ink);color:#fff;border-color:var(--ink)}.typing-guide-key.active small{color:#e4dceb}

.harmonics{height:auto;grid-auto-rows:152px;row-gap:22px}@media(max-width:640px){.harmonics{height:auto;grid-auto-rows:132px}}

.playback-modes{display:flex;gap:10px;margin-top:20px}.playback-modes button{flex:1;background:#f4f0e84d;border:1px solid #b58d96;border-radius:9px;padding:12px 15px;text-align:left;font-weight:600;font-size:14px}.playback-modes button span{display:block;font-size:11px;font-weight:400;margin-top:5px}.playback-modes button[aria-pressed=true]{background:var(--ink);color:#fff;border-color:var(--ink)}.playback-modes button:disabled{cursor:default}.mode-help,.model-note{font-size:12px;line-height:1.6}.mode-help{margin:12px 0;color:#594551}.model-note{margin:0;color:var(--muted)}.voice-preview{background:#fffdfa99;border-radius:10px;padding:14px;margin:14px 0}.voice-preview>div{display:flex;justify-content:space-between;gap:12px;font:9px/1.5 var(--mono)}.voice-preview strong{font-weight:400}.voice-preview canvas{display:block;width:100%;height:86px}.listen-row{gap:6px 14px}@media(max-width:640px){.playback-modes button{padding:11px;font-size:13px}.playback-modes button span{font-size:10px}.voice-preview>div{flex-direction:column;gap:4px}}

.voice-learning{background:#fffdfa99;border:1px solid #b58d9660;border-radius:10px;padding:18px;margin:16px 0}.voice-tone-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.voice-tone-heading h3{font-size:16px;letter-spacing:-.3px;margin:0}.voice-tone-heading>span{font:9px/1.6 var(--mono);color:var(--muted)}.voice-learning p{font-size:12px;line-height:1.65;margin:12px 0}.voice-tone-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.voice-tone-controls button{border:1px solid #b58d9680;border-radius:7px;padding:9px 12px;background:transparent;font-size:12px}.voice-toggle{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;margin-right:auto}.voice-toggle input{accent-color:var(--ink);width:17px;height:17px}.voice-learning progress{width:100%;height:6px;accent-color:var(--ink);margin:0 0 16px}.voice-note-status{min-height:20px;color:var(--ink)}.voice-tone-details summary{font-size:11px;color:var(--muted);cursor:pointer}.voice-tone-details p{color:var(--muted);font-size:11px}.voice-tone-controls button:disabled{cursor:default;opacity:.55}@media(max-width:640px){.voice-learning{padding:14px}.voice-toggle{width:100%}.voice-tone-controls{gap:9px}.voice-tone-controls button{flex:1;padding:9px 7px;font-size:11px}}
