@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-mono-vietnamese-400-normal-BNOj0Qhp.woff2)format("woff2"),url(/assets/space-mono-vietnamese-400-normal-B0PMp_xB.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-mono-latin-ext-400-normal-DTLbW2xa.woff2)format("woff2"),url(/assets/space-mono-latin-ext-400-normal-D4cJI_B-.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-mono-latin-400-normal-Rg4St2Dn.woff2)format("woff2"),url(/assets/space-mono-latin-400-normal-_3DlpgIW.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-mono-vietnamese-700-normal-DWQgDHuA.woff2)format("woff2"),url(/assets/space-mono-vietnamese-700-normal-D-KrLuLr.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-mono-latin-ext-700-normal-B2s3bDs2.woff2)format("woff2"),url(/assets/space-mono-latin-ext-700-normal-B_E7P90g.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-mono-latin-700-normal-mWgeinG7.woff2)format("woff2"),url(/assets/space-mono-latin-700-normal-D7A851RN.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-600-normal-9HEixskS.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-600-normal-fLZuRloM.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-600-normal-iLQfcSjf.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-600-normal-DmB0ttJJ.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--panel:#0e1615;--plate:#131d1b;--plate-2:#182422;--line:#26332f;--line-hi:#33413c;--ink:#e7e4d8;--muted:#7f8c82;--dim:#56635c;--voice:#e0a63a;--synth:#3fcdb4;--danger:#e8674f;--radius:2px;--font-display:"Space Mono", ui-monospace, monospace;--font-mono:"IBM Plex Mono", ui-monospace, monospace}.app--vocoder{--synth:#3fcdb4}.app--harmony{--synth:#5aa7f0}.app--formant{--synth:#d98b5a}.app--follow{--synth:#74d17a}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--panel);color:var(--ink);font-family:var(--font-mono);-webkit-font-smoothing:antialiased}button{font-family:var(--font-mono);cursor:pointer;color:inherit}.app{flex-direction:column;gap:.9rem;max-width:940px;min-height:100%;margin:0 auto;padding:1.25rem 1.25rem 3rem;display:flex}.app__header{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:.5rem .85rem;padding-bottom:.75rem;display:flex}.app__title{flex:none;align-items:center;gap:.5rem;margin:0;display:flex}.app__wordmark{border-radius:8px;width:auto;height:40px;display:block}.app__tag{font-family:var(--font-display);letter-spacing:.14em;text-transform:uppercase;color:var(--voice);font-size:.72rem}.app__master{align-items:center;gap:1rem;margin-left:auto;display:flex}.hslider{align-items:center;gap:.4rem;display:flex}.hslider__label{font-family:var(--font-display);letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-size:.62rem}.hslider__input{width:84px}.hslider__value{min-width:2.2ch;color:var(--ink);font-variant-numeric:tabular-nums;font-size:.68rem}.app__version{color:var(--dim);letter-spacing:.1em;font-variant-numeric:tabular-nums;align-self:flex-end;padding-bottom:2px;font-size:.62rem}.app__error{background:color-mix(in srgb, var(--danger) 14%, transparent);border:1px solid var(--danger);color:var(--ink);border-radius:var(--radius);padding:.5rem .75rem;font-size:.78rem}.app__notice{background:color-mix(in srgb, var(--accent) 12%, transparent);border:1px solid var(--accent);color:var(--ink);border-radius:var(--radius);align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.78rem;display:flex}.app__notice-x{color:inherit;cursor:pointer;background:0 0;border:none;margin-left:auto;padding:.1rem .3rem;font-size:.9rem;line-height:1}.transport{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.btn{background:var(--plate);border:1px solid var(--line);border-top-color:var(--line-hi);border-radius:var(--radius);letter-spacing:.06em;text-transform:uppercase;padding:.5rem .8rem;font-size:.74rem;transition:border-color .12s,color .12s,background .12s}.btn:hover{border-color:var(--dim)}.btn--primary{background:var(--voice);color:#1c1206;border-color:var(--voice);font-weight:700}.btn--on{border-color:var(--synth);color:var(--synth);background:color-mix(in srgb, var(--synth) 10%, var(--plate))}.btn--rec{border-color:var(--danger);color:var(--danger)}.btn--danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--line))}.transport__src{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.68rem}.transport__tempo{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);align-items:center;gap:.4rem;margin-left:auto;font-size:.68rem;display:flex}.transport__tempo input{background:var(--panel);width:3.6rem;color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);font-family:var(--font-mono);padding:.3rem}.meters{background:var(--plate);border:1px solid var(--line);border-top-color:var(--line-hi);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:1rem;padding:.6rem .85rem;display:flex}.meter{flex:1;align-items:center;gap:.5rem;min-width:150px;display:flex}.meter__label{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);width:5.5rem;font-size:.62rem}.meter__track{border:1px solid var(--line);background:#0a100f;border-radius:1px;flex:1;height:6px;overflow:hidden}.meter__fill{height:100%;transition:width 60ms linear}.meter__fill--signal{background:var(--synth)}.meter__fill--accent{background:var(--voice)}.meter__fill--danger{background:var(--danger)}.meters__pitch{letter-spacing:.05em;color:var(--voice);font-size:.72rem}.meters__clip{letter-spacing:.12em;color:var(--dim);border:1px solid var(--line);border-radius:4px;padding:.05rem .3rem;font-size:.58rem;transition:color .1s,border-color .1s,background .1s}.meters__clip--on{color:var(--danger);border-color:var(--danger);background:color-mix(in srgb, var(--danger) 18%, transparent)}.knob--disabled{opacity:.4}.knob--disabled .knob__input{pointer-events:none}.midimap{flex-direction:column;gap:.6rem;display:flex}.midimap__head{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.midimap__hint{color:var(--dim);font-size:.68rem}.midimap__group{flex-direction:column;gap:.2rem;display:flex}.midimap__title{letter-spacing:.12em;text-transform:uppercase;color:var(--dim);margin:.2rem 0;font-size:.62rem}.midimap__row{grid-template-columns:1fr auto 5rem 2rem;align-items:center;gap:.5rem;font-size:.74rem;display:grid}.midimap__src{color:var(--voice);font-variant-numeric:tabular-nums;text-align:right}.midimap__learn,.midimap__clear{padding:.15rem .4rem;font-size:.68rem}.slots{flex-wrap:wrap;align-items:center;gap:1rem;margin-top:.5rem;display:flex}.slots__ab,.slots__quick{flex-wrap:wrap;align-items:center;gap:.3rem;display:flex}.slots__label{letter-spacing:.12em;text-transform:uppercase;color:var(--dim);margin-right:.2rem;font-size:.62rem}.slots__set{padding:.15rem .4rem;font-size:.66rem}.slots__num{font-variant-numeric:tabular-nums;min-width:2rem}.slots__num--filled{border-color:var(--accent);color:var(--accent)}.slots__num--arm{border-style:dashed}.presets__perf{color:var(--dim);align-items:center;gap:.25rem;font-size:.68rem;display:inline-flex}.presets__perf-badge{color:var(--accent)}.harmony-panel{flex-direction:column;gap:.6rem;display:flex}.hvoices{flex-direction:column;gap:.35rem;display:flex}.hvoices__row{border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:.6rem;padding:.25rem .4rem;display:flex}.hvoices__row--off{opacity:.5}.hvoices__n{letter-spacing:.1em;color:var(--dim);min-width:1.6rem;font-size:.66rem}.devices{flex-direction:column;gap:.6rem;display:flex}.devices__row{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.devices__label{letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-size:.62rem}.devices__note{color:var(--dim);font-size:.66rem}.devices__stats{color:var(--voice);font-variant-numeric:tabular-nums;gap:1rem;font-size:.7rem}.devices__refresh{padding:.15rem .45rem}.perf-stage{z-index:50;background:var(--bg,#0c110f);color:var(--ink);flex-direction:column;gap:clamp(.6rem,2vh,1.4rem);padding:clamp(.8rem,3vw,2rem);display:flex;position:fixed;inset:0;overflow:auto}.perf-stage__top,.perf-stage__meters,.perf-stage__slots,.perf-stage__transport{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.perf-stage__top{justify-content:space-between}.perf-stage__modes,.perf-stage__actions{flex-wrap:wrap;gap:.5rem;display:flex}.perf-btn{min-width:48px;min-height:48px;font-size:1rem;font-family:var(--font-display);letter-spacing:.06em;background:var(--plate,#151d19);color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;padding:0 1rem}.perf-btn--big{flex:1;min-height:64px;font-size:1.15rem}.perf-btn--on{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb, var(--accent) 16%, transparent)}.perf-btn--rec{border-color:var(--danger);color:var(--danger);background:color-mix(in srgb, var(--danger) 18%, transparent)}.perf-btn--danger{border-color:color-mix(in srgb, var(--danger) 60%, var(--line));color:var(--danger)}.perf-btn:disabled{opacity:.4;cursor:default}.perf-stage__pitch{font-family:var(--font-display);color:var(--voice);font-variant-numeric:tabular-nums;font-size:clamp(1.4rem,5vw,2.6rem)}.perf-stage__state{letter-spacing:.1em;text-transform:uppercase;color:var(--dim);margin-left:auto;font-size:.8rem}.perf-stage__body{flex:1;align-items:center;gap:clamp(1rem,4vw,3rem);min-height:0;display:flex}.perf-stage__macros{flex-wrap:wrap;flex:1;justify-content:center;gap:clamp(1rem,3vw,2.5rem);display:flex}.perf-macro .knob__input{width:clamp(120px,22vw,260px);height:24px}.perf-macro .knob__label{font-size:1rem}.perf-stage__xy{flex:1;justify-content:center;display:flex}.perf-stage__xy .xypad{width:min(46vw,46vh);max-width:480px;height:min(46vw,46vh);max-height:480px}.perf-slot{min-width:56px;font-size:1.1rem}.perf-slot--filled{border-color:var(--accent);color:var(--accent)}@media (orientation:portrait){.perf-stage__body{flex-direction:column}}.perf-stage :focus-visible{outline:3px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){.perf-stage,.perf-stage *{transition:none!important;animation:none!important}}.tabs{border:1px solid var(--line);border-radius:var(--radius);gap:0;display:flex;overflow:hidden}.tab{background:var(--plate);border:none;border-right:1px solid var(--line);color:var(--muted);font-family:var(--font-display);letter-spacing:.14em;flex:1;padding:.6rem;font-size:.74rem}.tab:last-child{border-right:none}.tab--active{color:var(--panel);background:var(--synth);font-weight:700}.mode-desc{letter-spacing:.04em;color:var(--muted);margin:-.35rem 0 0;font-size:.72rem}.panel{background:var(--plate);border:1px solid var(--line);border-top-color:var(--line-hi);border-radius:var(--radius);flex-direction:column;gap:1.1rem;padding:1rem;display:flex}.panel__shared,.controls-grid,.macros{grid-template-columns:repeat(auto-fill,minmax(94px,1fr));gap:.85rem;display:grid}.knob,.select{flex-direction:column;gap:.3rem;display:flex}.knob__label,.select__label{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:.62rem}.knob__input{width:100%;accent-color:var(--synth)}.knob__value{color:var(--ink);font-size:.76rem}.knob__unit{color:var(--dim);margin-left:2px}.select select,.presets__factory{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);font-family:var(--font-mono);padding:.4rem;font-size:.76rem}.select--disabled{opacity:.45}.select select:disabled{cursor:not-allowed}.toggle{background:var(--panel);border:1px solid var(--line);color:var(--muted);border-radius:var(--radius);letter-spacing:.08em;text-transform:uppercase;align-self:end;padding:.5rem;font-size:.66rem}.tuning{flex-wrap:wrap;grid-column:1/-1;align-items:flex-end;gap:.6rem;display:flex}.tuning .select{min-width:150px}.tuning--disabled{opacity:.45}.tuning--disabled input:disabled,.tuning--disabled button:disabled{cursor:not-allowed}.tuning--disabled .select--disabled{opacity:1}.tuning__active{color:var(--muted);padding-bottom:.45rem;font-size:.7rem}.tuning__scl{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;flex-direction:column;gap:.3rem;font-size:.62rem;display:flex}.tuning__scl input{max-width:130px;font-size:.66rem}.tuning__link{align-items:stretch;gap:.35rem;display:flex}.tuning__link input{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);font-family:var(--font-mono);min-width:160px;padding:.4rem;font-size:.72rem}.tuning__link button{background:var(--panel);border:1px solid var(--line);color:var(--muted);border-radius:var(--radius);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;padding:.4rem .7rem;font-size:.66rem}.tuning__link button:disabled{opacity:.5;cursor:default}.tuning__notice{color:var(--synth);flex-basis:100%;font-size:.7rem}.toggle--on{border-color:var(--synth);color:var(--synth)}.perf{grid-template-columns:1fr 190px;align-items:start;gap:1rem;display:grid}@media (max-width:640px){.perf{grid-template-columns:1fr}}.xypad{aspect-ratio:1;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);touch-action:none;position:relative;overflow:hidden}.xypad__grid{background-image:linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);opacity:.5;background-size:20% 20%;position:absolute;inset:0}.xypad__dot{width:12px;height:12px;position:absolute;transform:translate(-50%,-50%)}.xypad__dot:before,.xypad__dot:after{content:"";background:var(--voice);position:absolute}.xypad__dot:before{opacity:.5;width:1px;top:-600px;bottom:-600px;left:50%;transform:translate(-50%)}.xypad__dot:after{opacity:.5;height:1px;top:50%;left:-600px;right:-600px;transform:translateY(-50%)}.xypad__dot{outline:2px solid var(--voice);outline-offset:-1px;border-radius:50%}.xypad:focus-visible{border-color:var(--synth);outline:none}.xypad__x,.xypad__y{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);pointer-events:none;font-size:.6rem;position:absolute}.xypad__x{bottom:4px;right:6px}.xypad__y{writing-mode:vertical-rl;top:4px;left:6px}.fx summary{cursor:pointer;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);padding:.4rem 0;font-size:.68rem}.fx[open] summary{color:var(--synth)}.presets{flex-direction:column;gap:.5rem;display:flex}.presets__row{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.presets__row button{background:var(--plate);border:1px solid var(--line);border-radius:var(--radius);letter-spacing:.06em;text-transform:uppercase;padding:.4rem .7rem;font-size:.68rem}.presets__row button:hover:not(:disabled){border-color:var(--synth)}.presets__row button:disabled{opacity:.4;cursor:not-allowed}.presets__msg{color:var(--synth);font-size:.7rem}.presets__user{flex-wrap:wrap;gap:.4rem;display:flex}.presets__chip{border:1px solid var(--line);border-radius:var(--radius);display:inline-flex;overflow:hidden}.presets__chip button{background:var(--plate);color:var(--ink);border:none;padding:.3rem .6rem;font-size:.7rem}.presets__x{color:var(--danger)!important;border-left:1px solid var(--line)!important}.kbd-bar{flex-direction:column;gap:.4rem;display:flex}.kbd-bar__info{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.66rem}.keys{-webkit-user-select:none;user-select:none;border:1px solid var(--line);border-radius:var(--radius);height:92px;display:flex;overflow:hidden}.keys__white-slot{flex:1;position:relative}.keys__white{background:#d9d6cb;border:none;border-right:1px solid #1a2321;justify-content:center;align-items:flex-end;padding-bottom:5px;display:flex;position:absolute;inset:0}.keys__white:active{background:#c4c1b6}.keys__black{z-index:2;background:#14201d;border:1px solid #060a09;justify-content:center;align-items:flex-end;width:36%;height:60%;padding-bottom:4px;display:flex;position:absolute;top:0;right:-18%}.keys__hint{font-family:var(--font-mono);color:#6a7168;font-size:.58rem}.keys__black .keys__hint{color:#7f8c82}.keys__key--on{background:var(--voice)!important}.modal{z-index:10;background:#060a09cc;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.modal__box{background:var(--plate);border:1px solid var(--voice);border-radius:var(--radius);max-width:420px;padding:1.5rem}.modal__box h2{font-family:var(--font-display);letter-spacing:.08em;text-transform:uppercase;color:var(--voice);margin-top:0}.modal__box p{color:var(--ink);font-size:.86rem;line-height:1.55}.modal__actions{justify-content:flex-end;gap:.5rem;margin-top:1rem;display:flex}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
