@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);align-items:center;gap:.85rem;padding-bottom:.75rem;display:flex}.app__glyph{flex:none;width:34px;height:26px}.app__title{font-family:var(--font-display);letter-spacing:.12em;text-transform:lowercase;color:var(--ink);margin:0;font-size:1.5rem;font-weight:700}.app__tag{font-family:var(--font-display);letter-spacing:.14em;text-transform:uppercase;color:var(--voice);font-size:.72rem}.app__version{color:var(--dim);letter-spacing:.1em;margin-left:auto;font-size:.68rem}.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}.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}.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}.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}.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}.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}}
