{"children":[{"children":[{"children":[],"kind":"view-node","props":{"html":"<style>.ls-desk{margin:28px 0;padding:24px;background:#08191d;color:#e4f7ee;border:1px solid #294442;border-radius:20px;font:14px/1.5 system-ui,sans-serif}.ls-desk *{box-sizing:border-box}.ls-desk header{display:flex;justify-content:space-between;align-items:center;gap:18px}.ls-eyebrow{font-size:11px;letter-spacing:.15em;color:#a5dd89}.ls-desk h2{font-size:30px;line-height:1.2;margin:10px 0}.ls-desk h3{margin:0 0 8px}.ls-desk p{color:#9bb6b4}.ls-desk a{color:#b8e696}.ls-desk button,.ls-desk select,.ls-desk input[type=number]{color:inherit;background:#142c2e;border:1px solid #3c5c55;border-radius:8px;padding:9px 12px;font:inherit}.ls-desk button{cursor:pointer}.ls-desk button:disabled{opacity:.45;cursor:default}.ls-desk button:focus-visible,.ls-desk input:focus-visible,.ls-desk textarea:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}.ls-desk [data-ls=apply],.ls-desk [data-ls=start]{background:#c4ef83;color:#142819;font-weight:650}.ls-transport{display:flex;align-items:center;gap:12px;margin:18px 0;padding:12px;background:#102426;border-radius:12px;flex-wrap:wrap}.ls-transport output{font-variant-numeric:tabular-nums}.ls-meter{width:72px;height:6px;background:#294442;border-radius:4px;overflow:hidden}.ls-meter i{display:block;height:100%;width:0;background:#c4ef83}.ls-columns{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(250px,1fr);gap:24px}.ls-code,.ls-mix{min-width:0}.ls-code nav{display:flex;gap:8px;margin-bottom:14px}.ls-code nav [aria-pressed=true]{border-color:#c4ef83;color:#c4ef83}.ls-desk label{display:block}.ls-code label>span{float:right;font-size:11px;color:#779d99}.ls-desk textarea{display:block;width:100%;resize:vertical;min-height:260px;background:#031013;color:#d0eddf;border:1px solid #284542;border-radius:10px;padding:15px;margin-top:8px;font:13px/1.6 ui-monospace,monospace;tab-size:2}.ls-compose,.ls-actions{display:flex;flex-wrap:wrap;align-items:end;gap:10px;margin:12px 0}.ls-compose input{width:85px}.ls-compose select{display:block}.ls-desk pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 ui-monospace,monospace}.ls-desk [data-ls=status]{min-height:40px;color:#c4ef83}.ls-desk [data-ls=status][data-error=true]{color:#ffb4a6}.ls-desk kbd{font-size:10px;opacity:.65;margin-left:10px}.ls-lanes{margin:20px 0}.ls-lanes label{display:grid;grid-template-columns:58px minmax(50px,1fr) 40px;gap:8px;align-items:center;margin:16px 0}.ls-lanes input{width:100%;accent-color:#b6e77f}.ls-lanes output{text-align:right;font-size:12px}.ls-tempo input{width:85px}.ls-desk details{margin-top:24px}.ls-desk summary{cursor:pointer}.ls-clock-boundary{font-size:12px;margin-top:24px}.ls-desk [hidden]{display:none!important}.ls-desk [data-cre8-island]{min-height:0!important}@media(max-width:720px){.ls-desk{padding:16px}.ls-columns{grid-template-columns:1fr}.ls-desk header{align-items:start;flex-direction:column}.ls-transport output{flex-basis:100%}.ls-desk h2{font-size:26px}}\n\n/* Editor metrics are shared so the projection stays aligned with native text selection. */\n.ls-desk{scroll-margin-top:18px}.ls-desk [data-ls=focus]{margin-left:auto}.ls-draft-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:8px 0 14px;color:#b6dba0;font-size:12px}.ls-draft-bar button{padding:4px 8px;font-size:11px;background:transparent}.ls-desk[data-dirty=true] [data-ls=draft-state]{color:#f5bb7c}.ls-editor-frame{display:flex;border:1px solid #355a51;border-radius:10px;overflow:hidden;background:#031013;margin-top:8px;position:relative}.ls-gutter{flex:0 0 42px;background:#07191b;color:#547d76;text-align:right;overflow:hidden;user-select:none}.ls-desk .ls-gutter pre{margin:0;padding:15px 9px 15px 0;white-space:pre;font:13px/21px ui-monospace,monospace}.ls-editor-surface{position:relative;min-width:0;flex:1;overflow:hidden}.ls-desk .ls-editor-surface textarea,.ls-desk .ls-editor-surface>pre{margin:0;padding:15px 12px;border:0;border-radius:0;background:transparent;font:13px/21px ui-monospace,monospace;tab-size:2;white-space:pre;overflow-wrap:normal;letter-spacing:normal}.ls-desk .ls-editor-surface textarea{display:block;position:relative;width:100%;min-height:365px;resize:vertical;caret-color:#e4f7ee;outline-offset:-2px}.ls-desk .ls-editor-surface>pre{position:absolute;top:0;left:0;min-width:100%;pointer-events:none;display:none;color:#cce4dc}.ls-editor-frame.is-enhanced .ls-editor-surface>pre{display:block}.ls-desk .ls-editor-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}.ls-desk .ls-editor-frame.is-enhanced textarea::selection{background:#bcee8340}.ls-token-command{color:#bcee83;font-weight:600}.ls-token-comment{color:#607f7d}.ls-token-note{color:#b9acff}.ls-token-number{color:#f1bd81}.ls-token-pattern{color:#80ddd3}.ls-editor-footer{display:flex;justify-content:space-between;gap:10px;color:#789994;font:10px/1.5 ui-monospace,monospace;padding:8px 1px}.ls-editor-frame[data-error=true]{border-color:#f0a28e}.ls-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}.ls-preset-row{display:flex;flex-wrap:wrap;gap:8px;align-items:end;padding:12px 0;border-bottom:1px solid #24423e}.ls-preset-row label{font-size:11px;color:#8aada5}.ls-preset-row select{display:block;margin-top:5px;max-width:180px}.ls-preset-row button{font-size:12px}.ls-live-badge{margin-left:auto;color:#b6da9b;font:10px/1.5 ui-monospace,monospace;letter-spacing:.08em}.ls-arrangement{border:1px solid #294641;border-radius:10px;overflow:hidden;margin-top:18px}.ls-arrangement>div:first-child{display:flex;justify-content:space-between;gap:8px;padding:10px 12px;font-size:11px;background:#0b2224}.ls-arrangement span{color:#a0b8ad}.ls-arrangement svg{display:block;width:100%;height:auto;font-family:system-ui}.ls-arrangement p{padding:12px;font-size:12px}.ls-desk[data-focus=true] .ls-mix{display:none}.ls-desk[data-focus=true] .ls-columns{grid-template-columns:minmax(0,1fr)}.ls-desk [data-ls=error-line]{color:#ffb5a6;border-color:#a76658;padding:5px 10px;font-size:12px}.ls-desk [data-busy=true]{opacity:.6}\n@media(max-width:720px){.ls-editor-footer{flex-wrap:wrap}.ls-live-badge{margin-left:0}.ls-draft-bar{gap:7px}.ls-desk [data-ls=focus]{display:none}.ls-preset-row select{max-width:160px}.ls-desk .ls-editor-surface textarea,.ls-desk .ls-editor-surface>pre,.ls-desk .ls-gutter pre{font-size:12px}.ls-gutter{flex-basis:32px}.ls-arrangement>div:first-child{flex-direction:column}.ls-desk[data-focus=true] .ls-mix{display:block}}\n.ls-arrangement [data-ls=arrangement]{overflow-x:auto}.ls-arrangement svg{min-width:640px}.ls-token-comment{color:#769690}\n.ls-project-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;padding:12px 0;margin:12px 0;border-top:1px solid #294442;border-bottom:1px solid #294442;font-size:11px;color:#89aaa1}.ls-project-bar [data-ls=saved-state]{color:#b6dba0;margin-right:auto}.ls-project-bar button{font-size:11px;padding:6px 10px}.ls-project-bar>span:last-child{flex-basis:100%}.ls-lanes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.ls-lane-row{min-width:0;padding:12px;background:#0b2224;border:1px solid #294442;border-radius:10px}.ls-lane-heading{display:flex;align-items:center;gap:8px}.ls-lane-heading label{display:block;margin:0;font-size:12px}.ls-lane-heading output{margin-left:auto;color:#b6dba0}.ls-lane-heading button{padding:3px 7px;font:11px ui-monospace,monospace}.ls-lane-row input{margin:16px 0;display:block}.ls-lane-row select{display:block;width:100%;min-width:0;padding:6px;font-size:11px}.ls-lane-row>span{display:block;font-size:11px;color:#89aaa1;padding:7px 0}.ls-lane-row[data-muted=true]{border-color:#986547}.ls-lane-row[data-muted=true] [data-ls-mute]{background:#f0b97e;color:#251a14;border-color:#f0b97e}.ls-lane-row[data-muted=true] input{opacity:.55}.ls-desk select:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}.ls-desk[data-workspace=daw]{margin-top:0}.ls-desk[data-workspace=daw] h2{font-size:36px}.ls-desk[data-workspace=daw] .ls-eyebrow{color:#80ddd3}@media(max-width:720px){.ls-desk[data-workspace=daw] h2{font-size:27px}.ls-project-bar [data-ls=saved-state]{flex-basis:100%}.ls-lane-row{padding:10px}.ls-lane-heading{gap:5px}}\n.ls-menu-bar{display:flex;align-items:center;gap:4px;padding:4px 0 10px;margin-bottom:10px;border-bottom:1px solid #2b453b;position:relative;z-index:5;flex-wrap:wrap}.ls-menu-bar>span{margin-left:auto;font:10px system-ui;color:#8fac9e}.ls-desk button[hidden]{display:none!important}@media(max-width:540px){.ls-menu-bar>span{width:100%;margin:4px 10px 0}}\n/* Gutter lines follow the textarea viewport without determining its height. */\n.ls-gutter{position:relative}.ls-desk .ls-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}\n.ls-midi { margin-top: 1rem; }\n.ls-desk .ls-daw-only { display: none; }\n.ls-midi label { display: grid; gap: .4rem; margin: .65rem 0; }\n.ls-midi select { width: 100%; min-width: 0; }\n.ls-midi-controls { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }\n.ls-midi [data-score-midi=\"preview\"] { max-height: 12rem; overflow: auto; white-space: pre; font-size: .75rem; }\n.ls-midi [data-score-midi=\"status\"] { overflow-wrap: anywhere; }\n\n/* Interactive phrases belong to the DAW; Performance keeps the score overview. */\n.ls-track-timeline{display:none}\n/* The portable session component occupies the shared transport row. */\n.ls-transport [data-cre8-host-component=\"audio.session\"]{flex:1 1 100%;min-width:0}\n.ls-transport #audio-session-transport{margin:0;padding:0;border:0;background:transparent;box-shadow:none}\n.ls-transport #audio-session-transport .primitive-card__body{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:0}\n.ls-transport #ls-export-wav,.ls-transport #ls-export-midi,.ls-transport #ls-export-session{display:none}\n.ls-transport #ls-export-state{flex:1 1 240px;margin:0;font-size:12px;color:inherit}\n.ls-desk>header nav{display:flex;flex-wrap:wrap;gap:12px}\n.ls-transport-feedback{flex:1 1 100%;min-width:0}\n.ls-desk .ls-transport-feedback [data-ls=status]{margin:0;min-height:0;font:12px/1.5 system-ui,sans-serif;white-space:pre-wrap;color:#b4c8c2}\n.ls-desk .ls-transport-feedback [data-ls=status][data-error=true]{padding:8px 10px;border-left:3px solid #ffb4a6;background:#ffb4a60c;color:#ffb4a6}\n.ls-desk #ls-prepare,.ls-desk #ls-start:not(:disabled){background:#c4ef83;color:#142819;border-color:#c4ef83;font-weight:650}\n\n/* Preserve app layout around native document primitives. */\n.media-fragment { display:contents; }\n.ls-desk .primitive-input,.ls-desk .primitive-select { display:contents; }\n.ls-desk .primitive-input__label,.ls-desk .primitive-select__label { font:inherit; }\n/* Shared mixer console. Tokens resolve from an ancestor's --mixer-* override,\n   then the editor chrome's --editor-*, then light-dark() defaults. Live values\n   (--level, --peak, aria-pressed, data-clipped) are set by the app's script. */\n.mixer-console,.mixer-strip{\n  --_surface:var(--mixer-surface,var(--editor-raised,light-dark(#ffffff,#1f2724)));\n  --_well:var(--mixer-well,var(--editor-surface,light-dark(#edf1ee,#141a18)));\n  --_ink:var(--mixer-ink,var(--editor-ink,light-dark(#182620,#edf3ee)));\n  --_muted:var(--mixer-muted,var(--editor-muted,light-dark(#536259,#a6b5ab)));\n  --_border:var(--mixer-border,var(--editor-border,light-dark(#cbd5ce,#3b4941)));\n  --_accent:var(--mixer-accent,var(--editor-accent,light-dark(#246640,#b8f568)));\n  --_ok:var(--mixer-ok,light-dark(#2f9e5b,#5fd38a));\n  --_warn:var(--mixer-warn,light-dark(#b98f10,#f2d25c));\n  --_hot:var(--mixer-hot,light-dark(#c8453a,#ff6b5e));\n  --_mute:var(--mixer-mute,light-dark(#b7791f,#f0b44c));\n  --_solo:var(--mixer-solo,light-dark(#2b72ad,#79c3ff));\n  --_arm:var(--mixer-arm,light-dark(#c8453a,#ff6b5e));\n  --_latch:var(--mixer-latch,light-dark(#7453b8,#b69cff));\n  --_fader-height:var(--mixer-fader-height,150px);\n}\n.mixer-console{\n  display:flex;gap:6px;align-items:stretch;overflow-x:auto;padding:6px;\n  background:var(--_well);border:1px solid var(--_border);border-radius:8px;\n}\n.mixer-strip{\n  box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;gap:6px;\n  flex:0 0 auto;min-width:84px;margin:0;padding:8px 6px;\n  border:1px solid var(--_border);border-radius:6px;background:var(--_surface);color:var(--_ink);\n  font:11px/1.3 system-ui,sans-serif;\n}\n.mixer-strip *{box-sizing:border-box}\n/* Controls arrive as base-theme primitives: drop the form-field chrome a\n   slider or a strip button should not carry. */\n.mixer-strip .primitive-input,.mixer-strip .primitive-select{margin:0;gap:2px;min-width:0}\n.mixer-strip input[type=range]{padding:0;border:0;border-radius:0;background:none;box-shadow:none;min-width:0}\n.mixer-strip[data-mixer-role=bus]{border-top:3px solid var(--_solo)}\n.mixer-strip[data-mixer-role=master]{\n  border-top:3px solid var(--_accent);position:sticky;right:0;margin-left:auto;\n  /* The solid shadow covers the console's padding, where strips scrolling\n     under the pinned master would otherwise peek out. */\n  box-shadow:7px 0 0 var(--_well),-8px 0 8px -8px rgb(0 0 0/.4);\n}\n.mixer-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 5px;min-width:0}\n.mixer-number{color:var(--_muted);font-variant-numeric:tabular-nums}\n.mixer-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}\n.mixer-layout{flex:0 0 auto;padding:0 5px;border:1px solid var(--_border);border-radius:999px;color:var(--_muted);font-size:10px;line-height:15px}\n.mixer-handle{display:flex;justify-content:center;gap:2px}\n.mixer-slot :is(select,button,input){width:100%;max-width:100%;font-size:11px}\n/* Routing, the insert chain, sends, badges and the automation mode sit in\n   signal order under the name, one dense row or card each. They take the\n   strip's width rather than setting it, so a long effect or bus name\n   ellipsizes instead of widening its strip. */\n:is(.mixer-route,.mixer-inserts,.mixer-sends,.mixer-assign,.mixer-automation){contain:inline-size;min-width:0}\n:is(.mixer-route,.mixer-automation,.mixer-send) :is(select,input){width:100%;max-width:100%;font-size:11px}\n.mixer-strip :is(.mixer-route,.mixer-automation,.mixer-send) :is(.primitive-select__label,.primitive-input__label){font-size:10px;font-weight:600;color:var(--_muted)}\n:is(.mixer-route,.mixer-automation) select{min-height:20px;padding:1px 3px;border:1px solid var(--_border);border-radius:3px;background:var(--_well);color:var(--_ink)}\n.mixer-inserts,.mixer-sends{display:flex;flex-direction:column;gap:2px}\n.mixer-insert{\n  display:flex;align-items:center;gap:3px;min-height:20px;padding:1px 2px 1px 6px;\n  border:1px solid var(--_border);border-radius:3px;background:var(--_well);box-shadow:inset 3px 0 0 var(--_accent);\n}\n.mixer-insert-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.mixer-insert>:not(.mixer-insert-name){flex:0 0 auto;margin:0}\n.mixer-insert :is(button,.primitive-action){\n  min-width:22px;min-height:18px;margin:0;padding:1px 4px;border:1px solid var(--_border);border-radius:3px;\n  background:var(--_surface);color:var(--_ink);font:600 10px/1 system-ui,sans-serif;cursor:pointer;\n}\n.mixer-insert :is(button,.primitive-action)[aria-pressed=true]{border-color:var(--_accent);color:var(--_accent)}\n.mixer-insert[data-bypassed=true]{box-shadow:none;border-style:dashed}\n.mixer-insert[data-bypassed=true] .mixer-insert-name{color:var(--_muted);text-decoration:line-through}\n.mixer-send{display:flex;flex-direction:column;gap:2px;padding:2px 4px 3px;border:1px solid var(--_border);border-radius:3px;background:var(--_well)}\n.mixer-send-head{display:flex;align-items:center;gap:4px}\n.mixer-send-bus{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.mixer-send-tap{flex:0 0 auto;padding:0 4px;border:1px solid var(--_border);border-radius:999px;color:var(--_muted);font-size:9px;line-height:13px;text-transform:uppercase;letter-spacing:.04em}\n.mixer-send[data-mixer-tap=pre] .mixer-send-tap{border-color:var(--_warn);color:var(--_ink)}\n.mixer-send input[type=range]{display:block;width:100%;margin:0;accent-color:var(--_solo)}\n.mixer-assign{display:flex;flex-wrap:wrap;gap:3px}\n.mixer-badge{\n  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 5px;\n  border:1px solid var(--_border);border-left-width:3px;border-radius:3px;font-size:10px;line-height:15px;\n}\n.mixer-badge[data-mixer-badge=group]{border-left-color:var(--_accent)}\n.mixer-badge[data-mixer-badge=vca]{border-left-color:var(--_solo)}\n.mixer-badge-kind{color:var(--_muted);font-size:9px;text-transform:uppercase;letter-spacing:.04em}\n/* The automation select is tinted by the option it has selected, so the\n   colour is the control's own state: read, touch, latch or write. */\n.mixer-automation select{border-left:3px solid var(--_auto,var(--_border))}\n.mixer-automation:has(option[value=read]:checked){--_auto:var(--_ok)}\n.mixer-automation:has(option[value=touch]:checked){--_auto:var(--_warn)}\n.mixer-automation:has(option[value=latch]:checked){--_auto:var(--_latch)}\n.mixer-automation:has(option[value=write]:checked){--_auto:var(--_hot)}\n.mixer-pan{position:relative;padding:0 2px}\n.mixer-pan input[type=range]{display:block;width:100%;margin:0;accent-color:var(--_accent)}\n.mixer-pan::after{content:\"\";position:absolute;left:50%;top:2px;bottom:2px;border-left:1px dashed var(--_border);pointer-events:none}\n.mixer-buttons{display:flex;justify-content:center;gap:4px}\n.mixer-strip .mixer-buttons>*{\n  min-width:26px;min-height:24px;margin:0;padding:2px 6px;border:1px solid var(--_border);border-radius:4px;\n  background:var(--_well);color:var(--_ink);font:600 11px/1 system-ui,sans-serif;cursor:pointer;\n}\n.mixer-strip .mixer-buttons>:hover:not(:disabled){border-color:var(--_accent)}\n.mixer-strip .mixer-buttons>:disabled{opacity:.45;cursor:default}\n.mixer-strip .mixer-buttons>[data-mixer-button=mute][aria-pressed=true]{background:var(--_mute);border-color:var(--_mute);color:#141414}\n.mixer-strip .mixer-buttons>[data-mixer-button=solo][aria-pressed=true]{background:var(--_solo);border-color:var(--_solo);color:#0e1a24}\n.mixer-strip .mixer-buttons>[data-mixer-button=arm][aria-pressed=true]{background:var(--_arm);border-color:var(--_arm);color:#fff}\n/* Bays sit at the foot of the strip so faders line up across a console\n   whatever slots each strip carries above them. */\n.mixer-fader-bay{display:flex;justify-content:center;align-items:stretch;gap:4px;height:var(--_fader-height);margin-top:auto}\n/* Marks follow the thumb's centre, which travels 8px in from each end. */\n.mixer-scale{position:relative;width:22px;margin:0;padding:0;list-style:none;color:var(--_muted);font:9px/1 system-ui,sans-serif;font-variant-numeric:tabular-nums}\n.mixer-scale li{position:absolute;right:0;bottom:calc(8px + var(--at,0)*(100% - 16px));transform:translateY(50%);white-space:nowrap}\n.mixer-fader,.mixer-fader>.primitive-input{display:flex;justify-content:center;height:100%}\n.mixer-fader input[type=range]{writing-mode:vertical-lr;direction:rtl;width:24px;height:100%;margin:0;accent-color:var(--_accent)}\n.mixer-meter{display:flex;gap:1px;height:100%;padding:1px;background:var(--_well);border:1px solid var(--_border);border-radius:2px}\n/* The gradient is painted at full height and the unlit part covered, so a\n   bar's colour always reads its absolute level (bands at -18 and -6 dB). */\n.mixer-meter-bar{\n  position:relative;flex:0 0 5px;height:100%;overflow:hidden;\n  background:linear-gradient(to top,var(--_ok) 0 70%,var(--_warn) 70% 90%,var(--_hot) 90%);\n}\n.mixer-meter:has(>:nth-child(9)) .mixer-meter-bar{flex-basis:3px}\n.mixer-meter-bar::before{content:\"\";position:absolute;inset:0 0 auto;height:calc((1 - var(--level,0))*100%);background:var(--_well);opacity:.9}\n.mixer-meter-bar::after{content:\"\";position:absolute;left:0;right:0;height:2px;bottom:calc(var(--peak,0)*100% - 2px);background:var(--_ink)}\n.mixer-meter-bar[data-clipped=true]{box-shadow:inset 0 3px 0 var(--_hot)}\n.mixer-readout{text-align:center;color:var(--_muted);font-variant-numeric:tabular-nums}\n.mixer-strip :is(button,select,input):focus-visible{outline:2px solid var(--_accent);outline-offset:2px}\n@media(pointer:coarse){\n  .mixer-strip{min-width:104px}\n  .mixer-strip .mixer-buttons>*{min-width:30px;min-height:40px}\n}\n@media(pointer:coarse){\n  .mixer-insert,:is(.mixer-route,.mixer-automation) select{min-height:36px}\n  .mixer-insert :is(button,.primitive-action){min-width:32px;min-height:32px}\n}\n/* Audio's standalone DAW composes the same controls used by Performance. */\nbody:has(.ls-desk[data-workspace=daw]) main:has(.ls-desk[data-workspace=daw]),\n.primitive-page:has(.ls-desk[data-workspace=daw]){max-width:none;margin:0;padding:0;}\n.ls-desk[data-workspace=daw] .ls-quiet-help{margin:8px 0;font-size:11px;color:var(--daw-muted);}\n.ls-quiet-help>summary{cursor:pointer;padding:4px 0;}\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-draft-bar,\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-preset-row,\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-compose{display:none;}\n.ls-desk[data-workspace=daw] .ls-eyebrow,.ls-daw-library>.ls-daw-caption,.ls-daw-library>p{display:none;}\n.ls-desk[data-workspace=daw]{--daw-border:#344550;--daw-muted:#91a8b7;display:grid;grid-template-columns:185px minmax(0,1fr);gap:0;margin:0;padding:0;border:1px solid var(--daw-border);border-radius:8px;background:#14222c;color:#dce7ef;font:12px/1.5 system-ui}\n.ls-desk[data-workspace=daw]>header{grid-column:1/-1;padding:16px 20px;background:#111d25;border-bottom:1px solid var(--daw-border)}\n.ls-desk[data-workspace=daw] h2{font-size:21px;margin:3px 0;letter-spacing:-.025em}.ls-desk[data-workspace=daw]>header p{display:none}.ls-desk[data-workspace=daw] .ls-eyebrow{font:9px ui-monospace,monospace;color:#91acbe;letter-spacing:.12em}\n.ls-desk[data-workspace=daw] button,.ls-desk[data-workspace=daw] select,.ls-desk[data-workspace=daw] input[type=number]{border-radius:4px;border-color:#405765;background:#223743;padding:7px 10px;font-size:11px}\n.ls-desk[data-workspace=daw] [data-ls=start],.ls-desk[data-workspace=daw] [data-ls=apply]{background:#b8d699;color:#152116;border-color:#b8d699}\n.ls-desk[data-workspace=daw] .ls-menu-bar{grid-column:1/-1;grid-row:2;margin:0;padding:6px 14px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border)}\n.ls-desk[data-workspace=daw] .ls-menu-bar details{margin:0}.ls-desk[data-workspace=daw] .ls-menu-bar>span{color:var(--daw-muted)}\n.ls-desk[data-workspace=daw] .ls-transport{grid-column:1/-1;grid-row:3;border-radius:0;margin:0;padding:12px 20px;border-bottom:1px solid var(--daw-border);background:#283b46;min-height:64px}\n.ls-desk[data-workspace=daw] .ls-transport output{padding:10px 16px;border:1px solid #47606b;border-radius:4px;background:#101c24;font:12px ui-monospace,monospace;color:#d7e9d9;min-width:240px}\n.ls-desk[data-workspace=daw] .ls-daw-tabs{grid-column:1/-1;grid-row:4;display:flex;flex-wrap:wrap;gap:3px;padding:8px 14px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border)}\n.ls-daw-tabs [data-daw-mixer]{margin-left:auto}\n.ls-desk[data-workspace=daw] .ls-columns,.ls-desk[data-workspace=daw] .ls-mix{display:contents}\n.ls-desk[data-workspace=daw] .ls-code{grid-column:2;grid-row:5;display:flex;flex-direction:column;min-height:440px;min-width:0;overflow:visible;padding:14px 18px;background:#111f29}\n.ls-desk[data-workspace=daw] .ls-code>nav{display:none}.ls-desk[data-workspace=daw] .ls-draft-bar{font-size:10px;margin:0 0 12px}\n.ls-desk[data-workspace=daw] .ls-arrangement{order:-1;flex-shrink:0;margin:0 0 14px;border-color:#3c5464;border-radius:4px}\n.ls-desk[data-workspace=daw] .ls-arrangement>div:first-child{background:#2a414f;font-size:11px;align-items:center;flex-wrap:wrap}\n.ls-desk[data-workspace=daw] .ls-arrangement [data-ls=arrangement]{overflow:auto;min-height:235px;background:repeating-linear-gradient(90deg,transparent 0,transparent 95px,#435d7028 95px,#435d7028 96px),#0e1c26}\n.ls-desk[data-workspace=daw] .ls-arrangement svg{height:235px;width:calc(100% * var(--daw-zoom,1));min-width:calc(760px * var(--daw-zoom,1));max-width:none}\n.ls-desk[data-workspace=daw] .ls-daw-only{display:flex}.ls-timeline-zoom{align-items:center;gap:7px;font-size:10px;margin-left:auto}.ls-timeline-zoom input{width:80px;accent-color:#b8d699}.ls-timeline-zoom output{min-width:35px}\n.ls-desk[data-workspace=daw]:not([data-daw-view=tracks]) .ls-arrangement{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=tracks] .ls-draft-bar,.ls-desk[data-workspace=daw][data-daw-view=tracks] [data-ls-pane=session]{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=tracks] [data-ls-pane=code]{display:contents}\n.ls-desk[data-workspace=daw][data-daw-view=tracks] [data-ls-pane=code]>label,.ls-desk[data-workspace=daw][data-daw-view=tracks] .ls-editor-frame,.ls-desk[data-workspace=daw][data-daw-view=tracks] .ls-editor-footer{display:none}\n.ls-desk[data-workspace=daw] .ls-preset-row{order:2;font-size:10px;margin-top:6px;padding:6px 0}.ls-desk[data-workspace=daw] .ls-compose{order:3;font-size:11px;margin:8px 0 0}.ls-desk[data-workspace=daw] [data-ls=status]{font-size:11px;min-height:20px;margin:4px 0}\n.ls-desk[data-workspace=daw] .ls-daw-library{grid-column:1;grid-row:5;border-right:1px solid var(--daw-border);padding:16px 12px;background:#1b2b36;min-width:0}\n.ls-daw-caption{font:9px ui-monospace,monospace;letter-spacing:.09em;color:#8ea9bc}.ls-daw-library h3{font-size:16px;margin:8px 0}.ls-daw-library p{font-size:10px;color:#91a8b7}\n.ls-desk[data-workspace=daw] .ls-daw-library button{display:grid;grid-template-columns:22px 1fr;text-align:left;gap:2px 4px;width:100%;margin:6px 0;padding:6px 7px;font-size:10px;background:#213644;border-left:3px solid var(--track-color,#8eadbf)}\n.ls-daw-library button strong{grid-column:2;grid-row:1;font-size:12px;font-weight:500}.ls-daw-library button span{color:#a0b7c6;font-size:9px}.ls-daw-library button span:first-child{grid-column:1;grid-row:1;align-self:center}.ls-daw-library button span:last-child{display:none}.ls-daw-library a{display:block;font-size:10px;margin-top:20px}\n.ls-desk[data-workspace=daw] .ls-channel-rack{grid-column:1/-1;grid-row:6;display:grid;grid-template-columns:1fr auto;gap:8px 16px;border-top:1px solid var(--daw-border);padding:14px 18px;background:#20313c;min-width:0}\n.ls-channel-rack>h3{margin:0;font-size:13px}.ls-desk[data-workspace=daw] .ls-channel-rack>p{grid-column:1;font-size:10px;margin:0;color:#9db3c1}\n.ls-desk[data-workspace=daw] .ls-tempo{grid-column:2;grid-row:1/3;align-self:center;font-size:11px}.ls-desk[data-workspace=daw] .ls-tempo input{width:66px}\n.ls-desk[data-workspace=daw] .ls-lanes{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,minmax(90px,1fr));gap:8px;margin:4px 0;overflow:auto}\n/* Lanes are shared mixer strips (view-lib mixer_console): the DAW sets their palette and each lane's track colour. */\n.ls-desk[data-workspace=daw]{--mixer-surface:#182a36;--mixer-well:#10212b;--mixer-ink:#e4f7ee;--mixer-muted:#9db3c1;--mixer-border:#415c6e;--mixer-fader-height:118px}\n.ls-desk[data-workspace=daw] .ls-lane-row{--mixer-accent:var(--track-color,#b8d699);min-width:90px;padding:10px;border-top:3px solid var(--track-color,#8eadbf);border-radius:4px}\n.ls-desk[data-workspace=daw] .ls-lane-row .mixer-handle>.ls-channel-order{flex:1;margin:0}.ls-desk[data-workspace=daw] .ls-lane-row .mixer-readout output{font:10px ui-monospace,monospace;color:#b7cbd9;text-align:center}\n.ls-desk[data-workspace=daw] .ls-lane-row .mixer-slot label{display:block;margin:0 0 2px;font-size:10px;color:#9db3c1}\n.ls-desk[data-workspace=daw] .ls-lane-row select{padding:6px 4px;font-size:10px}.ls-desk[data-workspace=daw] .ls-lane-row .mixer-slot>.primitive-text{display:block;font-size:10px;padding:6px 0;color:#9db3c1}\n.ls-desk[data-workspace=daw] [data-ls=mix]{grid-column:2;justify-self:end;font-size:11px}\n.ls-desk[data-workspace=daw][data-daw-mixer=false] .ls-channel-rack{display:none}\n.ls-desk[data-workspace=daw] .ls-mix>details,.ls-desk[data-workspace=daw] .ls-clock-boundary{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=midi] .ls-code{display:none}.ls-desk[data-workspace=daw][data-daw-view=midi] .ls-midi{display:block;grid-column:2;grid-row:5;padding:20px;margin:0;min-width:0;background:#111f29}\n.ls-desk[data-workspace=daw] .ls-midi pre{padding:14px;border:1px solid #3c5363;border-radius:4px;background:#0d1c26}.ls-desk[data-workspace=daw] .ls-midi p{font-size:11px}\n.ls-desk[data-workspace=daw] .ls-project-bar{grid-column:1/-1;grid-row:7;padding:8px 16px;margin:0;border:0;border-top:1px solid var(--daw-border);font-size:10px}.ls-desk[data-workspace=daw] .ls-project-bar>span:last-child{display:none}\n.ls-desk[data-workspace=daw]>[data-cre8-island]{display:none}\n[data-ls-channel=drums],[data-daw-track=drums]{--track-color:#e6b276}[data-ls-channel=bass],[data-daw-track=bass]{--track-color:#b7d98d}[data-ls-channel=pads],[data-daw-track=pads]{--track-color:#85bedc}[data-ls-channel=melody],[data-daw-track=melody]{--track-color:#b9a0df}[data-ls-channel=arp],[data-daw-track=arp]{--track-color:#7dd0b9}[data-ls-channel=reverb],[data-daw-track=reverb]{--track-color:#a6accc}\n.ls-desk[data-workspace=daw] .ls-lane-row[data-selected=true],.ls-desk[data-workspace=daw] .ls-daw-library [aria-pressed=true]{outline:1px solid var(--track-color);outline-offset:-1px;background:#2b4353}\n@media(max-width:800px){.ls-desk[data-workspace=daw]{grid-template-columns:145px minmax(0,1fr)}.ls-desk[data-workspace=daw] .ls-lanes{grid-template-columns:repeat(6,110px)}.ls-desk[data-workspace=daw] .ls-code{padding:12px}.ls-desk[data-workspace=daw] .ls-transport output{font-size:10px;min-width:0}.ls-daw-library p{display:none}}\n@media(max-width:560px){.ls-desk[data-workspace=daw]{grid-template-columns:minmax(0,1fr)}.ls-desk[data-workspace=daw] .ls-daw-library{display:none}.ls-desk[data-workspace=daw] .ls-code,.ls-desk[data-workspace=daw][data-daw-view=midi] .ls-midi{grid-column:1}.ls-desk[data-workspace=daw]>header{padding:14px;flex-direction:row}.ls-desk[data-workspace=daw] .ls-transport{padding:10px}.ls-desk[data-workspace=daw] .ls-transport output{flex-basis:100%}.ls-desk[data-workspace=daw] .ls-channel-rack{padding:12px}.ls-desk[data-workspace=daw] .ls-menu-bar>span{display:none}.ls-desk[data-workspace=daw] .ls-tempo{grid-column:1;grid-row:auto}.ls-desk[data-workspace=daw] .ls-channel-rack>p{grid-column:1/-1}.ls-desk[data-workspace=daw] .ls-arrangement>div:first-child{align-items:start}.ls-timeline-zoom{margin:0}}\n.ls-piano{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=piano] .ls-piano{display:block;order:-1;min-width:0}\n.ls-desk[data-workspace=daw][data-daw-view=piano] [data-ls-pane]{display:none!important}\n.ls-piano header{flex-wrap:wrap;justify-content:start;gap:12px;margin-bottom:10px}.ls-piano header>div{margin-right:auto}.ls-piano h3{margin:4px 0}.ls-piano label{font-size:10px;color:#a8bfce}.ls-piano select{margin-left:6px}\n.ls-piano-scroll{overflow:auto;height:300px;border:1px solid #415c6e;border-radius:4px;background:#0d1c26;overscroll-behavior:contain}\n.ls-piano-grid{position:relative;min-width:820px;height:0;touch-action:pan-x pan-y}\n.ls-piano-key{position:absolute;left:0;width:100%;height:20px;border-bottom:1px solid #344651;background:#182b38;color:#b9cad4;pointer-events:none;font:10px/20px ui-monospace,monospace;padding-left:5px}\n.ls-piano-key[data-black=true]{background:#10202a;color:#839caa}\n.ls-piano-beat{position:absolute;top:0;bottom:0;width:1px;background:#526b7c;pointer-events:none}.ls-piano-beat span{position:sticky;top:0;background:#182b38;color:#aec6d6;font:9px ui-monospace,monospace;padding:2px}\n.ls-desk[data-workspace=daw] .ls-piano-note{position:absolute;height:18px;border:1px solid #cbdac0;border-radius:3px;padding:0 5px;overflow:hidden;white-space:nowrap;text-align:left;font:10px/16px ui-monospace,monospace;background:#a9cb88;color:#152116;touch-action:none;cursor:grab;min-width:5px}\n.ls-desk[data-workspace=daw] .ls-piano-note[aria-pressed=true]{background:#d2e6b5;outline:2px solid #fff;outline-offset:1px;z-index:2}.ls-piano-note::after{content:'';position:absolute;right:0;top:0;bottom:0;width:5px;background:#15211644;cursor:ew-resize}\n.ls-piano-inspector{display:flex;flex-wrap:wrap;align-items:end;gap:8px;margin:12px 0}.ls-piano-inspector input{display:block;width:85px!important;margin-top:4px}.ls-piano footer{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ls-piano footer span{font-size:10px;color:#a6bccb}.ls-piano>p{font-size:11px}\n.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano{display:block;order:-1;min-width:0}\n.ls-desk[data-workspace=daw][data-daw-view=clips] [data-ls-pane],.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano-scroll,.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano-inspector,.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano-hints{display:none!important}\n.ls-clip-editor{margin:12px 0 16px}.ls-clip-scroll{overflow:auto;border:1px solid #415c6e;border-radius:4px;background:#0d1c26}.ls-clip-grid{position:relative;height:98px;min-width:620px;background:repeating-linear-gradient(90deg,transparent 0,transparent calc(25% - 1px),#344c5c calc(25% - 1px),#344c5c 25%)}\n.ls-desk[data-workspace=daw] .ls-clip-region{position:absolute;top:16px;height:64px;min-width:0;background:#334e59;border:1px solid #759a96;border-top:3px solid #add390;color:#e7f1df;border-radius:4px;text-align:left;padding:8px 10px;overflow:hidden;white-space:nowrap;touch-action:none;cursor:grab}.ls-clip-region small{display:block;font-size:10px;color:#b4caca}.ls-clip-region[data-empty=true]{background:#172b37;border-color:#344c5c;color:#7e9aa8}\n.ls-clip-selection{position:absolute;top:11px;height:74px;border:2px solid #d9edb6;pointer-events:none;border-radius:5px;z-index:2}.ls-clip-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:end}.ls-clip-controls input{display:block;width:105px!important;margin-top:4px}.ls-clip-controls label{font-size:10px}.ls-clip-editor>p{font-size:10px;margin:8px 0;color:#a7bece}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-grid{height:160px}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-region{top:28px;height:100px}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-selection{top:23px;height:110px}\n.ls-desk[data-workspace=daw] .ls-clip-region{display:flex;flex-direction:column;justify-content:flex-start;user-select:none}\n.ls-clip-preview{position:absolute;left:10px;right:10px;top:42px;bottom:5px;overflow:hidden;pointer-events:none}.ls-clip-preview i{display:block;position:absolute;height:3px;min-width:2px;border-radius:1px;background:#b7d99b}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-preview{top:48px;bottom:10px}\n/* Server-rendered instrument and phrase components share the Audio draft. */\n.ls-instrument-editor{display:none}.ls-desk[data-workspace=daw][data-daw-view=instruments] .ls-instrument-editor{display:block;order:-1}.ls-desk[data-workspace=daw][data-daw-view=instruments] [data-ls-pane]{display:none!important}\n.ls-instrument-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:12px;margin:14px 0}.ls-instrument-fields label{display:flex;flex-direction:column;gap:5px;font-size:11px}.ls-instrument-fields input:not([type=checkbox]),.ls-instrument-fields select{width:100%;min-width:0;box-sizing:border-box;background:#142732;color:#dce7ef;border:1px solid #405765;border-radius:4px;padding:8px}.ls-instrument-fields input[type=checkbox]{width:auto;margin:0 4px 0 0}.ls-instrument-editor details{padding:12px;border:1px solid #405765;border-radius:5px}.ls-instrument-editor p{color:#a7bece}\n.ls-arrange-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px}.ls-arrange-controls input{width:65px}.ls-arrange-controls [role=status]{flex-basis:100%;font-size:11px;color:#b8cbd6}\n.ls-track-timeline{display:flex;flex-direction:column;min-width:calc(650px * var(--daw-zoom,1));padding:8px}.ls-track-phrase-row{display:flex;gap:8px;align-items:center;height:64px}.ls-track-phrase-row>strong{width:60px;font-size:11px;color:#abc4d3}.ls-track-phrases{position:relative;flex:1;height:56px}.ls-desk[data-workspace=daw] .ls-track-phrases button{position:absolute;top:3px;height:50px;box-sizing:border-box;border:3px solid #142630;background:#355666;color:#dceccb;touch-action:none;cursor:grab;z-index:1;text-align:left;user-select:none}.ls-track-phrases small{display:block;font-size:9px}.ls-track-phrases [aria-pressed=true]{outline:2px solid #ccebb0;outline-offset:-3px;z-index:3!important}.ls-desk[data-workspace=daw] .ls-track-phrases [data-arrange-empty=true]{background:#1b303e;color:#8aa5b5}\n.ls-desk[data-workspace=daw] .ls-arrangement svg{height:235px}.ls-desk[data-workspace=daw] .ls-daw-library{display:flex;flex-direction:column}.ls-daw-library>p,.ls-daw-library>h3,.ls-daw-library>.ls-daw-caption{order:-1}.ls-daw-library>a{order:10}.ls-channel-order{display:flex;gap:4px;align-items:center;margin-bottom:6px}.ls-channel-order [data-channel-drag]{cursor:grab;touch-action:none}.ls-desk[data-workspace=daw] .ls-channel-order button{padding:3px 7px}.ls-channel-order [data-channel-drag]{margin-right:auto}\n@media(max-width:560px){.ls-desk[data-workspace=daw] .ls-daw-library{display:none}.ls-instrument-fields{grid-template-columns:repeat(2,minmax(0,1fr))}}\n\n.ls-instrument-editor header{display:block}.ls-lane-row[data-drop-target=true]{outline:2px solid #ccebb0;outline-offset:2px}\n/* Persistent clip and envelope components are rendered by Audio. */\n.ls-session-editor{display:none}.ls-desk[data-track-editor=true][data-daw-view=tracks] .ls-session-editor,.ls-desk[data-track-editor=true][data-daw-view=flow] .ls-session-editor{display:block;order:-1;min-width:0}.ls-desk[data-track-editor=true][data-daw-view=tracks] .ls-arrangement{display:none}.ls-desk[data-daw-view=flow] [data-ls-pane]{display:none!important}.ls-session-flow{display:none}.ls-desk[data-daw-view=flow] .ls-session-flow{display:block}.ls-desk[data-daw-view=flow] .ls-session-timeline{display:none}.ls-session-editor>div>header{align-items:center}.ls-session-editor p{font-size:11px}.ls-session-scroll{overflow:auto;max-height:660px;border:1px solid #405765;border-radius:5px}.ls-session-lanes{min-width:650px}.ls-session-track{border-bottom:1px solid #405765;background:#142630;padding:8px}.ls-session-track>header{display:flex;gap:8px;justify-content:flex-start;min-height:36px}.ls-session-track header label{display:flex;align-items:center;gap:5px;margin-left:auto;white-space:nowrap}.ls-session-track input[type=number]{width:58px}.ls-session-track header small{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9cb5bf}.ls-session-lane{position:relative;height:68px;background:repeating-linear-gradient(90deg,#10212b 0,#10212b calc(12.5% - 1px),#385363 calc(12.5% - 1px),#385363 12.5%)}.ls-session-lane [data-session-clip]{position:absolute;top:6px;height:54px;min-width:12px;text-align:left;white-space:nowrap;overflow:hidden;touch-action:none;border:2px solid #759994;background:#345b63;user-select:none;cursor:grab}.ls-session-lane small{display:block;font-size:9px;color:#c3d6cf}.ls-session-lane [aria-pressed=true]{outline:2px solid #d6efb3;z-index:3}.ls-session-lane [data-clip-resize]{position:absolute;right:0;top:0;height:100%;width:9px;background:#b5d08e77;cursor:ew-resize;touch-action:none}.ls-envelope{display:block;width:100%;height:92px;background:#0c1b24;touch-action:none;overflow:visible}.ls-envelope path{fill:#92c47844;stroke:#b7e390;stroke-width:1.5;vector-effect:non-scaling-stroke}.ls-envelope circle{fill:#d6efb3;stroke:#172f2a;stroke-width:2;cursor:grab}.ls-envelope text{fill:#a8c49d;font:10px system-ui;pointer-events:none}.ls-envelope-fields,.ls-session-fields{display:flex;gap:8px;align-items:end;flex-wrap:wrap;margin:12px 0}.ls-session-fields label,.ls-envelope-fields label{font-size:10px;display:flex;flex-direction:column;gap:4px}.ls-session-fields input,.ls-envelope-fields input{width:90px;max-width:100%;box-sizing:border-box}.ls-session-fields select{max-width:200px}.ls-clip-detail{padding:12px;border:1px solid #466372;border-radius:5px;margin-top:12px}.ls-clip-note-list{display:flex;gap:4px;flex-wrap:wrap;max-height:110px;overflow:auto}.ls-session-editor[aria-busy=true]{opacity:.75}.ls-desk[data-track-session=true] .ls-legacy-patch,.ls-desk[data-track-session=true] .ls-lane-row:not([data-ls-channel=reverb]){display:none}.ls-desk[data-track-session=true] .ls-daw-library [data-daw-track]:not([data-daw-track=reverb]){display:none}.ls-desk[data-track-session=true] .ls-channel-rack .ls-lanes{display:flex}.ls-desk[data-track-session=true] .ls-lane-row[data-ls-channel=reverb]{min-width:160px}.ls-desk[data-track-session=true] [data-daw-view=piano],.ls-desk[data-track-session=true] [data-daw-view=clips]{display:none}.ls-desk[data-track-session=true] [data-daw-view=tracks] .ls-draft-bar{display:flex}.ls-flow-route{display:flex;flex-wrap:wrap;gap:10px;align-items:center;border:1px solid #3b5665;border-radius:5px;padding:16px;margin:10px 0}.ls-flow-route span{padding:9px;background:#213c46;border-radius:4px}.ls-flow-route i{color:#b5d891}.ls-desk[data-track-session=true][data-daw-view=tracks] .ls-draft-bar{display:flex}\n@media(max-width:560px){.ls-session-fields input{width:76px}.ls-session-fields select{max-width:160px}.ls-envelope-fields{align-items:end}.ls-session-editor h3{font-size:15px}.ls-flow-route{gap:6px;padding:10px}}\n\n/* Presence stays above the DAW header and its navigation link. */\n.primitive-room-scope:has([data-live-score]) > .primitive-room-scope__viewers{position:static!important;display:flex;width:max-content;margin:0 0 8px auto}\n\n/* The workspace shell gives transport and navigation a consistent hierarchy. */\n.ls-desk[data-workspace=daw]{--daw-border:#30434e;border:0;border-radius:0;width:100%;min-height:100dvh;box-sizing:border-box;grid-template-rows:auto auto auto auto minmax(440px,1fr) auto auto;}\n.ls-desk[data-workspace=daw]>header{padding:10px 14px;flex-wrap:wrap;gap:8px;border-radius:0}\n.ls-desk[data-workspace=daw]>header h1{font-size:20px;line-height:1.2;margin:0;letter-spacing:-.025em}\n.ls-desk[data-workspace=daw]>header nav{gap:6px;font-size:11px}\n.ls-desk[data-workspace=daw]>header nav a{padding:7px 9px;border:1px solid var(--daw-border);border-radius:6px;text-decoration:none;color:#b8ccd7}\n.ls-desk[data-workspace=daw]>header nav a:hover{background:#223743;color:#f0f7fc}\n.ls-desk[data-workspace=daw] .ls-menu-bar{padding:4px 14px;background:var(--editor-surface)}\n.ls-desk[data-workspace=daw] .ls-transport{gap:8px 12px;padding:14px 20px;background:#1a2e37}\n.ls-desk[data-workspace=daw] .ls-transport button{min-height:40px;border-radius:6px}\n.ls-desk[data-workspace=daw] #ls-prepare{background:#bedf9e;border-color:#bedf9e;color:#152116;font-weight:650}\n.ls-desk[data-workspace=daw] #ls-start:not(:disabled){background:#bedf9e;border-color:#bedf9e;color:#152116;font-weight:650}\n.ls-desk[data-workspace=daw] #ls-stop:not(:disabled){border-color:#a9c3cd;color:#e5eff2}\n.ls-desk[data-workspace=daw] .ls-transport #ls-export-state{color:#9eb8c2;font-size:11px}\n.ls-desk[data-workspace=daw] .ls-transport output{padding:6px 9px;min-width:0;max-width:100%;overflow-wrap:anywhere;border-color:#354d59;border-radius:6px;font-size:11px}\n.ls-desk[data-workspace=daw] .ls-transport-feedback [data-ls=status]{margin:2px 0 0;min-height:0;color:#b4c8d0;font:12px/1.5 system-ui,sans-serif}\n.ls-desk[data-workspace=daw] .ls-transport-feedback [data-ls=status][data-error=true]{color:#ffb4a6}\n.ls-desk[data-workspace=daw] .ls-daw-tabs{gap:4px;padding:8px 14px;flex-wrap:wrap;overflow:visible}\n.ls-desk[data-workspace=daw] .ls-daw-tabs button{white-space:normal}\n\n.ls-desk[data-workspace=daw] .ls-arrangement [data-ls=arrangement]:has(>p){min-height:96px;display:grid;align-items:center}\n.ls-desk[data-workspace=daw] a:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}\n@media(max-width:720px){\n  .ls-desk[data-workspace=daw]>header{padding:14px;align-items:flex-start;flex-direction:column}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:3px;padding:8px}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs button{min-width:0;min-height:44px;overflow-wrap:anywhere}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs [data-daw-mixer]{margin-left:0}\n  .ls-desk[data-workspace=daw] .ls-transport{padding:12px;gap:8px}\n  .ls-desk[data-workspace=daw] .ls-transport output{flex-basis:auto}\n  .ls-desk[data-workspace=daw] .ls-live-badge{margin-left:0}\n}\n@media(max-width:420px){\n  .ls-desk[data-workspace=daw] .ls-daw-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}\n  .ls-desk[data-workspace=daw] .ls-transport #audio-session-transport .primitive-card__body{gap:6px}\n  .ls-desk[data-workspace=daw] .ls-transport button{padding:8px;font-size:11px}\n}\n/* SSR track components: controls fit the viewport; clips retain beat-relative positions. */\n.ls-desk .ls-session-timeline>header {display:flex;flex-direction:row;align-items:center;gap:16px;text-align:left;margin-bottom:8px}\n.ls-session-timeline>header>div {min-width:0;flex:1}\n.ls-session-timeline>header h3 {margin:4px 0}\n.ls-session-timeline>header>button {flex:none}\n.ls-session-timeline>p {max-width:72ch;margin:8px 0 16px;color:#9db4bf}\n.ls-session-scroll {max-height:none;overflow:visible;border:0;border-radius:0}\n.ls-session-lanes {min-width:0;display:grid;gap:12px}\n.ls-session-track {min-width:0;border:1px solid #344c5b;border-radius:8px;padding:10px;background:#172b36}\n.ls-desk .ls-session-track>header {display:grid;grid-template-columns:minmax(0,1fr) 72px 48px 66px;align-items:center;gap:10px;min-height:44px;margin:0 0 8px;flex-direction:row}\n.ls-track-identity {display:flex;align-items:center;gap:10px;min-width:0}\n.ls-desk[data-workspace=daw] .ls-track-identity>button {max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;font-weight:600;border-color:transparent;background:transparent;padding:6px 0;font-size:12px}\n.ls-desk[data-workspace=daw] .ls-track-identity>button:disabled {opacity:1;cursor:default}\n.ls-session-track header small {min-width:0;max-width:180px;font-size:10px}\n.ls-desk .ls-session-track header label {display:flex;flex-direction:column;align-items:stretch;gap:2px;margin:0;font-size:9px;color:#a8becb}\n.ls-desk[data-workspace=daw] .ls-session-track input[type=number] {width:100%;padding:6px;font-size:12px;min-height:30px}\n.ls-session-track [data-track-mute][aria-pressed=true] {background:#624a31;border-color:#ba935b;color:#ffe0aa}\n.ls-desk .ls-session-track .ssr-action-menu {margin:0;justify-self:stretch}\n.ls-session-track .ssr-action-menu>summary {padding:8px;gap:5px;min-height:36px;justify-content:center;border:1px solid #405765;background:#223743;color:#dce7ef;font-size:11px}\n.ls-session-track .ssr-action-menu>[role=menu] {z-index:100;background:#182c37;border-color:#516d7d;border-radius:8px}\n.ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem] {min-height:42px;background:transparent;border:0;padding:10px 12px;font-size:12px}\n.ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem]:hover,\n.ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem]:focus-visible {background:#304a58}\n.ls-session-lane {height:64px;border-radius:4px}\n.ls-desk[data-workspace=daw] .ls-session-lane [data-session-clip] {height:52px;top:6px;padding:7px 12px;border:1px solid #60888a;border-left:3px solid #9dc6a5;background:#294a53;color:#e4f0e6;border-radius:4px}\n.ls-session-lane [data-clip-resize] {width:12px;background:#b5d08e33}\n.ls-session-lane [aria-pressed=true] {outline-offset:-2px}\n.ls-envelope {margin-top:8px;border-radius:4px;height:96px;background:repeating-linear-gradient(90deg,transparent 0,transparent calc(12.5% - 1px),#38536355 calc(12.5% - 1px),#38536355 12.5%),#0f222a}\n.ls-envelope circle {vector-effect:non-scaling-stroke;stroke:#d6efb3;stroke-width:10}\n.ls-envelope-caption {display:flex;justify-content:space-between;font-size:10px;color:#a8c49d;margin:12px 0 6px}\n.ls-session-timeline:not(:has(.ls-envelope)) .ls-envelope-fields {display:none}\n.ls-envelope-fields {padding:12px;border:1px solid #344c5b;border-radius:8px;background:#172b36;gap:10px}\n.ls-envelope-fields>span {font-size:11px;color:#9db4bf}\n.ls-envelope-fields>strong {font-size:11px;margin-right:auto;align-self:center}\n.ls-desk[data-workspace=daw] .ls-envelope-fields input {width:76px}\n.ls-clip-detail {background:#172b36;border-color:#344c5b;border-radius:8px}\n.ls-clip-detail h4 {margin:0 0 12px;font-size:13px}\n.ls-session-fields input:not([type=number]) {background:#223743;color:#dce7ef;border:1px solid #405765;border-radius:4px;padding:7px 10px;font:inherit}\n.ls-session-fields input,.ls-session-fields select {min-height:34px}\n.ls-session-editor [data-track-status] {color:#9db4bf}\n/* Persistent tracks carry their own mixer controls; the old channel list is redundant. */\n.ls-desk[data-workspace=daw][data-track-session=true] {grid-template-columns:minmax(0,1fr)}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-daw-library {display:none}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-code,\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-midi {grid-column:1}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-channel-rack {grid-template-columns:minmax(0,1fr) auto;gap:8px 20px;padding:12px 18px}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-channel-rack .ls-lanes {grid-column:1;grid-row:3;display:block;overflow:visible;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row[data-ls-channel=reverb] {display:grid;grid-template-columns:110px minmax(80px,240px) auto auto;align-items:center;gap:12px;min-width:0;padding:8px 12px;border-top-width:1px;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row :is(.mixer-handle,.mixer-slot,.mixer-scale) {display:none}\n/* The return strip lies flat beside the track editor: name, fader, level, mute. */\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-fader-bay {order:1;height:auto;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-readout {order:2}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-buttons {order:3}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row :is(.mixer-fader,.mixer-fader>.primitive-input) {width:100%;height:auto}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-fader input[type=range] {writing-mode:horizontal-tb;direction:ltr;width:100%;height:28px;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] [data-ls=mix] {grid-column:2;grid-row:3;align-self:center}\n@media(max-width:720px) {\n  .ls-track-identity {display:block}\n  .ls-track-identity>small {display:block;max-width:100%;font-size:9px}\n  .ls-desk .ls-session-track>header {grid-template-columns:minmax(0,1fr) 58px 44px 58px;gap:6px}\n  .ls-desk[data-workspace=daw] .ls-session-track [data-track-mute],\n  .ls-session-track .ssr-action-menu>summary {min-height:44px;padding:6px}\n  .ls-desk[data-workspace=daw] .ls-session-track input[type=number] {font-size:16px;min-height:34px;padding:4px}\n  .ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem] {min-height:44px}\n  .ls-desk .ls-session-timeline>header {align-items:center;gap:8px}\n  .ls-desk[data-workspace=daw] .ls-session-timeline>header>button {max-width:118px;min-height:44px;padding:8px;white-space:normal}\n  .ls-desk[data-workspace=daw] .ls-session-timeline>header h3 {font-size:15px}\n  .ls-session-timeline>p {font-size:11px;line-height:1.6}\n  .ls-session-track {padding:8px}\n  .ls-envelope {height:100px}\n  .ls-envelope-fields {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:end}\n  .ls-envelope-fields>strong,.ls-envelope-fields>span {grid-column:1/-1}\n  .ls-desk[data-workspace=daw] .ls-envelope-fields input {width:100%;font-size:16px}\n  .ls-envelope-fields button {min-height:44px}\n  .ls-session-fields {display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}\n  .ls-desk[data-workspace=daw] .ls-session-fields input,.ls-session-fields select {width:100%;max-width:100%;font-size:16px}\n  .ls-session-fields button {min-height:44px}\n  .ls-desk[data-workspace=daw][data-track-session=true] .ls-channel-rack .ls-lanes {grid-column:1/-1}\n  .ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row[data-ls-channel=reverb] {grid-template-columns:100px minmax(60px,1fr)}\n  .ls-desk[data-workspace=daw][data-track-session=true] [data-ls=mix] {grid-column:1/-1;grid-row:4;justify-self:stretch;min-height:44px}\n}\n@media(max-width:560px) {\n  .ls-desk[data-workspace=daw] .ls-code {padding:12px 8px}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs {flex-wrap:nowrap;overflow-x:auto;gap:6px;padding:8px;scrollbar-width:thin}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs button {flex:none;min-height:42px;padding:8px 12px}\n  .ls-desk[data-workspace=daw] .ls-transport {gap:8px;min-height:0}\n  .ls-desk[data-workspace=daw] .ls-transport output {padding:8px;flex-basis:auto;min-width:0;font-size:10px}\n  .ls-desk[data-workspace=daw] .ls-transport button {min-height:40px}\n  .ls-desk[data-workspace=daw] .ls-transport .ls-meter {display:none}\n  .ls-desk[data-workspace=daw] .ls-draft-bar {flex-wrap:wrap;gap:8px;margin-top:8px}\n  .ls-desk[data-workspace=daw] .ls-draft-bar button {min-height:40px}\n  .ls-desk[data-workspace=daw] .ls-tempo {grid-column:2;grid-row:1/3}\n  .ls-desk[data-workspace=daw] .ls-channel-rack>p {grid-column:1;font-size:10px}\n}\n/* Opt-in editor chrome. Documents, canvases, transport and geometry stay app-owned. */\n[data-editor-chrome]{\n  --editor-surface:light-dark(#f6f8f6,#1b2220);\n  --editor-raised:light-dark(#fff,#242e29);\n  --editor-ink:var(--cre8-view-fg,light-dark(#182620,#edf3ee));\n  --editor-muted:var(--cre8-view-fg-muted,light-dark(#536259,#a6b5ab));\n  --editor-border:var(--cre8-view-border,light-dark(#cbd5ce,#3b4941));\n  --editor-accent:light-dark(#246640,#b8f568);\n  --editor-selected:light-dark(#e0eddf,#34422e);\n  --editor-control-height:34px;\n  --editor-control-radius:5px;\n}\n[data-editor-chrome] [data-editor-strip]{\n  color:var(--editor-ink);background:var(--editor-surface);border-color:var(--editor-border);\n  gap:4px;min-width:0;\n}\n[data-editor-chrome] [data-editor-strip] :is(button,summary,select){\n  box-sizing:border-box;min-height:var(--editor-control-height);border-radius:var(--editor-control-radius);\n  font:12px/1.4 system-ui,sans-serif;color:var(--editor-ink);border-color:var(--editor-border);padding:6px 10px;\n}\n[data-editor-chrome] [data-editor-strip] select{background:var(--editor-raised)}\n[data-editor-chrome] [data-editor-strip] :is(button,summary){background:transparent}\n[data-editor-chrome] [data-editor-strip] :is([aria-selected=true],[aria-pressed=true]){\n  background:var(--editor-selected);color:var(--editor-accent);border-color:var(--editor-accent);\n}\n[data-editor-chrome] [data-editor-strip] :is(button,summary):hover:not(:disabled){background:var(--editor-selected)}\n[data-editor-chrome] [data-editor-strip] :is(button,select):disabled{opacity:.45;cursor:default}\n[data-editor-chrome] :is(button,summary,select,input,textarea,[role=separator]):focus-visible{\n  outline:2px solid var(--editor-accent);outline-offset:2px;\n}\n[data-editor-chrome] .ssr-action-menu>[role=menu]{background:var(--editor-raised);color:var(--editor-ink);border-color:var(--editor-border)}\n[data-editor-chrome] .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]){color:var(--editor-ink);min-height:var(--editor-control-height)}\n[data-editor-chrome] .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):is(:hover,:focus-visible):not(:disabled){background:var(--editor-selected);outline-color:var(--editor-accent)}\n[data-editor-chrome] .cre8-document-tab:has([aria-selected=true]){border-top-color:var(--editor-accent);background:var(--editor-selected)}\n[data-editor-chrome] .cre8-document-tab>.primitive-tabs-button{border-radius:0;border:0}\n[data-editor-chrome] .cre8-document-tab-close{padding:4px;min-width:28px}\n[data-editor-chrome] [data-tab-dirty]{color:var(--editor-accent)}\n[data-editor-chrome] button[data-ssr-menu-open]{min-height:var(--editor-control-height);min-width:var(--editor-control-height)}\n@media(pointer:coarse){\n  [data-editor-chrome]{--editor-control-height:44px}\n  [data-editor-chrome] [data-editor-strip] :is(button,summary,select){min-width:44px}\n  [data-editor-chrome] .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]){min-height:44px}\n}\n@media(prefers-reduced-motion:reduce){[data-editor-chrome] [data-editor-strip] *{scroll-behavior:auto;transition:none}}\n.ls-waveform{display:none;min-width:0;outline-offset:3px}\n.ls-waveform [data-audio=insert-panel]>h4,.ls-waveform [data-audio=insert-panel]>p,.ls-waveform [data-audio=insert-panel]>output{flex-basis:100%;margin:0}\n.ls-waveform [data-audio=insert-panel] label{flex-wrap:wrap;max-width:100%}.ls-waveform [data-audio=insert-panel] input,.ls-waveform [data-audio=insert-panel] select{min-width:0;max-width:100%;box-sizing:border-box}\n.ls-waveform [data-insert=status][data-error=true]{color:#ffb4a6}\n.ls-desk[data-workspace=daw][data-daw-view=waveform] .ls-waveform{display:block;order:-1}\n.ls-desk[data-workspace=daw][data-daw-view=waveform] [data-ls-pane],.ls-desk[data-workspace=daw][data-daw-view=waveform] .ls-draft-bar{display:none!important}\n.ls-waveform header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.ls-waveform h3{margin:3px 0;font-size:20px}.ls-waveform output{font:11px/1.5 ui-monospace,monospace;overflow-wrap:anywhere;color:#b8d4dd}\n.ls-wave-tools,.ls-wave-selection{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:12px 0}.ls-waveform label{display:flex;gap:5px;align-items:center;font-size:11px;color:#b5cad4}.ls-waveform input[type=checkbox]{width:auto}.ls-waveform input[type=number]{width:105px!important;box-sizing:border-box}.ls-wave-selection label{flex-direction:column;align-items:flex-start}.ls-waveform input[data-wave=db]{width:65px!important}\n.ls-waveform canvas{display:block;box-sizing:border-box;width:100%;height:280px;background:#0c1b25;border:1px solid #415b68;border-radius:6px;touch-action:none;cursor:crosshair}.ls-waveform canvas:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}\n.ls-waveform input[data-wave=scroll]{display:block;width:100%;margin:8px 0;accent-color:#b8d699}.ls-waveform [data-wave=status]{min-height:18px;color:#bdd7c3}.ls-waveform [data-wave=status][data-error=true]{color:#ffb4a6}.ls-waveform details{font-size:11px;color:#9fb7c4}.ls-waveform [aria-busy=true]{opacity:.65}\n@media(max-width:560px){.ls-wave-tools button{min-height:40px}.ls-waveform canvas{height:250px}.ls-wave-selection{gap:8px}.ls-waveform header output{flex-basis:100%}}\n.ls-audio-timeline{margin:20px 0;padding:16px 0;border-top:1px solid #415b68;border-bottom:1px solid #415b68}.ls-audio-track{border:1px solid #344b57;border-radius:6px;margin:10px 0;padding:8px;min-width:0}.ls-audio-track .ls-wave-tools{margin:0 0 8px}.ls-audio-track input[data-track=pan]{width:85px}.ls-audio-lane{position:relative;height:68px;background:repeating-linear-gradient(90deg,#0c1b25 0%,#0c1b25 9.9%,#28404e 10%);overflow:hidden}.ls-audio-lane button{position:absolute;top:4px;height:60px;min-width:3px;overflow:hidden;padding:3px;border:1px solid #83aaa1;background:#254837;color:#e5f3de;text-align:left;touch-action:none;cursor:grab;white-space:nowrap}.ls-audio-lane button[aria-pressed=true]{border:2px solid #dfefa1;background:#416042}.ls-audio-lane canvas{position:absolute;inset:18px 0 0;width:100%;height:38px;border:0;border-radius:0;pointer-events:none;background:transparent}.ls-waveform select{max-width:260px}.ls-waveform input[data-audio=name],.ls-waveform input[data-track=name]{width:170px;max-width:100%}.ls-waveform [data-audio=record-status]{max-width:440px}.ls-waveform meter{width:110px}.ls-waveform [data-audio=save-status][data-error=true]{color:#ffb4a6}.ls-waveform .ls-audio-timeline p{font-size:11px;color:#9fb7c4}\n.ls-audio-playhead{position:absolute;top:0;height:100%;width:2px;background:#fff0ad;pointer-events:none;z-index:2}\n.ls-wave-generator{border:1px solid #415b68;border-radius:6px;padding:12px;margin:16px 0}.ls-wave-generator summary{font-size:13px;color:#d7ecc6;cursor:pointer}.ls-wave-generator [hidden]{display:none!important}.ls-wave-generator label{flex-direction:column;align-items:flex-start}.ls-wave-generator [data-audio=generator-status][data-error=true]{color:#ffb4a6}\n.ls-wave-geometry{min-width:0}.ls-wave-geometry p{max-width:72ch}.ls-wave-geometry [data-audio=generator-projection]{color:#b8d699;max-width:640px}.ls-wave-geometry svg{display:block;width:100%;height:auto}.ls-wave-geometry .ls-wave-tools>div{min-width:0}\n.ls-wave-geometry{border:1px solid #415b68;border-radius:8px;padding:16px;margin:12px 0;background:#14232b}.ls-wave-geometry h4{margin:0 0 6px;font-size:16px;color:#e1efda}.ls-wave-geometry-intro{margin:0 0 16px;color:#b7cbd1}.ls-wave-geometry-grid{display:grid;grid-template-columns:minmax(240px,1fr) minmax(260px,1.2fr);gap:20px;align-items:start}.ls-wave-geometry-controls>.ls-wave-tools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0}.ls-wave-geometry-controls label{display:flex;gap:6px;min-width:0}.ls-wave-geometry-controls select,.ls-wave-geometry-controls input{box-sizing:border-box;width:100%;max-width:100%;min-width:0}.ls-wave-geometry-summary{padding:12px;border-left:3px solid #b8d699;background:#20333c;color:#e1efda;font-size:12px;line-height:1.6}.ls-wave-geometry-visual{border:1px solid #344b57;border-radius:6px;padding:8px 12px}.ls-wave-geometry-visual .ls-wave-tools{margin:6px 0;align-items:center}.ls-wave-geometry-visual p{font-size:11px;color:#b7cbd1;flex:1;min-width:150px;margin:0}.ls-wave-geometry-help{border-top:1px solid #344b57;padding-top:12px;margin-top:12px}.ls-wave-geometry-help p{font-size:12px;color:#b7cbd1;line-height:1.6}.ls-wave-generator [data-audio-action=generate-wave]{background:#c5e6ac;color:#172b1c;border-color:#c5e6ac;font-weight:700}.ls-wave-generator [data-audio-action=generate-wave]:disabled{opacity:.45}.ls-wave-generator button:focus-visible,.ls-wave-generator summary:focus-visible,.ls-wave-generator input:focus-visible,.ls-wave-generator select:focus-visible{outline:2px solid #e2f3a9;outline-offset:3px}@media(max-width:1050px){.ls-wave-geometry-grid{grid-template-columns:minmax(0,1fr)}.ls-wave-geometry-visual{max-width:600px}}@media(max-width:440px){.ls-wave-geometry-controls>.ls-wave-tools{grid-template-columns:minmax(0,1fr)}.ls-wave-geometry{padding:12px}}\n.ls-wave-geometry-controls>.ls-wave-tools>.primitive-select,.ls-wave-geometry-controls>.ls-wave-tools>.primitive-input{display:flex;flex-direction:column;gap:6px;min-width:0}\n.ls-desk .ls-waveform .ls-wave-generator button[data-audio-action=generate-wave]{background:#c5e6ac;color:#172b1c;border-color:#c5e6ac}\n.ls-wave-analysis{border:1px solid #415b68;border-radius:6px;padding:12px;margin:12px 0}.ls-wave-analysis summary,.ls-spectrum-settings summary{cursor:pointer;color:#d7ecc6}.ls-waveform canvas[data-spectrum=plot]{height:220px;margin-top:12px;cursor:default;touch-action:auto}.ls-waveform canvas[hidden]{display:none!important}.ls-spectrum-results{max-width:100%;overflow:auto}.ls-spectrum-results table{width:100%;border-collapse:collapse;margin-top:12px;font-size:11px}.ls-spectrum-results th,.ls-spectrum-results td{padding:8px;text-align:left;border-bottom:1px solid #344b57;vertical-align:top}.ls-spectrum-results td:last-child{min-width:180px}.ls-spectrum-settings{flex:1}.ls-spectrum-settings label{flex-direction:column;align-items:flex-start}\n.ls-audio-automation { margin-top: 1rem; padding: 1rem; border: 1px solid #29434d; border-radius: 8px; background: #10212a; }\n.ls-automation-controls { display: flex; flex-wrap: wrap; align-items: end; gap: .65rem; }\n.ls-automation-controls input, .ls-automation-controls select { max-width: 16rem; }\n.ls-automation-curve { display: block; width: 100%; height: 140px; margin-top: 1rem; border: 1px solid #36525a; border-radius: 4px; background: #081319; cursor: crosshair; }\n/* Visuals pane: the DAW's own shader picture, shown in the code column beside\n   the piano roll. Hidden exactly the way .ls-piano is, so one DAW view is\n   visible at a time. */\n.ls-visual[data-visual-workspace=trace] .ls-field-views{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;}\n.ls-visual .ls-shader-preview canvas{width:100%;aspect-ratio:16/9;border:1px solid #415c6e;box-sizing:border-box;}\n.ls-visual[data-visual-workspace=trace] .ls-field-views figcaption{min-height:0;padding:0 0 7px;font:11px ui-monospace,monospace;color:#a8c4c9;}\n@media(max-width:700px){.ls-visual[data-visual-workspace=trace] .ls-field-views{grid-template-columns:minmax(0,1fr);}}\n[data-scope-mode=plate] [data-visual-shader-only],\n[data-scope-mode=plate] .ls-shader-live,\n[data-scope-mode=plate] .ls-visual-lock{display:none!important}\n[data-plate-slot] {min-width:0;margin-top:14px}\n[data-plate-slot] .primitive-card__body {display:flex;flex-wrap:wrap;gap:12px;align-items:end}\n[data-plate-slot] .primitive-input {display:flex;flex:1 1 150px;min-width:0;flex-direction:column;gap:6px}\n[data-plate-slot] input {width:100%;min-height:36px;box-sizing:border-box}\n[data-plate-slot] input[type=checkbox] {width:auto}\n[data-plate-slot] .primitive-text {flex-basis:100%;font-size:12px;line-height:1.6;overflow-wrap:anywhere}\n[data-plate-slot] .primitive-card__title {font-size:18px}\n[data-plate-slot] .primitive-card {border:1px solid #31505b;border-radius:10px;padding:16px}\n.ls-visual{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-visual{display:block;order:-1;min-width:0}\n.ls-desk[data-workspace=daw][data-daw-view=visual] [data-ls-pane]{display:none!important}\n.ls-desk[data-workspace=daw] .ls-visual header{display:flex;flex-wrap:wrap;align-items:end;justify-content:start;gap:10px;margin-bottom:10px}\n.ls-desk[data-workspace=daw] .ls-visual header>div{margin-right:auto}\n.ls-desk[data-workspace=daw] .ls-visual h3{margin:4px 0}\n.ls-desk[data-workspace=daw] .ls-visual label{font-size:10px;color:#a8bfce}\n.ls-desk[data-workspace=daw] .ls-visual header select{display:block;margin-top:4px;max-width:190px}\n.ls-visual-check{display:flex!important;align-items:center;gap:6px;padding-bottom:8px}\n.ls-visual-check input{accent-color:#b8d699;margin:0}\n.ls-visual-stage{position:relative;border:1px solid #415c6e;border-radius:4px;background:#050f16;overflow:hidden}\n.ls-desk[data-workspace=daw] .ls-visual canvas{display:block;width:100%;aspect-ratio:16/9;height:auto;background:#050f16}\n.ls-visual[data-visual-ready=false] .ls-visual-stage{background:repeating-linear-gradient(135deg,#0d1c26 0,#0d1c26 12px,#132534 12px,#132534 24px)}\n.ls-visual-lock{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:10px 0 14px;font-size:10px;color:#9db3c1}\n.ls-desk[data-workspace=daw] .ls-visual-lock output{padding:5px 9px;border:1px solid #47606b;border-radius:4px;background:#101c24;font:11px ui-monospace,monospace;color:#d7e9d9}\n.ls-visual[data-visual-live=true] .ls-visual-lock output{border-color:#7fa87c;color:#cfe9b8}\n.ls-visual-lock span{flex:1 1 240px;min-width:0}\n.ls-desk[data-workspace=daw] .ls-visual-code label{font-size:10px}\n.ls-desk[data-workspace=daw] .ls-visual-code label>span{float:right;color:#7d9aac}\n.ls-desk[data-workspace=daw] .ls-visual .ls-editor-frame{border-color:#415c6e;border-radius:4px;background:#0d1c26}\n.ls-desk[data-workspace=daw] .ls-visual .ls-editor-surface textarea{min-height:250px}\n.ls-desk[data-workspace=daw] .ls-visual .ls-gutter{background:#101f2a;color:#5c7c8c}\n.ls-visual-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0}\n.ls-visual-actions a{font-size:10px;margin-left:auto}\n.ls-desk[data-workspace=daw] .ls-visual [data-visual=status]{min-height:20px;margin:4px 0;font-size:11px;color:#bcd7a8;white-space:pre-wrap}\n.ls-desk[data-workspace=daw] .ls-visual [data-visual=status][data-error=true]{color:#ffb4a6}\n.ls-visual-inputs{margin-top:14px}\n.ls-desk[data-workspace=daw] .ls-visual-inputs summary{font-size:11px}\n.ls-desk[data-workspace=daw] .ls-visual-inputs dl{display:grid;grid-template-columns:132px minmax(0,1fr);gap:3px 12px;margin:10px 0;font-size:10px}\n.ls-desk[data-workspace=daw] .ls-visual-inputs dt{color:#bcee83;font-family:ui-monospace,monospace}\n.ls-desk[data-workspace=daw] .ls-visual-inputs dd{margin:0;color:#a0b7c6}\n.ls-desk[data-workspace=daw] .ls-visual>p{font-size:11px}\n@media(max-width:800px){.ls-desk[data-workspace=daw] .ls-visual-inputs dl{grid-template-columns:minmax(0,1fr)}.ls-desk[data-workspace=daw] .ls-visual-inputs dd{margin-bottom:6px}.ls-visual-actions a{margin-left:0}}\n/* Scope controls belong to the shared Visuals pane and wrap within narrow desks. */\n.ls-scope-controls { display:flex; flex-wrap:wrap; align-items:center; gap:12px; padding:12px; background:#091a22; border:1px solid #29434a; border-radius:8px; }\n.ls-scope-controls[hidden] { display:none; }\n.ls-scope-controls label { display:flex; align-items:center; gap:6px; font-size:12px; }\n.ls-scope-controls input[type=range] { width:100px; }\n.ls-scope-controls output { flex-basis:100%; color:#86dfb8; font:12px monospace; }\n.ls-visual[data-scope-mode]:not([data-scope-mode=\"shader\"]) [data-visual-shader-only] { display:none!important; }\n.ls-sound-source { display:block; margin:0 0 12px; color:var(--text-muted,#a6b7c3); font-size:12px; }\n.ls-field-experiment { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:12px 0 8px; }\n.ls-field-experiment label { display:flex; align-items:center; gap:8px; }\n.ls-field-panel .ls-field-save-help { font-size:12px; opacity:.75; margin:4px 0; }\n.ls-field-panel [data-field-saved] { display:block; font-size:12px; margin:4px 0 12px; }\n.ls-visual-surfaces { display:flex; gap:4px; padding:4px; border:1px solid #35505a; border-radius:8px; }\n.ls-visual-surfaces button[aria-pressed=true] { background:#234b43!important; border-color:#8bcfb5!important; color:#e2fff1!important; }\n.ls-shader-trace { display:flex; flex-wrap:wrap; align-items:center; gap:12px; padding:10px 0; }\n.ls-shader-trace output { flex:1 1 320px; color:#a8bfce; font-size:11px; }\n.ls-shader-live { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin-bottom:12px; padding:10px; border:1px solid #35505a; border-radius:6px; }\n.ls-shader-live label { display:flex; align-items:center; gap:6px; }\n.ls-shader-live input[type=range] { width:100px; }\n.ls-shader-live output { flex:1 1 320px; color:#a8bfce; font-size:11px; }\n.ls-visual[data-live-shader=true] .ls-shader-live { border-color:#8bcfb5; }\n.ls-scope-controls { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); margin-top:12px; align-items:start; }\n.ls-scope-section { display:flex; flex-wrap:wrap; gap:12px; min-width:0; margin:0; padding:12px; border:1px solid #35505a; border-radius:6px; }\n.ls-scope-section legend { color:#e1f0df; font-size:12px; padding:0 6px; }\n.ls-scope-section p,.ls-scope-fields p { flex-basis:100%; margin:0; font-size:11px; line-height:1.5; color:#9eb6c2; }\n.ls-scope-controls>output,.ls-scope-midi { grid-column:1/-1; }\n.ls-scope-controls select { max-width:100%; }\n.ls-scope-spatial { flex-basis:100%; }\n.ls-scope-fields { display:flex; flex-wrap:wrap; gap:12px; padding:12px 0; }\n.ls-spectrum-controls { grid-column:1/-1; }\n.ls-spectrum-controls[hidden],.ls-scope-fields[hidden] { display:none; }\n.ls-spectrum-controls input[type=file] { max-width:100%; width:240px; }\n[data-theremini-mapping] input[type=number] { width:76px; }\n.ls-visual[data-scope-mode=spectrum] .ls-scope-section:first-child>label:not(:first-of-type),\n.ls-visual[data-scope-mode=spectrum] .ls-scope-section:first-child>.ls-scope-spatial { display:none; }\n.ls-scope-controls summary { cursor:pointer; color:#b8d9cc; font-size:12px; }\n.ls-field-panel { margin:0 0 12px; padding:16px; border:1px solid #538a7b; border-radius:10px; background:linear-gradient(120deg,#102d2b,#101f2b); }\n.ls-field-panel[hidden] { display:none; }\n.ls-field-heading,.ls-field-actions { display:flex; flex-wrap:wrap; align-items:center; gap:12px; }\n.ls-field-heading h4 { margin:4px 0; font-size:18px; color:#dcfff0; }\n.ls-field-panel p { flex:1 1 240px; margin:0; color:#adc6cb; font-size:12px; line-height:1.5; }\n.ls-field-presets { display:flex; flex-wrap:wrap; gap:6px; margin:12px 0; }\n.ls-field-presets [aria-pressed=true],.ls-visual[data-field-active=true] [data-field-open] { background:#234b43!important; border-color:#8bcfb5!important; color:#e2fff1!important; }\n.ls-field-knobs { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:16px; margin:16px 0; }\n.ls-desk[data-workspace=daw] .ls-field-knobs label { display:grid; grid-template-columns:1fr auto; gap:7px; font-size:12px; }\n.ls-field-knobs input { grid-column:1; grid-row:2; width:100%; min-width:0; }\n.ls-field-knobs output { grid-column:2; grid-row:2; min-width:42px; color:#9df4ca; font:12px ui-monospace,monospace; }\n.ls-field-play{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(180px,1fr);gap:20px;align-items:center;margin:16px 0;}\n.ls-field-play .ls-field-knobs{grid-template-columns:1fr;margin:0;gap:12px;}\n.ls-field-pad-wrap{min-width:0;}\n.ls-field-pad-wrap .ls-field-pad{position:relative;display:block;width:100%;height:160px;padding:0;overflow:hidden;touch-action:none;user-select:none;cursor:crosshair;border:1px solid #547b80;border-radius:9px;background:radial-gradient(ellipse at center,#163c45,#071b25);}\n.ls-field-pad:focus-visible{outline:2px solid #adf7cf;outline-offset:3px;}\n.ls-field-pad svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ls-field-pad path{stroke:#578087;stroke-dasharray:3 5;fill:none;}\n.ls-field-pad circle{fill:#c7ffe3;stroke:#65dda7;stroke-width:2;}\n.ls-field-pad span{position:absolute;color:#b1d2d6;font:10px ui-monospace,monospace;pointer-events:none;}\n.ls-field-pad-x{bottom:8px;right:10px;}.ls-field-pad-y{top:8px;left:10px;}\n.ls-field-pad-wrap p{font-size:11px;margin-top:7px;}\n.ls-field-gesture{border-top:1px solid #35545c;padding-top:14px;margin:14px 0;}\n.ls-field-gesture-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0;}\n.ls-field-gesture-actions label{display:flex;align-items:center;gap:6px;font-size:12px;}\n.ls-field-gesture-actions input{width:90px;}.ls-field-gesture-actions select{max-width:230px;}\n.ls-field-gesture output{display:block;font-size:12px;color:#a4e4cd;min-height:20px;margin:10px 0;}\n.ls-field-gesture details{margin:10px 0;}.ls-field-gesture summary{cursor:pointer;font-size:12px;color:#d0e6e3;}\n.ls-field-gesture svg{display:block;width:100%;height:100px;background:#071b25;margin:10px 0;border-radius:6px;}\n.ls-field-gesture path{fill:none;stroke-width:1.5;vector-effect:non-scaling-stroke;}\n[data-field-gesture-curve=xw]{stroke:#86ebc0;}[data-field-gesture-curve=xy]{stroke:#87baf5;}[data-field-gesture-curve=interaction]{stroke:#e6b978;}\n.ls-field-gesture line{stroke:#fff;stroke-width:1;opacity:.65;vector-effect:non-scaling-stroke;}\n.ls-field-gesture .ls-field-gesture-legend{display:flex;gap:15px;font-size:10px;}\n.ls-field-gesture-legend span:nth-child(1){color:#86ebc0;}.ls-field-gesture-legend span:nth-child(2){color:#87baf5;}.ls-field-gesture-legend span:nth-child(3){color:#e6b978;}\n@media(max-width:650px){.ls-field-play{grid-template-columns:minmax(0,1fr);}}\n.ls-visual[data-field-active=true]:not([data-live-shader=true]) .ls-shader-live { display:none; }\n@media(max-width:800px){.ls-scope-controls{grid-template-columns:minmax(0,1fr)}.ls-scope-controls label{flex-wrap:wrap}.ls-visual-surfaces{width:100%}.ls-visual-surfaces button{flex:1}}\n\n[data-spectrum-slot] .primitive-card__body{display:flex;flex-wrap:wrap;align-items:center;gap:14px}\n[data-spectrum-slot] .primitive-input{display:flex;flex-direction:column;gap:6px;min-width:150px}\n[data-spectrum-slot] .primitive-input input[type=file]{max-width:240px}\n[data-spectrum-slot] .primitive-text{flex-basis:100%}\n[data-spectrum-slot] .primitive-card{padding:16px;border:1px solid #31505b;border-radius:8px}\n[data-spectrum-slot] .primitive-card h3{font-size:14px}\n[data-spectrum-slot] [data-cre8-host-ready=false]{opacity:.8}\n\n[data-spectrum-slot]{flex-basis:100%;min-width:0}\n[data-spectrum-slot] .primitive-card__title{font-size:14px}\n\n[data-cre8-host-component=\"virtual.shader-studio\"] {min-width:0;}\n[data-cre8-host-component=\"virtual.shader-studio\"] > .primitive-card > .primitive-card__body {display:flex;flex-wrap:wrap;gap:12px;align-items:center;}\n[data-cre8-host-component=\"virtual.shader-studio\"] .ssr-code-editor {flex-basis:100%;width:100%;min-width:0;}\n[data-cre8-host-component=\"virtual.shader-studio\"] .primitive-text,\n[data-cre8-host-component=\"virtual.shader-studio\"] .primitive-card {flex-basis:100%;min-width:0;overflow-wrap:anywhere;}\n[data-cre8-host-component=\"virtual.shader-studio\"] .primitive-select {min-width:160px;}\n\n/* Workspace panels share a canvas and one instrument transport. */\n.ls-field-views{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;margin:12px 0;}\n.ls-visual[data-field-active=true] .ls-field-views{grid-template-columns:repeat(2,minmax(0,1fr));}\n.ls-field-views figure{margin:0;min-width:0;}\n.ls-field-views figcaption{display:flex;flex-direction:column;gap:3px;min-height:48px;font-size:13px;color:#def5ef;}\n.ls-field-views figcaption span{font-size:11px;color:#9cb7c4;}\n.ls-field-geometry svg{display:block;width:100%;aspect-ratio:1;background:#071720;border:1px solid #35505a;border-radius:6px;box-sizing:border-box;}\n.ls-field-geometry [data-field-axes] line{stroke:#344d5a;stroke-dasharray:3 4;}\n.ls-field-geometry [data-field-axes] text{fill:#9db7c4;font:11px ui-monospace,monospace;}\n.ls-field-geometry label{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;margin:12px 0 8px;}\n.ls-field-geometry input{flex:1;min-width:100px;}\n.ls-field-geometry output{display:block;font:11px/1.7 ui-monospace,monospace;color:#c6e1dd;overflow-wrap:anywhere;}\n.ls-field-views p{font-size:11px;color:#9eb8c3;line-height:1.5;margin:8px 0;}\n.ls-field-legend{display:flex;align-items:center;gap:8px;margin-top:8px;font:10px ui-monospace,monospace;color:#aec6d0;}\n.ls-field-color-key{flex:1;height:5px;border-radius:4px;background:linear-gradient(90deg,hsl(210 85% 67%),hsl(122.5 85% 67%),hsl(35 85% 67%));}\n.ls-visual[data-field-active=true] .ls-field-sound .ls-visual-stage{aspect-ratio:1;}\n.ls-visual[data-field-active=true] .ls-field-sound canvas{display:block;width:100%;height:100%;aspect-ratio:1;}\n@media(max-width:800px){.ls-visual[data-field-active=true] .ls-field-views{grid-template-columns:minmax(0,1fr);}}\n.ls-visual [data-visual-for][hidden] {display:none!important;}\n.ls-visual-workspaces {display:flex;flex-wrap:wrap;gap:4px;width:100%;}\n.ls-visual-workspaces>button[aria-pressed=true]{background:#234b43!important;border-color:#8bcfb5!important;color:#e2fff1!important;}\n.ls-visual-workspaces>div>span {display:block;margin:0 0 6px;color:#8faeae;font-size:11px;}\n.ls-visual-workspaces .ls-visual-surfaces {width:auto;}\n.ls-visual-workspaces .ls-visual-surfaces button {flex:1;min-width:0;}\n.ls-workspace-description {color:#a8c4c9;line-height:1.5;margin:4px 0 14px;}\n.ls-instrument-bar {display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px;margin-bottom:12px;border:1px solid #35505a;border-radius:8px;background:#102329;}\n.ls-instrument-bar label {display:flex;align-items:center;gap:8px;}\n.ls-instrument-bar input[type=range] {width:120px;}\n.ls-instrument-bar p,.ls-instrument-bar output {flex-basis:100%;margin:0;color:#a8c4c9;font-size:11px;}\n.ls-visual>[data-visual-for=\"geometry\"] {margin-bottom:12px;}\n.ls-scope-controls {display:block;}\n.ls-scope-controls>output {display:block;margin-bottom:10px;}\n.ls-scope-controls details,.ls-shader-sound {margin-top:12px;}\n.ls-display-settings>summary,.ls-shader-sound>summary {cursor:pointer;color:#bed6cf;font-size:12px;padding:8px 0;}\n.ls-shader-sound {padding:0 12px;border:1px solid #35505a;border-radius:8px;}\n.ls-visual .ls-shader-sound .ls-shader-live {display:flex;}\n.ls-shader-editor,.ls-visual-help{margin-top:12px;border-top:1px solid #35505a;padding-top:8px;}\n.ls-shader-editor>summary,.ls-visual-help>summary{cursor:pointer;color:#bed6cf;font-size:12px;padding:6px 0;}\n.ls-visual-help{font-size:12px;color:#9eb6c2;}\n.ls-visual output:empty{display:none;}\n@media(max-width:600px){.ls-visual-workspaces{grid-template-columns:minmax(0,1fr);}.ls-instrument-bar label{flex-wrap:wrap;}}\n\n.ls-field-arrangement { margin:12px 0; padding:12px; border:1px solid #538a7b; border-radius:8px; }\n.ls-field-arrangement svg { display:block; width:100%; height:90px; margin:12px 0 6px; background:#091a22; }\n.ls-field-arrangement path { fill:none; stroke-width:1.5; vector-effect:non-scaling-stroke; }\n[data-field-arrangement-curve=xw] { stroke:#83dfb1; }\n[data-field-arrangement-curve=xy] { stroke:#81bfff; }\n[data-field-arrangement-curve=interaction] { stroke:#efbb84; }\n[data-field-arrangement-playhead] { stroke:#fff; stroke-width:1; }\n.ls-field-arrangement>label { display:flex; align-items:center; gap:12px; }\n.ls-field-arrangement input[type=range] { flex:1; min-width:0; }\n.ls-field-arrangement select { max-width:100%; }\n.ls-field-arrangement output { display:block; margin:8px 0; font:12px ui-monospace,monospace; color:#dcfff0; }\n\n.ls-field-arrangement .ls-field-gesture-legend { display:flex; gap:16px; margin:6px 0 10px; }\n.ls-field-arrangement .ls-field-gesture-legend span:nth-child(1) { color:#83dfb1; }\n.ls-field-arrangement .ls-field-gesture-legend span:nth-child(2) { color:#81bfff; }\n.ls-field-arrangement .ls-field-gesture-legend span:nth-child(3) { color:#efbb84; }\n\n/* Portable arrangement controls share the compact instrument layout. */\n.ls-field-arrangement .primitive-card {background:transparent;border:0;box-shadow:none;padding:0;}\n.ls-field-arrangement .primitive-card__header {padding:0 0 12px;border:0;}\n.ls-field-arrangement .primitive-card__title {font-size:16px;margin:0;}\n.ls-field-arrangement .primitive-card__body {display:flex;flex-wrap:wrap;gap:12px;align-items:end;padding:0;}\n.ls-field-arrangement .primitive-input,.ls-field-arrangement .primitive-select {flex:1 1 180px;min-width:0;}\n.ls-field-arrangement .primitive-checkbox {flex-basis:100%;}\n.ls-field-arrangement .primitive-checkbox__label {justify-content:flex-start;gap:8px;}\n.ls-field-arrangement .primitive-checkbox__text {flex:none;}\n.ls-field-arrangement .primitive-input__control,.ls-field-arrangement .primitive-select__control {width:100%;box-sizing:border-box;}\n.ls-field-arrangement .primitive-text {flex-basis:100%;font-size:12px;line-height:1.6;}\n.ls-field-arrangement [role=status] {color:#dcfff0;}\n</style>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<script type=\"application/json\" data-ls=\"presets\">{\n  \"pulse\": \"// Pulse engine · x is a hit, X is an accent\\ntempo 124\\nbars 2\\ninstrument bass saw_bass\\ninstrument arp bell\\nlevel reverb 0.25\\n\\npattern kick X...x...X...x... 0 8 0.8\\npattern snare ....x.......x... 0 8 0.65\\npattern hat ..x...x...x...x. 0 8 0.35\\nsequence bass C2,-,C2,G2,A#1,-,G2,- 0 8 0.65 0.7\\nsequence arp C4,D#4,G4,A#4,G4,D#4,C4,G3 0 8 0.45 0.45\\n\",\n  \"drift\": \"// Drift · long gates and soft space\\ntempo 72\\nbars 4\\ninstrument pads warm_pad\\ninstrument melody bell\\nlevel drums 0.45\\nlevel reverb 0.55\\n\\nsequence pads C3,D#3,G3,A#2 0 16 0.95 0.5\\nsequence melody G4,-,D#4,-,A#4,G4,-,D#4 0 16 0.6 0.5\\npattern kick x.......x....... 0 16 0.7\\npattern hat ..x...x...x...x. 0 16 0.3\\n\",\n  \"composer\": \"// Composer seed → editable score\\ntempo 110\\nbars 4\\ncompose house 7\\nclear bass\\ninstrument bass saw_bass\\nsequence bass C2,-,G2,-,A#1,-,G2,C2 0 16 0.75 0.8\\nlevel reverb 0.3\\n\",\n  \"console\": \"// Console · the same notes through inserts and sends\\ntempo 118\\nbars 2\\nkit house\\ninstrument bass saw_bass\\ninstrument arp bell\\n\\npattern kick x...x...x...x... 0 8 0.85\\npattern hat ..x...x...x...x. 0 8 0.3\\nsequence bass C2,-,G2,-,A#1,-,G2,- 0 8 0.7 0.75\\nsequence arp C4,D#4,G4,A#4 0 8 0.4 0.4\\n\\npan arp -0.5\\nfx bass filter mode=low_pass cutoff_hz=900 resonance=1.4\\nfx bass sat kind=tube drive=2.5 mix=0.6\\nfx drums comp threshold_db=-16 ratio=4 attack_ms=8\\nfx master eq3 low_gain_db=1.5 high_gain_db=2\\nmaster glue=1 threshold=-14 ratio=3\\n\",\n  \"echoes\": \"// Echoes · the delay bus, tempo synced\\ntempo 92\\nbars 2\\nlevel reverb 0.25\\ninstrument melody bell\\n\\npattern kick x.......x....... 0 8 0.7\\nsequence melody G4,-,D#4,-,A#4,-,G4,- 0 8 0.35 0.6\\nsequence bass C2,-,-,-,A#1,-,-,- 0 8 0.9 0.7\\n\\ndelay time=1/8. feedback=0.45 pingpong=1 damping=4200\\nsend melody delay 0.6\\nsend arp delay 0.3\\nlevel delay 0.8\\n\",\n  \"sweep\": \"// Sweep · automation on a fader and a filter\\ntempo 126\\nbars 4\\nkit analog_808\\ninstrument pads warm_pad\\n\\npattern kick x...x...x...x...x...x...x...x... 0 16 0.85\\nsequence pads C3,D#3,G3,A#3 0 16 0.95 0.5\\nsequence bass C2,C2,G2,A#1 0 16 0.6 0.75\\n\\nfx pads filter mode=low_pass cutoff_hz=400 resonance=3\\nautomation pads fx.1.cutoff_hz 0 300\\nautomation pads fx.1.cutoff_hz 12 6000\\nautomation pads fx.1.cutoff_hz 16 300\\nautomation bass gain 0 0.15\\nautomation bass gain 16 1\\nreverb preset=classic mix=0.4\\n\"\n}\n</script>"},"tag":"RawHtml"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-eyebrow","text":"CRE8 DAW / SONG WORKSPACE","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Song studio","variant":"h1"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Code notes, play the synth, shape the mix. Your next edit lands on a bar.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-nav":true,"href":"/view/virtual/performance","label":"Performance editor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-ls-nav":true,"href":"/view/audio/workbench","label":"Audio workbench"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Related audio areas","element":"nav"},"tag":"Section"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<style>.ssr-action-menu{position:relative;display:inline-block;font:12px/1.5 system-ui,sans-serif;color:var(--vp-ink,#e4f2ee)}\n.ssr-action-menu>summary{display:flex;align-items:center;gap:16px;cursor:pointer;list-style:none;padding:6px 10px;border:1px solid transparent;border-radius:5px;user-select:none}\n.ssr-action-menu>summary::-webkit-details-marker{display:none}\n.ssr-action-menu>summary:hover,.ssr-action-menu[open]>summary{background:#1b3229;border-color:#385747}\n.ssr-action-menu>summary>span{color:#97b3a4;font-size:11px}\n.ssr-action-menu>[role=menu]{position:absolute;top:calc(100% + 4px);left:0;z-index:50;min-width:190px;max-width:calc(100vw - 48px);padding:5px;border:1px solid #426151;border-radius:8px;background:#10221c;box-shadow:0 12px 32px #0008}\n.ssr-action-menu:not([open])>[role=menu]{display:none}\nbody .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]){display:block;width:100%;text-align:left;white-space:normal;border:0;border-radius:4px;padding:9px 12px;background:transparent;color:#e4f2ee;font:12px/1.5 system-ui;cursor:pointer}\nbody .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):hover,body .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):focus-visible{background:#2b4b3b;outline:2px solid #99cfad;outline-offset:-2px}\nbody .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):disabled{opacity:.4;cursor:default;background:transparent}\n.ssr-action-menu [role=menuitemcheckbox]::after{content:'○' / '';float:right;margin-left:12px}\n.ssr-action-menu [role=menuitemcheckbox][aria-checked=true]::after{content:'✓' / ''}\n.ssr-action-menu>summary:focus-visible{outline:2px solid #99cfad;outline-offset:2px}\n.ssr-action-menu[data-align=end]>[role=menu]{left:auto;right:0}\n</style><script>/* Shared enhancement of server-authored action menus; commands remain app-owned. */\n(() => {\n  if (window.__cre8SsrActionMenus) return;\n  window.__cre8SsrActionMenus = true;\n  const menuOf = node => node instanceof Element ? node.closest('[data-ssr-menu]') : null;\n  const trigger = menu => menu.querySelector('summary');\n  const targetOf = item => document.getElementById(item.dataset.ssrMenuTarget);\n  const available = target => target instanceof HTMLButtonElement && !target.hasAttribute('data-ssr-menu-target') && !target.matches(':disabled') && target.getAttribute('aria-disabled') !== 'true' && !target.closest('[inert]');\n  const returnFocus = new WeakMap();\n  function sync(menu) {\n    if (trigger(menu).getAttribute('aria-expanded') !== String(menu.open)) trigger(menu).setAttribute('aria-expanded', String(menu.open));\n    for (const item of menu.querySelectorAll('[data-ssr-menu-target]')) {\n      const target = targetOf(item);\n      item.disabled = !available(target);\n      const checked = target?.getAttribute('aria-pressed') ?? target?.getAttribute('aria-expanded');\n      item.setAttribute('role', checked === 'true' || checked === 'false' ? 'menuitemcheckbox' : 'menuitem');\n      if (checked === 'true' || checked === 'false') item.setAttribute('aria-checked', checked);\n      else item.removeAttribute('aria-checked');\n    }\n  }\n  const items = menu => [...menu.querySelectorAll('[data-ssr-menu-target]')].filter(item => !item.disabled);\n  function close(menu, focus = false) {\n    menu.open = false; sync(menu);\n    const previous = returnFocus.get(menu);\n    const anchor = previous?.id ? document.getElementById(previous.id) : previous;\n    if (focus) (anchor?.isConnected ? anchor : trigger(menu)).focus({preventScroll:true});\n    returnFocus.delete(menu);\n  }\n  function open(menu, last = false, context = null) {\n    document.querySelectorAll('[data-ssr-menu][open]').forEach(other => { if (other !== menu) close(other); });\n    returnFocus.set(menu, context?.owner || trigger(menu));\n    menu.open = true; sync(menu);\n    const list = items(menu);\n    menu.dataset.align = 'start';\n    const rect = menu.querySelector('[role=menu]').getBoundingClientRect();\n    menu.dataset.align = rect.right > innerWidth - 12 ? 'end' : 'start';\n    if (menu.hasAttribute('data-ssr-menu-floating')) {\n      const panel = menu.querySelector('[role=menu]'), anchor = trigger(menu).getBoundingClientRect();\n      const left = Math.max(12, Math.min(context ? context.x : anchor.left, innerWidth - rect.width - 12));\n      const preferredTop = context ? context.y : anchor.bottom + 4;\n      const top = Math.max(12, Math.min(preferredTop, innerHeight - rect.height - 12));\n      Object.assign(panel.style, {position:'fixed', left:left+'px', right:'auto', top:top+'px', maxHeight:'calc(100dvh - 24px)', overflowY:'auto'});\n    }\n    ((last ? list.at(-1) : list[0]) || trigger(menu)).focus({preventScroll:true});\n  }\n  // Consumers opt in with the ID of their server-rendered menu. No commands or selectors are evaluated.\n  const contextMenu = node => {\n    const owner = node instanceof Element ? node.closest('[data-ssr-context-menu]') : null;\n    const menu = owner && document.getElementById(owner.dataset.ssrContextMenu);\n    return menu?.matches('[data-ssr-menu]') ? menu : null;\n  };\n  document.addEventListener('contextmenu', event => {\n    const menu = contextMenu(event.target);\n    if (event.defaultPrevented || !menu || event.target.closest('input,textarea,select,[contenteditable=true]')) return;\n    const owner = event.target.closest('button,[tabindex]') || trigger(menu);\n    const rect = owner.getBoundingClientRect();\n    event.preventDefault(); open(menu, false, {owner, x:event.clientX || rect.left, y:event.clientY || rect.bottom});\n  });\n  document.addEventListener('click', event => {\n    const opener = event.target.closest?.('[data-ssr-menu-open]');\n    if (opener && !opener.matches(':disabled') && opener.getAttribute('aria-disabled') !== 'true') {\n      const linked = document.getElementById(opener.dataset.ssrMenuOpen);\n      if (linked?.matches('[data-ssr-menu]')) {\n        event.preventDefault();\n        const owner = (opener.id && document.getElementById(opener.id)) || opener;\n        const rect = owner.getBoundingClientRect();\n        open(linked, false, {owner, x:rect.left, y:rect.bottom});\n        return;\n      }\n    }\n    const menu = menuOf(event.target);\n    if (!menu) return;\n    if (event.target.closest('summary') === trigger(menu)) {\n      event.preventDefault(); menu.open ? close(menu) : open(menu); return;\n    }\n    const item = event.target.closest('[data-ssr-menu-target]');\n    if (!item || !menu.contains(item)) return;\n    const target = targetOf(item);\n    if (!available(target)) { sync(menu); return; }\n    close(menu, true);\n    target.click();\n  });\n  document.addEventListener('keydown', event => {\n    if (event.key === 'ContextMenu' || (event.shiftKey && event.key === 'F10')) {\n      const context = contextMenu(event.target);\n      if (context && !event.defaultPrevented && !event.target.closest('input,textarea,select,[contenteditable=true]')) {\n        const owner = (event.target.id && document.getElementById(event.target.id)) || event.target;\n        const rect = owner.getBoundingClientRect();\n        event.preventDefault(); open(context, false, {owner,x:rect.left,y:rect.bottom}); return;\n      }\n    }\n    const menu = menuOf(event.target);\n    if (!menu) return;\n    if (event.key === 'Escape' && menu.open) { event.preventDefault(); close(menu, true); return; }\n    if (event.key === 'Tab' && menu.open) { close(menu, true); return; }\n    if (event.isComposing || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n    const onTrigger = event.target === trigger(menu);\n    if (['ArrowLeft','ArrowRight'].includes(event.key) && menu.closest('[data-ssr-menubar]')) {\n      const peers = [...menu.closest('[data-ssr-menubar]').querySelectorAll('[data-ssr-menu]')];\n      const next = peers[(peers.indexOf(menu) + (event.key === 'ArrowRight' ? 1 : -1) + peers.length) % peers.length];\n      event.preventDefault(); menu.open ? open(next) : trigger(next).focus(); return;\n    }\n    if (onTrigger && ['ArrowDown', 'ArrowUp'].includes(event.key)) { event.preventDefault(); open(menu, event.key === 'ArrowUp'); return; }\n    if (!menu.open || !['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n    event.preventDefault(); sync(menu);\n    const list = items(menu), index = list.indexOf(document.activeElement);\n    const next = event.key === 'Home' ? 0 : event.key === 'End' ? list.length - 1 : (index + (event.key === 'ArrowDown' ? 1 : -1) + list.length) % list.length;\n    list[next]?.focus();\n  });\n  document.addEventListener('pointerdown', event => {\n    document.querySelectorAll('[data-ssr-menu][open]').forEach(menu => { if (!menu.contains(event.target)) close(menu); });\n  });\n  document.addEventListener('focusin', event => {\n    document.querySelectorAll('[data-ssr-menu][open]').forEach(menu => { if (!menu.contains(event.target)) close(menu); });\n  });\n  document.addEventListener('toggle', event => { if (event.target.matches?.('[data-ssr-menu]')) sync(event.target); }, true);\n  const closeFloating = event => document.querySelectorAll('[data-ssr-menu-floating][open]').forEach(menu => {\n    if (!(event.target instanceof Node) || !menu.contains(event.target)) close(menu);\n  });\n  document.addEventListener('scroll', closeFloating, true);\n  window.addEventListener('resize', closeFloating);\n  // A native preparation can enable exports while a menu is already open.\n  new MutationObserver(records => {\n    if (records.some(record => !record.target.hasAttribute('data-ssr-menu-target'))) {\n      document.querySelectorAll('[data-ssr-menu][open]').forEach(sync);\n    }\n  }).observe(document, {subtree:true, attributes:true, attributeFilter:['disabled','aria-disabled','aria-pressed','aria-expanded','inert']});\n})();\n</script><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-file-menu\"><summary role=\"button\" id=\"ls-file-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-file-menu-items\">File<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-file-menu-items\" role=\"menu\" aria-labelledby=\"ls-file-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-open-file\" >Open score / session…</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-save-file\" >Save music draft…</button></div></details><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-edit-menu\"><summary role=\"button\" id=\"ls-edit-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-edit-menu-items\">Edit<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-edit-menu-items\" role=\"menu\" aria-labelledby=\"ls-edit-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-undo-draft\" disabled>Undo draft replacement</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-revert-draft\" disabled>Restore prepared take</button></div></details><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-view-menu\"><summary role=\"button\" id=\"ls-view-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-view-menu-items\">View<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-view-menu-items\" role=\"menu\" aria-labelledby=\"ls-view-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-focus-editor\" >Focus editor</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-tracks\" >Tracks</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-instruments\" >Instruments</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-flow\" >Signal flow</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-clips\" >Clips</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-waveform\" >Waveform</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-piano\" >Piano roll</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-code\" >Music code</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-session\" >Session</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-midi\" >MIDI recorder</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-visual\" >Visuals</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-mixer\" >Mixer</button></div></details><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-export-menu\"><summary role=\"button\" id=\"ls-export-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-export-menu-items\">Export song<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-export-menu-items\" role=\"menu\" aria-labelledby=\"ls-export-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-export-wav\" disabled>Song audio · WAV (one loop)</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-export-midi\" disabled>Song notes · MIDI (.mid)</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-export-session\" disabled>Song session (.json)</button></div></details>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"hidden":true},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Editor menus","className":"ls-menu-bar","data-editor-strip":"menu","data-ssr-menubar":true,"element":"nav"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"saved-state","text":"Draft stays in this browser tab","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.13","data-ls":"save-project","disabled":false,"hidden":true,"id":"ls-save-file","label":"Save draft file"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.14","data-ls":"open-project","disabled":false,"hidden":true,"id":"ls-open-file","label":"Open score / session"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"accept":".json,.cre8score,.txt","controlKey":"live-score.15","data-ls":"file","disabled":false,"hidden":true,"kind":"file","label":"","name":"live-score-15"},"tag":"Input"}],"kind":"view-node","props":{"hidden":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Switching pages preserves your draft. Prepare again to play.","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-project-bar","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.prepare","event":"click"},"hostOutputs":{"disabled":"prepareDisabled","text":"prepareLabel"},"id":"ls-prepare","label":"Prepare score"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.start","event":"click"},"hostOutputs":{"disabled":"startDisabled","text":"startLabel"},"id":"ls-start","label":"Start audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.stop","event":"click"},"hostOutputs":{"disabled":"stopDisabled"},"id":"ls-stop","label":"Stop"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.wav","event":"click"},"hostOutputs":{"disabled":"exportDisabled"},"id":"ls-export-wav","label":"Song audio · WAV (one loop)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.midi","event":"click"},"hostOutputs":{"disabled":"exportDisabled"},"id":"ls-export-midi","label":"Song notes · MIDI (.mid)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.session","event":"click"},"hostOutputs":{"disabled":"exportDisabled"},"id":"ls-export-session","label":"Song session (.json)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","hostOutput":"exportLabel","id":"ls-export-state","role":"status","text":"Prepare a song to export WAV, MIDI or session JSON."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"audio.session","hostVersion":1,"id":"audio-session-transport"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"audio.session\",\"source_hash\":\"b250633a7bba1ba6586dcfa79b13e07eb16c7a9e44afe3f2b8c6713466f616e2\",\"context_hash\":\"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a\",\"tree_hash\":\"cb02892a985fd0398d538ea2d3cd683eba30037b5a36d45382bfe55b4553f8f3\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.prepare\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"prepareDisabled\\\",\\\"text\\\":\\\"prepareLabel\\\"},\\\"id\\\":\\\"ls-prepare\\\",\\\"label\\\":\\\"Prepare score\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.start\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"startDisabled\\\",\\\"text\\\":\\\"startLabel\\\"},\\\"id\\\":\\\"ls-start\\\",\\\"label\\\":\\\"Start audio\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.stop\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"stopDisabled\\\"},\\\"id\\\":\\\"ls-stop\\\",\\\"label\\\":\\\"Stop\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.wav\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"exportDisabled\\\"},\\\"id\\\":\\\"ls-export-wav\\\",\\\"label\\\":\\\"Song audio · WAV (one loop)\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.midi\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"exportDisabled\\\"},\\\"id\\\":\\\"ls-export-midi\\\",\\\"label\\\":\\\"Song notes · MIDI (.mid)\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.session\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"exportDisabled\\\"},\\\"id\\\":\\\"ls-export-session\\\",\\\"label\\\":\\\"Song session (.json)\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"aria-live\\\":\\\"polite\\\",\\\"hostOutput\\\":\\\"exportLabel\\\",\\\"id\\\":\\\"ls-export-state\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Prepare a song to export WAV, MIDI or session JSON.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"audio.session\\\",\\\"hostVersion\\\":1,\\\"id\\\":\\\"audio-session-transport\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.prepare\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"prepareDisabled\",\"text\":\"prepareLabel\"},\"id\":\"ls-prepare\",\"label\":\"Prepare score\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.start\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"startDisabled\",\"text\":\"startLabel\"},\"id\":\"ls-start\",\"label\":\"Start audio\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.stop\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"stopDisabled\"},\"id\":\"ls-stop\",\"label\":\"Stop\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.wav\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"exportDisabled\"},\"id\":\"ls-export-wav\",\"label\":\"Song audio · WAV (one loop)\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.midi\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"exportDisabled\"},\"id\":\"ls-export-midi\",\"label\":\"Song notes · MIDI (.mid)\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.session\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"exportDisabled\"},\"id\":\"ls-export-session\",\"label\":\"Song session (.json)\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"aria-live\":\"polite\",\"hostOutput\":\"exportLabel\",\"id\":\"ls-export-state\",\"role\":\"status\",\"text\":\"Prepare a song to export WAV, MIDI or session JSON.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"audio.session\",\"hostVersion\":1,\"id\":\"audio-session-transport\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"cb02892a985fd0398d538ea2d3cd683eba30037b5a36d45382bfe55b4553f8f3\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"audio.session","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-label":"Playback position","aria-live":"off","data-ls":"clock","role":"timer","text":"Stopped · prepare a score","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"meter","text":"","variant":"i"},"tag":"Text"}],"kind":"view-node","props":{"aria-hidden":"true","className":"ls-meter","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"className":"ls-live-badge","data-ls":"live-state","text":"NO LIVE TAKE","variant":"span"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-ls":"status","role":"status","text":"Connecting audio controls…","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.24","data-ls":"error-line","disabled":false,"hidden":true,"label":"Go to error line"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-transport-feedback","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Song transport","className":"ls-transport","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.3","data-daw-editor":"code","data-daw-view":"tracks","disabled":false,"id":"ls-view-tracks","label":"Tracks","pressed":true},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.4","data-daw-editor":"code","data-daw-view":"instruments","disabled":false,"id":"ls-view-instruments","label":"Instruments","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.5","data-daw-editor":"session","data-daw-view":"flow","disabled":false,"id":"ls-view-flow","label":"Signal flow","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.6","data-daw-editor":"piano","data-daw-view":"clips","disabled":false,"id":"ls-view-clips","label":"Clips","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.7","data-daw-open":"live-score-waveform","data-daw-view":"waveform","disabled":false,"id":"ls-view-waveform","label":"Waveform","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.8","data-daw-editor":"piano","data-daw-view":"piano","disabled":false,"id":"ls-view-piano","label":"Piano roll","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.9","data-daw-editor":"code","data-daw-view":"code","disabled":false,"id":"ls-view-code","label":"Music code","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.10","data-daw-editor":"session","data-daw-view":"session","disabled":false,"id":"ls-view-session","label":"Session","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.11","data-daw-open":"live-score-midi","data-daw-view":"midi","disabled":false,"id":"ls-view-midi","label":"MIDI recorder","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.12","data-daw-editor":"code","data-daw-view":"visual","disabled":false,"id":"ls-view-visual","label":"Visuals","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.13","data-daw-mixer":true,"disabled":false,"id":"ls-view-mixer","label":"Mixer","pressed":true},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"DAW workspace","className":"ls-daw-tabs","data-editor-strip":"modes","element":"nav"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"SESSION CHANNELS","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Your sound","variant":"h3"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Select a channel to reach its fader.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"01 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Drums","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Rhythm","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.18","data-daw-track":"drums","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"02 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Bass","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Low end","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.21","data-daw-track":"bass","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"03 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Pads","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Harmony","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.24","data-daw-track":"pads","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"04 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Melody","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Lead","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.27","data-daw-track":"melody","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"05 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Arp","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Motion","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.30","data-daw-track":"arp","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"06 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Space","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Reverb return","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.33","data-daw-track":"reverb","disabled":false,"pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.36","data-ls-nav":true,"href":"/view/device/midi","label":"Device connections ↗"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Session channels","className":"ls-daw-library","element":"aside"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"PHRASES / NOTES","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Clips & notes","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.8","data-piano":"lane","default":"melody","disabled":false,"label":"Lane","name":"piano-roll-8","options":[{"label":"Bass","value":"bass"},{"label":"Pads","value":"pads"},{"label":"Melody","value":"melody"},{"label":"Arp","value":"arp"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.9","data-piano":"load","disabled":false,"label":"Load prepared lane"},"tag":"Action"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-piano":"status","role":"status","text":"Prepare a score, then load a lane to edit its notes.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Bar phrases","className":"ls-clip-grid","data-piano":"clips","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-clip-scroll","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-piano":"region-status","text":"Select a bar phrase to arrange its notes.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.17","data-piano":"region-target","default":"0","disabled":false,"kind":"number","label":"Destination beat","max":"16","min":"0","name":"piano-roll-17","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.18","data-piano":"region-move","disabled":true,"label":"Move phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.19","data-piano":"region-duplicate","disabled":true,"label":"Duplicate phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.20","data-piano":"region-delete","disabled":true,"label":"Delete phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.21","data-piano":"region-open","disabled":true,"label":"Open in piano roll"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-clip-controls","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Select or drag a bar phrase · double-click to edit notes. Overlapping phrases retain their notes. Bar groups rebuild when you load a lane.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Phrase arrangement","className":"ls-clip-editor","element":"section"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Note grid","className":"ls-piano-grid","data-piano":"grid","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Piano roll notes; scroll to explore pitches","className":"ls-piano-scroll","element":"div","tabIndex":0},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.27","data-piano":"pitch","default":"60","disabled":false,"kind":"number","label":"Pitch (MIDI)","max":"127","min":"0","name":"piano-roll-27","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.29","data-piano":"beat","default":"0","disabled":false,"kind":"number","label":"Beat (from 0)","max":"16","min":"0","name":"piano-roll-29","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.31","data-piano":"duration","default":"1","disabled":false,"kind":"number","label":"Length (beats)","max":"16","min":".0020833333333333333","name":"piano-roll-31","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.33","data-piano":"velocity","default":".8","disabled":false,"kind":"number","label":"Velocity","max":"1","min":"0","name":"piano-roll-33","step":".05"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.34","data-piano":"update","disabled":true,"label":"Update note"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.35","data-piano":"add","disabled":true,"label":"Add note"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.36","data-piano":"delete","disabled":true,"label":"Delete note"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.duplicate","data-piano":"duplicate","disabled":true,"label":"Duplicate note"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-piano-inspector","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.39","data-piano":"undo","disabled":true,"label":"Undo note edit"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.redo","data-piano":"redo","disabled":true,"label":"Redo note edit"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.quantize","data-piano":"quantize","disabled":true,"label":"Quantize lane"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.snap","data-piano":"snap","default":".25","label":"Snap (beats)","name":"piano-snap","options":[{"label":"1 beat","value":"1"},{"label":"½ beat","value":".5"},{"label":"¼ beat","value":".25"},{"label":"⅛ beat","value":".125"},{"label":"⅓ beat (triplet)","value":"0.3333333333333333"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"className":"ls-piano-hints","text":"Drag notes to move · drag right edge to resize · arrows move · Shift + arrows resize · Delete removes. Snap controls movement and lane quantization.","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"footer"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Note and phrase edits update your draft automatically. Prepare to hear changes. Your playing take stays intact.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Piano roll","className":"ls-piano","data-piano-roll":true,"element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"AUDIO EDITOR","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Waveform","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-wave":"info","text":"Import audio or open a prepared mix.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.10","data-audio":"name","default":"Untitled audio project","disabled":false,"kind":"text","label":"Project name","maxlength":256,"name":"waveform-editor-10"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.11","data-audio-action":"save","disabled":false,"label":"Save project"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.12","data-audio-action":"open","disabled":false,"label":"Open project…"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"accept":".cre8audio","controlKey":"waveform-editor.13","data-audio":"project-file","disabled":false,"hidden":true,"kind":"file","label":"","name":"waveform-editor-13"},"tag":"Input"}],"kind":"view-node","props":{"hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.15","data-audio":"recoveries","default":"","disabled":false,"label":"Local recovery","name":"waveform-editor-15","options":[{"label":"No saved recovery","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.16","data-audio-action":"recover","disabled":true,"label":"Restore recovery"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"save-status","role":"status","text":"Checking local recovery…","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Audio project","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Song in this project","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Keep the editable score and MIDI with your audio tracks. Update song audio after preparing edits. The project mix plays one song pass from time zero.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-update","data-audio-action":"song-update","disabled":false,"label":"Update song audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-remove","data-audio-action":"song-remove","disabled":false,"label":"Remove song audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-gain","data-audio":"song-gain","default":"0","disabled":false,"kind":"number","label":"Song gain dB","max":"24","min":"-60","name":"waveform-editor-song-gain","step":"0.5"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-mute","data-audio":"song-mute","default":false,"disabled":false,"kind":"checkbox","label":"Mute song audio","name":"waveform-editor-song-mute"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"song-status","text":"Prepare your song, then Update song audio.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Song in project","className":"ls-audio-project","data-audio":"song-panel","element":"section"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Channel inserts","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-channel","data-insert":"channel","disabled":true,"label":"Insert channel","name":"waveform-editor-insert-channel","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-entry","data-insert":"entry","disabled":true,"label":"Channel insert","name":"waveform-editor-insert-entry","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-name","data-insert":"name","default":"","disabled":true,"kind":"text","label":"Insert name","maxLength":80,"name":"waveform-editor-insert-name"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-add","data-insert-action":"add","disabled":true,"label":"Add current effect settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-load","data-insert-action":"load","disabled":true,"label":"Load insert settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-update","data-insert-action":"update","disabled":true,"label":"Update selected insert"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-toggle","data-insert-action":"toggle","disabled":true,"label":"Bypass / enable insert"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-up","data-insert-action":"up","disabled":true,"label":"Move insert up"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-down","data-insert-action":"down","disabled":true,"label":"Move insert down"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-remove","data-insert-action":"remove","disabled":true,"label":"Remove insert"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-insert":"summary","text":"Add an audio track or song to set up channel inserts.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-insert":"status","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Choose EQ, filter, compressor, limiter or gate settings in Effects, then add them to a channel. Inserts run in order before channel gain and pan for project playback, overdub and stems. Source audio stays unchanged.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Channel inserts","className":"ls-wave-tools","data-audio":"insert-panel","element":"section"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.19","data-wave-action":"import","disabled":false,"label":"Import audio…"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"accept":"audio/*,.wav,.mp3,.flac,.ogg,.m4a","controlKey":"waveform-editor.20","data-wave":"file","disabled":false,"hidden":true,"kind":"file","label":"","name":"waveform-editor-20"},"tag":"Input"}],"kind":"view-node","props":{"hidden":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.21","data-wave-action":"prepared","disabled":false,"label":"Open prepared mix"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.22","data-wave-action":"export","disabled":true,"label":"Export WAV"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.23","data-wave-action":"export-selection","disabled":true,"label":"Export selection"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.25","data-audio":"sample-rate","default":"48000","disabled":false,"kind":"number","label":"Sample rate Hz","max":"192000","min":"8000","name":"waveform-editor-25","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.26","data-audio-action":"resample","disabled":false,"label":"Convert sample rate"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform files","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.28","data-wave-action":"play","disabled":true,"label":"Play selection / cursor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.29","data-wave-action":"stop","disabled":false,"label":"Stop"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.31","data-wave":"loop","default":false,"disabled":false,"label":"Loop selection","name":"waveform-editor-31"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.33","data-wave":"scrub","default":false,"disabled":false,"label":"Scrub on drag","name":"waveform-editor-33"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.34","data-wave-action":"zoom-in","disabled":true,"label":"Zoom +"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.35","data-wave-action":"zoom-out","disabled":true,"label":"Zoom −"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.36","data-wave-action":"fit","disabled":true,"label":"Fit audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.37","data-wave-action":"fit-selection","disabled":true,"label":"Fit selection"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform transport and navigation","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.40","data-spectrum":"view","default":"waveform","disabled":false,"label":"Audio view","name":"waveform-editor-40","options":[{"label":"Waveform","value":"waveform"},{"label":"Spectrogram","value":"spectrogram"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Spectrum settings"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.45","data-spectrum":"size","default":"2048","disabled":false,"label":"FFT size","name":"waveform-editor-45","options":[{"label":"256","value":"256"},{"label":"512","value":"512"},{"label":"1024","value":"1024"},{"label":"2048","value":"2048"},{"label":"4096","value":"4096"},{"label":"8192","value":"8192"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.47","data-spectrum":"window","default":"hann","disabled":false,"label":"FFT window","name":"waveform-editor-47","options":[{"label":"Hann","value":"hann"},{"label":"Hamming","value":"hamming"},{"label":"Blackman","value":"blackman"},{"label":"Rectangular","value":"rectangular"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.49","data-spectrum":"scale","default":"log","disabled":false,"label":"Frequency scale","name":"waveform-editor-49","options":[{"label":"Logarithmic","value":"log"},{"label":"Linear","value":"linear"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.51","data-spectrum":"min","default":"20","disabled":false,"kind":"number","label":"Minimum Hz","max":"95999","min":"0","name":"waveform-editor-51","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.53","data-spectrum":"max","default":"20000","disabled":false,"kind":"number","label":"Maximum Hz","max":"96000","min":"1","name":"waveform-editor-53","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.55","data-spectrum":"floor","default":"-100","disabled":false,"kind":"number","label":"Display floor dBFS","max":"23","min":"-160","name":"waveform-editor-55","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.57","data-spectrum":"ceiling","default":"0","disabled":false,"kind":"number","label":"Display ceiling dBFS","max":"24","min":"-159","name":"waveform-editor-57","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Applies to spectrogram and selection analysis. Larger FFT windows resolve closer frequencies but blur timing. Zoom in to inspect brief events: the overview samples a bounded number of time windows. Stereo channels remain separate. Frequency labels describe the display; selection and edits still operate on time ranges across all channels.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-spectrum-settings","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Waveform display","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-spectrum":"display-status","role":"status","text":"Switch to Spectrogram to inspect frequency content.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-wave=\"canvas\" height=\"280\" tabindex=\"0\" role=\"img\" aria-label=\"Audio waveform. Drag to select; Shift-click to extend; arrow keys move one sample; Shift-arrow extends the selection.\"></canvas>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"aria-label":"Waveform horizontal scroll","controlKey":"waveform-editor.61","data-wave":"scroll","default":"0","disabled":true,"kind":"range","label":"Waveform horizontal scroll","max":"0","min":"0","name":"waveform-editor-61","step":"1"},"tag":"Input"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.64","data-wave":"units","default":"seconds","disabled":false,"label":"Units","name":"waveform-editor-64","options":[{"label":"Seconds","value":"seconds"},{"label":"Samples","value":"samples"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.66","data-wave":"start","default":"0","disabled":true,"kind":"number","label":"Selection start","min":"0","name":"waveform-editor-66","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.68","data-wave":"end","default":"0","disabled":true,"kind":"number","label":"Selection end","min":"0","name":"waveform-editor-68","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.69","data-wave-action":"select-all","disabled":true,"label":"Select all"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-wave":"selection","text":"0 samples selected","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.71","data-wave-action":"zero-crossings","disabled":true,"label":"Snap to zero crossings"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-selection","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Analyze selection · spectrum and levels"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.75","data-spectrum":"analyze","data-spectrum-action":"analyze","disabled":true,"label":"Analyze selection"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.76","data-spectrum":"export","data-spectrum-action":"export","disabled":true,"label":"Export spectrum CSV"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-spectrum":"summary","role":"status","text":"Select a time range, then analyze. Results refresh only when requested.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-spectrum=\"plot\" width=\"800\" height=\"220\" role=\"img\" aria-label=\"Selection frequency spectrum. Left or mono is green; right is blue. Peak frequencies and levels are also listed in the table.\" hidden></canvas>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"className":"ls-spectrum-results","data-spectrum":"results","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Peak, RMS, DC and clipping cover every selected sample. Clipping counts samples at or above full scale; this is not a true-peak or LUFS meter. Spectrum levels use window-corrected tone amplitudes, not noise spectral density. Peak frequencies are estimates; spectral levels can read lower for tones between FFT bins. Long selections use up to 128 evenly spaced FFT windows; narrow selections use a smaller FFT. Correlation is +1 for matching channels, −1 for opposite polarity and undefined for a silent or constant channel. Results clear when audio, selection or spectrum settings change. CSV includes all FFT bins.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-analysis","element":"details"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.82","data-wave-action":"undo","disabled":true,"label":"Undo"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.83","data-wave-action":"redo","disabled":true,"label":"Redo"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.84","data-wave-action":"cut","disabled":true,"label":"Cut"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.85","data-wave-action":"copy","disabled":true,"label":"Copy"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.86","data-wave-action":"paste","disabled":true,"label":"Paste"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.87","data-wave-action":"delete","disabled":true,"label":"Delete"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.88","data-wave-action":"trim","disabled":true,"label":"Trim to selection"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform edits","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.90","data-wave-action":"silence","disabled":true,"label":"Silence"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.91","data-wave-action":"reverse","disabled":true,"label":"Reverse"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.92","data-wave-action":"fade-in","disabled":true,"label":"Fade in"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.93","data-wave-action":"fade-out","disabled":true,"label":"Fade out"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.94","data-wave-action":"dc","disabled":true,"label":"Remove DC offset"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.96","data-wave":"db","default":"-1","disabled":false,"kind":"number","label":"Level dB","max":"24","min":"-60","name":"waveform-editor-96","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.97","data-wave-action":"normalize","disabled":true,"label":"Normalize peak"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.98","data-wave-action":"gain","disabled":true,"label":"Apply gain"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform processing","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Generate audio · geometry, beats, tones and noise"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.103","data-audio":"gen-kind","default":"tone","disabled":false,"label":"Generator","name":"waveform-editor-103","options":[{"label":"Tone","value":"tone"},{"label":"Binaural beats","value":"binaural"},{"label":"Monaural beats · mixed tones","value":"monaural"},{"label":"Geometry · E8 / tesseract","value":"geometry"},{"label":"Frequency sweep / chirp","value":"chirp"},{"label":"Amplitude modulation","value":"am"},{"label":"Noise","value":"noise"},{"label":"Rhythm clicks","value":"rhythm"},{"label":"DTMF keypad","value":"dtmf"},{"label":"Silence","value":"silence"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.105","data-audio":"gen-duration","default":"2","disabled":false,"kind":"number","label":"Duration s","max":"60","min":"0.001","name":"waveform-editor-105","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.107","data-audio":"gen-rate","default":"48000","disabled":false,"kind":"number","label":"Generator rate Hz","max":"192000","min":"8000","name":"waveform-editor-107","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.109","data-audio":"gen-channels","default":"1","disabled":false,"label":"Output channels","name":"waveform-editor-109","options":[{"label":"Mono","value":"1"},{"label":"Stereo","value":"2"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.111","data-audio":"gen-level","default":"-12","disabled":false,"kind":"number","label":"Peak level dBFS","max":"0","min":"-96","name":"waveform-editor-111","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.113","data-audio":"gen-fadeIn","default":"5","disabled":false,"kind":"number","label":"Generator fade in ms","max":"60000","min":"0","name":"waveform-editor-113","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.115","data-audio":"gen-fadeOut","default":"5","disabled":false,"kind":"number","label":"Generator fade out ms","max":"60000","min":"0","name":"waveform-editor-115","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.118","data-audio":"gen-wave","default":"sine","disabled":false,"label":"Wave shape","name":"waveform-editor-118","options":[{"label":"Sine","value":"sine"},{"label":"Square (smoothed edges)","value":"square"},{"label":"Sawtooth (smoothed edges)","value":"saw"},{"label":"Triangle","value":"triangle"},{"label":"Pulse (smoothed edges)","value":"pulse"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.120","data-audio":"gen-duty","default":"50","disabled":false,"kind":"number","label":"Pulse duty %","max":"99","min":"1","name":"waveform-editor-120","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"data-generator-duty":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"tone chirp am","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.123","data-audio":"gen-frequency","default":"440","disabled":false,"kind":"number","label":"Frequency / carrier Hz","max":"95999","min":"1","name":"waveform-editor-123","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.125","data-audio":"gen-phase","default":"0","disabled":false,"kind":"number","label":"Starting phase °","max":"360","min":"0","name":"waveform-editor-125","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"tone chirp am binaural monaural geometry","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.128","data-audio":"gen-endFrequency","default":"880","disabled":false,"kind":"number","label":"End frequency Hz","max":"95999","min":"1","name":"waveform-editor-128","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.130","data-audio":"gen-endLevel","default":"-12","disabled":false,"kind":"number","label":"End peak level dBFS","max":"0","min":"-96","name":"waveform-editor-130","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.132","data-audio":"gen-sweep","default":"log","disabled":false,"label":"Frequency interpolation","name":"waveform-editor-132","options":[{"label":"Logarithmic","value":"log"},{"label":"Linear","value":"linear"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"chirp","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Shape your sound","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"className":"ls-wave-geometry-intro","text":"Choose a shape and how it moves. Preview to listen, then generate a waveform to edit or export.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-shape","data-audio":"gen-geometryShape","default":"e8","label":"Geometry","name":"waveform-editor-geometry-shape","options":[{"label":"E8 · 240 roots in 8D","value":"e8"},{"label":"Tesseract · 16 vertices in 4D","value":"tesseract"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-rotation","data-audio":"gen-geometryRotation","default":"fixed","label":"Sound motion","name":"waveform-editor-geometry-rotation","options":[{"label":"Fixed angle · steady tone","value":"fixed"},{"label":"Follow rotation · evolving tone","value":"rotate"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-angle","data-audio":"gen-geometryAngle","default":"35","kind":"number","label":"Starting angle °","max":"360","min":"0","name":"waveform-editor-geometry-angle","step":"0.1"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-speed","data-audio":"gen-geometrySpeed","default":"15","label":"Rotation speed","name":"waveform-editor-geometry-speed","options":[{"label":"Slow · 6° / s","value":"6"},{"label":"Gentle · 15° / s","value":"15"},{"label":"Medium · 30° / s","value":"30"},{"label":"Fast · 60° / s","value":"60"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-harmonics","data-audio":"gen-geometryHarmonics","default":"24","kind":"number","label":"Harmonic slots","max":"64","min":"2","name":"waveform-editor-geometry-harmonics","step":"1"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-motion","data-audio":"gen-geometryMotion","default":"steady","label":"Volume envelope","name":"waveform-editor-geometry-motion","options":[{"label":"Steady","value":"steady"},{"label":"Amplitude modulation","value":"am"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-wave-geometry-summary","data-audio":"geometry-summary","role":"status","text":"Choose your sound motion.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-geometry-controls","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Choose Geometry to explore the projection, then Preview or generate audio.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Geometry projection and harmonic amplitudes","data-audio":"generator-projection","element":"div","role":"img"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-pressed":"false","controlKey":"waveform-editor.geometry-animate","data-audio":"geometry-animate","disabled":true,"label":"Animate picture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"geometry-animation-status","role":"status","text":"Silent picture preview. Pause to keep a starting angle.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-geometry-visual","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-geometry-grid","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"How geometry becomes sound","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Left: the projected shape. Right: harmonic strengths from low to high. Position maps to harmonics; projection height weights their amplitude. Dimmed bars are omitted to fit the sample rate.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Follow rotation changes the sound over the full Duration at the selected Rotation speed. Preview or generate pauses the picture and uses that starting angle. Fixed angle keeps a steady spectrum; the volume envelope can still pulse it.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Moving harmonic strengths are smoothed. High harmonics are omitted to leave room for rotation and modulation. Stereo repeats the same tone in both ears. Peak level is a ceiling, not matched loudness.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-geometry-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-geometry","data-generator-for":"geometry","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.135","data-audio":"gen-beat","default":"8","disabled":false,"kind":"number","label":"Beat difference Hz","max":"1000","min":"0","name":"waveform-editor-135","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.beat-curve","data-audio":"gen-beatCurve","default":"hold","label":"Beat movement","name":"waveform-editor-beat-curve","options":[{"label":"Hold","value":"hold"},{"label":"Linear sweep","value":"linear"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.end-beat","data-audio":"gen-endBeat","default":"8","disabled":true,"kind":"number","label":"End beat difference Hz","max":"1000","min":"0","name":"waveform-editor-end-beat","step":"any"},"tag":"Input"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Binaural sends one sine to each ear; use headphones for separation. Monaural mixes both sines into each output channel. Hold or sweep their frequency difference around a fixed carrier.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"binaural monaural","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.139","data-audio":"gen-modulation","default":"4","disabled":false,"kind":"number","label":"Modulation Hz","max":"1000","min":"0.01","name":"waveform-editor-139","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.141","data-audio":"gen-depth","default":"100","disabled":false,"kind":"number","label":"Modulation depth %","max":"100","min":"0","name":"waveform-editor-141","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"am geometry","data-generator-modulation":true,"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.144","data-audio":"gen-color","default":"pink","disabled":false,"label":"Noise color","name":"waveform-editor-144","options":[{"label":"Pink","value":"pink"},{"label":"White","value":"white"},{"label":"Brownian","value":"brown"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.146","data-audio":"gen-seed","default":"1","disabled":false,"kind":"number","label":"Repeatable seed","max":"4294967295","min":"1","name":"waveform-editor-146","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"noise","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.149","data-audio":"gen-bpm","default":"120","disabled":false,"kind":"number","label":"Tempo BPM","max":"400","min":"20","name":"waveform-editor-149","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.151","data-audio":"gen-beats","default":"4","disabled":false,"kind":"number","label":"Beats per bar","max":"16","min":"1","name":"waveform-editor-151","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.153","data-audio":"gen-swing","default":"0","disabled":false,"kind":"number","label":"Swing %","max":"75","min":"0","name":"waveform-editor-153","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"rhythm","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.156","data-audio":"gen-sequence","default":"123#","disabled":false,"kind":"text","label":"Key sequence","maxlength":128,"name":"waveform-editor-156"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.158","data-audio":"gen-toneMs","default":"150","disabled":false,"kind":"number","label":"Tone ms","max":"5000","min":"10","name":"waveform-editor-158","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.160","data-audio":"gen-gapMs","default":"75","disabled":false,"kind":"number","label":"Gap ms","max":"5000","min":"0","name":"waveform-editor-160","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Duration follows the sequence, with no trailing gap. Keys: 0–9, A–D, * and #.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"dtmf","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.163","data-audio-action":"generator-selection","disabled":false,"label":"Use selection duration and format"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.164","data-audio-action":"preview-generator","disabled":false,"label":"Preview audio (up to 5 s)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.165","data-audio-action":"stop","disabled":false,"label":"Stop generator preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.166","data-audio-action":"generate-wave","disabled":false,"label":"Generate waveform"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.167","data-audio-action":"insert-generator","disabled":false,"label":"Insert / replace selection"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.168","data-audio-action":"generator-track","disabled":false,"label":"Add generated track"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Generate audio actions","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"generator-status","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Preview plays up to 5 seconds without changing the project. Generate replaces the waveform; Undo restores it. Use Export WAV to save the result. Insert replaces the selection or inserts at the cursor; format must match. Add track places a clip at the timeline cursor. Maximum 60 seconds / 64 MiB. Start quietly when auditioning tones.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-generator","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Filters, dynamics and noise repair"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.175","data-audio":"processor","default":"high-pass","disabled":false,"label":"Processor","name":"waveform-editor-175","options":[{"label":"High-pass filter","value":"high-pass"},{"label":"Low-pass filter","value":"low-pass"},{"label":"Parametric EQ","value":"eq"},{"label":"Compressor","value":"compress"},{"label":"Peak limiter","value":"limit"},{"label":"Noise gate","value":"noise-gate"},{"label":"Profile noise reduction","value":"noise-reduction"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.177","data-audio":"frequency","default":"1000","disabled":false,"kind":"number","label":"Frequency Hz","max":"96000","min":"20","name":"waveform-editor-177"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.179","data-audio":"eq-gain","default":"0","disabled":false,"kind":"number","label":"EQ gain dB","max":"24","min":"-24","name":"waveform-editor-179","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.181","data-audio":"eq-q","default":"0.707","disabled":false,"kind":"number","label":"EQ Q","max":"20","min":"0.1","name":"waveform-editor-181","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.183","data-audio":"threshold","default":"-18","disabled":false,"kind":"number","label":"Threshold dB","max":"0","min":"-96","name":"waveform-editor-183"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.185","data-audio":"ratio","default":"4","disabled":false,"kind":"number","label":"Ratio","max":"40","min":"1","name":"waveform-editor-185","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.187","data-audio":"attack","default":"10","disabled":false,"kind":"number","label":"Attack ms","max":"1000","min":"0.1","name":"waveform-editor-187","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.189","data-audio":"release","default":"100","disabled":false,"kind":"number","label":"Release ms","max":"5000","min":"1","name":"waveform-editor-189"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.191","data-audio":"noise-db","default":"12","disabled":false,"kind":"number","label":"Noise reduction dB","max":"36","min":"0","name":"waveform-editor-191","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.193","data-audio":"noise-sensitivity","default":"0","disabled":false,"kind":"number","label":"Sensitivity boost dB","max":"24","min":"-12","name":"waveform-editor-193","step":"0.5"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.195","data-audio":"noise-smoothing","default":"1","disabled":false,"kind":"number","label":"Frequency smoothing bands","max":"12","min":"0","name":"waveform-editor-195","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.196","data-audio-action":"noise-profile","disabled":false,"label":"Capture noise profile"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"noise-status","text":"No noise profile","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.198","data-audio-action":"preview-original","disabled":false,"label":"A: original selection"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.199","data-audio-action":"preview-effect","disabled":false,"label":"B: preview effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.200","data-audio-action":"preview-noise-residue","disabled":false,"label":"Listen to removed noise"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.201","data-audio-action":"stop","disabled":false,"label":"Stop preview / cancel repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.202","data-audio-action":"apply-effect","disabled":false,"label":"Apply effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"effect-status","role":"status","text":"Choose a processor; preview before applying.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Processing uses the selected audio. Filters use frequency; EQ also uses gain and Q (band width); dynamics use threshold. Compression links stereo channels. The limiter applies an immediate peak ceiling. For noise repair, capture a noise-only passage, then select the audio to clean. Sensitivity boosts the measured noise power; higher values remove more signal. Smoothing spreads gains over neighboring FFT bands; 0 disables it. Listen to removed noise to check what would be lost. A/B previews restart at the same selection start, up to five seconds, with short audition fades and no automatic level matching. Apply commits the full selection with Undo available. Noise profiling and reduction support up to 30 seconds.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Pitch and time · transpose and change tempo"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.209","data-audio":"pitch-semitones","default":"0","disabled":false,"kind":"number","label":"Pitch semitones","max":"12","min":"-12","name":"waveform-editor-209","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.211","data-audio":"pitch-cents","default":"0","disabled":false,"kind":"number","label":"Pitch cents","max":"100","min":"-100","name":"waveform-editor-211","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.213","data-audio":"tempo-percent","default":"0","disabled":false,"kind":"number","label":"Tempo change %","max":"100","min":"-50","name":"waveform-editor-213","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.215","data-audio":"pitch-size","default":"2048","disabled":false,"label":"Pitch/time FFT window","name":"waveform-editor-215","options":[{"label":"1024","value":"1024"},{"label":"2048","value":"2048"},{"label":"4096","value":"4096"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.217","data-audio":"pitch-transients","default":false,"disabled":false,"label":"Protect transient attacks","name":"waveform-editor-217"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.219","data-audio":"pitch-formants","default":false,"disabled":false,"label":"Preserve formants (experimental)","name":"waveform-editor-219"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.221","data-audio":"from-bpm","default":"120","disabled":false,"kind":"number","label":"Original BPM","max":"400","min":"20","name":"waveform-editor-221","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.223","data-audio":"to-bpm","default":"120","disabled":false,"kind":"number","label":"Target BPM","max":"400","min":"20","name":"waveform-editor-223","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.224","data-audio-action":"pitch-bpm","disabled":false,"label":"Use BPM conversion"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"pitch-summary","role":"status","text":"Select audio to change pitch or tempo.","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.227","data-audio-action":"pitch-original","disabled":false,"label":"A: original before pitch/time"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.228","data-audio-action":"pitch-preview","disabled":false,"label":"B: preview pitch / tempo"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.229","data-audio-action":"stop","disabled":false,"label":"Stop preview / cancel pitch/time"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.230","data-audio-action":"pitch-apply","disabled":false,"label":"Apply pitch / tempo"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"pitch-status","role":"status","text":"Pitch and tempo are independent. Zero leaves that parameter unchanged.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Positive tempo makes audio shorter; −50% doubles its duration and +100% halves it. Pitch totals −12 to +12 semitones, including cents. Input: up to 30 seconds; output: up to 60 seconds, within 64 MiB processing buffers. Select at least one FFT window. Larger windows favor sustained tones; smaller windows retain more timing detail. Transient protection resets phase at detected attacks. Experimental formant preservation estimates the broad spectral envelope and can color the sound; compare previews on your material. Preview starts at the selection beginning and plays up to five output seconds. Apply replaces only the selection, shifts following waveform audio, and keeps Undo. Stop or parameter changes cancel an unfinished render.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-audio":"pitch-panel","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Targeted repair · clicks, gaps and clipping"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.237","data-audio":"repair-kind","default":"clicks","disabled":false,"label":"Repair tool","name":"waveform-editor-237","options":[{"label":"Remove isolated clicks","value":"clicks"},{"label":"Interpolate selected gap","value":"gap"},{"label":"Reconstruct clipped peaks","value":"clipping"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.239","data-audio":"repair-threshold","default":"0.9","disabled":false,"kind":"number","label":"Repair threshold (amplitude)","max":"1","min":"0.05","name":"waveform-editor-239","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.241","data-audio":"repair-width","default":"16","disabled":false,"kind":"number","label":"Maximum repair width (samples)","max":"128","min":"1","name":"waveform-editor-241","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.242","data-audio-action":"repair-original","disabled":false,"label":"A: original before repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.243","data-audio-action":"repair-preview","disabled":false,"label":"B: preview targeted repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.244","data-audio-action":"repair-apply","disabled":false,"label":"Apply targeted repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.245","data-audio-action":"stop","disabled":false,"label":"Stop / cancel targeted repair"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"repair-status","role":"status","text":"Select the damaged audio and preview first.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Click threshold is the minimum sample jump; lower values detect smaller spikes and may alter transients. Clipping threshold is the absolute peak level of damaged samples; set it to the recorded clipping level. Repairs use neighboring intact samples and keep duration. Gap repair needs a selection of 1–128 samples with two intact samples on each side. Automatic tools skip damage wider than the width limit or without intact boundaries. Reconstructed peaks can exceed full scale; lower gain before exporting. These estimates cannot recover the original lost recording. Maximum selection: 30 seconds.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-audio":"repair-panel","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Markers, regions and volume envelope"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.252","data-precision":"name","default":"Region 1","disabled":false,"kind":"text","label":"Marker or region name","maxlength":100,"name":"waveform-editor-252"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.253","data-precision-action":"label-add","disabled":false,"label":"Name selection / cursor"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.255","data-precision":"labels","default":"","disabled":false,"label":"Saved marker or region","name":"waveform-editor-255","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.256","data-precision-action":"label-update","disabled":false,"label":"Update name and range"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.257","data-precision-action":"label-remove","disabled":false,"label":"Remove label"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-precision=\"envelope\" width=\"640\" height=\"120\" style=\"width:100%;height:120px;touch-action:none\" aria-label=\"Volume envelope draft\"></canvas>"},"tag":"RawHtml"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.261","data-precision":"time","default":"0","disabled":false,"kind":"number","label":"Envelope time s","min":"0","name":"waveform-editor-261","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.263","data-precision":"gain","default":"1","disabled":false,"kind":"number","label":"Envelope linear gain","max":"2","min":"0","name":"waveform-editor-263","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.264","data-precision-action":"point-set","disabled":false,"label":"Set envelope point"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.266","data-precision":"points","default":"","disabled":false,"label":"Envelope point","name":"waveform-editor-266","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.267","data-precision-action":"point-remove","disabled":false,"label":"Remove point"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.268","data-precision-action":"envelope-clear","disabled":false,"label":"Clear envelope draft"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.269","data-precision-action":"envelope-apply","disabled":false,"label":"Apply envelope to selection"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-precision":"status","role":"status","text":"Click or drag the envelope to shape volume, or enter exact values.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"The envelope spans the whole waveform. Gain 1 is unchanged, 0 is silence, 2 is twice the amplitude. Points interpolate linearly; the first and last gains extend to the edges. It is a draft until Apply renders the selected range and clears the draft. Undo restores both. Markers, regions and envelope drafts save in audio projects and follow time edits. Up to 256 labels and 128 points.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Non-destructive effect rack"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.276","data-audio":"rack-family","default":"apply-effect","disabled":false,"label":"Rack effect family","name":"waveform-editor-276","options":[{"label":"Filters / dynamics / noise","value":"apply-effect"},{"label":"Pitch / tempo","value":"pitch-apply"},{"label":"Targeted repair","value":"repair-apply"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.278","data-audio":"rack-name","disabled":false,"kind":"text","label":"Rack effect name","maxlength":80,"name":"waveform-editor-278","placeholder":"Optional effect name"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.279","data-audio-action":"rack-add","disabled":false,"label":"Add current settings to rack"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.281","data-audio":"rack-entry","default":"","disabled":false,"label":"Rack effect","name":"waveform-editor-281","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.282","data-audio-action":"rack-load","disabled":false,"label":"Edit selected rack settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.283","data-audio-action":"rack-update","disabled":false,"label":"Update selected rack effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.284","data-audio-action":"rack-toggle","disabled":false,"label":"Bypass / enable effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.285","data-audio-action":"rack-up","disabled":false,"label":"Move effect earlier"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.286","data-audio-action":"rack-down","disabled":false,"label":"Move effect later"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.287","data-audio-action":"rack-remove","disabled":false,"label":"Remove rack effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"rack-summary","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.290","data-audio-action":"rack-original","disabled":false,"label":"A: original before rack"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.291","data-audio-action":"rack-preview","disabled":false,"label":"B: preview effect rack"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.292","data-audio-action":"rack-export","disabled":false,"label":"Export selection through rack"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.293","data-audio-action":"rack-apply","disabled":false,"label":"Render rack into waveform and bypass"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.294","data-audio-action":"stop","disabled":false,"label":"Stop / cancel rack"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"rack-status","role":"status","text":"Set an effect's controls, choose its family here, then add it to the rack.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"The rack processes effects from top to bottom. Edit loads a node into its effect panel; Update captures those controls. Rack edits and settings save with the waveform and support Undo. Preview renders from the current selected source and plays up to five seconds; rack export downloads the whole processed selection. Ordinary waveform playback and export use source PCM. Render replaces the selection and bypasses every rack effect in one Undo step. Changing the rack does not automatically alter an existing preview; preview again to hear it. Start with up to 30 seconds; output is limited to 60 seconds / 64 MiB, and each processor retains its own limits. Gap repair uses intact samples outside the selection. This is an offline rack, not a real-time insert chain.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Effect presets and repeat"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.301","data-audio":"preset-family","default":"apply-effect","disabled":false,"label":"Preset effect family","name":"waveform-editor-301","options":[{"label":"Filters / dynamics / noise","value":"apply-effect"},{"label":"Pitch / tempo","value":"pitch-apply"},{"label":"Targeted repair","value":"repair-apply"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.303","data-audio":"preset-name","default":"My preset","disabled":false,"kind":"text","label":"Effect preset name","maxlength":80,"name":"waveform-editor-303"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.304","data-audio-action":"preset-save","disabled":false,"label":"Save current effect settings"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.306","data-audio":"presets","default":"","disabled":false,"label":"Saved effect preset","name":"waveform-editor-306","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.307","data-audio-action":"preset-load","disabled":false,"label":"Load effect settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.308","data-audio-action":"repeat-effect","disabled":false,"label":"Repeat last effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"preset-status","role":"status","text":"Presets are saved with this audio project. Loading changes controls only.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Choose the family whose current controls you want to save. Saving the same name replaces that preset. Noise recipes include the captured noise profile. Repeat applies the last successful filter, noise, pitch/time or targeted repair to the current selection with Undo. Shortcut: Ctrl/⌘+R while the waveform has focus. Up to 32 presets.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Audio tracks","variant":"h3"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-audio":"timeline-info","text":"No audio clips","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.316","data-audio-action":"add-track","disabled":false,"label":"Add selection as track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.317","data-audio-action":"add-clip","disabled":false,"label":"Add selection to selected track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.318","data-audio-action":"play-mix","disabled":false,"label":"Play project mix"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.319","data-audio-action":"stop","disabled":false,"label":"Stop audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.320","data-audio-action":"export-mix","disabled":false,"label":"Export project mix WAV"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.321","data-audio-action":"undo","disabled":false,"label":"Undo timeline"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.322","data-audio-action":"redo","disabled":false,"label":"Redo timeline"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.324","data-audio":"cursor","default":"0","disabled":false,"kind":"number","label":"Timeline cursor s","min":"0","name":"waveform-editor-324","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.stem","data-audio":"stem","default":"","label":"Aligned stem","name":"waveform-editor-stem","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.export-stem","data-audio-action":"export-stem","disabled":false,"label":"Export selected stem WAV"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Native VST3 effects","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Process the selected aligned stem with a native effect. The render becomes a new audio track; your original audio stays editable.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.address","data-native-effect":"address","default":"http://127.0.0.1:5279","kind":"text","label":"Native host address","name":"waveform-native-address"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"autocomplete":"off","controlKey":"waveform.native.code","data-native-effect":"code","default":"","kind":"password","label":"Native host pairing code","maxlength":64,"name":"waveform-native-code"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.connect","data-native-action":"connect","disabled":false,"label":"Connect native host"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.module","data-native-effect":"module","default":"","label":"Native plugin","name":"waveform-native-module","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.inspect","data-native-action":"inspect","disabled":true,"label":"Inspect plugin"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.effect","data-native-effect":"effect","default":"","label":"Plugin effect","name":"waveform-native-effect","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.load","data-native-action":"load","disabled":true,"label":"Load effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.parameter","data-native-effect":"parameter","default":"","label":"Plugin parameter","name":"waveform-native-parameter","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.value","data-native-effect":"value","default":"","kind":"number","label":"Parameter value (0–1)","max":1,"min":0,"name":"waveform-native-value","step":0.001},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.tail","data-native-effect":"tail","default":"0","kind":"number","label":"Render tail seconds","max":30,"min":0,"name":"waveform-native-tail","step":0.1},"tag":"Input"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.save","data-native-action":"save","disabled":true,"label":"Store effect settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.render","data-native-action":"render","disabled":true,"label":"Render selected stem with VST3"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.cancel","data-native-action":"cancel","disabled":true,"label":"Cancel native job"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-native-effect":"status","text":"Connect a native effects host for this DAW. Load effect checks channel support without changing your audio.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-native-effect":"saved","text":"No native effect settings stored in this project.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.preview","data-native-action":"preview","disabled":true,"label":"Prepare VST3 preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.original","data-native-action":"original","disabled":true,"label":"Original preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.processed","data-native-action":"processed","disabled":true,"label":"Processed preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.keep","data-native-action":"keep","disabled":true,"label":"Keep preview as track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.discard","data-native-action":"discard","disabled":true,"label":"Discard preview"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Native effect audition","className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-native-effect":"preview-status","text":"Prepare a preview to compare before adding a track. Project, source or effect changes discard it.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Native VST3 effects","className":"ls-native-effects","data-native-effects":true,"element":"section"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"tracks","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"data-track":"label","text":"","variant":"strong"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.331","data-track":"name","disabled":false,"kind":"text","label":"Track name","maxlength":256,"name":"waveform-editor-331"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.333","data-track":"gain","disabled":false,"kind":"number","label":"Gain dB","max":"24","min":"-60","name":"waveform-editor-333","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.335","data-track":"pan","disabled":false,"kind":"range","label":"Pan","max":"1","min":"-1","name":"waveform-editor-335","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.337","data-track":"mute","default":false,"disabled":false,"label":"Mute","name":"waveform-editor-337"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.339","data-track":"solo","default":false,"disabled":false,"label":"Solo","name":"waveform-editor-339"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.340","data-track-remove":true,"disabled":false,"label":"Remove track"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-audio-lane","data-track":"lane","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-audio-track","element":"section"},"tag":"Section"}],"kind":"view-node","props":{"data-audio":"track-template","element":"template"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.344","data-audio":"clip","default":"","disabled":false,"label":"Selected clip","name":"waveform-editor-344","options":[{"label":"Select a clip","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.346","data-audio":"destination","default":"","disabled":false,"label":"Destination track","name":"waveform-editor-346","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.348","data-audio":"clip-at","default":"0","disabled":false,"kind":"number","label":"Clip start s","min":"0","name":"waveform-editor-348","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.350","data-audio":"clip-offset","default":"0","disabled":false,"kind":"number","label":"Source offset s","min":"0","name":"waveform-editor-350","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.352","data-audio":"clip-length","default":"0","disabled":false,"kind":"number","label":"Clip duration s","min":"0","name":"waveform-editor-352","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.354","data-audio":"clip-gain","default":"0","disabled":false,"kind":"number","label":"Clip gain dB","max":"24","min":"-60","name":"waveform-editor-354","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.356","data-audio":"clip-fade-in","default":"0","disabled":false,"kind":"number","label":"Fade in s","min":"0","name":"waveform-editor-356","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.358","data-audio":"clip-fade-out","default":"0","disabled":false,"kind":"number","label":"Fade out s","min":"0","name":"waveform-editor-358","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.359","data-audio-action":"update-clip","disabled":false,"label":"Apply clip settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.360","data-audio-action":"split","disabled":false,"label":"Split at cursor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.361","data-audio-action":"duplicate","disabled":false,"label":"Duplicate clip"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.362","data-audio-action":"delete","disabled":false,"label":"Delete clip"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.364","data-audio":"ripple","default":false,"disabled":false,"label":"Ripple following clips on this track","name":"waveform-editor-364"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.365","data-audio-action":"crossfade","disabled":false,"label":"Crossfade overlap"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.366","data-audio-action":"edit-clip","disabled":false,"label":"Copy clip to waveform"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Selected audio clip","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Track automation","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Gain and pan follow project time after inserts. Click the curve to set a point, or enter exact values. Undo and Redo use timeline history.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.track","data-automation":"track","default":"","label":"Audio track","name":"automation-track","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.parameter","data-automation":"parameter","default":"gain","label":"Parameter","name":"automation-parameter","options":[{"label":"Gain (dB)","value":"gain"},{"label":"Pan","value":"pan"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.interpolation","data-automation":"interpolation","default":"linear","label":"Between points","name":"automation-interpolation","options":[{"label":"Linear ramp","value":"linear"},{"label":"Hold value","value":"hold"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.point","data-automation":"point","default":"","label":"Saved point","name":"automation-point","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.time","data-automation":"time","default":"0","kind":"number","label":"Time (seconds)","min":"0","name":"automation-time","step":"any"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.value","data-automation":"value","default":"0","kind":"number","label":"Value","max":"24","min":"-60","name":"automation-value","step":".5"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.cursor","data-automation-action":"cursor","label":"Use timeline cursor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.set","data-automation-action":"set","label":"Set point"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.delete","data-automation-action":"delete","label":"Delete point"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.clear","data-automation-action":"clear","label":"Clear lane"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-automation-controls","element":"section"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<canvas width=\"900\" height=\"140\" data-automation=\"curve\" aria-label=\"Automation curve\" class=\"ls-automation-curve\"></canvas>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-automation":"status","role":"status","text":"Add an audio track to draw automation.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-audio-automation","data-automation-editor":"","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Select a clip to edit it. Drag clips to move them in time or between tracks. Left/right arrows on a clip move one sample; hold Ctrl/⌘ for one second. Clips and recorded takes are resampled to the timeline rate when added. Clip changes are non-destructive. Copy clip to waveform opens its source range for processing; add the result to the timeline when ready.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Audio clip timeline","className":"ls-audio-timeline","data-audio":"timeline","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Record audio"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.372","data-audio":"device","default":"","disabled":false,"label":"Microphone","name":"waveform-editor-372","options":[{"label":"System default input","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.373","data-audio-action":"devices","disabled":false,"label":"Refresh input devices"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.375","data-audio":"channels","default":"1","disabled":false,"label":"Channels","name":"waveform-editor-375","options":[{"label":"Mono","value":"1"},{"label":"Stereo","value":"2"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.377","data-audio":"overdub","default":false,"disabled":false,"label":"Play timeline while recording","name":"waveform-editor-377"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.379","data-audio":"monitor","default":false,"disabled":false,"label":"Monitor input (use headphones)","name":"waveform-editor-379"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.381","data-audio":"latency","default":"0","disabled":false,"kind":"number","label":"Input latency correction ms","max":"2000","min":"0","name":"waveform-editor-381","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.382","data-audio-action":"record","disabled":false,"label":"Record microphone"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.383","data-audio-action":"record-stop","disabled":true,"label":"Finish recording"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"html":"<meter data-audio=\"meter\" min=\"0\" max=\"1\" value=\"0\" aria-label=\"Microphone peak level\"></meter>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"data-audio":"record-status","role":"status","text":"Ready. Recording creates a new audio track at the timeline cursor.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Measure recording latency"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.391","data-audio-action":"calibrate","disabled":false,"label":"Measure round-trip latency"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.392","data-audio-action":"use-latency","disabled":true,"label":"Use measured correction"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"latency-status","role":"status","text":"No measured correction.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Measure plays three quiet test tones and records 2.5 seconds with input monitoring off. Let the selected microphone hear the speakers, or connect an audio loopback cable. Keep levels low. The result includes output, input and acoustic travel time; remeasure when your audio route changes. Test audio is discarded. If the tones cannot be identified consistently, no correction is applied.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Capture stops at five minutes or 64 MiB of PCM. Input latency correction shifts the take earlier; calibrate it for your device. Microphone audio stays in this browser and your saved project.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-wave":"status","role":"status","text":"Import audio, open a prepared mix, or restore a saved audio project.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Editing help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Drag a range, or enter exact seconds or sample positions. Double-click selects all. Ctrl/⌘ + wheel zooms around the pointer; wheel scrolls. Space plays/stops; Ctrl/⌘ A, X, C, V, Z, Shift Z; Delete removes the range. Left/right moves one sample; hold Shift to extend. Home/End jumps to the audio edges. Scrub plays short previews as you drag.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Open prepared mix copies the prepared song; music code and song exports keep their own state. Audio project files include waveform edits, tracks, selection and undo history. Local recovery is browser-specific; save a project file for a portable copy. Each open editor writes a separate recovery. WAV export is 16-bit PCM. Browser imports may resample to the audio device rate. Undo retains up to 32 changes within a 128 MiB budget per editor. Timeline limits: 16 tracks, 128 clips, 64 MiB source PCM and 64 MiB stereo mix.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Waveform editor","className":"ls-waveform","data-waveform-editor":true,"element":"section","id":"live-score-waveform","tabIndex":0},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"SOUND DESIGN","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Create an instrument","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Design a patch, assign it to a musical channel, then Prepare score to hear it. Reuse its name in Music code.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.9","data-instrument":"name","default":"my_synth","disabled":false,"kind":"text","label":"Name","maxlength":48,"name":"instrument-editor-9","pattern":"[a-z][a-z0-9_]*","required":true},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.11","data-instrument":"lane","default":"melody","disabled":false,"label":"Channel","name":"instrument-editor-11","options":[{"label":"bass","value":"bass"},{"label":"pads","value":"pads"},{"label":"melody","value":"melody"},{"label":"arp","value":"arp"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.13","data-instrument":"base","default":"warm_pad","disabled":false,"label":"Starting patch","name":"instrument-editor-13","options":[{"label":"warm_pad","value":"warm_pad"},{"label":"bright_lead","value":"bright_lead"},{"label":"bell","value":"bell"},{"label":"hollow","value":"hollow"},{"label":"saw_bass","value":"saw_bass"},{"label":"sub_sine","value":"sub_sine"},{"label":"square_lead","value":"square_lead"},{"label":"triangle_keys","value":"triangle_keys"},{"label":"organ","value":"organ"},{"label":"pluck","value":"pluck"},{"label":"glass","value":"glass"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-instrument-fields","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Parameters"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Enable a parameter to override the starting patch.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"osc1","label":"Enable Waveform","name":"enable-osc1"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"osc1","disabled":true,"label":"Waveform","name":"instrument-osc1","options":[{"label":"sine","value":"sine"},{"label":"triangle","value":"triangle"},{"label":"saw","value":"saw"},{"label":"square","value":"square"},{"label":"additive","value":"additive"}]},"tag":"Select"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"filter","label":"Enable Filter","name":"enable-filter"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"filter","disabled":true,"label":"Filter","name":"instrument-filter","options":[{"label":"none","value":"none"},{"label":"lp","value":"lp"},{"label":"hp","value":"hp"},{"label":"bp","value":"bp"},{"label":"notch","value":"notch"}]},"tag":"Select"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"osc1.detune","label":"Enable Detune (cents)","name":"enable-osc1.detune"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"osc1.detune","default":"0","disabled":true,"kind":"number","label":"Detune (cents)","max":"100","min":"-100","name":"instrument-osc1.detune","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"cutoff","label":"Enable Cutoff (Hz)","name":"enable-cutoff"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"cutoff","default":"20000","disabled":true,"kind":"number","label":"Cutoff (Hz)","max":"20000","min":"20","name":"instrument-cutoff","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"res","label":"Enable Resonance","name":"enable-res"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"res","default":"0","disabled":true,"kind":"number","label":"Resonance","max":"1","min":"0","name":"instrument-res","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.a","label":"Enable Attack (ms)","name":"enable-amp.a"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.a","default":"8","disabled":true,"kind":"number","label":"Attack (ms)","max":"8000","min":"0","name":"instrument-amp.a","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.d","label":"Enable Decay (ms)","name":"enable-amp.d"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.d","default":"120","disabled":true,"kind":"number","label":"Decay (ms)","max":"8000","min":"0","name":"instrument-amp.d","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.s","label":"Enable Sustain","name":"enable-amp.s"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.s","default":"0.7","disabled":true,"kind":"number","label":"Sustain","max":"1","min":"0","name":"instrument-amp.s","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.r","label":"Enable Release (ms)","name":"enable-amp.r"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.r","default":"180","disabled":true,"kind":"number","label":"Release (ms)","max":"8000","min":"0","name":"instrument-amp.r","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"gain","label":"Enable Gain","name":"enable-gain"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"gain","default":"0.3","disabled":true,"kind":"number","label":"Gain","max":"1","min":"0","name":"instrument-gain","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"pan","label":"Enable Pan","name":"enable-pan"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"pan","default":"0","disabled":true,"kind":"number","label":"Pan","max":"1","min":"-1","name":"instrument-pan","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-instrument-fields","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"element":"details","open":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.18","data-instrument":"add-track","disabled":false,"label":"Add instrument track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.19","data-instrument":"update-track","disabled":true,"label":"Update selected track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"className":"ls-legacy-patch","controlKey":"instrument-editor.20","data-instrument":"create","disabled":false,"label":"Assign to score channel"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-instrument":"status","role":"status","text":"Custom instruments are saved with your score draft.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Instrument builder","className":"ls-instrument-editor","data-instrument-editor":true,"element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Prepare a score to open its tracks, clips and envelopes.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Track session","className":"ls-session-editor","data-session-editor":true,"element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Visuals","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.7","data-visual":"fullscreen","disabled":false,"label":"Fullscreen"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.12","data-scope-surface":"shader","data-visual-workspace":"shader","disabled":false,"label":"Shaders","pressed":true},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-shader-scope","data-scope-surface":"trace","data-visual-workspace":"trace","disabled":false,"label":"Shader → scope","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.13","data-scope-surface":"scope","data-visual-workspace":"scope","disabled":false,"label":"Oscilloscope","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.14","data-scope-surface":"spectrum","data-visual-workspace":"spectrum","disabled":false,"label":"Spectrogram","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.18","data-scope-surface":"geometry","data-visual-workspace":"geometry","disabled":false,"label":"Geometry","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.19","data-field-open":true,"data-visual-workspace":"field","disabled":false,"label":"4D field","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.20","data-scope-surface":"plate","data-visual-workspace":"plate","disabled":false,"label":"Resonant plate","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Visual workspace","className":"ls-visual-workspaces","element":"nav"},"tag":"Section"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","className":"ls-sound-source","data-scope":"source","role":"status","text":"Sound · stopped","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Geometry instrument"},"tag":"Text"}],"kind":"view-node","props":{"element":"legend"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Vector shape","controlKey":"visual-performance-visual.36","data-scope":"shape","default":"circle","disabled":false,"label":"From","name":"visual-performance-visual-36","options":[{"label":"Circle","value":"circle"},{"label":"Lissajous 3:2","value":"lissajous"},{"label":"Diamond","value":"diamond"},{"label":"Rose","value":"rose"},{"label":"Orbit knot","value":"orbit"},{"label":"Five-point star","value":"star"},{"label":"Triangle","value":"triangle"},{"label":"Hexagon","value":"hexagon"},{"label":"Spirograph","value":"spirograph"},{"label":"Torus knot","value":"torus"},{"label":"Circle grid 3 × 3","value":"grid"},{"label":"Honeycomb","value":"honeycomb"},{"label":"Smooth 4D field","value":"field"},{"label":"Captured shader contour","value":"shader"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Target shape","controlKey":"visual-performance-visual.38","data-scope":"target","default":"rose","disabled":false,"label":"To","name":"visual-performance-visual-38","options":[{"label":"Rose","value":"rose"},{"label":"Circle","value":"circle"},{"label":"Lissajous 3:2","value":"lissajous"},{"label":"Diamond","value":"diamond"},{"label":"Orbit knot","value":"orbit"},{"label":"Five-point star","value":"star"},{"label":"Triangle","value":"triangle"},{"label":"Hexagon","value":"hexagon"},{"label":"Spirograph","value":"spirograph"},{"label":"Torus knot","value":"torus"},{"label":"Circle grid 3 × 3","value":"grid"},{"label":"Honeycomb","value":"honeycomb"},{"label":"Smooth 4D field","value":"field"},{"label":"Captured shader contour","value":"shader"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Shape morph","controlKey":"visual-performance-visual.40","data-scope":"morph","default":"0","disabled":false,"kind":"range","label":"Morph","max":"1","min":"0","name":"visual-performance-visual-40","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Morph motion rate","controlKey":"visual-performance-visual.42","data-scope":"motion","default":"0","disabled":false,"kind":"range","label":"Motion Hz","max":"2","min":"0","name":"visual-performance-visual-42","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Journey seed","controlKey":"visual-performance-visual.44","data-scope":"seed","default":"1","disabled":false,"kind":"number","label":"Seed","max":"4294967295","min":"0","name":"visual-performance-visual-44","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.45","data-scope":"journey","disabled":false,"label":"Generate journey"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"text":"Harmony voices share the MIDI root and morph, with normalized level. Tiled paths include connecting strokes; summed voices reshape the trace.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-section","data-visual-for":"geometry","element":"fieldset","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"FIELD INSTRUMENT","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Smooth 4D field","variant":"h4"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Scan a smooth field into sound. Rotate it to reshape the harmonics.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-heading","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"checked":true,"disabled":true,"hostBinding":{"action":"virtual.field.follow","event":"change","key":"follow","read":"checked"},"hostOutputs":{"checked":"follow","disabled":"busy"},"label":"Follow prepared take","name":"virtual-field-arrangement-follow"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.clip","event":"change","key":"clip","read":"text"},"hostOutputs":{"disabled":"clipDisabled","options":"clips","value":"clip"},"label":"Arrangement field clip","name":"virtual-field-arrangement-clip","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.point","event":"change","key":"point","read":"text"},"hostOutputs":{"disabled":"editDisabled","options":"points","value":"point"},"label":"Curve point","name":"virtual-field-arrangement-point","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"html":"<svg id=\"virtual-field-arrangement-plot\" viewBox=\"0 0 320 100\" preserveAspectRatio=\"none\" role=\"img\" aria-label=\"Field curves: XW, XY and Interaction\"><path data-field-arrangement-curve=\"xw\"/><path data-field-arrangement-curve=\"xy\"/><path data-field-arrangement-curve=\"interaction\"/><line data-field-arrangement-playhead x1=\"0\" x2=\"0\" y1=\"0\" y2=\"100\"/></svg>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"text":"XW · XY · Interaction"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.scrub","event":"input","key":"beat","read":"number"},"hostOutputs":{"disabled":"scrubDisabled","max":"duration","value":"beat"},"kind":"range","label":"Explore clip beat","max":4,"min":0,"name":"virtual-field-arrangement-scrub","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.value","event":"input","key":"xw","read":"number"},"hostOutputs":{"disabled":"editDisabled","value":"xw"},"kind":"number","label":"Point XW (degrees)","max":180.0,"min":-180.0,"name":"virtual-field-arrangement-xw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.value","event":"input","key":"xy","read":"number"},"hostOutputs":{"disabled":"editDisabled","value":"xy"},"kind":"number","label":"Point XY (degrees)","max":180.0,"min":-180.0,"name":"virtual-field-arrangement-xy","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.value","event":"input","key":"interaction","read":"number"},"hostOutputs":{"disabled":"editDisabled","value":"interaction"},"kind":"number","label":"Point interaction","max":1.0,"min":0.0,"name":"virtual-field-arrangement-interaction","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.edit","event":"click"},"hostOutputs":{"disabled":"loadDisabled"},"id":"virtual-field-arrangement-edit","label":"Load draft curves"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.save","event":"click"},"hostOutputs":{"disabled":"saveDisabled"},"id":"virtual-field-arrangement-save","label":"Save point to draft"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-field-arrangement-status","role":"status","text":"Prepare an arrangement with a 4D field clip to explore its movement."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Scrub during playback to hear the arrangement; stopped scrubbing stays silent. Load draft curves to edit a point. The first and last points stay linked for a closed loop. Save changes the draft; Prepare adopts it into audio. Undo draft replacement restores the edit."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"virtual.field-arrangement","hostInitial":{"follow":true},"hostPlotId":"virtual-field-arrangement-plot","hostVersion":1,"id":"virtual-field-arrangement","title":"Arrangement movement"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.field-arrangement\",\"source_hash\":\"cf9515fc9b956bdfd98d73b62f463ea1182a887bd3811dac029e19aca5da7516\",\"context_hash\":\"09742b83331e8f809bca436422bb0ffc9f4827a49af2cfdd54b810442588cfa0\",\"tree_hash\":\"89b2976c5da8160acbb88dc335b0d823ac78d01e4120fe883a233497d25a3997\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"checked\\\":true,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.follow\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"follow\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"follow\\\",\\\"disabled\\\":\\\"busy\\\"},\\\"label\\\":\\\"Follow prepared take\\\",\\\"name\\\":\\\"virtual-field-arrangement-follow\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.clip\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"clip\\\",\\\"read\\\":\\\"text\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"clipDisabled\\\",\\\"options\\\":\\\"clips\\\",\\\"value\\\":\\\"clip\\\"},\\\"label\\\":\\\"Arrangement field clip\\\",\\\"name\\\":\\\"virtual-field-arrangement-clip\\\",\\\"options\\\":[]},\\\"tag\\\":\\\"Select\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.point\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"point\\\",\\\"read\\\":\\\"text\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"options\\\":\\\"points\\\",\\\"value\\\":\\\"point\\\"},\\\"label\\\":\\\"Curve point\\\",\\\"name\\\":\\\"virtual-field-arrangement-point\\\",\\\"options\\\":[]},\\\"tag\\\":\\\"Select\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"html\\\":\\\"<svg id=\\\\\\\"virtual-field-arrangement-plot\\\\\\\" viewBox=\\\\\\\"0 0 320 100\\\\\\\" preserveAspectRatio=\\\\\\\"none\\\\\\\" role=\\\\\\\"img\\\\\\\" aria-label=\\\\\\\"Field curves: XW, XY and Interaction\\\\\\\"><path data-field-arrangement-curve=\\\\\\\"xw\\\\\\\"/><path data-field-arrangement-curve=\\\\\\\"xy\\\\\\\"/><path data-field-arrangement-curve=\\\\\\\"interaction\\\\\\\"/><line data-field-arrangement-playhead x1=\\\\\\\"0\\\\\\\" x2=\\\\\\\"0\\\\\\\" y1=\\\\\\\"0\\\\\\\" y2=\\\\\\\"100\\\\\\\"/></svg>\\\"},\\\"tag\\\":\\\"RawHtml\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"XW · XY · Interaction\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.scrub\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"beat\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"scrubDisabled\\\",\\\"max\\\":\\\"duration\\\",\\\"value\\\":\\\"beat\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Explore clip beat\\\",\\\"max\\\":4,\\\"min\\\":0,\\\"name\\\":\\\"virtual-field-arrangement-scrub\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.value\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"xw\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"value\\\":\\\"xw\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Point XW (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-field-arrangement-xw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.value\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"xy\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"value\\\":\\\"xy\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Point XY (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-field-arrangement-xy\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.value\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"interaction\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"value\\\":\\\"interaction\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Point interaction\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-field-arrangement-interaction\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.edit\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"loadDisabled\\\"},\\\"id\\\":\\\"virtual-field-arrangement-edit\\\",\\\"label\\\":\\\"Load draft curves\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.save\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"saveDisabled\\\"},\\\"id\\\":\\\"virtual-field-arrangement-save\\\",\\\"label\\\":\\\"Save point to draft\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-field-arrangement-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Prepare an arrangement with a 4D field clip to explore its movement.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Scrub during playback to hear the arrangement; stopped scrubbing stays silent. Load draft curves to edit a point. The first and last points stay linked for a closed loop. Save changes the draft; Prepare adopts it into audio. Undo draft replacement restores the edit.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.field-arrangement\\\",\\\"hostInitial\\\":{\\\"follow\\\":true},\\\"hostPlotId\\\":\\\"virtual-field-arrangement-plot\\\",\\\"hostVersion\\\":1,\\\"id\\\":\\\"virtual-field-arrangement\\\",\\\"title\\\":\\\"Arrangement movement\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"checked\":true,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.follow\",\"event\":\"change\",\"key\":\"follow\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"follow\",\"disabled\":\"busy\"},\"label\":\"Follow prepared take\",\"name\":\"virtual-field-arrangement-follow\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.clip\",\"event\":\"change\",\"key\":\"clip\",\"read\":\"text\"},\"hostOutputs\":{\"disabled\":\"clipDisabled\",\"options\":\"clips\",\"value\":\"clip\"},\"label\":\"Arrangement field clip\",\"name\":\"virtual-field-arrangement-clip\",\"options\":[]},\"tag\":\"Select\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.point\",\"event\":\"change\",\"key\":\"point\",\"read\":\"text\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"options\":\"points\",\"value\":\"point\"},\"label\":\"Curve point\",\"name\":\"virtual-field-arrangement-point\",\"options\":[]},\"tag\":\"Select\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"html\":\"<svg id=\\\"virtual-field-arrangement-plot\\\" viewBox=\\\"0 0 320 100\\\" preserveAspectRatio=\\\"none\\\" role=\\\"img\\\" aria-label=\\\"Field curves: XW, XY and Interaction\\\"><path data-field-arrangement-curve=\\\"xw\\\"/><path data-field-arrangement-curve=\\\"xy\\\"/><path data-field-arrangement-curve=\\\"interaction\\\"/><line data-field-arrangement-playhead x1=\\\"0\\\" x2=\\\"0\\\" y1=\\\"0\\\" y2=\\\"100\\\"/></svg>\"},\"tag\":\"RawHtml\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"XW · XY · Interaction\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.scrub\",\"event\":\"input\",\"key\":\"beat\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"scrubDisabled\",\"max\":\"duration\",\"value\":\"beat\"},\"kind\":\"range\",\"label\":\"Explore clip beat\",\"max\":4,\"min\":0,\"name\":\"virtual-field-arrangement-scrub\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.value\",\"event\":\"input\",\"key\":\"xw\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"value\":\"xw\"},\"kind\":\"number\",\"label\":\"Point XW (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-field-arrangement-xw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.value\",\"event\":\"input\",\"key\":\"xy\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"value\":\"xy\"},\"kind\":\"number\",\"label\":\"Point XY (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-field-arrangement-xy\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.value\",\"event\":\"input\",\"key\":\"interaction\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"value\":\"interaction\"},\"kind\":\"number\",\"label\":\"Point interaction\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-field-arrangement-interaction\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.edit\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"loadDisabled\"},\"id\":\"virtual-field-arrangement-edit\",\"label\":\"Load draft curves\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.save\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"saveDisabled\"},\"id\":\"virtual-field-arrangement-save\",\"label\":\"Save point to draft\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-field-arrangement-status\",\"role\":\"status\",\"text\":\"Prepare an arrangement with a 4D field clip to explore its movement.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Scrub during playback to hear the arrangement; stopped scrubbing stays silent. Load draft curves to edit a point. The first and last points stay linked for a closed loop. Save changes the draft; Prepare adopts it into audio. Undo draft replacement restores the edit.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.field-arrangement\",\"hostInitial\":{\"follow\":true},\"hostPlotId\":\"virtual-field-arrangement-plot\",\"hostVersion\":1,\"id\":\"virtual-field-arrangement\",\"title\":\"Arrangement movement\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"89b2976c5da8160acbb88dc335b0d823ac78d01e4120fe883a233497d25a3997\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.field-arrangement","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Arrangement movement","className":"ls-field-arrangement","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field visual","controlKey":"visual-smooth-field.11","data-field-view":true,"default":"xy","disabled":false,"label":"View sound","name":"visual-smooth-field-11","options":[{"label":"Stereo orbit","value":"xy"},{"label":"Waveforms","value":"wave"},{"label":"3D spectrogram","value":"spectrum"},{"label":"Shader","value":"shader"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.12","data-field-experiment":"save","disabled":false,"label":"Save experiment"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.13","data-field-experiment":"recall","disabled":false,"label":"Recall saved"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-experiment","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-field-save-help","text":"One saved experiment on this browser: field, gesture, frequency, voices and visual choice. Shader edits and display settings stay separate.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-field-saved":true,"role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.17","data-field-preset":"{\"xw\":0,\"xy\":0,\"interaction\":0}","disabled":false,"label":"Pure orbit"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.18","data-field-preset":"{\"xw\":25,\"xy\":-20,\"interaction\":0.65}","disabled":false,"label":"Folded ribbon"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.19","data-field-preset":"{\"xw\":75,\"xy\":-20,\"interaction\":0.9}","disabled":false,"label":"Braided loop"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Field starting shapes","className":"ls-field-presets","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"html":"<svg viewbox=\"0 0 320 160\" preserveaspectratio=\"none\" aria-hidden=\"true\"><path d=\"M160 0V160M0 80H320\"></path><circle data-field-pad-marker cx=\"182.2\" cy=\"88.9\" r=\"5\"></circle></svg>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"className":"ls-field-pad-x","text":"XW · left / right","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"className":"ls-field-pad-y","text":"XY · up / down","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"aria-describedby":"field-pad-help","aria-label":"Field rotation pad","className":"ls-field-pad","controlKey":"visual-smooth-field.22","data-field-pad":true,"disabled":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"id":"field-pad-help","text":"Drag to rotate. Arrow keys move 5°; Shift moves 1°; Home centres. Press Play instrument to hear it.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-pad-wrap","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field rotation XW","controlKey":"visual-smooth-field.30","data-scope":"field-xw","default":"25","disabled":false,"kind":"range","label":"Rotate XW","max":"180","min":"-180","name":"visual-smooth-field-30","step":"any"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-field-value":"xw","text":"25°","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field rotation XY","controlKey":"visual-smooth-field.33","data-scope":"field-xy","default":"-20","disabled":false,"kind":"range","label":"Rotate XY","max":"180","min":"-180","name":"visual-smooth-field-33","step":"any"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-field-value":"xy","text":"−20°","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field interaction","controlKey":"visual-smooth-field.36","data-scope":"field-interaction","default":"0.65","disabled":false,"kind":"range","label":"Interaction","max":"1","min":"0","name":"visual-smooth-field-36","step":"0.01"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-field-value":"interaction","text":"65%","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-field-knobs","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-field-play","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.39","data-field-gesture-action":"record","disabled":false,"label":"Record gesture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.40","data-field-gesture-action":"finish","disabled":true,"label":"Finish gesture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.41","data-field-gesture-action":"loop","disabled":true,"label":"Loop gesture","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.42","data-field-gesture-action":"download","disabled":true,"label":"Download gesture WAV"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-gesture-actions","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-field-gesture-status":true,"text":"Record a movement to make a reusable gesture. Record and Loop start the instrument.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Gesture curves & editing"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<svg viewbox=\"0 0 320 100\" preserveaspectratio=\"none\" role=\"img\" aria-label=\"Recorded gesture curves: XW, XY and Interaction\">\n        <path data-field-gesture-curve=\"xw\"></path><path data-field-gesture-curve=\"xy\"></path><path data-field-gesture-curve=\"interaction\"></path>\n        <line data-field-gesture-playhead x1=\"0\" x2=\"0\" y1=\"0\" y2=\"100\"></line>\n      </svg>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"XW","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"XY","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Interaction","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-gesture-legend","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Gesture duration seconds","controlKey":"visual-smooth-field.53","data-field-gesture-length":true,"disabled":true,"kind":"number","label":"Duration (s)","max":"16.08","min":"0.1","name":"visual-smooth-field-53","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.54","data-field-gesture-action":"duration","disabled":true,"label":"Apply duration"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Gesture point","controlKey":"visual-smooth-field.56","data-field-gesture-point":true,"default":"","disabled":true,"label":"Point","name":"visual-smooth-field-56","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.57","data-field-gesture-action":"update","disabled":true,"label":"Update point"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-gesture-actions","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Select a point, adjust the pad or Interaction, then Update point. Duration changes gesture speed; pitch stays independent. Save experiment keeps the gesture.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Send to arrangement"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field clip start beat","controlKey":"visual-smooth-field.63","data-field-clip-start":true,"default":"0","disabled":false,"kind":"number","label":"Start beat","min":"0","name":"visual-smooth-field-63","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field clip length beats","controlKey":"visual-smooth-field.65","data-field-clip-beats":true,"default":"4","disabled":false,"kind":"number","label":"Length (beats)","min":".25","name":"visual-smooth-field-65","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.66","data-field-gesture-action":"arrange","disabled":true,"label":"Add field clip"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-gesture-actions","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Adds a new track with an editable held MIDI note and this gesture stretched across the clip. Beat 0 is the start. Pitch uses the nearest MIDI note; voices are preserved. Prepare the score first.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Capture up to 16 seconds on the audio clock, with a short return to the start. WAV exports one dry cycle. Native field clips keep the movement editable and follow the arrangement tempo.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Gesture clip","className":"ls-field-gesture","data-field-gesture-controls":true,"element":"section"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Visuals follow the sound; switching views keeps the instrument playing. Stereo orbit shows the audio readout, not all four coordinates.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Smooth 4D field","className":"ls-field-panel","data-scope":"field-controls","element":"section","hidden":true},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Geometry · the 4D scan","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"XYZ projection · colour shows rotated W","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"figcaption"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<svg viewbox=\"0 0 320 320\" role=\"img\" aria-label=\"Four-dimensional scan projected into XYZ; blue is negative W and amber is positive W\">\n        <g data-field-axes></g><g data-field-curve fill=\"none\" stroke-width=\"2.2\" stroke-linecap=\"round\"></g>\n        <circle data-field-probe cx=\"160\" cy=\"160\" r=\"4.5\" fill=\"#fff\" stroke-width=\"2.5\"></circle>\n      </svg>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"W −√2","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-hidden":"true","className":"ls-field-color-key","text":"","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"+√2","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-legend","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field phase probe","controlKey":"visual-performance-visual.58","data-field-phase":true,"default":"0","disabled":false,"kind":"range","label":"Phase probe · picture only","max":"1","min":"0","name":"visual-performance-visual-58","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-label":"Coordinates at phase probe","data-field-coordinates":true,"text":"","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-label":"Raw stereo readout at phase probe","data-field-readout":true,"text":"","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Full cycle, fixed scale. Rotation changes the path; Interaction changes its stereo readout. Raw values precede audio filtering and level compensation.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-geometry","data-field-geometry":true,"data-visual-for":"field","element":"figure","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Shader"},"tag":"Text"}],"kind":"view-node","props":{"element":"figcaption"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-shader-preview width=\"960\" height=\"540\" role=\"img\" aria-label=\"Shader source before contour capture\"></canvas>"},"tag":"RawHtml"}],"kind":"view-node","props":{"className":"ls-shader-preview","data-visual-for":"trace","element":"figure","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Audio output"},"tag":"Text"}],"kind":"view-node","props":{"data-visual-for":"field trace","element":"figcaption","hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<canvas data-visual=\"canvas\" width=\"960\" height=\"540\" role=\"img\" aria-label=\"Shader picture driven by the prepared score\"></canvas>"},"tag":"RawHtml"}],"kind":"view-node","props":{"className":"ls-visual-stage","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-visual-for":"field","hidden":true,"text":"Play the instrument to compare the sound with its geometry. This view includes the voice's filtering, harmony and spatial settings.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-sound","element":"figure"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-field-views","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-contour-preset","data-visual":"contour-preset","disabled":true,"label":"Contour preset"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.144","data-scope":"trace","disabled":false,"label":"Capture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-scope":"trace-status","role":"status","text":"Capture an outline to play.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-shader-trace","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.147","data-scope":"live","disabled":false,"label":"Link live"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Live shader trace rate","controlKey":"visual-performance-visual.149","data-scope":"live-rate","default":"10","disabled":false,"label":"Trace rate","name":"visual-performance-visual-149","options":[{"label":"5 / sec","value":"5"},{"label":"10 / sec","value":"10"},{"label":"20 / sec","value":"20"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Contour brightness","controlKey":"visual-performance-visual.151","data-scope":"threshold","default":"0.5","disabled":false,"kind":"range","label":"Contour brightness","max":"0.95","min":"0.05","name":"visual-performance-visual-151","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-scope":"live-status","role":"status","text":"","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-shader-live","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-shader-sound","data-visual-for":"trace","element":"section","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Vector frequency","controlKey":"visual-performance-visual.25","data-scope":"frequency","default":"110","disabled":false,"kind":"range","label":"Frequency","max":"2000","min":"20","name":"visual-performance-visual-25","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Vector voices","controlKey":"visual-performance-visual.27","data-scope":"voices","default":"solo","disabled":false,"label":"Voices","name":"visual-performance-visual-27","options":[{"label":"Solo","value":"solo"},{"label":"Octave · 2 voices","value":"octave"},{"label":"Perfect fifth · 2 voices","value":"fifth"},{"label":"Major triad · 3 voices","value":"triad"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.28","data-scope":"play","disabled":false,"label":"Play"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.29","data-scope":"stop","disabled":false,"label":"Stop"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-describedby":"scope-wav-help","controlKey":"visual-performance-visual.30","data-scope":"export","disabled":false,"label":"Export WAV"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-scope":"export-status","role":"status","text":"","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Instrument playback","className":"ls-instrument-bar","data-visual-for":"geometry field trace","element":"section","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Simply supported aluminium rectangle · up to 64 bending modes. Choose harmonic RMS or live displacement driven by the DAW mix. Gold marks low vibration; red marks the point exciter."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"default":350.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"frequency","read":"number"},"hostOutputs":{"value":"frequency"},"kind":"number","label":"Drive frequency (Hz)","max":2000.0,"min":30.0,"name":"virtual-plate-frequency","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":300.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"width","read":"number"},"hostOutputs":{"value":"width"},"kind":"number","label":"Plate width (mm)","max":600.0,"min":200.0,"name":"virtual-plate-width","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"aspect","read":"number"},"hostOutputs":{"value":"aspect"},"kind":"number","label":"Height / width","max":1.5,"min":0.75,"name":"virtual-plate-aspect","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"thickness","read":"number"},"hostOutputs":{"value":"thickness"},"kind":"number","label":"Thickness (mm)","max":3.0,"min":0.5,"name":"virtual-plate-thickness","step":0.05},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.01,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"damping","read":"number"},"hostOutputs":{"value":"damping"},"kind":"number","label":"Damping ratio","max":0.1,"min":0.002,"name":"virtual-plate-damping","step":0.001},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"force","read":"number"},"hostOutputs":{"value":"force"},"kind":"number","label":"Drive force (mN)","max":100.0,"min":0.0,"name":"virtual-plate-force","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":25.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"audioForce","read":"number"},"hostOutputs":{"value":"audioForce"},"kind":"number","label":"Live force (mN per full-scale sample)","max":100.0,"min":0.0,"name":"virtual-plate-audioForce","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.37,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"x","read":"number"},"hostOutputs":{"value":"x"},"kind":"number","label":"Exciter X (fraction)","max":1.0,"min":0.0,"name":"virtual-plate-x","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.41,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"y","read":"number"},"hostOutputs":{"value":"y"},"kind":"number","label":"Exciter Y (fraction)","max":1.0,"min":0.0,"name":"virtual-plate-y","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":90.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"phase","read":"number"},"hostOutputs":{"value":"phase"},"kind":"number","label":"Surface phase (degrees)","max":360.0,"min":0.0,"name":"virtual-plate-phase","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":-25.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"yaw","read":"number"},"hostOutputs":{"value":"yaw"},"kind":"number","label":"Surface orbit (degrees)","max":180.0,"min":-180.0,"name":"virtual-plate-yaw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":40.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"tilt","read":"number"},"hostOutputs":{"value":"tilt"},"kind":"number","label":"Surface tilt (degrees)","max":80.0,"min":10.0,"name":"virtual-plate-tilt","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.5,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"height","read":"number"},"hostOutputs":{"value":"height"},"kind":"number","label":"Display height (relative)","max":1.0,"min":0.1,"name":"virtual-plate-height","step":0.05},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.35,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"blend","read":"number"},"hostOutputs":{"value":"blend"},"kind":"number","label":"Hyperedge blend","max":1.0,"min":0.0,"name":"virtual-plate-blend","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.5,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"bridge","read":"number"},"hostOutputs":{"value":"bridge"},"kind":"number","label":"AD bridge weight","max":2.0,"min":0.0,"name":"virtual-plate-bridge","step":0.05},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":25.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"xw","read":"number"},"hostOutputs":{"value":"xw"},"kind":"number","label":"4D rotation XW (degrees)","max":180.0,"min":-180.0,"name":"virtual-plate-xw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":-20.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"yz","read":"number"},"hostOutputs":{"value":"yz"},"kind":"number","label":"4D rotation YZ (degrees)","max":180.0,"min":-180.0,"name":"virtual-plate-yz","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.5,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"axisDelay","read":"number"},"hostOutputs":{"value":"axisDelay"},"kind":"number","label":"Axis delay step (ms)","max":5.0,"min":0.0,"name":"virtual-plate-axisDelay","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"live","read":"checked"},"hostOutputs":{"checked":"live"},"label":"Live response · DAW mix","name":"virtual-plate-live"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"surface","read":"checked"},"hostOutputs":{"checked":"surface"},"label":"3D surface · phase slice","name":"virtual-plate-surface"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"trace","read":"checked"},"hostOutputs":{"checked":"trace"},"label":"4D pickup trajectory","name":"virtual-plate-trace"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"listen","read":"checked"},"hostOutputs":{"checked":"listen"},"label":"Listen to pickup blend","name":"virtual-plate-listen"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.tune","event":"click"},"hostOutputs":{},"id":"virtual-plate-tune","label":"Tune nearest mode"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.play","event":"click"},"hostOutputs":{"disabled":"playDisabled"},"id":"virtual-plate-play","label":"Hear drive tone"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.stop","event":"click"},"hostOutputs":{"disabled":"stopDisabled"},"id":"virtual-plate-stop","label":"Stop drive tone"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-plate-status","role":"status","text":"Preparing physical response…"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"modes","id":"virtual-plate-modes","role":"status","text":"Mode frequencies follow dimensions, thickness and material."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"audio","id":"virtual-plate-audio","role":"status","text":"Tone is an audible frequency reference; speaker level is independent of simulated force."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"hyper","id":"virtual-plate-hyper","role":"status","text":"Four virtual pickups A(.19,.23), B(.73,.29), C(.31,.79), D(.81,.67). Hyperedges ABC and BCD blend groups; AD is the adjustable bridge. Enable the trajectory, then play a score or hear the drive tone."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Harmonic mode reports RMS with a frozen phase slice. Live mode integrates every audio sample and shows instantaneous displacement; phase control is ignored. Live force uses the mono DAW mix, not microphone capture. Picture height is normalized (1 nm floor in live mode); physical values remain in µm. Display snapshots may alias audio-frequency motion. E = 69 GPa, density = 2700 kg/m³, Poisson ratio = 0.33. No sand transport, free-edge or centre-clamp approximation."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"4D trajectory: X/Y screen position, Z perspective, W colour. Shows 512 consecutive audio samples; picture size is normalized. Hypergraph averaging and orthogonal rotations act on pickup signals, not plate mechanics. Optional stereo audition maps rotated X/Y to L/R at 0.03 digital units per µm, capped at ±0.1, alongside the dry source. Global Stop and leaving this view mute it. Changes to the blend do not reset plate motion."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Axis delay embeds rotated signals at t, t−τ, t−2τ, t−3τ using audio samples. Set delay to zero for simultaneous physical pickups. Time offsets change the stereo audition as well as the trajectory."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"virtual.plate","hostInitial":{"aspect":1.0,"audioForce":25.0,"axisDelay":1.5,"blend":0.35,"bridge":0.5,"damping":0.01,"force":1.0,"frequency":350.0,"height":0.5,"listen":false,"live":false,"phase":90.0,"surface":false,"thickness":1.0,"tilt":40.0,"trace":false,"width":300.0,"x":0.37,"xw":25.0,"y":0.41,"yaw":-25.0,"yz":-20.0},"hostLimits":{"aspect":[0.75,1.5],"audioForce":[0.0,100.0],"axisDelay":[0.0,5.0],"blend":[0.0,1.0],"bridge":[0.0,2.0],"damping":[0.002,0.1],"force":[0.0,100.0],"frequency":[30.0,2000.0],"height":[0.1,1.0],"phase":[0.0,360.0],"thickness":[0.5,3.0],"tilt":[10.0,80.0],"width":[200.0,600.0],"x":[0.0,1.0],"xw":[-180.0,180.0],"y":[0.0,1.0],"yaw":[-180.0,180.0],"yz":[-180.0,180.0]},"hostVersion":1,"id":"virtual-plate","title":"Resonant plate"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.plate\",\"source_hash\":\"8f1a0ec669e961846be031b7d9ece72b7577208120e1b6923c8117fe7a9f7e2e\",\"context_hash\":\"b4478446303f92d2720210e42e874bc0975eac38c221e6eab7dfa6b4a3e00bd5\",\"tree_hash\":\"3dd562ac957cce1c3711af0de1cac6be89c0f1a8cb31861656969d97105ac9d7\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Simply supported aluminium rectangle · up to 64 bending modes. Choose harmonic RMS or live displacement driven by the DAW mix. Gold marks low vibration; red marks the point exciter.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":350.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"frequency\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"frequency\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Drive frequency (Hz)\\\",\\\"max\\\":2000.0,\\\"min\\\":30.0,\\\"name\\\":\\\"virtual-plate-frequency\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":300.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"width\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"width\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Plate width (mm)\\\",\\\"max\\\":600.0,\\\"min\\\":200.0,\\\"name\\\":\\\"virtual-plate-width\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"aspect\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"aspect\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Height / width\\\",\\\"max\\\":1.5,\\\"min\\\":0.75,\\\"name\\\":\\\"virtual-plate-aspect\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"thickness\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"thickness\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Thickness (mm)\\\",\\\"max\\\":3.0,\\\"min\\\":0.5,\\\"name\\\":\\\"virtual-plate-thickness\\\",\\\"step\\\":0.05},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.01,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"damping\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"damping\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Damping ratio\\\",\\\"max\\\":0.1,\\\"min\\\":0.002,\\\"name\\\":\\\"virtual-plate-damping\\\",\\\"step\\\":0.001},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"force\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"force\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Drive force (mN)\\\",\\\"max\\\":100.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-force\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"audioForce\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"audioForce\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Live force (mN per full-scale sample)\\\",\\\"max\\\":100.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-audioForce\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.37,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"x\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"x\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Exciter X (fraction)\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-x\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.41,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"y\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"y\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Exciter Y (fraction)\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-y\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":90.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"phase\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"phase\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Surface phase (degrees)\\\",\\\"max\\\":360.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-phase\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":-25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"yaw\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"yaw\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Surface orbit (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-plate-yaw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":40.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"tilt\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"tilt\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Surface tilt (degrees)\\\",\\\"max\\\":80.0,\\\"min\\\":10.0,\\\"name\\\":\\\"virtual-plate-tilt\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"height\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"height\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Display height (relative)\\\",\\\"max\\\":1.0,\\\"min\\\":0.1,\\\"name\\\":\\\"virtual-plate-height\\\",\\\"step\\\":0.05},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.35,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"blend\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"blend\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Hyperedge blend\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-blend\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"bridge\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"bridge\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"AD bridge weight\\\",\\\"max\\\":2.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-bridge\\\",\\\"step\\\":0.05},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"xw\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"xw\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"4D rotation XW (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-plate-xw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":-20.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"yz\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"yz\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"4D rotation YZ (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-plate-yz\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"axisDelay\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"axisDelay\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Axis delay step (ms)\\\",\\\"max\\\":5.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-axisDelay\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"live\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"live\\\"},\\\"label\\\":\\\"Live response · DAW mix\\\",\\\"name\\\":\\\"virtual-plate-live\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"surface\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"surface\\\"},\\\"label\\\":\\\"3D surface · phase slice\\\",\\\"name\\\":\\\"virtual-plate-surface\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"trace\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"trace\\\"},\\\"label\\\":\\\"4D pickup trajectory\\\",\\\"name\\\":\\\"virtual-plate-trace\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"listen\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"listen\\\"},\\\"label\\\":\\\"Listen to pickup blend\\\",\\\"name\\\":\\\"virtual-plate-listen\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.tune\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{},\\\"id\\\":\\\"virtual-plate-tune\\\",\\\"label\\\":\\\"Tune nearest mode\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.play\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"playDisabled\\\"},\\\"id\\\":\\\"virtual-plate-play\\\",\\\"label\\\":\\\"Hear drive tone\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.stop\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"stopDisabled\\\"},\\\"id\\\":\\\"virtual-plate-stop\\\",\\\"label\\\":\\\"Stop drive tone\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-plate-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Preparing physical response…\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"modes\\\",\\\"id\\\":\\\"virtual-plate-modes\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Mode frequencies follow dimensions, thickness and material.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"audio\\\",\\\"id\\\":\\\"virtual-plate-audio\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Tone is an audible frequency reference; speaker level is independent of simulated force.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"hyper\\\",\\\"id\\\":\\\"virtual-plate-hyper\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Four virtual pickups A(.19,.23), B(.73,.29), C(.31,.79), D(.81,.67). Hyperedges ABC and BCD blend groups; AD is the adjustable bridge. Enable the trajectory, then play a score or hear the drive tone.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Harmonic mode reports RMS with a frozen phase slice. Live mode integrates every audio sample and shows instantaneous displacement; phase control is ignored. Live force uses the mono DAW mix, not microphone capture. Picture height is normalized (1 nm floor in live mode); physical values remain in µm. Display snapshots may alias audio-frequency motion. E = 69 GPa, density = 2700 kg/m³, Poisson ratio = 0.33. No sand transport, free-edge or centre-clamp approximation.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"4D trajectory: X/Y screen position, Z perspective, W colour. Shows 512 consecutive audio samples; picture size is normalized. Hypergraph averaging and orthogonal rotations act on pickup signals, not plate mechanics. Optional stereo audition maps rotated X/Y to L/R at 0.03 digital units per µm, capped at ±0.1, alongside the dry source. Global Stop and leaving this view mute it. Changes to the blend do not reset plate motion.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Axis delay embeds rotated signals at t, t−τ, t−2τ, t−3τ using audio samples. Set delay to zero for simultaneous physical pickups. Time offsets change the stereo audition as well as the trajectory.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.plate\\\",\\\"hostInitial\\\":{\\\"aspect\\\":1.0,\\\"audioForce\\\":25.0,\\\"axisDelay\\\":1.5,\\\"blend\\\":0.35,\\\"bridge\\\":0.5,\\\"damping\\\":0.01,\\\"force\\\":1.0,\\\"frequency\\\":350.0,\\\"height\\\":0.5,\\\"listen\\\":false,\\\"live\\\":false,\\\"phase\\\":90.0,\\\"surface\\\":false,\\\"thickness\\\":1.0,\\\"tilt\\\":40.0,\\\"trace\\\":false,\\\"width\\\":300.0,\\\"x\\\":0.37,\\\"xw\\\":25.0,\\\"y\\\":0.41,\\\"yaw\\\":-25.0,\\\"yz\\\":-20.0},\\\"hostLimits\\\":{\\\"aspect\\\":[0.75,1.5],\\\"audioForce\\\":[0.0,100.0],\\\"axisDelay\\\":[0.0,5.0],\\\"blend\\\":[0.0,1.0],\\\"bridge\\\":[0.0,2.0],\\\"damping\\\":[0.002,0.1],\\\"force\\\":[0.0,100.0],\\\"frequency\\\":[30.0,2000.0],\\\"height\\\":[0.1,1.0],\\\"phase\\\":[0.0,360.0],\\\"thickness\\\":[0.5,3.0],\\\"tilt\\\":[10.0,80.0],\\\"width\\\":[200.0,600.0],\\\"x\\\":[0.0,1.0],\\\"xw\\\":[-180.0,180.0],\\\"y\\\":[0.0,1.0],\\\"yaw\\\":[-180.0,180.0],\\\"yz\\\":[-180.0,180.0]},\\\"hostVersion\\\":1,\\\"id\\\":\\\"virtual-plate\\\",\\\"title\\\":\\\"Resonant plate\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Simply supported aluminium rectangle · up to 64 bending modes. Choose harmonic RMS or live displacement driven by the DAW mix. Gold marks low vibration; red marks the point exciter.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":350.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"frequency\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"frequency\"},\"kind\":\"number\",\"label\":\"Drive frequency (Hz)\",\"max\":2000.0,\"min\":30.0,\"name\":\"virtual-plate-frequency\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":300.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"width\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"width\"},\"kind\":\"number\",\"label\":\"Plate width (mm)\",\"max\":600.0,\"min\":200.0,\"name\":\"virtual-plate-width\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"aspect\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"aspect\"},\"kind\":\"number\",\"label\":\"Height / width\",\"max\":1.5,\"min\":0.75,\"name\":\"virtual-plate-aspect\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"thickness\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"thickness\"},\"kind\":\"number\",\"label\":\"Thickness (mm)\",\"max\":3.0,\"min\":0.5,\"name\":\"virtual-plate-thickness\",\"step\":0.05},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.01,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"damping\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"damping\"},\"kind\":\"number\",\"label\":\"Damping ratio\",\"max\":0.1,\"min\":0.002,\"name\":\"virtual-plate-damping\",\"step\":0.001},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"force\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"force\"},\"kind\":\"number\",\"label\":\"Drive force (mN)\",\"max\":100.0,\"min\":0.0,\"name\":\"virtual-plate-force\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"audioForce\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"audioForce\"},\"kind\":\"number\",\"label\":\"Live force (mN per full-scale sample)\",\"max\":100.0,\"min\":0.0,\"name\":\"virtual-plate-audioForce\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.37,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"x\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"x\"},\"kind\":\"number\",\"label\":\"Exciter X (fraction)\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-plate-x\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.41,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"y\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"y\"},\"kind\":\"number\",\"label\":\"Exciter Y (fraction)\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-plate-y\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":90.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"phase\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"phase\"},\"kind\":\"number\",\"label\":\"Surface phase (degrees)\",\"max\":360.0,\"min\":0.0,\"name\":\"virtual-plate-phase\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":-25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"yaw\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"yaw\"},\"kind\":\"number\",\"label\":\"Surface orbit (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-plate-yaw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":40.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"tilt\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"tilt\"},\"kind\":\"number\",\"label\":\"Surface tilt (degrees)\",\"max\":80.0,\"min\":10.0,\"name\":\"virtual-plate-tilt\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"height\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"height\"},\"kind\":\"number\",\"label\":\"Display height (relative)\",\"max\":1.0,\"min\":0.1,\"name\":\"virtual-plate-height\",\"step\":0.05},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.35,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"blend\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"blend\"},\"kind\":\"number\",\"label\":\"Hyperedge blend\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-plate-blend\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"bridge\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"bridge\"},\"kind\":\"number\",\"label\":\"AD bridge weight\",\"max\":2.0,\"min\":0.0,\"name\":\"virtual-plate-bridge\",\"step\":0.05},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"xw\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"xw\"},\"kind\":\"number\",\"label\":\"4D rotation XW (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-plate-xw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":-20.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"yz\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"yz\"},\"kind\":\"number\",\"label\":\"4D rotation YZ (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-plate-yz\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"axisDelay\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"axisDelay\"},\"kind\":\"number\",\"label\":\"Axis delay step (ms)\",\"max\":5.0,\"min\":0.0,\"name\":\"virtual-plate-axisDelay\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"live\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"live\"},\"label\":\"Live response · DAW mix\",\"name\":\"virtual-plate-live\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"surface\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"surface\"},\"label\":\"3D surface · phase slice\",\"name\":\"virtual-plate-surface\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"trace\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"trace\"},\"label\":\"4D pickup trajectory\",\"name\":\"virtual-plate-trace\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"listen\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"listen\"},\"label\":\"Listen to pickup blend\",\"name\":\"virtual-plate-listen\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.tune\",\"event\":\"click\"},\"hostOutputs\":{},\"id\":\"virtual-plate-tune\",\"label\":\"Tune nearest mode\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.play\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"playDisabled\"},\"id\":\"virtual-plate-play\",\"label\":\"Hear drive tone\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.stop\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"stopDisabled\"},\"id\":\"virtual-plate-stop\",\"label\":\"Stop drive tone\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-plate-status\",\"role\":\"status\",\"text\":\"Preparing physical response…\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"modes\",\"id\":\"virtual-plate-modes\",\"role\":\"status\",\"text\":\"Mode frequencies follow dimensions, thickness and material.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"audio\",\"id\":\"virtual-plate-audio\",\"role\":\"status\",\"text\":\"Tone is an audible frequency reference; speaker level is independent of simulated force.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"hyper\",\"id\":\"virtual-plate-hyper\",\"role\":\"status\",\"text\":\"Four virtual pickups A(.19,.23), B(.73,.29), C(.31,.79), D(.81,.67). Hyperedges ABC and BCD blend groups; AD is the adjustable bridge. Enable the trajectory, then play a score or hear the drive tone.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Harmonic mode reports RMS with a frozen phase slice. Live mode integrates every audio sample and shows instantaneous displacement; phase control is ignored. Live force uses the mono DAW mix, not microphone capture. Picture height is normalized (1 nm floor in live mode); physical values remain in µm. Display snapshots may alias audio-frequency motion. E = 69 GPa, density = 2700 kg/m³, Poisson ratio = 0.33. No sand transport, free-edge or centre-clamp approximation.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"4D trajectory: X/Y screen position, Z perspective, W colour. Shows 512 consecutive audio samples; picture size is normalized. Hypergraph averaging and orthogonal rotations act on pickup signals, not plate mechanics. Optional stereo audition maps rotated X/Y to L/R at 0.03 digital units per µm, capped at ±0.1, alongside the dry source. Global Stop and leaving this view mute it. Changes to the blend do not reset plate motion.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Axis delay embeds rotated signals at t, t−τ, t−2τ, t−3τ using audio samples. Set delay to zero for simultaneous physical pickups. Time offsets change the stereo audition as well as the trajectory.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.plate\",\"hostInitial\":{\"aspect\":1.0,\"audioForce\":25.0,\"axisDelay\":1.5,\"blend\":0.35,\"bridge\":0.5,\"damping\":0.01,\"force\":1.0,\"frequency\":350.0,\"height\":0.5,\"listen\":false,\"live\":false,\"phase\":90.0,\"surface\":false,\"thickness\":1.0,\"tilt\":40.0,\"trace\":false,\"width\":300.0,\"x\":0.37,\"xw\":25.0,\"y\":0.41,\"yaw\":-25.0,\"yz\":-20.0},\"hostLimits\":{\"aspect\":[0.75,1.5],\"audioForce\":[0.0,100.0],\"axisDelay\":[0.0,5.0],\"blend\":[0.0,1.0],\"bridge\":[0.0,2.0],\"damping\":[0.002,0.1],\"force\":[0.0,100.0],\"frequency\":[30.0,2000.0],\"height\":[0.1,1.0],\"phase\":[0.0,360.0],\"thickness\":[0.5,3.0],\"tilt\":[10.0,80.0],\"width\":[200.0,600.0],\"x\":[0.0,1.0],\"xw\":[-180.0,180.0],\"y\":[0.0,1.0],\"yaw\":[-180.0,180.0],\"yz\":[-180.0,180.0]},\"hostVersion\":1,\"id\":\"virtual-plate\",\"title\":\"Resonant plate\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"3dd562ac957cce1c3711af0de1cac6be89c0f1a8cb31861656969d97105ac9d7\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.plate","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"data-plate-slot":true,"element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-scope":"status","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Scope settings"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Scope display"},"tag":"Text"}],"kind":"view-node","props":{"element":"legend"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope trace","controlKey":"visual-performance-visual.77","data-scope":"mode","default":"xy","disabled":false,"label":"Trace","name":"visual-performance-visual-77","options":[{"label":"XY path","value":"xy"},{"label":"Stereo waveform","value":"wave"},{"label":"3D spectrogram","value":"spectrum"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope gain","controlKey":"visual-performance-visual.79","data-scope":"gain","default":"4","disabled":false,"kind":"range","label":"Picture gain","max":"8","min":"0.25","name":"visual-performance-visual-79","step":"0.25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope window","controlKey":"visual-performance-visual.81","data-scope":"window","default":"20","disabled":false,"label":"Window","name":"visual-performance-visual-81","options":[{"label":"5 ms","value":"5"},{"label":"20 ms","value":"20"},{"label":"50 ms","value":"50"},{"label":"100 ms","value":"100"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope persistence","controlKey":"visual-performance-visual.83","data-scope":"persistence","default":"100","disabled":false,"kind":"range","label":"Persistence","max":"500","min":"0","name":"visual-performance-visual-83","step":"10"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.85","data-scope":"trigger","default":true,"disabled":false,"label":"Rising-edge trigger (waveform)","name":"visual-performance-visual-85"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.87","data-scope":"freeze","default":false,"disabled":false,"label":"Freeze picture","name":"visual-performance-visual-87"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"3D rotation & depth"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope axes","controlKey":"visual-performance-visual.92","data-scope":"space","default":"flat","disabled":false,"label":"Axes","name":"visual-performance-visual-92","options":[{"label":"Stereo plane · L / R","value":"flat"},{"label":"Stereo + delayed L depth","value":"stereo-depth"},{"label":"Delay space · L / Lτ / L2τ","value":"delay"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Depth delay milliseconds","controlKey":"visual-performance-visual.94","data-scope":"delay","default":"1","disabled":false,"kind":"range","label":"Delay ms","max":"5","min":"0.1","name":"visual-performance-visual-94","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope projection","controlKey":"visual-performance-visual.96","data-scope":"projection","default":"orthographic","disabled":false,"label":"Projection","name":"visual-performance-visual-96","options":[{"label":"Orthographic","value":"orthographic"},{"label":"Perspective","value":"perspective"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope rotation X","controlKey":"visual-performance-visual.98","data-scope":"rotate-x","default":"0","disabled":false,"kind":"range","label":"Rotate X","max":"180","min":"-180","name":"visual-performance-visual-98","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope rotation Y","controlKey":"visual-performance-visual.100","data-scope":"rotate-y","default":"0","disabled":false,"kind":"range","label":"Rotate Y","max":"180","min":"-180","name":"visual-performance-visual-100","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope rotation Z","controlKey":"visual-performance-visual.102","data-scope":"rotate-z","default":"0","disabled":false,"kind":"range","label":"Rotate Z","max":"180","min":"-180","name":"visual-performance-visual-102","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.103","data-scope":"reset-view","disabled":false,"label":"Reset rotation"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"text":"Depth is derived from delayed audio, not a third input channel. Projection changes the picture only; waveform view ignores these controls.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-fields","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-spatial","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-section","element":"fieldset"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-display-settings","data-visual-for":"scope geometry field trace","element":"details","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"default":-25.0,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"yaw","read":"number"},"kind":"range","label":"Spectrum orbit","max":180.0,"min":-180.0,"name":"virtual-spectrum-yaw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":35.0,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"tilt","read":"number"},"kind":"range","label":"Spectrum tilt","max":80.0,"min":5.0,"name":"virtual-spectrum-tilt","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.5,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"height","read":"number"},"kind":"range","label":"Spectrum height","max":3.0,"min":0.2,"name":"virtual-spectrum-height","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.3,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"opacity","read":"number"},"kind":"range","label":"Video mix","max":0.8,"min":0.0,"name":"virtual-spectrum-opacity","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"change","initialize":true,"key":"frozen","read":"checked"},"label":"Freeze spectrum","name":"virtual-spectrum-frozen"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.clear","event":"click"},"id":"virtual-spectrum-clear","label":"Clear history"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.camera","event":"click"},"id":"virtual-spectrum-camera","label":"Use camera"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.video-stop","event":"click"},"id":"virtual-spectrum-video-stop","label":"Stop video"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"accept":"video/*","disabled":true,"hostBinding":{"action":"virtual.spectrogram.file","event":"change","read":"file"},"kind":"file","label":"Local video","name":"virtual-spectrum-file"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-spectrum-status","role":"status","text":"Frequency left to right · level in height and color · six seconds of measured history in depth."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"videoStatus","id":"virtual-spectrum-videoStatus","role":"status","text":"Local picture only. Video loops freely; camera stops when this view is hidden. No upload or video audio."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"virtual.spectrogram","hostInitial":{"frozen":false,"height":1.5,"opacity":0.3,"tilt":35.0,"yaw":-25.0},"hostLimits":{"height":[0.2,3.0],"opacity":[0.0,0.8],"tilt":[5.0,80.0],"yaw":[-180.0,180.0]},"hostVersion":1,"id":"virtual-spectrum","title":"Virtual · frequency landscape & video"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.spectrogram\",\"source_hash\":\"b5ca5478f57926ed995aeb344a15b8bb6487ab4e4ca9f0b9e858937d5b3b015d\",\"context_hash\":\"ac2653378140b7020e1b10976d97e196a56daac74580d42e4787381d3c14ba97\",\"tree_hash\":\"611f1135776cbd2dada96963f086ee96b20c59111037a402533c6dd3ee375e85\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":-25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"yaw\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Spectrum orbit\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-spectrum-yaw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":35.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"tilt\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Spectrum tilt\\\",\\\"max\\\":80.0,\\\"min\\\":5.0,\\\"name\\\":\\\"virtual-spectrum-tilt\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"height\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Spectrum height\\\",\\\"max\\\":3.0,\\\"min\\\":0.2,\\\"name\\\":\\\"virtual-spectrum-height\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.3,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"opacity\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Video mix\\\",\\\"max\\\":0.8,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-spectrum-opacity\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"frozen\\\",\\\"read\\\":\\\"checked\\\"},\\\"label\\\":\\\"Freeze spectrum\\\",\\\"name\\\":\\\"virtual-spectrum-frozen\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.clear\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-spectrum-clear\\\",\\\"label\\\":\\\"Clear history\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.camera\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-spectrum-camera\\\",\\\"label\\\":\\\"Use camera\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.video-stop\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-spectrum-video-stop\\\",\\\"label\\\":\\\"Stop video\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"accept\\\":\\\"video/*\\\",\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.file\\\",\\\"event\\\":\\\"change\\\",\\\"read\\\":\\\"file\\\"},\\\"kind\\\":\\\"file\\\",\\\"label\\\":\\\"Local video\\\",\\\"name\\\":\\\"virtual-spectrum-file\\\"},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-spectrum-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Frequency left to right · level in height and color · six seconds of measured history in depth.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"videoStatus\\\",\\\"id\\\":\\\"virtual-spectrum-videoStatus\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Local picture only. Video loops freely; camera stops when this view is hidden. No upload or video audio.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.spectrogram\\\",\\\"hostInitial\\\":{\\\"frozen\\\":false,\\\"height\\\":1.5,\\\"opacity\\\":0.3,\\\"tilt\\\":35.0,\\\"yaw\\\":-25.0},\\\"hostLimits\\\":{\\\"height\\\":[0.2,3.0],\\\"opacity\\\":[0.0,0.8],\\\"tilt\\\":[5.0,80.0],\\\"yaw\\\":[-180.0,180.0]},\\\"hostVersion\\\":1,\\\"id\\\":\\\"virtual-spectrum\\\",\\\"title\\\":\\\"Virtual · frequency landscape & video\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":-25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"yaw\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Spectrum orbit\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-spectrum-yaw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":35.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"tilt\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Spectrum tilt\",\"max\":80.0,\"min\":5.0,\"name\":\"virtual-spectrum-tilt\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"height\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Spectrum height\",\"max\":3.0,\"min\":0.2,\"name\":\"virtual-spectrum-height\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.3,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"opacity\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Video mix\",\"max\":0.8,\"min\":0.0,\"name\":\"virtual-spectrum-opacity\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"frozen\",\"read\":\"checked\"},\"label\":\"Freeze spectrum\",\"name\":\"virtual-spectrum-frozen\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.clear\",\"event\":\"click\"},\"id\":\"virtual-spectrum-clear\",\"label\":\"Clear history\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.camera\",\"event\":\"click\"},\"id\":\"virtual-spectrum-camera\",\"label\":\"Use camera\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.video-stop\",\"event\":\"click\"},\"id\":\"virtual-spectrum-video-stop\",\"label\":\"Stop video\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"accept\":\"video/*\",\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.file\",\"event\":\"change\",\"read\":\"file\"},\"kind\":\"file\",\"label\":\"Local video\",\"name\":\"virtual-spectrum-file\"},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-spectrum-status\",\"role\":\"status\",\"text\":\"Frequency left to right · level in height and color · six seconds of measured history in depth.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"videoStatus\",\"id\":\"virtual-spectrum-videoStatus\",\"role\":\"status\",\"text\":\"Local picture only. Video loops freely; camera stops when this view is hidden. No upload or video audio.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.spectrogram\",\"hostInitial\":{\"frozen\":false,\"height\":1.5,\"opacity\":0.3,\"tilt\":35.0,\"yaw\":-25.0},\"hostLimits\":{\"height\":[0.2,3.0],\"opacity\":[0.0,0.8],\"tilt\":[5.0,80.0],\"yaw\":[-180.0,180.0]},\"hostVersion\":1,\"id\":\"virtual-spectrum\",\"title\":\"Virtual · frequency landscape & video\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"611f1135776cbd2dada96963f086ee96b20c59111037a402533c6dd3ee375e85\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.spectrogram","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"data-spectrum-slot":true,"element":"div","hidden":true},"tag":"Section"}],"kind":"view-node","props":{"data-visual-for":"spectrum","element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"MIDI & spatial audio"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.110","data-scope":"midi-scan","disabled":false,"label":"Scan MIDI inputs"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Vector MIDI input","controlKey":"visual-performance-visual.111","data-scope":"midi-port","default":"","disabled":false,"label":"Vector MIDI input","name":"visual-performance-visual-111","options":[{"label":"Scan for a device","value":""}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.112","data-scope":"midi-connect","disabled":true,"label":"Connect MIDI"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"MIDI controller profile","controlKey":"visual-performance-visual.114","data-scope":"midi-profile","default":"keyboard","disabled":false,"label":"Controller","name":"visual-performance-visual-114","options":[{"label":"Keyboard · notes & bend","value":"keyboard"},{"label":"Theremini · antenna CCs","value":"theremini"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna MIDI channel","controlKey":"visual-performance-visual.117","data-scope":"midi-channel","default":"1","disabled":false,"kind":"number","label":"Channel","max":"16","min":"1","name":"visual-performance-visual-117"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Pitch antenna CC","controlKey":"visual-performance-visual.119","data-scope":"pitch-cc","default":"20","disabled":false,"kind":"number","label":"Pitch CC","max":"119","min":"0","name":"visual-performance-visual-119"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Volume antenna CC","controlKey":"visual-performance-visual.121","data-scope":"volume-cc","default":"2","disabled":false,"kind":"number","label":"Volume CC","max":"119","min":"0","name":"visual-performance-visual-121"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna CC resolution","controlKey":"visual-performance-visual.123","data-scope":"cc-bits","default":"7","disabled":false,"label":"Resolution","name":"visual-performance-visual-123","options":[{"label":"7-bit","value":"7"},{"label":"14-bit CC pairs","value":"14"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna low frequency","controlKey":"visual-performance-visual.125","data-scope":"low-hz","default":"55","disabled":false,"kind":"number","label":"Low Hz","max":"1999","min":"20","name":"visual-performance-visual-125"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna high frequency","controlKey":"visual-performance-visual.127","data-scope":"high-hz","default":"1760","disabled":false,"kind":"number","label":"High Hz","max":"2000","min":"21","name":"visual-performance-visual-127"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Match the instrument’s MIDI CC OUT settings. Default: channel 1, pitch CC20, volume CC2, 7-bit. This plays CRE8’s geometry voice; USB MIDI does not carry the Theremini’s own audio.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-fields","data-theremini-mapping":true,"element":"div","hidden":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-scope":"midi-status","role":"status","text":"Select a controller profile, scan, then connect. Keyboard: notes, bend ±2, CC1 morph and CC74 motion. Theremini: continuous antenna pitch and level.","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.131","data-scope":"spatial","default":false,"disabled":false,"label":"Spatial audio (HRTF)","name":"visual-performance-visual-131"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Instrument azimuth","controlKey":"visual-performance-visual.133","data-scope":"azimuth","default":"0","disabled":false,"kind":"range","label":"Azimuth","max":"180","min":"-180","name":"visual-performance-visual-133"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.135","data-scope":"antenna-space","default":false,"disabled":false,"label":"MIDI pitch moves left ↔ right","name":"visual-performance-visual-135"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Headphones reveal spatial placement. HRTF changes the monitored stereo signal; instrument WAV export stays dry.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-fields","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-midi","data-visual-for":"geometry field","element":"details","hidden":true},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-controls","data-scope":"controls","element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-visual":"lock","text":"Locked to the transport · stopped","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-visual-lock","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Shader editor"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.effect","event":"change","key":"effect","read":"text"},"hostOutputs":{"options":"effects","value":"effect"},"label":"Shader effect","name":"virtual-shader-effect","options":[{"label":"NEBULA","value":"NEBULA"},{"label":"SPECTRUM TUNNEL","value":"SPECTRUM TUNNEL"},{"label":"LATTICE","value":"LATTICE"},{"label":"WAVEFORM HALO","value":"WAVEFORM HALO"},{"label":"PLASMA","value":"PLASMA"},{"label":"POLAR EQ","value":"POLAR EQ"},{"label":"OSCILLOSCOPE","value":"OSCILLOSCOPE"},{"label":"VORONOI","value":"VORONOI"},{"label":"STARFIELD","value":"STARFIELD"},{"label":"FLOW FIELD","value":"FLOW FIELD"},{"label":"KALEIDO","value":"KALEIDO"},{"label":"METABALLS","value":"METABALLS"},{"label":"CONTOUR BLOOM","value":"CONTOUR BLOOM"},{"label":"AURORA CURTAINS","value":"AURORA CURTAINS"},{"label":"HARMONIC RIBBONS","value":"HARMONIC RIBBONS"},{"label":"CYMATIC PLATE","value":"CYMATIC PLATE"},{"label":"SPECTRAL DUNES","value":"SPECTRAL DUNES"},{"label":"PRISM ORBIT","value":"PRISM ORBIT"},{"label":"CONTOUR KNOT","value":"CONTOUR KNOT"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.auto","event":"change","key":"auto","read":"checked"},"hostOutputs":{"checked":"auto"},"label":"Auto-cycle every four bars","name":"virtual-shader-auto"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.projector","event":"click"},"id":"virtual-shader-projector","label":"Send to projector"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.apply","event":"click"},"id":"virtual-shader-apply","label":"Apply effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.revert","event":"click"},"id":"virtual-shader-revert","label":"Restore starter effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"text":"Effect source · GLSL ES 3.0 · Ctrl / ⌘ Enter applies the effect."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostBinding":{"action":"virtual.shader.source","event":"input","key":"source","maxLength":65536,"read":"text"},"hostEditor":true,"hostOutputs":{"errorLine":"errorLine","value":"source"},"hostShortcut":"virtual.shader.apply","html":"<div class=\"ssr-code-editor\" data-ssr-code-editor=\"glsl\">\n<style>.ssr-code-editor{min-width:0}.ssr-code-frame{display:flex;position:relative;overflow:hidden;background:#031013;border:1px solid #355a51;border-radius:8px}\n.ssr-code-gutter{position:relative;flex:0 0 42px;overflow:hidden;text-align:right;background:#07191b;color:#70938b;user-select:none}\n.ssr-code-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box;padding:14px 8px 14px 0;margin:0;font:12px/21px ui-monospace,monospace;white-space:pre}\n.ssr-code-surface{position:relative;flex:1;min-width:0;overflow:hidden}\n.ssr-code-surface textarea,.ssr-code-surface>pre{box-sizing:border-box;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;font:12px/21px ui-monospace,monospace;letter-spacing:normal;tab-size:2;white-space:pre;overflow-wrap:normal}\n.ssr-code-surface textarea{display:block;position:relative;width:100%;min-height:390px;resize:vertical;color:#d0eddf;caret-color:#e4f7ee;outline-offset:-2px}\n.ssr-code-surface>pre{display:none;position:absolute;top:0;left:0;min-width:100%;pointer-events:none;color:#d0eddf}\n.ssr-code-frame.is-enhanced .ssr-code-surface>pre{display:block}\n.ssr-code-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}\n.ssr-code-frame.is-enhanced textarea::selection{background:#bcee8340}\n.ssr-code-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 2px;color:#89aaa0;font:10px/1.5 ui-monospace,monospace}\n.ssr-code-token--keyword{color:#c2ef8b}.ssr-code-token--type{color:#91dcd1}.ssr-code-token--builtin{color:#bfaeff}.ssr-code-token--number{color:#f5c187}.ssr-code-token--comment{color:#789c92}.ssr-code-token--attribute{color:#edaccc}.ssr-code-token--string{color:#edc589}\n.ssr-code-frame[data-error=true]{border-color:#f0a28e}.ssr-code-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}\n@media(max-width:540px){.ssr-code-gutter{flex-basis:32px}.ssr-code-footer{font-size:9px}}\n.ssr-code-navigation,.ssr-code-find{padding:10px 12px;background:#0b1d19;border-top:1px solid #29453b;font:11px/1.5 system-ui;color:#adcbbf}\n.ssr-code-navigation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.ssr-code-navigation button,.ssr-code-find button{cursor:pointer;padding:5px 9px;border:1px solid #36584b;border-radius:6px;background:#122b24;color:#d5eadf;font:inherit}\n.ssr-code-navigation button:disabled,.ssr-code-find button:disabled{opacity:.45;cursor:default}\n.ssr-code-navigation input,.ssr-code-query input{box-sizing:border-box;border:1px solid #3e6153;border-radius:5px;background:#061410;color:#e4f4e7;padding:5px 7px;font:inherit;min-width:0}\n.ssr-code-navigation input{width:68px}.ssr-code-navigation kbd{font:9px ui-monospace,monospace;color:#87a498}\n.ssr-code-navigation [data-code=navigation-status]{font-size:10px;flex-basis:100%;empty-cells:hide}\n.ssr-code-navigation [data-code=navigation-status]:empty{display:none}\n.ssr-code-navigation input[aria-invalid=true]{border-color:#f0a28e}\n.ssr-code-find[hidden]{display:none}.ssr-code-find{display:grid;gap:8px}\n.ssr-code-query{display:flex;align-items:center;gap:8px}.ssr-code-query input{flex:1;width:100%}\n.ssr-code-find-options,.ssr-code-find-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n.ssr-code-find-options label{display:flex;align-items:center;gap:5px}.ssr-code-find-options input{accent-color:#c2ef8b}\n.ssr-code-find-actions [data-code=find-close]{margin-left:auto}.ssr-code-find-actions [data-code=find-count]{font:10px ui-monospace,monospace}\n.ssr-code-match{background:#786a235c}.ssr-code-match-active{background:#8f6a3280;box-shadow:inset 0 -2px #edcc7a}\n.ssr-code-navigation :focus-visible,.ssr-code-find :focus-visible{outline:2px solid #c2ef8b;outline-offset:2px}\n.ssr-code-replace{display:grid;gap:8px;border-top:1px solid #29453b;padding-top:10px}.ssr-code-replace[hidden]{display:none}\n.ssr-code-replace [data-code=replace-status]{font-size:10px;color:#a8c7ba}.ssr-code-query>span{flex-shrink:0}\n</style>\n<div class=\"ssr-code-navigation\" role=\"group\" aria-label=\"Code navigation\">\n  <button type=\"button\" data-code=\"find-toggle\" data-code-nav-control aria-expanded=\"false\" aria-controls=\"virtual-shader-source-find\" title=\"Find (Ctrl or Command F); F3 next, Shift F3 previous\" disabled>Find <kbd>⌘/Ctrl F</kbd></button>\n  <label for=\"virtual-shader-source-line\">Line</label><input id=\"virtual-shader-source-line\" data-code=\"goto-line\" data-code-nav-control type=\"number\" min=\"1\" step=\"1\" value=\"1\" aria-describedby=\"virtual-shader-source-navigation-status\" title=\"Go to line (Ctrl or Command G)\" disabled><button type=\"button\" data-code=\"goto-submit\" data-code-nav-control disabled>Go</button>\n  <span id=\"virtual-shader-source-navigation-status\" data-code=\"navigation-status\" role=\"status\" aria-live=\"polite\"></span>\n</div>\n<div id=\"virtual-shader-source-find\" class=\"ssr-code-find\" data-code=\"find-bar\" role=\"search\" aria-label=\"Find in code\" hidden>\n  <label class=\"ssr-code-query\"><span>Find text</span><input data-code=\"find-query\" data-code-nav-control type=\"search\" maxlength=\"1024\" autocomplete=\"off\" spellcheck=\"false\" disabled></label>\n  <div class=\"ssr-code-find-options\"><label><input data-code=\"find-case\" data-code-nav-control type=\"checkbox\" disabled>Match case</label><label><input data-code=\"find-word\" data-code-nav-control type=\"checkbox\" disabled>Whole word</label></div>\n  <div class=\"ssr-code-find-actions\"><button type=\"button\" data-code=\"find-prev\" data-code-nav-control aria-label=\"Previous match\" disabled>↑</button><button type=\"button\" data-code=\"find-next\" data-code-nav-control aria-label=\"Next match\" disabled>↓</button><span data-code=\"find-count\" role=\"status\" aria-live=\"polite\">Type to find</span><button type=\"button\" data-code=\"replace-toggle\" data-code-nav-control aria-expanded=\"false\" aria-controls=\"virtual-shader-source-replace\" disabled>Replace…</button><button type=\"button\" data-code=\"find-close\" data-code-nav-control aria-label=\"Close find\" disabled>Close</button></div>\n  <div id=\"virtual-shader-source-replace\" class=\"ssr-code-replace\" data-code=\"replace-bar\" hidden>\n    <label class=\"ssr-code-query\"><span>Replace with</span><input data-code=\"replace-query\" data-code-nav-control type=\"text\" maxlength=\"65536\" autocomplete=\"off\" spellcheck=\"false\" disabled></label>\n    <div class=\"ssr-code-find-actions\"><button type=\"button\" data-code=\"replace-one\" data-code-nav-control disabled>Replace</button><button type=\"button\" data-code=\"replace-all\" data-code-nav-control disabled>Replace all</button><button type=\"button\" data-code=\"replace-undo\" data-code-nav-control disabled>Undo replacement</button></div>\n    <span data-code=\"replace-status\" role=\"status\" aria-live=\"polite\">Replacement is literal. An empty value deletes matches.</span>\n  </div>\n</div>\n<div class=\"ssr-code-frame\" data-code=\"frame\">\n  <div class=\"ssr-code-gutter\" aria-hidden=\"true\"><pre data-code=\"lines\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24</pre></div>\n  <div class=\"ssr-code-surface\"><pre data-code=\"highlight\" aria-hidden=\"true\"></pre><textarea disabled aria-label=\"Code source\" id=\"virtual-shader-source\" data-code=\"source\" rows=\"18\" maxlength=\"65536\" wrap=\"off\" spellcheck=\"false\" autocapitalize=\"off\" autocomplete=\"off\" aria-describedby=\"virtual-shader-help virtual-shader-source-keys\">// Bar-locked rings. Every input below comes from the score you are playing.\nvoid main(){\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\n  float r=length(uv);\n\n  // One ring per beat, pushed outward by the transport&#39;s own beat phase.\n  float ring=fract(r*3.0-uBeatPhase);\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\n\n  // The bar advances the hue, so the picture shows its place in the loop.\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\n\n  // Pads wash the frame; melody and arp sparkle over it.\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\n\n  // A scored hit lands as a flash and a kick of brightness, then decays.\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\n  col*=1.+.35*uParts.x*uOnset;\n\n  col*=smoothstep(1.35,.25,r);\n  fragColor=vec4(col,1.);\n}</textarea></div>\n</div>\n<div class=\"ssr-code-footer\"><span data-code=\"cursor\">Ln 1 · Col 1</span><span id=\"virtual-shader-source-keys\">Tab indent · Ctrl/⌘ / comment · Esc then Tab to leave</span></div>\n</div>","id":"virtual-shader-source"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-shader-status","role":"status","text":"Starting the visualizer…"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"id":"virtual-shader-help","text":"Write a void main() body. The shared prelude provides uniforms and spec(), wav(), hsv(), pal(), rot(), noise(), fbm(), smin(), sdCircle() and sdBox(). A compile error keeps the running picture."},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Shader inputs"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"uBar — Bar number the transport is on, counting from 1; 0 when stopped."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBarPhase — 0..1 sawtooth across one bar."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBass — Measured low-band energy, 0..1 (smoothed)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBeat — Envelope that pops to 1 on a bass transient and decays."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBeatPhase — 0..1 sawtooth across one beat."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uCentroid — Spectral centroid (brightness), 0..1."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uLvl — Alias of uRms, kept for the original effects."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uMid — Measured mid-band energy, 0..1 (smoothed)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uOnset — 1 on a scored note or drum hit, decaying to 0."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uParts — Score energy per part: x drums, y bass, z pads, w melody+arp."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uRes — Canvas size in pixels (vec2)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uRms — Measured waveform level, 0..1 (smoothed)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uSpec — Two-row texture: row 0 spectrum, row 1 waveform (use spec()/wav())."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTempo — Beats per minute of the running score."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTime — Seconds since the visualizer was created."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTre — Alias of uTreble, kept for the original effects."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTreble — Measured high-band energy, 0..1 (smoothed)."},"tag":"Text"}],"kind":"view-node","props":{"title":"Shader inputs"},"tag":"Card"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"}],"kind":"view-node","props":{"hostCapability":"virtual.shader-studio","hostInitial":{"source":"// Bar-locked rings. Every input below comes from the score you are playing.\nvoid main(){\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\n  float r=length(uv);\n\n  // One ring per beat, pushed outward by the transport's own beat phase.\n  float ring=fract(r*3.0-uBeatPhase);\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\n\n  // The bar advances the hue, so the picture shows its place in the loop.\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\n\n  // Pads wash the frame; melody and arp sparkle over it.\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\n\n  // A scored hit lands as a flash and a kick of brightness, then decays.\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\n  col*=1.+.35*uParts.x*uOnset;\n\n  col*=smoothstep(1.35,.25,r);\n  fragColor=vec4(col,1.);\n}"},"hostVersion":1,"title":"Shader studio"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.shader-studio\",\"source_hash\":\"79f254ae041a9a0c60332339965ce014249c90cbb9f5fa45b7e7b25aa22ce571\",\"context_hash\":\"e53384975d531088890d0f5c789834494bac395897904a7a42ad86740ed2c09c\",\"tree_hash\":\"05086bd41452445fac8745b00e554c7ecb34aa71bf39188d0ba3fcadc93efff3\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.effect\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"effect\\\",\\\"read\\\":\\\"text\\\"},\\\"hostOutputs\\\":{\\\"options\\\":\\\"effects\\\",\\\"value\\\":\\\"effect\\\"},\\\"label\\\":\\\"Shader effect\\\",\\\"name\\\":\\\"virtual-shader-effect\\\",\\\"options\\\":[{\\\"label\\\":\\\"NEBULA\\\",\\\"value\\\":\\\"NEBULA\\\"},{\\\"label\\\":\\\"SPECTRUM TUNNEL\\\",\\\"value\\\":\\\"SPECTRUM TUNNEL\\\"},{\\\"label\\\":\\\"LATTICE\\\",\\\"value\\\":\\\"LATTICE\\\"},{\\\"label\\\":\\\"WAVEFORM HALO\\\",\\\"value\\\":\\\"WAVEFORM HALO\\\"},{\\\"label\\\":\\\"PLASMA\\\",\\\"value\\\":\\\"PLASMA\\\"},{\\\"label\\\":\\\"POLAR EQ\\\",\\\"value\\\":\\\"POLAR EQ\\\"},{\\\"label\\\":\\\"OSCILLOSCOPE\\\",\\\"value\\\":\\\"OSCILLOSCOPE\\\"},{\\\"label\\\":\\\"VORONOI\\\",\\\"value\\\":\\\"VORONOI\\\"},{\\\"label\\\":\\\"STARFIELD\\\",\\\"value\\\":\\\"STARFIELD\\\"},{\\\"label\\\":\\\"FLOW FIELD\\\",\\\"value\\\":\\\"FLOW FIELD\\\"},{\\\"label\\\":\\\"KALEIDO\\\",\\\"value\\\":\\\"KALEIDO\\\"},{\\\"label\\\":\\\"METABALLS\\\",\\\"value\\\":\\\"METABALLS\\\"},{\\\"label\\\":\\\"CONTOUR BLOOM\\\",\\\"value\\\":\\\"CONTOUR BLOOM\\\"},{\\\"label\\\":\\\"AURORA CURTAINS\\\",\\\"value\\\":\\\"AURORA CURTAINS\\\"},{\\\"label\\\":\\\"HARMONIC RIBBONS\\\",\\\"value\\\":\\\"HARMONIC RIBBONS\\\"},{\\\"label\\\":\\\"CYMATIC PLATE\\\",\\\"value\\\":\\\"CYMATIC PLATE\\\"},{\\\"label\\\":\\\"SPECTRAL DUNES\\\",\\\"value\\\":\\\"SPECTRAL DUNES\\\"},{\\\"label\\\":\\\"PRISM ORBIT\\\",\\\"value\\\":\\\"PRISM ORBIT\\\"},{\\\"label\\\":\\\"CONTOUR KNOT\\\",\\\"value\\\":\\\"CONTOUR KNOT\\\"}]},\\\"tag\\\":\\\"Select\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.auto\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"auto\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"auto\\\"},\\\"label\\\":\\\"Auto-cycle every four bars\\\",\\\"name\\\":\\\"virtual-shader-auto\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.projector\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-shader-projector\\\",\\\"label\\\":\\\"Send to projector\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.apply\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-shader-apply\\\",\\\"label\\\":\\\"Apply effect\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.revert\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-shader-revert\\\",\\\"label\\\":\\\"Restore starter effect\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Effect source · GLSL ES 3.0 · Ctrl / ⌘ Enter applies the effect.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.source\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"source\\\",\\\"maxLength\\\":65536,\\\"read\\\":\\\"text\\\"},\\\"hostEditor\\\":true,\\\"hostOutputs\\\":{\\\"errorLine\\\":\\\"errorLine\\\",\\\"value\\\":\\\"source\\\"},\\\"hostShortcut\\\":\\\"virtual.shader.apply\\\",\\\"html\\\":\\\"<div class=\\\\\\\"ssr-code-editor\\\\\\\" data-ssr-code-editor=\\\\\\\"glsl\\\\\\\">\\\\n<style>.ssr-code-editor{min-width:0}.ssr-code-frame{display:flex;position:relative;overflow:hidden;background:#031013;border:1px solid #355a51;border-radius:8px}\\\\n.ssr-code-gutter{position:relative;flex:0 0 42px;overflow:hidden;text-align:right;background:#07191b;color:#70938b;user-select:none}\\\\n.ssr-code-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box;padding:14px 8px 14px 0;margin:0;font:12px/21px ui-monospace,monospace;white-space:pre}\\\\n.ssr-code-surface{position:relative;flex:1;min-width:0;overflow:hidden}\\\\n.ssr-code-surface textarea,.ssr-code-surface>pre{box-sizing:border-box;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;font:12px/21px ui-monospace,monospace;letter-spacing:normal;tab-size:2;white-space:pre;overflow-wrap:normal}\\\\n.ssr-code-surface textarea{display:block;position:relative;width:100%;min-height:390px;resize:vertical;color:#d0eddf;caret-color:#e4f7ee;outline-offset:-2px}\\\\n.ssr-code-surface>pre{display:none;position:absolute;top:0;left:0;min-width:100%;pointer-events:none;color:#d0eddf}\\\\n.ssr-code-frame.is-enhanced .ssr-code-surface>pre{display:block}\\\\n.ssr-code-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}\\\\n.ssr-code-frame.is-enhanced textarea::selection{background:#bcee8340}\\\\n.ssr-code-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 2px;color:#89aaa0;font:10px/1.5 ui-monospace,monospace}\\\\n.ssr-code-token--keyword{color:#c2ef8b}.ssr-code-token--type{color:#91dcd1}.ssr-code-token--builtin{color:#bfaeff}.ssr-code-token--number{color:#f5c187}.ssr-code-token--comment{color:#789c92}.ssr-code-token--attribute{color:#edaccc}.ssr-code-token--string{color:#edc589}\\\\n.ssr-code-frame[data-error=true]{border-color:#f0a28e}.ssr-code-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}\\\\n@media(max-width:540px){.ssr-code-gutter{flex-basis:32px}.ssr-code-footer{font-size:9px}}\\\\n.ssr-code-navigation,.ssr-code-find{padding:10px 12px;background:#0b1d19;border-top:1px solid #29453b;font:11px/1.5 system-ui;color:#adcbbf}\\\\n.ssr-code-navigation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\\\\n.ssr-code-navigation button,.ssr-code-find button{cursor:pointer;padding:5px 9px;border:1px solid #36584b;border-radius:6px;background:#122b24;color:#d5eadf;font:inherit}\\\\n.ssr-code-navigation button:disabled,.ssr-code-find button:disabled{opacity:.45;cursor:default}\\\\n.ssr-code-navigation input,.ssr-code-query input{box-sizing:border-box;border:1px solid #3e6153;border-radius:5px;background:#061410;color:#e4f4e7;padding:5px 7px;font:inherit;min-width:0}\\\\n.ssr-code-navigation input{width:68px}.ssr-code-navigation kbd{font:9px ui-monospace,monospace;color:#87a498}\\\\n.ssr-code-navigation [data-code=navigation-status]{font-size:10px;flex-basis:100%;empty-cells:hide}\\\\n.ssr-code-navigation [data-code=navigation-status]:empty{display:none}\\\\n.ssr-code-navigation input[aria-invalid=true]{border-color:#f0a28e}\\\\n.ssr-code-find[hidden]{display:none}.ssr-code-find{display:grid;gap:8px}\\\\n.ssr-code-query{display:flex;align-items:center;gap:8px}.ssr-code-query input{flex:1;width:100%}\\\\n.ssr-code-find-options,.ssr-code-find-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\\\\n.ssr-code-find-options label{display:flex;align-items:center;gap:5px}.ssr-code-find-options input{accent-color:#c2ef8b}\\\\n.ssr-code-find-actions [data-code=find-close]{margin-left:auto}.ssr-code-find-actions [data-code=find-count]{font:10px ui-monospace,monospace}\\\\n.ssr-code-match{background:#786a235c}.ssr-code-match-active{background:#8f6a3280;box-shadow:inset 0 -2px #edcc7a}\\\\n.ssr-code-navigation :focus-visible,.ssr-code-find :focus-visible{outline:2px solid #c2ef8b;outline-offset:2px}\\\\n.ssr-code-replace{display:grid;gap:8px;border-top:1px solid #29453b;padding-top:10px}.ssr-code-replace[hidden]{display:none}\\\\n.ssr-code-replace [data-code=replace-status]{font-size:10px;color:#a8c7ba}.ssr-code-query>span{flex-shrink:0}\\\\n</style>\\\\n<div class=\\\\\\\"ssr-code-navigation\\\\\\\" role=\\\\\\\"group\\\\\\\" aria-label=\\\\\\\"Code navigation\\\\\\\">\\\\n  <button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-toggle\\\\\\\" data-code-nav-control aria-expanded=\\\\\\\"false\\\\\\\" aria-controls=\\\\\\\"virtual-shader-source-find\\\\\\\" title=\\\\\\\"Find (Ctrl or Command F); F3 next, Shift F3 previous\\\\\\\" disabled>Find <kbd>⌘/Ctrl F</kbd></button>\\\\n  <label for=\\\\\\\"virtual-shader-source-line\\\\\\\">Line</label><input id=\\\\\\\"virtual-shader-source-line\\\\\\\" data-code=\\\\\\\"goto-line\\\\\\\" data-code-nav-control type=\\\\\\\"number\\\\\\\" min=\\\\\\\"1\\\\\\\" step=\\\\\\\"1\\\\\\\" value=\\\\\\\"1\\\\\\\" aria-describedby=\\\\\\\"virtual-shader-source-navigation-status\\\\\\\" title=\\\\\\\"Go to line (Ctrl or Command G)\\\\\\\" disabled><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"goto-submit\\\\\\\" data-code-nav-control disabled>Go</button>\\\\n  <span id=\\\\\\\"virtual-shader-source-navigation-status\\\\\\\" data-code=\\\\\\\"navigation-status\\\\\\\" role=\\\\\\\"status\\\\\\\" aria-live=\\\\\\\"polite\\\\\\\"></span>\\\\n</div>\\\\n<div id=\\\\\\\"virtual-shader-source-find\\\\\\\" class=\\\\\\\"ssr-code-find\\\\\\\" data-code=\\\\\\\"find-bar\\\\\\\" role=\\\\\\\"search\\\\\\\" aria-label=\\\\\\\"Find in code\\\\\\\" hidden>\\\\n  <label class=\\\\\\\"ssr-code-query\\\\\\\"><span>Find text</span><input data-code=\\\\\\\"find-query\\\\\\\" data-code-nav-control type=\\\\\\\"search\\\\\\\" maxlength=\\\\\\\"1024\\\\\\\" autocomplete=\\\\\\\"off\\\\\\\" spellcheck=\\\\\\\"false\\\\\\\" disabled></label>\\\\n  <div class=\\\\\\\"ssr-code-find-options\\\\\\\"><label><input data-code=\\\\\\\"find-case\\\\\\\" data-code-nav-control type=\\\\\\\"checkbox\\\\\\\" disabled>Match case</label><label><input data-code=\\\\\\\"find-word\\\\\\\" data-code-nav-control type=\\\\\\\"checkbox\\\\\\\" disabled>Whole word</label></div>\\\\n  <div class=\\\\\\\"ssr-code-find-actions\\\\\\\"><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-prev\\\\\\\" data-code-nav-control aria-label=\\\\\\\"Previous match\\\\\\\" disabled>↑</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-next\\\\\\\" data-code-nav-control aria-label=\\\\\\\"Next match\\\\\\\" disabled>↓</button><span data-code=\\\\\\\"find-count\\\\\\\" role=\\\\\\\"status\\\\\\\" aria-live=\\\\\\\"polite\\\\\\\">Type to find</span><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-toggle\\\\\\\" data-code-nav-control aria-expanded=\\\\\\\"false\\\\\\\" aria-controls=\\\\\\\"virtual-shader-source-replace\\\\\\\" disabled>Replace…</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-close\\\\\\\" data-code-nav-control aria-label=\\\\\\\"Close find\\\\\\\" disabled>Close</button></div>\\\\n  <div id=\\\\\\\"virtual-shader-source-replace\\\\\\\" class=\\\\\\\"ssr-code-replace\\\\\\\" data-code=\\\\\\\"replace-bar\\\\\\\" hidden>\\\\n    <label class=\\\\\\\"ssr-code-query\\\\\\\"><span>Replace with</span><input data-code=\\\\\\\"replace-query\\\\\\\" data-code-nav-control type=\\\\\\\"text\\\\\\\" maxlength=\\\\\\\"65536\\\\\\\" autocomplete=\\\\\\\"off\\\\\\\" spellcheck=\\\\\\\"false\\\\\\\" disabled></label>\\\\n    <div class=\\\\\\\"ssr-code-find-actions\\\\\\\"><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-one\\\\\\\" data-code-nav-control disabled>Replace</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-all\\\\\\\" data-code-nav-control disabled>Replace all</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-undo\\\\\\\" data-code-nav-control disabled>Undo replacement</button></div>\\\\n    <span data-code=\\\\\\\"replace-status\\\\\\\" role=\\\\\\\"status\\\\\\\" aria-live=\\\\\\\"polite\\\\\\\">Replacement is literal. An empty value deletes matches.</span>\\\\n  </div>\\\\n</div>\\\\n<div class=\\\\\\\"ssr-code-frame\\\\\\\" data-code=\\\\\\\"frame\\\\\\\">\\\\n  <div class=\\\\\\\"ssr-code-gutter\\\\\\\" aria-hidden=\\\\\\\"true\\\\\\\"><pre data-code=\\\\\\\"lines\\\\\\\">1\\\\n2\\\\n3\\\\n4\\\\n5\\\\n6\\\\n7\\\\n8\\\\n9\\\\n10\\\\n11\\\\n12\\\\n13\\\\n14\\\\n15\\\\n16\\\\n17\\\\n18\\\\n19\\\\n20\\\\n21\\\\n22\\\\n23\\\\n24</pre></div>\\\\n  <div class=\\\\\\\"ssr-code-surface\\\\\\\"><pre data-code=\\\\\\\"highlight\\\\\\\" aria-hidden=\\\\\\\"true\\\\\\\"></pre><textarea disabled aria-label=\\\\\\\"Code source\\\\\\\" id=\\\\\\\"virtual-shader-source\\\\\\\" data-code=\\\\\\\"source\\\\\\\" rows=\\\\\\\"18\\\\\\\" maxlength=\\\\\\\"65536\\\\\\\" wrap=\\\\\\\"off\\\\\\\" spellcheck=\\\\\\\"false\\\\\\\" autocapitalize=\\\\\\\"off\\\\\\\" autocomplete=\\\\\\\"off\\\\\\\" aria-describedby=\\\\\\\"virtual-shader-help virtual-shader-source-keys\\\\\\\">// Bar-locked rings. Every input below comes from the score you are playing.\\\\nvoid main(){\\\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\\\n  float r=length(uv);\\\\n\\\\n  // One ring per beat, pushed outward by the transport&#39;s own beat phase.\\\\n  float ring=fract(r*3.0-uBeatPhase);\\\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\\\n\\\\n  // The bar advances the hue, so the picture shows its place in the loop.\\\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\\\n\\\\n  // Pads wash the frame; melody and arp sparkle over it.\\\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\\\n\\\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\\\n  col*=1.+.35*uParts.x*uOnset;\\\\n\\\\n  col*=smoothstep(1.35,.25,r);\\\\n  fragColor=vec4(col,1.);\\\\n}</textarea></div>\\\\n</div>\\\\n<div class=\\\\\\\"ssr-code-footer\\\\\\\"><span data-code=\\\\\\\"cursor\\\\\\\">Ln 1 · Col 1</span><span id=\\\\\\\"virtual-shader-source-keys\\\\\\\">Tab indent · Ctrl/⌘ / comment · Esc then Tab to leave</span></div>\\\\n</div>\\\",\\\"id\\\":\\\"virtual-shader-source\\\"},\\\"tag\\\":\\\"RawHtml\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-shader-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Starting the visualizer…\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"id\\\":\\\"virtual-shader-help\\\",\\\"text\\\":\\\"Write a void main() body. The shared prelude provides uniforms and spec(), wav(), hsv(), pal(), rot(), noise(), fbm(), smin(), sdCircle() and sdBox(). A compile error keeps the running picture.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Shader inputs\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"element\\\":\\\"summary\\\"},\\\"tag\\\":\\\"Section\\\"},{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBar — Bar number the transport is on, counting from 1; 0 when stopped.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBarPhase — 0..1 sawtooth across one bar.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBass — Measured low-band energy, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBeat — Envelope that pops to 1 on a bass transient and decays.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBeatPhase — 0..1 sawtooth across one beat.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uCentroid — Spectral centroid (brightness), 0..1.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uLvl — Alias of uRms, kept for the original effects.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uMid — Measured mid-band energy, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uOnset — 1 on a scored note or drum hit, decaying to 0.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uParts — Score energy per part: x drums, y bass, z pads, w melody+arp.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uRes — Canvas size in pixels (vec2).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uRms — Measured waveform level, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uSpec — Two-row texture: row 0 spectrum, row 1 waveform (use spec()/wav()).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTempo — Beats per minute of the running score.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTime — Seconds since the visualizer was created.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTre — Alias of uTreble, kept for the original effects.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTreble — Measured high-band energy, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"title\\\":\\\"Shader inputs\\\"},\\\"tag\\\":\\\"Card\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"element\\\":\\\"details\\\"},\\\"tag\\\":\\\"Section\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.shader-studio\\\",\\\"hostInitial\\\":{\\\"source\\\":\\\"// Bar-locked rings. Every input below comes from the score you are playing.\\\\nvoid main(){\\\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\\\n  float r=length(uv);\\\\n\\\\n  // One ring per beat, pushed outward by the transport's own beat phase.\\\\n  float ring=fract(r*3.0-uBeatPhase);\\\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\\\n\\\\n  // The bar advances the hue, so the picture shows its place in the loop.\\\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\\\n\\\\n  // Pads wash the frame; melody and arp sparkle over it.\\\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\\\n\\\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\\\n  col*=1.+.35*uParts.x*uOnset;\\\\n\\\\n  col*=smoothstep(1.35,.25,r);\\\\n  fragColor=vec4(col,1.);\\\\n}\\\"},\\\"hostVersion\\\":1,\\\"title\\\":\\\"Shader studio\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.effect\",\"event\":\"change\",\"key\":\"effect\",\"read\":\"text\"},\"hostOutputs\":{\"options\":\"effects\",\"value\":\"effect\"},\"label\":\"Shader effect\",\"name\":\"virtual-shader-effect\",\"options\":[{\"label\":\"NEBULA\",\"value\":\"NEBULA\"},{\"label\":\"SPECTRUM TUNNEL\",\"value\":\"SPECTRUM TUNNEL\"},{\"label\":\"LATTICE\",\"value\":\"LATTICE\"},{\"label\":\"WAVEFORM HALO\",\"value\":\"WAVEFORM HALO\"},{\"label\":\"PLASMA\",\"value\":\"PLASMA\"},{\"label\":\"POLAR EQ\",\"value\":\"POLAR EQ\"},{\"label\":\"OSCILLOSCOPE\",\"value\":\"OSCILLOSCOPE\"},{\"label\":\"VORONOI\",\"value\":\"VORONOI\"},{\"label\":\"STARFIELD\",\"value\":\"STARFIELD\"},{\"label\":\"FLOW FIELD\",\"value\":\"FLOW FIELD\"},{\"label\":\"KALEIDO\",\"value\":\"KALEIDO\"},{\"label\":\"METABALLS\",\"value\":\"METABALLS\"},{\"label\":\"CONTOUR BLOOM\",\"value\":\"CONTOUR BLOOM\"},{\"label\":\"AURORA CURTAINS\",\"value\":\"AURORA CURTAINS\"},{\"label\":\"HARMONIC RIBBONS\",\"value\":\"HARMONIC RIBBONS\"},{\"label\":\"CYMATIC PLATE\",\"value\":\"CYMATIC PLATE\"},{\"label\":\"SPECTRAL DUNES\",\"value\":\"SPECTRAL DUNES\"},{\"label\":\"PRISM ORBIT\",\"value\":\"PRISM ORBIT\"},{\"label\":\"CONTOUR KNOT\",\"value\":\"CONTOUR KNOT\"}]},\"tag\":\"Select\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.auto\",\"event\":\"change\",\"key\":\"auto\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"auto\"},\"label\":\"Auto-cycle every four bars\",\"name\":\"virtual-shader-auto\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.projector\",\"event\":\"click\"},\"id\":\"virtual-shader-projector\",\"label\":\"Send to projector\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.apply\",\"event\":\"click\"},\"id\":\"virtual-shader-apply\",\"label\":\"Apply effect\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.revert\",\"event\":\"click\"},\"id\":\"virtual-shader-revert\",\"label\":\"Restore starter effect\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Effect source · GLSL ES 3.0 · Ctrl / ⌘ Enter applies the effect.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostBinding\":{\"action\":\"virtual.shader.source\",\"event\":\"input\",\"key\":\"source\",\"maxLength\":65536,\"read\":\"text\"},\"hostEditor\":true,\"hostOutputs\":{\"errorLine\":\"errorLine\",\"value\":\"source\"},\"hostShortcut\":\"virtual.shader.apply\",\"html\":\"<div class=\\\"ssr-code-editor\\\" data-ssr-code-editor=\\\"glsl\\\">\\n<style>.ssr-code-editor{min-width:0}.ssr-code-frame{display:flex;position:relative;overflow:hidden;background:#031013;border:1px solid #355a51;border-radius:8px}\\n.ssr-code-gutter{position:relative;flex:0 0 42px;overflow:hidden;text-align:right;background:#07191b;color:#70938b;user-select:none}\\n.ssr-code-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box;padding:14px 8px 14px 0;margin:0;font:12px/21px ui-monospace,monospace;white-space:pre}\\n.ssr-code-surface{position:relative;flex:1;min-width:0;overflow:hidden}\\n.ssr-code-surface textarea,.ssr-code-surface>pre{box-sizing:border-box;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;font:12px/21px ui-monospace,monospace;letter-spacing:normal;tab-size:2;white-space:pre;overflow-wrap:normal}\\n.ssr-code-surface textarea{display:block;position:relative;width:100%;min-height:390px;resize:vertical;color:#d0eddf;caret-color:#e4f7ee;outline-offset:-2px}\\n.ssr-code-surface>pre{display:none;position:absolute;top:0;left:0;min-width:100%;pointer-events:none;color:#d0eddf}\\n.ssr-code-frame.is-enhanced .ssr-code-surface>pre{display:block}\\n.ssr-code-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}\\n.ssr-code-frame.is-enhanced textarea::selection{background:#bcee8340}\\n.ssr-code-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 2px;color:#89aaa0;font:10px/1.5 ui-monospace,monospace}\\n.ssr-code-token--keyword{color:#c2ef8b}.ssr-code-token--type{color:#91dcd1}.ssr-code-token--builtin{color:#bfaeff}.ssr-code-token--number{color:#f5c187}.ssr-code-token--comment{color:#789c92}.ssr-code-token--attribute{color:#edaccc}.ssr-code-token--string{color:#edc589}\\n.ssr-code-frame[data-error=true]{border-color:#f0a28e}.ssr-code-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}\\n@media(max-width:540px){.ssr-code-gutter{flex-basis:32px}.ssr-code-footer{font-size:9px}}\\n.ssr-code-navigation,.ssr-code-find{padding:10px 12px;background:#0b1d19;border-top:1px solid #29453b;font:11px/1.5 system-ui;color:#adcbbf}\\n.ssr-code-navigation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\\n.ssr-code-navigation button,.ssr-code-find button{cursor:pointer;padding:5px 9px;border:1px solid #36584b;border-radius:6px;background:#122b24;color:#d5eadf;font:inherit}\\n.ssr-code-navigation button:disabled,.ssr-code-find button:disabled{opacity:.45;cursor:default}\\n.ssr-code-navigation input,.ssr-code-query input{box-sizing:border-box;border:1px solid #3e6153;border-radius:5px;background:#061410;color:#e4f4e7;padding:5px 7px;font:inherit;min-width:0}\\n.ssr-code-navigation input{width:68px}.ssr-code-navigation kbd{font:9px ui-monospace,monospace;color:#87a498}\\n.ssr-code-navigation [data-code=navigation-status]{font-size:10px;flex-basis:100%;empty-cells:hide}\\n.ssr-code-navigation [data-code=navigation-status]:empty{display:none}\\n.ssr-code-navigation input[aria-invalid=true]{border-color:#f0a28e}\\n.ssr-code-find[hidden]{display:none}.ssr-code-find{display:grid;gap:8px}\\n.ssr-code-query{display:flex;align-items:center;gap:8px}.ssr-code-query input{flex:1;width:100%}\\n.ssr-code-find-options,.ssr-code-find-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\\n.ssr-code-find-options label{display:flex;align-items:center;gap:5px}.ssr-code-find-options input{accent-color:#c2ef8b}\\n.ssr-code-find-actions [data-code=find-close]{margin-left:auto}.ssr-code-find-actions [data-code=find-count]{font:10px ui-monospace,monospace}\\n.ssr-code-match{background:#786a235c}.ssr-code-match-active{background:#8f6a3280;box-shadow:inset 0 -2px #edcc7a}\\n.ssr-code-navigation :focus-visible,.ssr-code-find :focus-visible{outline:2px solid #c2ef8b;outline-offset:2px}\\n.ssr-code-replace{display:grid;gap:8px;border-top:1px solid #29453b;padding-top:10px}.ssr-code-replace[hidden]{display:none}\\n.ssr-code-replace [data-code=replace-status]{font-size:10px;color:#a8c7ba}.ssr-code-query>span{flex-shrink:0}\\n</style>\\n<div class=\\\"ssr-code-navigation\\\" role=\\\"group\\\" aria-label=\\\"Code navigation\\\">\\n  <button type=\\\"button\\\" data-code=\\\"find-toggle\\\" data-code-nav-control aria-expanded=\\\"false\\\" aria-controls=\\\"virtual-shader-source-find\\\" title=\\\"Find (Ctrl or Command F); F3 next, Shift F3 previous\\\" disabled>Find <kbd>⌘/Ctrl F</kbd></button>\\n  <label for=\\\"virtual-shader-source-line\\\">Line</label><input id=\\\"virtual-shader-source-line\\\" data-code=\\\"goto-line\\\" data-code-nav-control type=\\\"number\\\" min=\\\"1\\\" step=\\\"1\\\" value=\\\"1\\\" aria-describedby=\\\"virtual-shader-source-navigation-status\\\" title=\\\"Go to line (Ctrl or Command G)\\\" disabled><button type=\\\"button\\\" data-code=\\\"goto-submit\\\" data-code-nav-control disabled>Go</button>\\n  <span id=\\\"virtual-shader-source-navigation-status\\\" data-code=\\\"navigation-status\\\" role=\\\"status\\\" aria-live=\\\"polite\\\"></span>\\n</div>\\n<div id=\\\"virtual-shader-source-find\\\" class=\\\"ssr-code-find\\\" data-code=\\\"find-bar\\\" role=\\\"search\\\" aria-label=\\\"Find in code\\\" hidden>\\n  <label class=\\\"ssr-code-query\\\"><span>Find text</span><input data-code=\\\"find-query\\\" data-code-nav-control type=\\\"search\\\" maxlength=\\\"1024\\\" autocomplete=\\\"off\\\" spellcheck=\\\"false\\\" disabled></label>\\n  <div class=\\\"ssr-code-find-options\\\"><label><input data-code=\\\"find-case\\\" data-code-nav-control type=\\\"checkbox\\\" disabled>Match case</label><label><input data-code=\\\"find-word\\\" data-code-nav-control type=\\\"checkbox\\\" disabled>Whole word</label></div>\\n  <div class=\\\"ssr-code-find-actions\\\"><button type=\\\"button\\\" data-code=\\\"find-prev\\\" data-code-nav-control aria-label=\\\"Previous match\\\" disabled>↑</button><button type=\\\"button\\\" data-code=\\\"find-next\\\" data-code-nav-control aria-label=\\\"Next match\\\" disabled>↓</button><span data-code=\\\"find-count\\\" role=\\\"status\\\" aria-live=\\\"polite\\\">Type to find</span><button type=\\\"button\\\" data-code=\\\"replace-toggle\\\" data-code-nav-control aria-expanded=\\\"false\\\" aria-controls=\\\"virtual-shader-source-replace\\\" disabled>Replace…</button><button type=\\\"button\\\" data-code=\\\"find-close\\\" data-code-nav-control aria-label=\\\"Close find\\\" disabled>Close</button></div>\\n  <div id=\\\"virtual-shader-source-replace\\\" class=\\\"ssr-code-replace\\\" data-code=\\\"replace-bar\\\" hidden>\\n    <label class=\\\"ssr-code-query\\\"><span>Replace with</span><input data-code=\\\"replace-query\\\" data-code-nav-control type=\\\"text\\\" maxlength=\\\"65536\\\" autocomplete=\\\"off\\\" spellcheck=\\\"false\\\" disabled></label>\\n    <div class=\\\"ssr-code-find-actions\\\"><button type=\\\"button\\\" data-code=\\\"replace-one\\\" data-code-nav-control disabled>Replace</button><button type=\\\"button\\\" data-code=\\\"replace-all\\\" data-code-nav-control disabled>Replace all</button><button type=\\\"button\\\" data-code=\\\"replace-undo\\\" data-code-nav-control disabled>Undo replacement</button></div>\\n    <span data-code=\\\"replace-status\\\" role=\\\"status\\\" aria-live=\\\"polite\\\">Replacement is literal. An empty value deletes matches.</span>\\n  </div>\\n</div>\\n<div class=\\\"ssr-code-frame\\\" data-code=\\\"frame\\\">\\n  <div class=\\\"ssr-code-gutter\\\" aria-hidden=\\\"true\\\"><pre data-code=\\\"lines\\\">1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12\\n13\\n14\\n15\\n16\\n17\\n18\\n19\\n20\\n21\\n22\\n23\\n24</pre></div>\\n  <div class=\\\"ssr-code-surface\\\"><pre data-code=\\\"highlight\\\" aria-hidden=\\\"true\\\"></pre><textarea disabled aria-label=\\\"Code source\\\" id=\\\"virtual-shader-source\\\" data-code=\\\"source\\\" rows=\\\"18\\\" maxlength=\\\"65536\\\" wrap=\\\"off\\\" spellcheck=\\\"false\\\" autocapitalize=\\\"off\\\" autocomplete=\\\"off\\\" aria-describedby=\\\"virtual-shader-help virtual-shader-source-keys\\\">// Bar-locked rings. Every input below comes from the score you are playing.\\nvoid main(){\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\n  float r=length(uv);\\n\\n  // One ring per beat, pushed outward by the transport&#39;s own beat phase.\\n  float ring=fract(r*3.0-uBeatPhase);\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\n\\n  // The bar advances the hue, so the picture shows its place in the loop.\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\n\\n  // Pads wash the frame; melody and arp sparkle over it.\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\n\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\n  col*=1.+.35*uParts.x*uOnset;\\n\\n  col*=smoothstep(1.35,.25,r);\\n  fragColor=vec4(col,1.);\\n}</textarea></div>\\n</div>\\n<div class=\\\"ssr-code-footer\\\"><span data-code=\\\"cursor\\\">Ln 1 · Col 1</span><span id=\\\"virtual-shader-source-keys\\\">Tab indent · Ctrl/⌘ / comment · Esc then Tab to leave</span></div>\\n</div>\",\"id\":\"virtual-shader-source\"},\"tag\":\"RawHtml\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-shader-status\",\"role\":\"status\",\"text\":\"Starting the visualizer…\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"id\":\"virtual-shader-help\",\"text\":\"Write a void main() body. The shared prelude provides uniforms and spec(), wav(), hsv(), pal(), rot(), noise(), fbm(), smin(), sdCircle() and sdBox(). A compile error keeps the running picture.\"},\"tag\":\"Text\"},{\"children\":[{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Shader inputs\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"element\":\"summary\"},\"tag\":\"Section\"},{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBar — Bar number the transport is on, counting from 1; 0 when stopped.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBarPhase — 0..1 sawtooth across one bar.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBass — Measured low-band energy, 0..1 (smoothed).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBeat — Envelope that pops to 1 on a bass transient and decays.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBeatPhase — 0..1 sawtooth across one beat.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uCentroid — Spectral centroid (brightness), 0..1.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uLvl — Alias of uRms, kept for the original effects.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uMid — Measured mid-band energy, 0..1 (smoothed).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uOnset — 1 on a scored note or drum hit, decaying to 0.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uParts — Score energy per part: x drums, y bass, z pads, w melody+arp.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uRes — Canvas size in pixels (vec2).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uRms — Measured waveform level, 0..1 (smoothed).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uSpec — Two-row texture: row 0 spectrum, row 1 waveform (use spec()/wav()).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTempo — Beats per minute of the running score.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTime — Seconds since the visualizer was created.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTre — Alias of uTreble, kept for the original effects.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTreble — Measured high-band energy, 0..1 (smoothed).\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"title\":\"Shader inputs\"},\"tag\":\"Card\"}],\"kind\":\"view-node\",\"props\":{\"element\":\"details\"},\"tag\":\"Section\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.shader-studio\",\"hostInitial\":{\"source\":\"// Bar-locked rings. Every input below comes from the score you are playing.\\nvoid main(){\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\n  float r=length(uv);\\n\\n  // One ring per beat, pushed outward by the transport's own beat phase.\\n  float ring=fract(r*3.0-uBeatPhase);\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\n\\n  // The bar advances the hue, so the picture shows its place in the loop.\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\n\\n  // Pads wash the frame; melody and arp sparkle over it.\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\n\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\n  col*=1.+.35*uParts.x*uOnset;\\n\\n  col*=smoothstep(1.35,.25,r);\\n  fragColor=vec4(col,1.);\\n}\"},\"hostVersion\":1,\"title\":\"Shader studio\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"05086bd41452445fac8745b00e554c7ecb34aa71bf39188d0ba3fcadc93efff3\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.shader-studio","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-shader-editor","data-visual-for":"shader trace","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-workspace-description","data-visual-description":true,"text":"Create a shader picture driven by the audio. Edit effects below the canvas.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"id":"scope-wav-help","text":"Instrument sample · 2 seconds · stereo WAV · current instrument settings · dry audio.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-visual-shader-only":true,"text":"The picture reads the take that is playing: measured audio through the analyser, and the score's own bars, beats, per-part energy and note onsets. Prepare and start a score to see both.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Capture uses the longest bright outline in the center square. Link live follows that outline; blank frames keep the last valid path. Stop ends the link and audio."},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-visual-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Visuals","className":"ls-visual","data-field-default":null,"data-virtual-performance":"1","data-visual-desk":true,"element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.30","data-ls-tab":"code","disabled":false,"label":"Live code","pressed":true},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.31","data-ls-tab":"session","disabled":false,"label":"DAW session","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.32","data-ls":"focus","disabled":false,"id":"ls-focus-editor","label":"Focus editor","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Music editor","element":"nav"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-controls":"ls-edit-menu-items","aria-haspopup":"menu","aria-label":"More draft actions","controlKey":"live-score.34","data-ssr-menu-open":"ls-edit-menu","disabled":false,"id":"ls-draft-more","label":"⋯"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-ls":"draft-state","text":"Unprepared draft","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.36","data-ls":"revert","disabled":true,"id":"ls-revert-draft","label":"Restore prepared take"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.37","data-ls":"undo","disabled":true,"id":"ls-undo-draft","label":"Undo draft edit"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-draft-bar","data-ssr-context-menu":"ls-edit-menu","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Score "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"CRE8 SCORE","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"label","for":"live-score-source"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"lines","text":"1","variant":"pre"},"tag":"Text"}],"kind":"view-node","props":{"aria-hidden":"true","className":"ls-gutter","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-hidden":"true","data-ls":"highlight","text":"","variant":"pre"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-label":"Score CRE8 SCORE","autocapitalize":"off","controlKey":"live-score.46","data-ls":"source","default":"// Change a note, then apply on the next bar.\ntempo 96\nbars 2\ninstrument bass saw_bass\ninstrument melody bell\nlevel bass 0.7\nlevel melody 0.55\nlevel drums 0.8\nlevel reverb 0.3\n\ndrum kick 0 0.9\ndrum kick 2 0.85\ndrum kick 4 0.9\ndrum kick 6 0.85\ndrum snare 1 0.65\ndrum snare 3 0.65\ndrum snare 5 0.65\ndrum snare 7 0.65\ndrum hat 0.5 0.3\ndrum hat 2.5 0.3\ndrum hat 4.5 0.3\ndrum hat 6.5 0.3\n\nnote bass C2 0 0.75 0.8\nnote bass C2 1.5 0.4 0.6\nnote bass G2 2 0.75 0.7\nnote bass A#1 4 0.75 0.8\nnote bass G2 6 0.75 0.7\nnote melody D#4 0.5 0.5 0.65\nnote melody G4 2.5 0.5 0.65\nnote melody A#4 4.5 0.5 0.65\nnote melody G4 6.5 0.5 0.65\n","disabled":false,"id":"live-score-source","kind":"textarea","label":"Score CRE8 SCORE","maxlength":16384,"name":"live-score-source","rows":17,"spellcheck":false,"wrap":"off"},"tag":"Input"}],"kind":"view-node","props":{"className":"ls-editor-surface","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-editor-frame","data-ls":"editor","data-ssr-context-menu":"ls-edit-menu","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"cursor","text":"Ln 1 · Col 1","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Tab indent · Ctrl / ⌘ / comment · Ctrl / ⌘ Enter apply · Esc then Tab to leave","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-editor-footer","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.52","data-ls":"preset","default":"starter","disabled":false,"label":"Sound sketch","name":"live-score-52","options":[{"label":"Orbit groove","value":"starter"},{"label":"Pulse engine","value":"pulse"},{"label":"Drift","value":"drift"},{"label":"Composer remix","value":"composer"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.53","data-ls":"preset-load","disabled":false,"label":"Load sketch"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Prepared takes","controlKey":"live-score.55","data-ls":"takes","default":"","disabled":false,"label":"Prepared takes","name":"live-score-55","options":[{"label":"No takes yet","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"className":"ls-takes","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.56","data-ls":"take-load","disabled":true,"label":"Recall take"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-preset-row","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.59","data-ls":"style","default":"house","disabled":false,"label":"Compose","name":"live-score-59","options":[{"label":"house","value":"house"},{"label":"chill","value":"chill"},{"label":"cosmic","value":"cosmic"},{"label":"lofi","value":"lofi"},{"label":"trance","value":"trance"},{"label":"pop","value":"pop"},{"label":"cinematic","value":"cinematic"},{"label":"tribal","value":"tribal"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.61","data-ls":"seed","default":"7","disabled":false,"kind":"number","label":"Seed","max":"999999","min":"0","name":"live-score-61"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.62","data-ls":"compose","disabled":false,"label":"Write composer draft"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-compose","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"data-ls-pane":"code","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.65","data-ls":"session","default":"","disabled":false,"kind":"textarea","label":"DAW session JSON","name":"live-score-65","placeholder":"Prepare your score to edit its session…","rows":15,"spellcheck":false,"wrap":"off"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Edit tempo, lane gains, mutes and instruments. The score source travels with this session.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"data-ls-pane":"session","element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Arrangement","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-ls":"arrangement-state","text":"Prepare a score to see its notes","variant":"span"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Arrangement zoom","controlKey":"live-score.73","data-daw-zoom":true,"default":"1","disabled":false,"kind":"range","label":"Zoom","max":"3","min":"1","name":"live-score-73","step":"0.25"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-daw-zoom-label":true,"text":"100%","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-daw-only ls-timeline-zoom","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Your compiled drums and note lanes appear here.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Prepared note lanes; scroll sideways on narrow screens","data-ls":"arrangement","element":"div","role":"region","tabIndex":0},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.4","data-arrange":"lane","default":"bass","disabled":false,"label":"Channel","name":"arrangement-controls-4","options":[{"label":"bass","value":"bass"},{"label":"pads","value":"pads"},{"label":"melody","value":"melody"},{"label":"arp","value":"arp"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.6","data-arrange":"beat","default":"0","disabled":false,"kind":"number","label":"Beat","max":"16","min":"0","name":"arrangement-controls-6","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.7","data-arrange":"move","disabled":false,"label":"Move phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.8","data-arrange":"duplicate","disabled":false,"label":"Duplicate phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-arrange":"status","role":"status","text":"Select a phrase or drag it between channels. Prepare applies each draft.","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-arrange-controls","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Compiled arrangement","className":"ls-arrangement","element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-code","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Mixer","variant":"h3"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Faders edit the draft. Apply mix to update the prepared song.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.81","data-ls":"tempo","default":"96","disabled":false,"kind":"number","label":"Tempo BPM","max":"180","min":"60","name":"live-score-81"},"tag":"Input"}],"kind":"view-node","props":{"className":"ls-tempo","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Drums channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Drums earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Drums later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">01</span><span class=\"mixer-name\">Drums</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Drum synth"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Drums","data-ls-mute":"drums","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drums","data-ls-lane":"drums","default":"0.8","id":"ls-gain-drums","kind":"range","max":"1","min":"0","name":"gain-drums","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"drums","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Drums","className":"mixer-strip ls-lane-row","data-ls-channel":"drums","data-mixer-role":"channel","data-mixer-strip":"drums","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Bass channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Bass earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Bass later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">02</span><span class=\"mixer-name\">Bass</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"bass","default":"saw_bass","disabled":true,"label":"Bass instrument","name":"instrument-bass","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Bass","data-ls-mute":"bass","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Bass","data-ls-lane":"bass","default":"0.7","id":"ls-gain-bass","kind":"range","max":"1","min":"0","name":"gain-bass","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"bass","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Bass","className":"mixer-strip ls-lane-row","data-ls-channel":"bass","data-mixer-role":"channel","data-mixer-strip":"bass","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Pads channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Pads earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Pads later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">03</span><span class=\"mixer-name\">Pads</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"pads","default":"warm_pad","disabled":true,"label":"Pads instrument","name":"instrument-pads","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Pads","data-ls-mute":"pads","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Pads","data-ls-lane":"pads","default":"0.8","id":"ls-gain-pads","kind":"range","max":"1","min":"0","name":"gain-pads","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"pads","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Pads","className":"mixer-strip ls-lane-row","data-ls-channel":"pads","data-mixer-role":"channel","data-mixer-strip":"pads","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Melody channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Melody earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Melody later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">04</span><span class=\"mixer-name\">Melody</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"melody","default":"bright_lead","disabled":true,"label":"Melody instrument","name":"instrument-melody","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Melody","data-ls-mute":"melody","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Melody","data-ls-lane":"melody","default":"0.55","id":"ls-gain-melody","kind":"range","max":"1","min":"0","name":"gain-melody","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"melody","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Melody","className":"mixer-strip ls-lane-row","data-ls-channel":"melody","data-mixer-role":"channel","data-mixer-strip":"melody","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Arp channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Arp earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Arp later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">05</span><span class=\"mixer-name\">Arp</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"arp","default":"bell","disabled":true,"label":"Arp instrument","name":"instrument-arp","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Arp","data-ls-mute":"arp","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Arp","data-ls-lane":"arp","default":"0.8","id":"ls-gain-arp","kind":"range","max":"1","min":"0","name":"gain-arp","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"arp","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Arp","className":"mixer-strip ls-lane-row","data-ls-channel":"arp","data-mixer-role":"channel","data-mixer-strip":"arp","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Space channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Space earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Space later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">06</span><span class=\"mixer-name\">Space</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Reverb return"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Space","data-ls-mute":"reverb","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Space","data-ls-lane":"reverb","default":"0.3","id":"ls-gain-reverb","kind":"range","max":"1","min":"0","name":"gain-reverb","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"reverb","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Space","className":"mixer-strip ls-lane-row","data-ls-channel":"reverb","data-mixer-role":"bus","data-mixer-strip":"reverb","element":"div","role":"group"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-lanes","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.83","data-ls":"mix","disabled":true,"label":"Apply mix"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Channel strips","className":"ls-channel-rack","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Play a MIDI phrase"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Turn your controller into score code. The first note starts a phrase using this score’s tempo and bars, independent of loop playback.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.88","data-score-midi":"scan","disabled":true,"label":"Scan inputs"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.89","data-ls-nav":true,"href":"/view/device/midi","label":"Device ↗"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-midi-controls","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.91","data-score-midi":"ports","default":"","disabled":true,"label":"Input","name":"live-score-91","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.93","data-score-midi":"channel","default":"0","disabled":false,"label":"Receive","name":"live-score-93","options":[{"label":"All channels","value":"0"},{"label":"Keyboard · channel 1","value":"1"},{"label":"Pads · channel 10","value":"10"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.95","data-score-midi":"record","disabled":true,"label":"Record phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.96","data-score-midi":"stop","disabled":true,"label":"Stop recording"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-midi-controls","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-score-midi":"status","role":"status","text":"Connecting MIDI controls…","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-label":"Recorded score phrase","data-score-midi":"preview","text":"Your recorded notes will appear here.","variant":"pre"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.99","data-score-midi":"insert","disabled":true,"label":"Insert into score"},"tag":"Action"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"1/16-note grid · up to 128 notes · review before inserting. Notes go to Melody; channel 10 maps 36 kick, 38 snare, 42 hat, 46 open hat. Other pads are skipped. Pressure, sustain and CC are not recorded. Prepare score to hear the result; live monitoring is off.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-midi","data-ls-midi":true,"element":"details","id":"live-score-midi","open":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Score language"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Beats start at 0. Loops are 1–4 bars at 60–180 BPM.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"tempo 96\nbars 2\ncompose house 7\nclear bass\ninstrument bass saw_bass\nnote bass C2 0 0.75 0.8\ndrum kick 0 0.9\nlevel reverb 0.3","variant":"pre"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Note: part, pitch, beat, duration, velocity. Parts: bass, pads, melody, arp. Drums: kick, snare, hat, open_hat.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Song-wide: "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"kit <name>","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"swing 0..0.3","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"root C4","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"scale dorian","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Pattern playground"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"pattern kick X...x... 0 8 0.8\nsequence bass C2,-,G2,- 0 8 0.75 0.7","variant":"pre"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Pattern: voice, steps, start, span, velocity. "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"x","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" hit · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"X","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" full accent · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":".","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" rest."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"html":"<br>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"text":"Sequence: part, comma-separated notes, start, span, gate, velocity. "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"-","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" is a rest. Gate is the fraction of each step held, from 0.01 to 1."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details","open":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Mixing console"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Targets: bass, pads, melody, arp, drums, master. Up to four "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"fx","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" per target, appended in order; "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"fx <target> clear","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" drops them."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Automate "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"gain","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":", "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"pan","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":", "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"send.reverb","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":", "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"send.delay","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" or "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"fx.<n>.<param>","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" (1-based, declared first): one line per breakpoint, at most 64 per parameter and 256 per score."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Every parameter is validated against the plugin catalog at "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"/audio/plugins","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":". A score naming none of these renders exactly as before."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"pan arp -0.5\nsend melody reverb 0.35\nsend arp delay 0.4\nfx bass filter mode=low_pass cutoff_hz=900\nautomation bass gain 0 0.2\nautomation bass gain 8 1\nreverb preset=plate mix=0.4\ndelay time=1/8. feedback=0.45 pingpong=1\nmaster glue=1 ceiling=0.9","variant":"pre"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-clock-boundary","text":"Audio uses its own sample clock. On the Virtual stage, DAW energy can drive shader level and tempo; beat phases remain independent.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Loop mixer","className":"ls-mix","element":"aside"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-columns","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Live music desk","className":"ls-desk","data-cre8-binding":"audio.liveScore","data-daw-contract":"1","data-daw-mixer":"true","data-daw-render":"audio.daw.render","data-daw-view":"tracks","data-editor-chrome":"audio","data-live-score":true,"data-workspace":"daw","element":"section","id":"live-music-desk"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":["Audio.audio.mixer SSR payload is live-ready."],"kind":"view-node","props":{},"tag":"Text"}],"kind":"view-node","props":{"id":"payload-live-content-audio-audio-mixer","title":"Live Payload"},"tag":"Card"}],"kind":"view-node","props":{"id":"payload-live-audio-audio-mixer","patchTarget":"#payload-live-content-audio-audio-mixer","pollIntervalMs":8000,"refreshHref":"/view/payload/patch?app=Audio&view=audio.mixer","streamUrl":"/view/payload/patch?app=Audio&view=audio.mixer","transport":"http","transportStatus":true},"tag":"LiveSlot"}],"data":{"children":[{"children":[{"children":[],"kind":"view-node","props":{"html":"<style>.ls-desk{margin:28px 0;padding:24px;background:#08191d;color:#e4f7ee;border:1px solid #294442;border-radius:20px;font:14px/1.5 system-ui,sans-serif}.ls-desk *{box-sizing:border-box}.ls-desk header{display:flex;justify-content:space-between;align-items:center;gap:18px}.ls-eyebrow{font-size:11px;letter-spacing:.15em;color:#a5dd89}.ls-desk h2{font-size:30px;line-height:1.2;margin:10px 0}.ls-desk h3{margin:0 0 8px}.ls-desk p{color:#9bb6b4}.ls-desk a{color:#b8e696}.ls-desk button,.ls-desk select,.ls-desk input[type=number]{color:inherit;background:#142c2e;border:1px solid #3c5c55;border-radius:8px;padding:9px 12px;font:inherit}.ls-desk button{cursor:pointer}.ls-desk button:disabled{opacity:.45;cursor:default}.ls-desk button:focus-visible,.ls-desk input:focus-visible,.ls-desk textarea:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}.ls-desk [data-ls=apply],.ls-desk [data-ls=start]{background:#c4ef83;color:#142819;font-weight:650}.ls-transport{display:flex;align-items:center;gap:12px;margin:18px 0;padding:12px;background:#102426;border-radius:12px;flex-wrap:wrap}.ls-transport output{font-variant-numeric:tabular-nums}.ls-meter{width:72px;height:6px;background:#294442;border-radius:4px;overflow:hidden}.ls-meter i{display:block;height:100%;width:0;background:#c4ef83}.ls-columns{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(250px,1fr);gap:24px}.ls-code,.ls-mix{min-width:0}.ls-code nav{display:flex;gap:8px;margin-bottom:14px}.ls-code nav [aria-pressed=true]{border-color:#c4ef83;color:#c4ef83}.ls-desk label{display:block}.ls-code label>span{float:right;font-size:11px;color:#779d99}.ls-desk textarea{display:block;width:100%;resize:vertical;min-height:260px;background:#031013;color:#d0eddf;border:1px solid #284542;border-radius:10px;padding:15px;margin-top:8px;font:13px/1.6 ui-monospace,monospace;tab-size:2}.ls-compose,.ls-actions{display:flex;flex-wrap:wrap;align-items:end;gap:10px;margin:12px 0}.ls-compose input{width:85px}.ls-compose select{display:block}.ls-desk pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 ui-monospace,monospace}.ls-desk [data-ls=status]{min-height:40px;color:#c4ef83}.ls-desk [data-ls=status][data-error=true]{color:#ffb4a6}.ls-desk kbd{font-size:10px;opacity:.65;margin-left:10px}.ls-lanes{margin:20px 0}.ls-lanes label{display:grid;grid-template-columns:58px minmax(50px,1fr) 40px;gap:8px;align-items:center;margin:16px 0}.ls-lanes input{width:100%;accent-color:#b6e77f}.ls-lanes output{text-align:right;font-size:12px}.ls-tempo input{width:85px}.ls-desk details{margin-top:24px}.ls-desk summary{cursor:pointer}.ls-clock-boundary{font-size:12px;margin-top:24px}.ls-desk [hidden]{display:none!important}.ls-desk [data-cre8-island]{min-height:0!important}@media(max-width:720px){.ls-desk{padding:16px}.ls-columns{grid-template-columns:1fr}.ls-desk header{align-items:start;flex-direction:column}.ls-transport output{flex-basis:100%}.ls-desk h2{font-size:26px}}\n\n/* Editor metrics are shared so the projection stays aligned with native text selection. */\n.ls-desk{scroll-margin-top:18px}.ls-desk [data-ls=focus]{margin-left:auto}.ls-draft-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:8px 0 14px;color:#b6dba0;font-size:12px}.ls-draft-bar button{padding:4px 8px;font-size:11px;background:transparent}.ls-desk[data-dirty=true] [data-ls=draft-state]{color:#f5bb7c}.ls-editor-frame{display:flex;border:1px solid #355a51;border-radius:10px;overflow:hidden;background:#031013;margin-top:8px;position:relative}.ls-gutter{flex:0 0 42px;background:#07191b;color:#547d76;text-align:right;overflow:hidden;user-select:none}.ls-desk .ls-gutter pre{margin:0;padding:15px 9px 15px 0;white-space:pre;font:13px/21px ui-monospace,monospace}.ls-editor-surface{position:relative;min-width:0;flex:1;overflow:hidden}.ls-desk .ls-editor-surface textarea,.ls-desk .ls-editor-surface>pre{margin:0;padding:15px 12px;border:0;border-radius:0;background:transparent;font:13px/21px ui-monospace,monospace;tab-size:2;white-space:pre;overflow-wrap:normal;letter-spacing:normal}.ls-desk .ls-editor-surface textarea{display:block;position:relative;width:100%;min-height:365px;resize:vertical;caret-color:#e4f7ee;outline-offset:-2px}.ls-desk .ls-editor-surface>pre{position:absolute;top:0;left:0;min-width:100%;pointer-events:none;display:none;color:#cce4dc}.ls-editor-frame.is-enhanced .ls-editor-surface>pre{display:block}.ls-desk .ls-editor-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}.ls-desk .ls-editor-frame.is-enhanced textarea::selection{background:#bcee8340}.ls-token-command{color:#bcee83;font-weight:600}.ls-token-comment{color:#607f7d}.ls-token-note{color:#b9acff}.ls-token-number{color:#f1bd81}.ls-token-pattern{color:#80ddd3}.ls-editor-footer{display:flex;justify-content:space-between;gap:10px;color:#789994;font:10px/1.5 ui-monospace,monospace;padding:8px 1px}.ls-editor-frame[data-error=true]{border-color:#f0a28e}.ls-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}.ls-preset-row{display:flex;flex-wrap:wrap;gap:8px;align-items:end;padding:12px 0;border-bottom:1px solid #24423e}.ls-preset-row label{font-size:11px;color:#8aada5}.ls-preset-row select{display:block;margin-top:5px;max-width:180px}.ls-preset-row button{font-size:12px}.ls-live-badge{margin-left:auto;color:#b6da9b;font:10px/1.5 ui-monospace,monospace;letter-spacing:.08em}.ls-arrangement{border:1px solid #294641;border-radius:10px;overflow:hidden;margin-top:18px}.ls-arrangement>div:first-child{display:flex;justify-content:space-between;gap:8px;padding:10px 12px;font-size:11px;background:#0b2224}.ls-arrangement span{color:#a0b8ad}.ls-arrangement svg{display:block;width:100%;height:auto;font-family:system-ui}.ls-arrangement p{padding:12px;font-size:12px}.ls-desk[data-focus=true] .ls-mix{display:none}.ls-desk[data-focus=true] .ls-columns{grid-template-columns:minmax(0,1fr)}.ls-desk [data-ls=error-line]{color:#ffb5a6;border-color:#a76658;padding:5px 10px;font-size:12px}.ls-desk [data-busy=true]{opacity:.6}\n@media(max-width:720px){.ls-editor-footer{flex-wrap:wrap}.ls-live-badge{margin-left:0}.ls-draft-bar{gap:7px}.ls-desk [data-ls=focus]{display:none}.ls-preset-row select{max-width:160px}.ls-desk .ls-editor-surface textarea,.ls-desk .ls-editor-surface>pre,.ls-desk .ls-gutter pre{font-size:12px}.ls-gutter{flex-basis:32px}.ls-arrangement>div:first-child{flex-direction:column}.ls-desk[data-focus=true] .ls-mix{display:block}}\n.ls-arrangement [data-ls=arrangement]{overflow-x:auto}.ls-arrangement svg{min-width:640px}.ls-token-comment{color:#769690}\n.ls-project-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;padding:12px 0;margin:12px 0;border-top:1px solid #294442;border-bottom:1px solid #294442;font-size:11px;color:#89aaa1}.ls-project-bar [data-ls=saved-state]{color:#b6dba0;margin-right:auto}.ls-project-bar button{font-size:11px;padding:6px 10px}.ls-project-bar>span:last-child{flex-basis:100%}.ls-lanes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.ls-lane-row{min-width:0;padding:12px;background:#0b2224;border:1px solid #294442;border-radius:10px}.ls-lane-heading{display:flex;align-items:center;gap:8px}.ls-lane-heading label{display:block;margin:0;font-size:12px}.ls-lane-heading output{margin-left:auto;color:#b6dba0}.ls-lane-heading button{padding:3px 7px;font:11px ui-monospace,monospace}.ls-lane-row input{margin:16px 0;display:block}.ls-lane-row select{display:block;width:100%;min-width:0;padding:6px;font-size:11px}.ls-lane-row>span{display:block;font-size:11px;color:#89aaa1;padding:7px 0}.ls-lane-row[data-muted=true]{border-color:#986547}.ls-lane-row[data-muted=true] [data-ls-mute]{background:#f0b97e;color:#251a14;border-color:#f0b97e}.ls-lane-row[data-muted=true] input{opacity:.55}.ls-desk select:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}.ls-desk[data-workspace=daw]{margin-top:0}.ls-desk[data-workspace=daw] h2{font-size:36px}.ls-desk[data-workspace=daw] .ls-eyebrow{color:#80ddd3}@media(max-width:720px){.ls-desk[data-workspace=daw] h2{font-size:27px}.ls-project-bar [data-ls=saved-state]{flex-basis:100%}.ls-lane-row{padding:10px}.ls-lane-heading{gap:5px}}\n.ls-menu-bar{display:flex;align-items:center;gap:4px;padding:4px 0 10px;margin-bottom:10px;border-bottom:1px solid #2b453b;position:relative;z-index:5;flex-wrap:wrap}.ls-menu-bar>span{margin-left:auto;font:10px system-ui;color:#8fac9e}.ls-desk button[hidden]{display:none!important}@media(max-width:540px){.ls-menu-bar>span{width:100%;margin:4px 10px 0}}\n/* Gutter lines follow the textarea viewport without determining its height. */\n.ls-gutter{position:relative}.ls-desk .ls-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}\n.ls-midi { margin-top: 1rem; }\n.ls-desk .ls-daw-only { display: none; }\n.ls-midi label { display: grid; gap: .4rem; margin: .65rem 0; }\n.ls-midi select { width: 100%; min-width: 0; }\n.ls-midi-controls { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }\n.ls-midi [data-score-midi=\"preview\"] { max-height: 12rem; overflow: auto; white-space: pre; font-size: .75rem; }\n.ls-midi [data-score-midi=\"status\"] { overflow-wrap: anywhere; }\n\n/* Interactive phrases belong to the DAW; Performance keeps the score overview. */\n.ls-track-timeline{display:none}\n/* The portable session component occupies the shared transport row. */\n.ls-transport [data-cre8-host-component=\"audio.session\"]{flex:1 1 100%;min-width:0}\n.ls-transport #audio-session-transport{margin:0;padding:0;border:0;background:transparent;box-shadow:none}\n.ls-transport #audio-session-transport .primitive-card__body{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:0}\n.ls-transport #ls-export-wav,.ls-transport #ls-export-midi,.ls-transport #ls-export-session{display:none}\n.ls-transport #ls-export-state{flex:1 1 240px;margin:0;font-size:12px;color:inherit}\n.ls-desk>header nav{display:flex;flex-wrap:wrap;gap:12px}\n.ls-transport-feedback{flex:1 1 100%;min-width:0}\n.ls-desk .ls-transport-feedback [data-ls=status]{margin:0;min-height:0;font:12px/1.5 system-ui,sans-serif;white-space:pre-wrap;color:#b4c8c2}\n.ls-desk .ls-transport-feedback [data-ls=status][data-error=true]{padding:8px 10px;border-left:3px solid #ffb4a6;background:#ffb4a60c;color:#ffb4a6}\n.ls-desk #ls-prepare,.ls-desk #ls-start:not(:disabled){background:#c4ef83;color:#142819;border-color:#c4ef83;font-weight:650}\n\n/* Preserve app layout around native document primitives. */\n.media-fragment { display:contents; }\n.ls-desk .primitive-input,.ls-desk .primitive-select { display:contents; }\n.ls-desk .primitive-input__label,.ls-desk .primitive-select__label { font:inherit; }\n/* Shared mixer console. Tokens resolve from an ancestor's --mixer-* override,\n   then the editor chrome's --editor-*, then light-dark() defaults. Live values\n   (--level, --peak, aria-pressed, data-clipped) are set by the app's script. */\n.mixer-console,.mixer-strip{\n  --_surface:var(--mixer-surface,var(--editor-raised,light-dark(#ffffff,#1f2724)));\n  --_well:var(--mixer-well,var(--editor-surface,light-dark(#edf1ee,#141a18)));\n  --_ink:var(--mixer-ink,var(--editor-ink,light-dark(#182620,#edf3ee)));\n  --_muted:var(--mixer-muted,var(--editor-muted,light-dark(#536259,#a6b5ab)));\n  --_border:var(--mixer-border,var(--editor-border,light-dark(#cbd5ce,#3b4941)));\n  --_accent:var(--mixer-accent,var(--editor-accent,light-dark(#246640,#b8f568)));\n  --_ok:var(--mixer-ok,light-dark(#2f9e5b,#5fd38a));\n  --_warn:var(--mixer-warn,light-dark(#b98f10,#f2d25c));\n  --_hot:var(--mixer-hot,light-dark(#c8453a,#ff6b5e));\n  --_mute:var(--mixer-mute,light-dark(#b7791f,#f0b44c));\n  --_solo:var(--mixer-solo,light-dark(#2b72ad,#79c3ff));\n  --_arm:var(--mixer-arm,light-dark(#c8453a,#ff6b5e));\n  --_latch:var(--mixer-latch,light-dark(#7453b8,#b69cff));\n  --_fader-height:var(--mixer-fader-height,150px);\n}\n.mixer-console{\n  display:flex;gap:6px;align-items:stretch;overflow-x:auto;padding:6px;\n  background:var(--_well);border:1px solid var(--_border);border-radius:8px;\n}\n.mixer-strip{\n  box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;gap:6px;\n  flex:0 0 auto;min-width:84px;margin:0;padding:8px 6px;\n  border:1px solid var(--_border);border-radius:6px;background:var(--_surface);color:var(--_ink);\n  font:11px/1.3 system-ui,sans-serif;\n}\n.mixer-strip *{box-sizing:border-box}\n/* Controls arrive as base-theme primitives: drop the form-field chrome a\n   slider or a strip button should not carry. */\n.mixer-strip .primitive-input,.mixer-strip .primitive-select{margin:0;gap:2px;min-width:0}\n.mixer-strip input[type=range]{padding:0;border:0;border-radius:0;background:none;box-shadow:none;min-width:0}\n.mixer-strip[data-mixer-role=bus]{border-top:3px solid var(--_solo)}\n.mixer-strip[data-mixer-role=master]{\n  border-top:3px solid var(--_accent);position:sticky;right:0;margin-left:auto;\n  /* The solid shadow covers the console's padding, where strips scrolling\n     under the pinned master would otherwise peek out. */\n  box-shadow:7px 0 0 var(--_well),-8px 0 8px -8px rgb(0 0 0/.4);\n}\n.mixer-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 5px;min-width:0}\n.mixer-number{color:var(--_muted);font-variant-numeric:tabular-nums}\n.mixer-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}\n.mixer-layout{flex:0 0 auto;padding:0 5px;border:1px solid var(--_border);border-radius:999px;color:var(--_muted);font-size:10px;line-height:15px}\n.mixer-handle{display:flex;justify-content:center;gap:2px}\n.mixer-slot :is(select,button,input){width:100%;max-width:100%;font-size:11px}\n/* Routing, the insert chain, sends, badges and the automation mode sit in\n   signal order under the name, one dense row or card each. They take the\n   strip's width rather than setting it, so a long effect or bus name\n   ellipsizes instead of widening its strip. */\n:is(.mixer-route,.mixer-inserts,.mixer-sends,.mixer-assign,.mixer-automation){contain:inline-size;min-width:0}\n:is(.mixer-route,.mixer-automation,.mixer-send) :is(select,input){width:100%;max-width:100%;font-size:11px}\n.mixer-strip :is(.mixer-route,.mixer-automation,.mixer-send) :is(.primitive-select__label,.primitive-input__label){font-size:10px;font-weight:600;color:var(--_muted)}\n:is(.mixer-route,.mixer-automation) select{min-height:20px;padding:1px 3px;border:1px solid var(--_border);border-radius:3px;background:var(--_well);color:var(--_ink)}\n.mixer-inserts,.mixer-sends{display:flex;flex-direction:column;gap:2px}\n.mixer-insert{\n  display:flex;align-items:center;gap:3px;min-height:20px;padding:1px 2px 1px 6px;\n  border:1px solid var(--_border);border-radius:3px;background:var(--_well);box-shadow:inset 3px 0 0 var(--_accent);\n}\n.mixer-insert-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.mixer-insert>:not(.mixer-insert-name){flex:0 0 auto;margin:0}\n.mixer-insert :is(button,.primitive-action){\n  min-width:22px;min-height:18px;margin:0;padding:1px 4px;border:1px solid var(--_border);border-radius:3px;\n  background:var(--_surface);color:var(--_ink);font:600 10px/1 system-ui,sans-serif;cursor:pointer;\n}\n.mixer-insert :is(button,.primitive-action)[aria-pressed=true]{border-color:var(--_accent);color:var(--_accent)}\n.mixer-insert[data-bypassed=true]{box-shadow:none;border-style:dashed}\n.mixer-insert[data-bypassed=true] .mixer-insert-name{color:var(--_muted);text-decoration:line-through}\n.mixer-send{display:flex;flex-direction:column;gap:2px;padding:2px 4px 3px;border:1px solid var(--_border);border-radius:3px;background:var(--_well)}\n.mixer-send-head{display:flex;align-items:center;gap:4px}\n.mixer-send-bus{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.mixer-send-tap{flex:0 0 auto;padding:0 4px;border:1px solid var(--_border);border-radius:999px;color:var(--_muted);font-size:9px;line-height:13px;text-transform:uppercase;letter-spacing:.04em}\n.mixer-send[data-mixer-tap=pre] .mixer-send-tap{border-color:var(--_warn);color:var(--_ink)}\n.mixer-send input[type=range]{display:block;width:100%;margin:0;accent-color:var(--_solo)}\n.mixer-assign{display:flex;flex-wrap:wrap;gap:3px}\n.mixer-badge{\n  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 5px;\n  border:1px solid var(--_border);border-left-width:3px;border-radius:3px;font-size:10px;line-height:15px;\n}\n.mixer-badge[data-mixer-badge=group]{border-left-color:var(--_accent)}\n.mixer-badge[data-mixer-badge=vca]{border-left-color:var(--_solo)}\n.mixer-badge-kind{color:var(--_muted);font-size:9px;text-transform:uppercase;letter-spacing:.04em}\n/* The automation select is tinted by the option it has selected, so the\n   colour is the control's own state: read, touch, latch or write. */\n.mixer-automation select{border-left:3px solid var(--_auto,var(--_border))}\n.mixer-automation:has(option[value=read]:checked){--_auto:var(--_ok)}\n.mixer-automation:has(option[value=touch]:checked){--_auto:var(--_warn)}\n.mixer-automation:has(option[value=latch]:checked){--_auto:var(--_latch)}\n.mixer-automation:has(option[value=write]:checked){--_auto:var(--_hot)}\n.mixer-pan{position:relative;padding:0 2px}\n.mixer-pan input[type=range]{display:block;width:100%;margin:0;accent-color:var(--_accent)}\n.mixer-pan::after{content:\"\";position:absolute;left:50%;top:2px;bottom:2px;border-left:1px dashed var(--_border);pointer-events:none}\n.mixer-buttons{display:flex;justify-content:center;gap:4px}\n.mixer-strip .mixer-buttons>*{\n  min-width:26px;min-height:24px;margin:0;padding:2px 6px;border:1px solid var(--_border);border-radius:4px;\n  background:var(--_well);color:var(--_ink);font:600 11px/1 system-ui,sans-serif;cursor:pointer;\n}\n.mixer-strip .mixer-buttons>:hover:not(:disabled){border-color:var(--_accent)}\n.mixer-strip .mixer-buttons>:disabled{opacity:.45;cursor:default}\n.mixer-strip .mixer-buttons>[data-mixer-button=mute][aria-pressed=true]{background:var(--_mute);border-color:var(--_mute);color:#141414}\n.mixer-strip .mixer-buttons>[data-mixer-button=solo][aria-pressed=true]{background:var(--_solo);border-color:var(--_solo);color:#0e1a24}\n.mixer-strip .mixer-buttons>[data-mixer-button=arm][aria-pressed=true]{background:var(--_arm);border-color:var(--_arm);color:#fff}\n/* Bays sit at the foot of the strip so faders line up across a console\n   whatever slots each strip carries above them. */\n.mixer-fader-bay{display:flex;justify-content:center;align-items:stretch;gap:4px;height:var(--_fader-height);margin-top:auto}\n/* Marks follow the thumb's centre, which travels 8px in from each end. */\n.mixer-scale{position:relative;width:22px;margin:0;padding:0;list-style:none;color:var(--_muted);font:9px/1 system-ui,sans-serif;font-variant-numeric:tabular-nums}\n.mixer-scale li{position:absolute;right:0;bottom:calc(8px + var(--at,0)*(100% - 16px));transform:translateY(50%);white-space:nowrap}\n.mixer-fader,.mixer-fader>.primitive-input{display:flex;justify-content:center;height:100%}\n.mixer-fader input[type=range]{writing-mode:vertical-lr;direction:rtl;width:24px;height:100%;margin:0;accent-color:var(--_accent)}\n.mixer-meter{display:flex;gap:1px;height:100%;padding:1px;background:var(--_well);border:1px solid var(--_border);border-radius:2px}\n/* The gradient is painted at full height and the unlit part covered, so a\n   bar's colour always reads its absolute level (bands at -18 and -6 dB). */\n.mixer-meter-bar{\n  position:relative;flex:0 0 5px;height:100%;overflow:hidden;\n  background:linear-gradient(to top,var(--_ok) 0 70%,var(--_warn) 70% 90%,var(--_hot) 90%);\n}\n.mixer-meter:has(>:nth-child(9)) .mixer-meter-bar{flex-basis:3px}\n.mixer-meter-bar::before{content:\"\";position:absolute;inset:0 0 auto;height:calc((1 - var(--level,0))*100%);background:var(--_well);opacity:.9}\n.mixer-meter-bar::after{content:\"\";position:absolute;left:0;right:0;height:2px;bottom:calc(var(--peak,0)*100% - 2px);background:var(--_ink)}\n.mixer-meter-bar[data-clipped=true]{box-shadow:inset 0 3px 0 var(--_hot)}\n.mixer-readout{text-align:center;color:var(--_muted);font-variant-numeric:tabular-nums}\n.mixer-strip :is(button,select,input):focus-visible{outline:2px solid var(--_accent);outline-offset:2px}\n@media(pointer:coarse){\n  .mixer-strip{min-width:104px}\n  .mixer-strip .mixer-buttons>*{min-width:30px;min-height:40px}\n}\n@media(pointer:coarse){\n  .mixer-insert,:is(.mixer-route,.mixer-automation) select{min-height:36px}\n  .mixer-insert :is(button,.primitive-action){min-width:32px;min-height:32px}\n}\n/* Audio's standalone DAW composes the same controls used by Performance. */\nbody:has(.ls-desk[data-workspace=daw]) main:has(.ls-desk[data-workspace=daw]),\n.primitive-page:has(.ls-desk[data-workspace=daw]){max-width:none;margin:0;padding:0;}\n.ls-desk[data-workspace=daw] .ls-quiet-help{margin:8px 0;font-size:11px;color:var(--daw-muted);}\n.ls-quiet-help>summary{cursor:pointer;padding:4px 0;}\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-draft-bar,\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-preset-row,\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-compose{display:none;}\n.ls-desk[data-workspace=daw] .ls-eyebrow,.ls-daw-library>.ls-daw-caption,.ls-daw-library>p{display:none;}\n.ls-desk[data-workspace=daw]{--daw-border:#344550;--daw-muted:#91a8b7;display:grid;grid-template-columns:185px minmax(0,1fr);gap:0;margin:0;padding:0;border:1px solid var(--daw-border);border-radius:8px;background:#14222c;color:#dce7ef;font:12px/1.5 system-ui}\n.ls-desk[data-workspace=daw]>header{grid-column:1/-1;padding:16px 20px;background:#111d25;border-bottom:1px solid var(--daw-border)}\n.ls-desk[data-workspace=daw] h2{font-size:21px;margin:3px 0;letter-spacing:-.025em}.ls-desk[data-workspace=daw]>header p{display:none}.ls-desk[data-workspace=daw] .ls-eyebrow{font:9px ui-monospace,monospace;color:#91acbe;letter-spacing:.12em}\n.ls-desk[data-workspace=daw] button,.ls-desk[data-workspace=daw] select,.ls-desk[data-workspace=daw] input[type=number]{border-radius:4px;border-color:#405765;background:#223743;padding:7px 10px;font-size:11px}\n.ls-desk[data-workspace=daw] [data-ls=start],.ls-desk[data-workspace=daw] [data-ls=apply]{background:#b8d699;color:#152116;border-color:#b8d699}\n.ls-desk[data-workspace=daw] .ls-menu-bar{grid-column:1/-1;grid-row:2;margin:0;padding:6px 14px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border)}\n.ls-desk[data-workspace=daw] .ls-menu-bar details{margin:0}.ls-desk[data-workspace=daw] .ls-menu-bar>span{color:var(--daw-muted)}\n.ls-desk[data-workspace=daw] .ls-transport{grid-column:1/-1;grid-row:3;border-radius:0;margin:0;padding:12px 20px;border-bottom:1px solid var(--daw-border);background:#283b46;min-height:64px}\n.ls-desk[data-workspace=daw] .ls-transport output{padding:10px 16px;border:1px solid #47606b;border-radius:4px;background:#101c24;font:12px ui-monospace,monospace;color:#d7e9d9;min-width:240px}\n.ls-desk[data-workspace=daw] .ls-daw-tabs{grid-column:1/-1;grid-row:4;display:flex;flex-wrap:wrap;gap:3px;padding:8px 14px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border)}\n.ls-daw-tabs [data-daw-mixer]{margin-left:auto}\n.ls-desk[data-workspace=daw] .ls-columns,.ls-desk[data-workspace=daw] .ls-mix{display:contents}\n.ls-desk[data-workspace=daw] .ls-code{grid-column:2;grid-row:5;display:flex;flex-direction:column;min-height:440px;min-width:0;overflow:visible;padding:14px 18px;background:#111f29}\n.ls-desk[data-workspace=daw] .ls-code>nav{display:none}.ls-desk[data-workspace=daw] .ls-draft-bar{font-size:10px;margin:0 0 12px}\n.ls-desk[data-workspace=daw] .ls-arrangement{order:-1;flex-shrink:0;margin:0 0 14px;border-color:#3c5464;border-radius:4px}\n.ls-desk[data-workspace=daw] .ls-arrangement>div:first-child{background:#2a414f;font-size:11px;align-items:center;flex-wrap:wrap}\n.ls-desk[data-workspace=daw] .ls-arrangement [data-ls=arrangement]{overflow:auto;min-height:235px;background:repeating-linear-gradient(90deg,transparent 0,transparent 95px,#435d7028 95px,#435d7028 96px),#0e1c26}\n.ls-desk[data-workspace=daw] .ls-arrangement svg{height:235px;width:calc(100% * var(--daw-zoom,1));min-width:calc(760px * var(--daw-zoom,1));max-width:none}\n.ls-desk[data-workspace=daw] .ls-daw-only{display:flex}.ls-timeline-zoom{align-items:center;gap:7px;font-size:10px;margin-left:auto}.ls-timeline-zoom input{width:80px;accent-color:#b8d699}.ls-timeline-zoom output{min-width:35px}\n.ls-desk[data-workspace=daw]:not([data-daw-view=tracks]) .ls-arrangement{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=tracks] .ls-draft-bar,.ls-desk[data-workspace=daw][data-daw-view=tracks] [data-ls-pane=session]{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=tracks] [data-ls-pane=code]{display:contents}\n.ls-desk[data-workspace=daw][data-daw-view=tracks] [data-ls-pane=code]>label,.ls-desk[data-workspace=daw][data-daw-view=tracks] .ls-editor-frame,.ls-desk[data-workspace=daw][data-daw-view=tracks] .ls-editor-footer{display:none}\n.ls-desk[data-workspace=daw] .ls-preset-row{order:2;font-size:10px;margin-top:6px;padding:6px 0}.ls-desk[data-workspace=daw] .ls-compose{order:3;font-size:11px;margin:8px 0 0}.ls-desk[data-workspace=daw] [data-ls=status]{font-size:11px;min-height:20px;margin:4px 0}\n.ls-desk[data-workspace=daw] .ls-daw-library{grid-column:1;grid-row:5;border-right:1px solid var(--daw-border);padding:16px 12px;background:#1b2b36;min-width:0}\n.ls-daw-caption{font:9px ui-monospace,monospace;letter-spacing:.09em;color:#8ea9bc}.ls-daw-library h3{font-size:16px;margin:8px 0}.ls-daw-library p{font-size:10px;color:#91a8b7}\n.ls-desk[data-workspace=daw] .ls-daw-library button{display:grid;grid-template-columns:22px 1fr;text-align:left;gap:2px 4px;width:100%;margin:6px 0;padding:6px 7px;font-size:10px;background:#213644;border-left:3px solid var(--track-color,#8eadbf)}\n.ls-daw-library button strong{grid-column:2;grid-row:1;font-size:12px;font-weight:500}.ls-daw-library button span{color:#a0b7c6;font-size:9px}.ls-daw-library button span:first-child{grid-column:1;grid-row:1;align-self:center}.ls-daw-library button span:last-child{display:none}.ls-daw-library a{display:block;font-size:10px;margin-top:20px}\n.ls-desk[data-workspace=daw] .ls-channel-rack{grid-column:1/-1;grid-row:6;display:grid;grid-template-columns:1fr auto;gap:8px 16px;border-top:1px solid var(--daw-border);padding:14px 18px;background:#20313c;min-width:0}\n.ls-channel-rack>h3{margin:0;font-size:13px}.ls-desk[data-workspace=daw] .ls-channel-rack>p{grid-column:1;font-size:10px;margin:0;color:#9db3c1}\n.ls-desk[data-workspace=daw] .ls-tempo{grid-column:2;grid-row:1/3;align-self:center;font-size:11px}.ls-desk[data-workspace=daw] .ls-tempo input{width:66px}\n.ls-desk[data-workspace=daw] .ls-lanes{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,minmax(90px,1fr));gap:8px;margin:4px 0;overflow:auto}\n/* Lanes are shared mixer strips (view-lib mixer_console): the DAW sets their palette and each lane's track colour. */\n.ls-desk[data-workspace=daw]{--mixer-surface:#182a36;--mixer-well:#10212b;--mixer-ink:#e4f7ee;--mixer-muted:#9db3c1;--mixer-border:#415c6e;--mixer-fader-height:118px}\n.ls-desk[data-workspace=daw] .ls-lane-row{--mixer-accent:var(--track-color,#b8d699);min-width:90px;padding:10px;border-top:3px solid var(--track-color,#8eadbf);border-radius:4px}\n.ls-desk[data-workspace=daw] .ls-lane-row .mixer-handle>.ls-channel-order{flex:1;margin:0}.ls-desk[data-workspace=daw] .ls-lane-row .mixer-readout output{font:10px ui-monospace,monospace;color:#b7cbd9;text-align:center}\n.ls-desk[data-workspace=daw] .ls-lane-row .mixer-slot label{display:block;margin:0 0 2px;font-size:10px;color:#9db3c1}\n.ls-desk[data-workspace=daw] .ls-lane-row select{padding:6px 4px;font-size:10px}.ls-desk[data-workspace=daw] .ls-lane-row .mixer-slot>.primitive-text{display:block;font-size:10px;padding:6px 0;color:#9db3c1}\n.ls-desk[data-workspace=daw] [data-ls=mix]{grid-column:2;justify-self:end;font-size:11px}\n.ls-desk[data-workspace=daw][data-daw-mixer=false] .ls-channel-rack{display:none}\n.ls-desk[data-workspace=daw] .ls-mix>details,.ls-desk[data-workspace=daw] .ls-clock-boundary{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=midi] .ls-code{display:none}.ls-desk[data-workspace=daw][data-daw-view=midi] .ls-midi{display:block;grid-column:2;grid-row:5;padding:20px;margin:0;min-width:0;background:#111f29}\n.ls-desk[data-workspace=daw] .ls-midi pre{padding:14px;border:1px solid #3c5363;border-radius:4px;background:#0d1c26}.ls-desk[data-workspace=daw] .ls-midi p{font-size:11px}\n.ls-desk[data-workspace=daw] .ls-project-bar{grid-column:1/-1;grid-row:7;padding:8px 16px;margin:0;border:0;border-top:1px solid var(--daw-border);font-size:10px}.ls-desk[data-workspace=daw] .ls-project-bar>span:last-child{display:none}\n.ls-desk[data-workspace=daw]>[data-cre8-island]{display:none}\n[data-ls-channel=drums],[data-daw-track=drums]{--track-color:#e6b276}[data-ls-channel=bass],[data-daw-track=bass]{--track-color:#b7d98d}[data-ls-channel=pads],[data-daw-track=pads]{--track-color:#85bedc}[data-ls-channel=melody],[data-daw-track=melody]{--track-color:#b9a0df}[data-ls-channel=arp],[data-daw-track=arp]{--track-color:#7dd0b9}[data-ls-channel=reverb],[data-daw-track=reverb]{--track-color:#a6accc}\n.ls-desk[data-workspace=daw] .ls-lane-row[data-selected=true],.ls-desk[data-workspace=daw] .ls-daw-library [aria-pressed=true]{outline:1px solid var(--track-color);outline-offset:-1px;background:#2b4353}\n@media(max-width:800px){.ls-desk[data-workspace=daw]{grid-template-columns:145px minmax(0,1fr)}.ls-desk[data-workspace=daw] .ls-lanes{grid-template-columns:repeat(6,110px)}.ls-desk[data-workspace=daw] .ls-code{padding:12px}.ls-desk[data-workspace=daw] .ls-transport output{font-size:10px;min-width:0}.ls-daw-library p{display:none}}\n@media(max-width:560px){.ls-desk[data-workspace=daw]{grid-template-columns:minmax(0,1fr)}.ls-desk[data-workspace=daw] .ls-daw-library{display:none}.ls-desk[data-workspace=daw] .ls-code,.ls-desk[data-workspace=daw][data-daw-view=midi] .ls-midi{grid-column:1}.ls-desk[data-workspace=daw]>header{padding:14px;flex-direction:row}.ls-desk[data-workspace=daw] .ls-transport{padding:10px}.ls-desk[data-workspace=daw] .ls-transport output{flex-basis:100%}.ls-desk[data-workspace=daw] .ls-channel-rack{padding:12px}.ls-desk[data-workspace=daw] .ls-menu-bar>span{display:none}.ls-desk[data-workspace=daw] .ls-tempo{grid-column:1;grid-row:auto}.ls-desk[data-workspace=daw] .ls-channel-rack>p{grid-column:1/-1}.ls-desk[data-workspace=daw] .ls-arrangement>div:first-child{align-items:start}.ls-timeline-zoom{margin:0}}\n.ls-piano{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=piano] .ls-piano{display:block;order:-1;min-width:0}\n.ls-desk[data-workspace=daw][data-daw-view=piano] [data-ls-pane]{display:none!important}\n.ls-piano header{flex-wrap:wrap;justify-content:start;gap:12px;margin-bottom:10px}.ls-piano header>div{margin-right:auto}.ls-piano h3{margin:4px 0}.ls-piano label{font-size:10px;color:#a8bfce}.ls-piano select{margin-left:6px}\n.ls-piano-scroll{overflow:auto;height:300px;border:1px solid #415c6e;border-radius:4px;background:#0d1c26;overscroll-behavior:contain}\n.ls-piano-grid{position:relative;min-width:820px;height:0;touch-action:pan-x pan-y}\n.ls-piano-key{position:absolute;left:0;width:100%;height:20px;border-bottom:1px solid #344651;background:#182b38;color:#b9cad4;pointer-events:none;font:10px/20px ui-monospace,monospace;padding-left:5px}\n.ls-piano-key[data-black=true]{background:#10202a;color:#839caa}\n.ls-piano-beat{position:absolute;top:0;bottom:0;width:1px;background:#526b7c;pointer-events:none}.ls-piano-beat span{position:sticky;top:0;background:#182b38;color:#aec6d6;font:9px ui-monospace,monospace;padding:2px}\n.ls-desk[data-workspace=daw] .ls-piano-note{position:absolute;height:18px;border:1px solid #cbdac0;border-radius:3px;padding:0 5px;overflow:hidden;white-space:nowrap;text-align:left;font:10px/16px ui-monospace,monospace;background:#a9cb88;color:#152116;touch-action:none;cursor:grab;min-width:5px}\n.ls-desk[data-workspace=daw] .ls-piano-note[aria-pressed=true]{background:#d2e6b5;outline:2px solid #fff;outline-offset:1px;z-index:2}.ls-piano-note::after{content:'';position:absolute;right:0;top:0;bottom:0;width:5px;background:#15211644;cursor:ew-resize}\n.ls-piano-inspector{display:flex;flex-wrap:wrap;align-items:end;gap:8px;margin:12px 0}.ls-piano-inspector input{display:block;width:85px!important;margin-top:4px}.ls-piano footer{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ls-piano footer span{font-size:10px;color:#a6bccb}.ls-piano>p{font-size:11px}\n.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano{display:block;order:-1;min-width:0}\n.ls-desk[data-workspace=daw][data-daw-view=clips] [data-ls-pane],.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano-scroll,.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano-inspector,.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-piano-hints{display:none!important}\n.ls-clip-editor{margin:12px 0 16px}.ls-clip-scroll{overflow:auto;border:1px solid #415c6e;border-radius:4px;background:#0d1c26}.ls-clip-grid{position:relative;height:98px;min-width:620px;background:repeating-linear-gradient(90deg,transparent 0,transparent calc(25% - 1px),#344c5c calc(25% - 1px),#344c5c 25%)}\n.ls-desk[data-workspace=daw] .ls-clip-region{position:absolute;top:16px;height:64px;min-width:0;background:#334e59;border:1px solid #759a96;border-top:3px solid #add390;color:#e7f1df;border-radius:4px;text-align:left;padding:8px 10px;overflow:hidden;white-space:nowrap;touch-action:none;cursor:grab}.ls-clip-region small{display:block;font-size:10px;color:#b4caca}.ls-clip-region[data-empty=true]{background:#172b37;border-color:#344c5c;color:#7e9aa8}\n.ls-clip-selection{position:absolute;top:11px;height:74px;border:2px solid #d9edb6;pointer-events:none;border-radius:5px;z-index:2}.ls-clip-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:end}.ls-clip-controls input{display:block;width:105px!important;margin-top:4px}.ls-clip-controls label{font-size:10px}.ls-clip-editor>p{font-size:10px;margin:8px 0;color:#a7bece}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-grid{height:160px}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-region{top:28px;height:100px}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-selection{top:23px;height:110px}\n.ls-desk[data-workspace=daw] .ls-clip-region{display:flex;flex-direction:column;justify-content:flex-start;user-select:none}\n.ls-clip-preview{position:absolute;left:10px;right:10px;top:42px;bottom:5px;overflow:hidden;pointer-events:none}.ls-clip-preview i{display:block;position:absolute;height:3px;min-width:2px;border-radius:1px;background:#b7d99b}.ls-desk[data-workspace=daw][data-daw-view=clips] .ls-clip-preview{top:48px;bottom:10px}\n/* Server-rendered instrument and phrase components share the Audio draft. */\n.ls-instrument-editor{display:none}.ls-desk[data-workspace=daw][data-daw-view=instruments] .ls-instrument-editor{display:block;order:-1}.ls-desk[data-workspace=daw][data-daw-view=instruments] [data-ls-pane]{display:none!important}\n.ls-instrument-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:12px;margin:14px 0}.ls-instrument-fields label{display:flex;flex-direction:column;gap:5px;font-size:11px}.ls-instrument-fields input:not([type=checkbox]),.ls-instrument-fields select{width:100%;min-width:0;box-sizing:border-box;background:#142732;color:#dce7ef;border:1px solid #405765;border-radius:4px;padding:8px}.ls-instrument-fields input[type=checkbox]{width:auto;margin:0 4px 0 0}.ls-instrument-editor details{padding:12px;border:1px solid #405765;border-radius:5px}.ls-instrument-editor p{color:#a7bece}\n.ls-arrange-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px}.ls-arrange-controls input{width:65px}.ls-arrange-controls [role=status]{flex-basis:100%;font-size:11px;color:#b8cbd6}\n.ls-track-timeline{display:flex;flex-direction:column;min-width:calc(650px * var(--daw-zoom,1));padding:8px}.ls-track-phrase-row{display:flex;gap:8px;align-items:center;height:64px}.ls-track-phrase-row>strong{width:60px;font-size:11px;color:#abc4d3}.ls-track-phrases{position:relative;flex:1;height:56px}.ls-desk[data-workspace=daw] .ls-track-phrases button{position:absolute;top:3px;height:50px;box-sizing:border-box;border:3px solid #142630;background:#355666;color:#dceccb;touch-action:none;cursor:grab;z-index:1;text-align:left;user-select:none}.ls-track-phrases small{display:block;font-size:9px}.ls-track-phrases [aria-pressed=true]{outline:2px solid #ccebb0;outline-offset:-3px;z-index:3!important}.ls-desk[data-workspace=daw] .ls-track-phrases [data-arrange-empty=true]{background:#1b303e;color:#8aa5b5}\n.ls-desk[data-workspace=daw] .ls-arrangement svg{height:235px}.ls-desk[data-workspace=daw] .ls-daw-library{display:flex;flex-direction:column}.ls-daw-library>p,.ls-daw-library>h3,.ls-daw-library>.ls-daw-caption{order:-1}.ls-daw-library>a{order:10}.ls-channel-order{display:flex;gap:4px;align-items:center;margin-bottom:6px}.ls-channel-order [data-channel-drag]{cursor:grab;touch-action:none}.ls-desk[data-workspace=daw] .ls-channel-order button{padding:3px 7px}.ls-channel-order [data-channel-drag]{margin-right:auto}\n@media(max-width:560px){.ls-desk[data-workspace=daw] .ls-daw-library{display:none}.ls-instrument-fields{grid-template-columns:repeat(2,minmax(0,1fr))}}\n\n.ls-instrument-editor header{display:block}.ls-lane-row[data-drop-target=true]{outline:2px solid #ccebb0;outline-offset:2px}\n/* Persistent clip and envelope components are rendered by Audio. */\n.ls-session-editor{display:none}.ls-desk[data-track-editor=true][data-daw-view=tracks] .ls-session-editor,.ls-desk[data-track-editor=true][data-daw-view=flow] .ls-session-editor{display:block;order:-1;min-width:0}.ls-desk[data-track-editor=true][data-daw-view=tracks] .ls-arrangement{display:none}.ls-desk[data-daw-view=flow] [data-ls-pane]{display:none!important}.ls-session-flow{display:none}.ls-desk[data-daw-view=flow] .ls-session-flow{display:block}.ls-desk[data-daw-view=flow] .ls-session-timeline{display:none}.ls-session-editor>div>header{align-items:center}.ls-session-editor p{font-size:11px}.ls-session-scroll{overflow:auto;max-height:660px;border:1px solid #405765;border-radius:5px}.ls-session-lanes{min-width:650px}.ls-session-track{border-bottom:1px solid #405765;background:#142630;padding:8px}.ls-session-track>header{display:flex;gap:8px;justify-content:flex-start;min-height:36px}.ls-session-track header label{display:flex;align-items:center;gap:5px;margin-left:auto;white-space:nowrap}.ls-session-track input[type=number]{width:58px}.ls-session-track header small{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9cb5bf}.ls-session-lane{position:relative;height:68px;background:repeating-linear-gradient(90deg,#10212b 0,#10212b calc(12.5% - 1px),#385363 calc(12.5% - 1px),#385363 12.5%)}.ls-session-lane [data-session-clip]{position:absolute;top:6px;height:54px;min-width:12px;text-align:left;white-space:nowrap;overflow:hidden;touch-action:none;border:2px solid #759994;background:#345b63;user-select:none;cursor:grab}.ls-session-lane small{display:block;font-size:9px;color:#c3d6cf}.ls-session-lane [aria-pressed=true]{outline:2px solid #d6efb3;z-index:3}.ls-session-lane [data-clip-resize]{position:absolute;right:0;top:0;height:100%;width:9px;background:#b5d08e77;cursor:ew-resize;touch-action:none}.ls-envelope{display:block;width:100%;height:92px;background:#0c1b24;touch-action:none;overflow:visible}.ls-envelope path{fill:#92c47844;stroke:#b7e390;stroke-width:1.5;vector-effect:non-scaling-stroke}.ls-envelope circle{fill:#d6efb3;stroke:#172f2a;stroke-width:2;cursor:grab}.ls-envelope text{fill:#a8c49d;font:10px system-ui;pointer-events:none}.ls-envelope-fields,.ls-session-fields{display:flex;gap:8px;align-items:end;flex-wrap:wrap;margin:12px 0}.ls-session-fields label,.ls-envelope-fields label{font-size:10px;display:flex;flex-direction:column;gap:4px}.ls-session-fields input,.ls-envelope-fields input{width:90px;max-width:100%;box-sizing:border-box}.ls-session-fields select{max-width:200px}.ls-clip-detail{padding:12px;border:1px solid #466372;border-radius:5px;margin-top:12px}.ls-clip-note-list{display:flex;gap:4px;flex-wrap:wrap;max-height:110px;overflow:auto}.ls-session-editor[aria-busy=true]{opacity:.75}.ls-desk[data-track-session=true] .ls-legacy-patch,.ls-desk[data-track-session=true] .ls-lane-row:not([data-ls-channel=reverb]){display:none}.ls-desk[data-track-session=true] .ls-daw-library [data-daw-track]:not([data-daw-track=reverb]){display:none}.ls-desk[data-track-session=true] .ls-channel-rack .ls-lanes{display:flex}.ls-desk[data-track-session=true] .ls-lane-row[data-ls-channel=reverb]{min-width:160px}.ls-desk[data-track-session=true] [data-daw-view=piano],.ls-desk[data-track-session=true] [data-daw-view=clips]{display:none}.ls-desk[data-track-session=true] [data-daw-view=tracks] .ls-draft-bar{display:flex}.ls-flow-route{display:flex;flex-wrap:wrap;gap:10px;align-items:center;border:1px solid #3b5665;border-radius:5px;padding:16px;margin:10px 0}.ls-flow-route span{padding:9px;background:#213c46;border-radius:4px}.ls-flow-route i{color:#b5d891}.ls-desk[data-track-session=true][data-daw-view=tracks] .ls-draft-bar{display:flex}\n@media(max-width:560px){.ls-session-fields input{width:76px}.ls-session-fields select{max-width:160px}.ls-envelope-fields{align-items:end}.ls-session-editor h3{font-size:15px}.ls-flow-route{gap:6px;padding:10px}}\n\n/* Presence stays above the DAW header and its navigation link. */\n.primitive-room-scope:has([data-live-score]) > .primitive-room-scope__viewers{position:static!important;display:flex;width:max-content;margin:0 0 8px auto}\n\n/* The workspace shell gives transport and navigation a consistent hierarchy. */\n.ls-desk[data-workspace=daw]{--daw-border:#30434e;border:0;border-radius:0;width:100%;min-height:100dvh;box-sizing:border-box;grid-template-rows:auto auto auto auto minmax(440px,1fr) auto auto;}\n.ls-desk[data-workspace=daw]>header{padding:10px 14px;flex-wrap:wrap;gap:8px;border-radius:0}\n.ls-desk[data-workspace=daw]>header h1{font-size:20px;line-height:1.2;margin:0;letter-spacing:-.025em}\n.ls-desk[data-workspace=daw]>header nav{gap:6px;font-size:11px}\n.ls-desk[data-workspace=daw]>header nav a{padding:7px 9px;border:1px solid var(--daw-border);border-radius:6px;text-decoration:none;color:#b8ccd7}\n.ls-desk[data-workspace=daw]>header nav a:hover{background:#223743;color:#f0f7fc}\n.ls-desk[data-workspace=daw] .ls-menu-bar{padding:4px 14px;background:var(--editor-surface)}\n.ls-desk[data-workspace=daw] .ls-transport{gap:8px 12px;padding:14px 20px;background:#1a2e37}\n.ls-desk[data-workspace=daw] .ls-transport button{min-height:40px;border-radius:6px}\n.ls-desk[data-workspace=daw] #ls-prepare{background:#bedf9e;border-color:#bedf9e;color:#152116;font-weight:650}\n.ls-desk[data-workspace=daw] #ls-start:not(:disabled){background:#bedf9e;border-color:#bedf9e;color:#152116;font-weight:650}\n.ls-desk[data-workspace=daw] #ls-stop:not(:disabled){border-color:#a9c3cd;color:#e5eff2}\n.ls-desk[data-workspace=daw] .ls-transport #ls-export-state{color:#9eb8c2;font-size:11px}\n.ls-desk[data-workspace=daw] .ls-transport output{padding:6px 9px;min-width:0;max-width:100%;overflow-wrap:anywhere;border-color:#354d59;border-radius:6px;font-size:11px}\n.ls-desk[data-workspace=daw] .ls-transport-feedback [data-ls=status]{margin:2px 0 0;min-height:0;color:#b4c8d0;font:12px/1.5 system-ui,sans-serif}\n.ls-desk[data-workspace=daw] .ls-transport-feedback [data-ls=status][data-error=true]{color:#ffb4a6}\n.ls-desk[data-workspace=daw] .ls-daw-tabs{gap:4px;padding:8px 14px;flex-wrap:wrap;overflow:visible}\n.ls-desk[data-workspace=daw] .ls-daw-tabs button{white-space:normal}\n\n.ls-desk[data-workspace=daw] .ls-arrangement [data-ls=arrangement]:has(>p){min-height:96px;display:grid;align-items:center}\n.ls-desk[data-workspace=daw] a:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}\n@media(max-width:720px){\n  .ls-desk[data-workspace=daw]>header{padding:14px;align-items:flex-start;flex-direction:column}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:3px;padding:8px}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs button{min-width:0;min-height:44px;overflow-wrap:anywhere}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs [data-daw-mixer]{margin-left:0}\n  .ls-desk[data-workspace=daw] .ls-transport{padding:12px;gap:8px}\n  .ls-desk[data-workspace=daw] .ls-transport output{flex-basis:auto}\n  .ls-desk[data-workspace=daw] .ls-live-badge{margin-left:0}\n}\n@media(max-width:420px){\n  .ls-desk[data-workspace=daw] .ls-daw-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}\n  .ls-desk[data-workspace=daw] .ls-transport #audio-session-transport .primitive-card__body{gap:6px}\n  .ls-desk[data-workspace=daw] .ls-transport button{padding:8px;font-size:11px}\n}\n/* SSR track components: controls fit the viewport; clips retain beat-relative positions. */\n.ls-desk .ls-session-timeline>header {display:flex;flex-direction:row;align-items:center;gap:16px;text-align:left;margin-bottom:8px}\n.ls-session-timeline>header>div {min-width:0;flex:1}\n.ls-session-timeline>header h3 {margin:4px 0}\n.ls-session-timeline>header>button {flex:none}\n.ls-session-timeline>p {max-width:72ch;margin:8px 0 16px;color:#9db4bf}\n.ls-session-scroll {max-height:none;overflow:visible;border:0;border-radius:0}\n.ls-session-lanes {min-width:0;display:grid;gap:12px}\n.ls-session-track {min-width:0;border:1px solid #344c5b;border-radius:8px;padding:10px;background:#172b36}\n.ls-desk .ls-session-track>header {display:grid;grid-template-columns:minmax(0,1fr) 72px 48px 66px;align-items:center;gap:10px;min-height:44px;margin:0 0 8px;flex-direction:row}\n.ls-track-identity {display:flex;align-items:center;gap:10px;min-width:0}\n.ls-desk[data-workspace=daw] .ls-track-identity>button {max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;font-weight:600;border-color:transparent;background:transparent;padding:6px 0;font-size:12px}\n.ls-desk[data-workspace=daw] .ls-track-identity>button:disabled {opacity:1;cursor:default}\n.ls-session-track header small {min-width:0;max-width:180px;font-size:10px}\n.ls-desk .ls-session-track header label {display:flex;flex-direction:column;align-items:stretch;gap:2px;margin:0;font-size:9px;color:#a8becb}\n.ls-desk[data-workspace=daw] .ls-session-track input[type=number] {width:100%;padding:6px;font-size:12px;min-height:30px}\n.ls-session-track [data-track-mute][aria-pressed=true] {background:#624a31;border-color:#ba935b;color:#ffe0aa}\n.ls-desk .ls-session-track .ssr-action-menu {margin:0;justify-self:stretch}\n.ls-session-track .ssr-action-menu>summary {padding:8px;gap:5px;min-height:36px;justify-content:center;border:1px solid #405765;background:#223743;color:#dce7ef;font-size:11px}\n.ls-session-track .ssr-action-menu>[role=menu] {z-index:100;background:#182c37;border-color:#516d7d;border-radius:8px}\n.ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem] {min-height:42px;background:transparent;border:0;padding:10px 12px;font-size:12px}\n.ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem]:hover,\n.ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem]:focus-visible {background:#304a58}\n.ls-session-lane {height:64px;border-radius:4px}\n.ls-desk[data-workspace=daw] .ls-session-lane [data-session-clip] {height:52px;top:6px;padding:7px 12px;border:1px solid #60888a;border-left:3px solid #9dc6a5;background:#294a53;color:#e4f0e6;border-radius:4px}\n.ls-session-lane [data-clip-resize] {width:12px;background:#b5d08e33}\n.ls-session-lane [aria-pressed=true] {outline-offset:-2px}\n.ls-envelope {margin-top:8px;border-radius:4px;height:96px;background:repeating-linear-gradient(90deg,transparent 0,transparent calc(12.5% - 1px),#38536355 calc(12.5% - 1px),#38536355 12.5%),#0f222a}\n.ls-envelope circle {vector-effect:non-scaling-stroke;stroke:#d6efb3;stroke-width:10}\n.ls-envelope-caption {display:flex;justify-content:space-between;font-size:10px;color:#a8c49d;margin:12px 0 6px}\n.ls-session-timeline:not(:has(.ls-envelope)) .ls-envelope-fields {display:none}\n.ls-envelope-fields {padding:12px;border:1px solid #344c5b;border-radius:8px;background:#172b36;gap:10px}\n.ls-envelope-fields>span {font-size:11px;color:#9db4bf}\n.ls-envelope-fields>strong {font-size:11px;margin-right:auto;align-self:center}\n.ls-desk[data-workspace=daw] .ls-envelope-fields input {width:76px}\n.ls-clip-detail {background:#172b36;border-color:#344c5b;border-radius:8px}\n.ls-clip-detail h4 {margin:0 0 12px;font-size:13px}\n.ls-session-fields input:not([type=number]) {background:#223743;color:#dce7ef;border:1px solid #405765;border-radius:4px;padding:7px 10px;font:inherit}\n.ls-session-fields input,.ls-session-fields select {min-height:34px}\n.ls-session-editor [data-track-status] {color:#9db4bf}\n/* Persistent tracks carry their own mixer controls; the old channel list is redundant. */\n.ls-desk[data-workspace=daw][data-track-session=true] {grid-template-columns:minmax(0,1fr)}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-daw-library {display:none}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-code,\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-midi {grid-column:1}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-channel-rack {grid-template-columns:minmax(0,1fr) auto;gap:8px 20px;padding:12px 18px}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-channel-rack .ls-lanes {grid-column:1;grid-row:3;display:block;overflow:visible;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row[data-ls-channel=reverb] {display:grid;grid-template-columns:110px minmax(80px,240px) auto auto;align-items:center;gap:12px;min-width:0;padding:8px 12px;border-top-width:1px;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row :is(.mixer-handle,.mixer-slot,.mixer-scale) {display:none}\n/* The return strip lies flat beside the track editor: name, fader, level, mute. */\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-fader-bay {order:1;height:auto;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-readout {order:2}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-buttons {order:3}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row :is(.mixer-fader,.mixer-fader>.primitive-input) {width:100%;height:auto}\n.ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row .mixer-fader input[type=range] {writing-mode:horizontal-tb;direction:ltr;width:100%;height:28px;margin:0}\n.ls-desk[data-workspace=daw][data-track-session=true] [data-ls=mix] {grid-column:2;grid-row:3;align-self:center}\n@media(max-width:720px) {\n  .ls-track-identity {display:block}\n  .ls-track-identity>small {display:block;max-width:100%;font-size:9px}\n  .ls-desk .ls-session-track>header {grid-template-columns:minmax(0,1fr) 58px 44px 58px;gap:6px}\n  .ls-desk[data-workspace=daw] .ls-session-track [data-track-mute],\n  .ls-session-track .ssr-action-menu>summary {min-height:44px;padding:6px}\n  .ls-desk[data-workspace=daw] .ls-session-track input[type=number] {font-size:16px;min-height:34px;padding:4px}\n  .ls-desk[data-workspace=daw] .ls-session-track .ssr-action-menu [role=menuitem] {min-height:44px}\n  .ls-desk .ls-session-timeline>header {align-items:center;gap:8px}\n  .ls-desk[data-workspace=daw] .ls-session-timeline>header>button {max-width:118px;min-height:44px;padding:8px;white-space:normal}\n  .ls-desk[data-workspace=daw] .ls-session-timeline>header h3 {font-size:15px}\n  .ls-session-timeline>p {font-size:11px;line-height:1.6}\n  .ls-session-track {padding:8px}\n  .ls-envelope {height:100px}\n  .ls-envelope-fields {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:end}\n  .ls-envelope-fields>strong,.ls-envelope-fields>span {grid-column:1/-1}\n  .ls-desk[data-workspace=daw] .ls-envelope-fields input {width:100%;font-size:16px}\n  .ls-envelope-fields button {min-height:44px}\n  .ls-session-fields {display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}\n  .ls-desk[data-workspace=daw] .ls-session-fields input,.ls-session-fields select {width:100%;max-width:100%;font-size:16px}\n  .ls-session-fields button {min-height:44px}\n  .ls-desk[data-workspace=daw][data-track-session=true] .ls-channel-rack .ls-lanes {grid-column:1/-1}\n  .ls-desk[data-workspace=daw][data-track-session=true] .ls-lane-row[data-ls-channel=reverb] {grid-template-columns:100px minmax(60px,1fr)}\n  .ls-desk[data-workspace=daw][data-track-session=true] [data-ls=mix] {grid-column:1/-1;grid-row:4;justify-self:stretch;min-height:44px}\n}\n@media(max-width:560px) {\n  .ls-desk[data-workspace=daw] .ls-code {padding:12px 8px}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs {flex-wrap:nowrap;overflow-x:auto;gap:6px;padding:8px;scrollbar-width:thin}\n  .ls-desk[data-workspace=daw] .ls-daw-tabs button {flex:none;min-height:42px;padding:8px 12px}\n  .ls-desk[data-workspace=daw] .ls-transport {gap:8px;min-height:0}\n  .ls-desk[data-workspace=daw] .ls-transport output {padding:8px;flex-basis:auto;min-width:0;font-size:10px}\n  .ls-desk[data-workspace=daw] .ls-transport button {min-height:40px}\n  .ls-desk[data-workspace=daw] .ls-transport .ls-meter {display:none}\n  .ls-desk[data-workspace=daw] .ls-draft-bar {flex-wrap:wrap;gap:8px;margin-top:8px}\n  .ls-desk[data-workspace=daw] .ls-draft-bar button {min-height:40px}\n  .ls-desk[data-workspace=daw] .ls-tempo {grid-column:2;grid-row:1/3}\n  .ls-desk[data-workspace=daw] .ls-channel-rack>p {grid-column:1;font-size:10px}\n}\n/* Opt-in editor chrome. Documents, canvases, transport and geometry stay app-owned. */\n[data-editor-chrome]{\n  --editor-surface:light-dark(#f6f8f6,#1b2220);\n  --editor-raised:light-dark(#fff,#242e29);\n  --editor-ink:var(--cre8-view-fg,light-dark(#182620,#edf3ee));\n  --editor-muted:var(--cre8-view-fg-muted,light-dark(#536259,#a6b5ab));\n  --editor-border:var(--cre8-view-border,light-dark(#cbd5ce,#3b4941));\n  --editor-accent:light-dark(#246640,#b8f568);\n  --editor-selected:light-dark(#e0eddf,#34422e);\n  --editor-control-height:34px;\n  --editor-control-radius:5px;\n}\n[data-editor-chrome] [data-editor-strip]{\n  color:var(--editor-ink);background:var(--editor-surface);border-color:var(--editor-border);\n  gap:4px;min-width:0;\n}\n[data-editor-chrome] [data-editor-strip] :is(button,summary,select){\n  box-sizing:border-box;min-height:var(--editor-control-height);border-radius:var(--editor-control-radius);\n  font:12px/1.4 system-ui,sans-serif;color:var(--editor-ink);border-color:var(--editor-border);padding:6px 10px;\n}\n[data-editor-chrome] [data-editor-strip] select{background:var(--editor-raised)}\n[data-editor-chrome] [data-editor-strip] :is(button,summary){background:transparent}\n[data-editor-chrome] [data-editor-strip] :is([aria-selected=true],[aria-pressed=true]){\n  background:var(--editor-selected);color:var(--editor-accent);border-color:var(--editor-accent);\n}\n[data-editor-chrome] [data-editor-strip] :is(button,summary):hover:not(:disabled){background:var(--editor-selected)}\n[data-editor-chrome] [data-editor-strip] :is(button,select):disabled{opacity:.45;cursor:default}\n[data-editor-chrome] :is(button,summary,select,input,textarea,[role=separator]):focus-visible{\n  outline:2px solid var(--editor-accent);outline-offset:2px;\n}\n[data-editor-chrome] .ssr-action-menu>[role=menu]{background:var(--editor-raised);color:var(--editor-ink);border-color:var(--editor-border)}\n[data-editor-chrome] .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]){color:var(--editor-ink);min-height:var(--editor-control-height)}\n[data-editor-chrome] .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):is(:hover,:focus-visible):not(:disabled){background:var(--editor-selected);outline-color:var(--editor-accent)}\n[data-editor-chrome] .cre8-document-tab:has([aria-selected=true]){border-top-color:var(--editor-accent);background:var(--editor-selected)}\n[data-editor-chrome] .cre8-document-tab>.primitive-tabs-button{border-radius:0;border:0}\n[data-editor-chrome] .cre8-document-tab-close{padding:4px;min-width:28px}\n[data-editor-chrome] [data-tab-dirty]{color:var(--editor-accent)}\n[data-editor-chrome] button[data-ssr-menu-open]{min-height:var(--editor-control-height);min-width:var(--editor-control-height)}\n@media(pointer:coarse){\n  [data-editor-chrome]{--editor-control-height:44px}\n  [data-editor-chrome] [data-editor-strip] :is(button,summary,select){min-width:44px}\n  [data-editor-chrome] .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]){min-height:44px}\n}\n@media(prefers-reduced-motion:reduce){[data-editor-chrome] [data-editor-strip] *{scroll-behavior:auto;transition:none}}\n.ls-waveform{display:none;min-width:0;outline-offset:3px}\n.ls-waveform [data-audio=insert-panel]>h4,.ls-waveform [data-audio=insert-panel]>p,.ls-waveform [data-audio=insert-panel]>output{flex-basis:100%;margin:0}\n.ls-waveform [data-audio=insert-panel] label{flex-wrap:wrap;max-width:100%}.ls-waveform [data-audio=insert-panel] input,.ls-waveform [data-audio=insert-panel] select{min-width:0;max-width:100%;box-sizing:border-box}\n.ls-waveform [data-insert=status][data-error=true]{color:#ffb4a6}\n.ls-desk[data-workspace=daw][data-daw-view=waveform] .ls-waveform{display:block;order:-1}\n.ls-desk[data-workspace=daw][data-daw-view=waveform] [data-ls-pane],.ls-desk[data-workspace=daw][data-daw-view=waveform] .ls-draft-bar{display:none!important}\n.ls-waveform header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.ls-waveform h3{margin:3px 0;font-size:20px}.ls-waveform output{font:11px/1.5 ui-monospace,monospace;overflow-wrap:anywhere;color:#b8d4dd}\n.ls-wave-tools,.ls-wave-selection{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:12px 0}.ls-waveform label{display:flex;gap:5px;align-items:center;font-size:11px;color:#b5cad4}.ls-waveform input[type=checkbox]{width:auto}.ls-waveform input[type=number]{width:105px!important;box-sizing:border-box}.ls-wave-selection label{flex-direction:column;align-items:flex-start}.ls-waveform input[data-wave=db]{width:65px!important}\n.ls-waveform canvas{display:block;box-sizing:border-box;width:100%;height:280px;background:#0c1b25;border:1px solid #415b68;border-radius:6px;touch-action:none;cursor:crosshair}.ls-waveform canvas:focus-visible{outline:2px solid #c4ef83;outline-offset:3px}\n.ls-waveform input[data-wave=scroll]{display:block;width:100%;margin:8px 0;accent-color:#b8d699}.ls-waveform [data-wave=status]{min-height:18px;color:#bdd7c3}.ls-waveform [data-wave=status][data-error=true]{color:#ffb4a6}.ls-waveform details{font-size:11px;color:#9fb7c4}.ls-waveform [aria-busy=true]{opacity:.65}\n@media(max-width:560px){.ls-wave-tools button{min-height:40px}.ls-waveform canvas{height:250px}.ls-wave-selection{gap:8px}.ls-waveform header output{flex-basis:100%}}\n.ls-audio-timeline{margin:20px 0;padding:16px 0;border-top:1px solid #415b68;border-bottom:1px solid #415b68}.ls-audio-track{border:1px solid #344b57;border-radius:6px;margin:10px 0;padding:8px;min-width:0}.ls-audio-track .ls-wave-tools{margin:0 0 8px}.ls-audio-track input[data-track=pan]{width:85px}.ls-audio-lane{position:relative;height:68px;background:repeating-linear-gradient(90deg,#0c1b25 0%,#0c1b25 9.9%,#28404e 10%);overflow:hidden}.ls-audio-lane button{position:absolute;top:4px;height:60px;min-width:3px;overflow:hidden;padding:3px;border:1px solid #83aaa1;background:#254837;color:#e5f3de;text-align:left;touch-action:none;cursor:grab;white-space:nowrap}.ls-audio-lane button[aria-pressed=true]{border:2px solid #dfefa1;background:#416042}.ls-audio-lane canvas{position:absolute;inset:18px 0 0;width:100%;height:38px;border:0;border-radius:0;pointer-events:none;background:transparent}.ls-waveform select{max-width:260px}.ls-waveform input[data-audio=name],.ls-waveform input[data-track=name]{width:170px;max-width:100%}.ls-waveform [data-audio=record-status]{max-width:440px}.ls-waveform meter{width:110px}.ls-waveform [data-audio=save-status][data-error=true]{color:#ffb4a6}.ls-waveform .ls-audio-timeline p{font-size:11px;color:#9fb7c4}\n.ls-audio-playhead{position:absolute;top:0;height:100%;width:2px;background:#fff0ad;pointer-events:none;z-index:2}\n.ls-wave-generator{border:1px solid #415b68;border-radius:6px;padding:12px;margin:16px 0}.ls-wave-generator summary{font-size:13px;color:#d7ecc6;cursor:pointer}.ls-wave-generator [hidden]{display:none!important}.ls-wave-generator label{flex-direction:column;align-items:flex-start}.ls-wave-generator [data-audio=generator-status][data-error=true]{color:#ffb4a6}\n.ls-wave-geometry{min-width:0}.ls-wave-geometry p{max-width:72ch}.ls-wave-geometry [data-audio=generator-projection]{color:#b8d699;max-width:640px}.ls-wave-geometry svg{display:block;width:100%;height:auto}.ls-wave-geometry .ls-wave-tools>div{min-width:0}\n.ls-wave-geometry{border:1px solid #415b68;border-radius:8px;padding:16px;margin:12px 0;background:#14232b}.ls-wave-geometry h4{margin:0 0 6px;font-size:16px;color:#e1efda}.ls-wave-geometry-intro{margin:0 0 16px;color:#b7cbd1}.ls-wave-geometry-grid{display:grid;grid-template-columns:minmax(240px,1fr) minmax(260px,1.2fr);gap:20px;align-items:start}.ls-wave-geometry-controls>.ls-wave-tools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0}.ls-wave-geometry-controls label{display:flex;gap:6px;min-width:0}.ls-wave-geometry-controls select,.ls-wave-geometry-controls input{box-sizing:border-box;width:100%;max-width:100%;min-width:0}.ls-wave-geometry-summary{padding:12px;border-left:3px solid #b8d699;background:#20333c;color:#e1efda;font-size:12px;line-height:1.6}.ls-wave-geometry-visual{border:1px solid #344b57;border-radius:6px;padding:8px 12px}.ls-wave-geometry-visual .ls-wave-tools{margin:6px 0;align-items:center}.ls-wave-geometry-visual p{font-size:11px;color:#b7cbd1;flex:1;min-width:150px;margin:0}.ls-wave-geometry-help{border-top:1px solid #344b57;padding-top:12px;margin-top:12px}.ls-wave-geometry-help p{font-size:12px;color:#b7cbd1;line-height:1.6}.ls-wave-generator [data-audio-action=generate-wave]{background:#c5e6ac;color:#172b1c;border-color:#c5e6ac;font-weight:700}.ls-wave-generator [data-audio-action=generate-wave]:disabled{opacity:.45}.ls-wave-generator button:focus-visible,.ls-wave-generator summary:focus-visible,.ls-wave-generator input:focus-visible,.ls-wave-generator select:focus-visible{outline:2px solid #e2f3a9;outline-offset:3px}@media(max-width:1050px){.ls-wave-geometry-grid{grid-template-columns:minmax(0,1fr)}.ls-wave-geometry-visual{max-width:600px}}@media(max-width:440px){.ls-wave-geometry-controls>.ls-wave-tools{grid-template-columns:minmax(0,1fr)}.ls-wave-geometry{padding:12px}}\n.ls-wave-geometry-controls>.ls-wave-tools>.primitive-select,.ls-wave-geometry-controls>.ls-wave-tools>.primitive-input{display:flex;flex-direction:column;gap:6px;min-width:0}\n.ls-desk .ls-waveform .ls-wave-generator button[data-audio-action=generate-wave]{background:#c5e6ac;color:#172b1c;border-color:#c5e6ac}\n.ls-wave-analysis{border:1px solid #415b68;border-radius:6px;padding:12px;margin:12px 0}.ls-wave-analysis summary,.ls-spectrum-settings summary{cursor:pointer;color:#d7ecc6}.ls-waveform canvas[data-spectrum=plot]{height:220px;margin-top:12px;cursor:default;touch-action:auto}.ls-waveform canvas[hidden]{display:none!important}.ls-spectrum-results{max-width:100%;overflow:auto}.ls-spectrum-results table{width:100%;border-collapse:collapse;margin-top:12px;font-size:11px}.ls-spectrum-results th,.ls-spectrum-results td{padding:8px;text-align:left;border-bottom:1px solid #344b57;vertical-align:top}.ls-spectrum-results td:last-child{min-width:180px}.ls-spectrum-settings{flex:1}.ls-spectrum-settings label{flex-direction:column;align-items:flex-start}\n.ls-audio-automation { margin-top: 1rem; padding: 1rem; border: 1px solid #29434d; border-radius: 8px; background: #10212a; }\n.ls-automation-controls { display: flex; flex-wrap: wrap; align-items: end; gap: .65rem; }\n.ls-automation-controls input, .ls-automation-controls select { max-width: 16rem; }\n.ls-automation-curve { display: block; width: 100%; height: 140px; margin-top: 1rem; border: 1px solid #36525a; border-radius: 4px; background: #081319; cursor: crosshair; }\n/* Visuals pane: the DAW's own shader picture, shown in the code column beside\n   the piano roll. Hidden exactly the way .ls-piano is, so one DAW view is\n   visible at a time. */\n.ls-visual[data-visual-workspace=trace] .ls-field-views{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;}\n.ls-visual .ls-shader-preview canvas{width:100%;aspect-ratio:16/9;border:1px solid #415c6e;box-sizing:border-box;}\n.ls-visual[data-visual-workspace=trace] .ls-field-views figcaption{min-height:0;padding:0 0 7px;font:11px ui-monospace,monospace;color:#a8c4c9;}\n@media(max-width:700px){.ls-visual[data-visual-workspace=trace] .ls-field-views{grid-template-columns:minmax(0,1fr);}}\n[data-scope-mode=plate] [data-visual-shader-only],\n[data-scope-mode=plate] .ls-shader-live,\n[data-scope-mode=plate] .ls-visual-lock{display:none!important}\n[data-plate-slot] {min-width:0;margin-top:14px}\n[data-plate-slot] .primitive-card__body {display:flex;flex-wrap:wrap;gap:12px;align-items:end}\n[data-plate-slot] .primitive-input {display:flex;flex:1 1 150px;min-width:0;flex-direction:column;gap:6px}\n[data-plate-slot] input {width:100%;min-height:36px;box-sizing:border-box}\n[data-plate-slot] input[type=checkbox] {width:auto}\n[data-plate-slot] .primitive-text {flex-basis:100%;font-size:12px;line-height:1.6;overflow-wrap:anywhere}\n[data-plate-slot] .primitive-card__title {font-size:18px}\n[data-plate-slot] .primitive-card {border:1px solid #31505b;border-radius:10px;padding:16px}\n.ls-visual{display:none}\n.ls-desk[data-workspace=daw][data-daw-view=visual] .ls-visual{display:block;order:-1;min-width:0}\n.ls-desk[data-workspace=daw][data-daw-view=visual] [data-ls-pane]{display:none!important}\n.ls-desk[data-workspace=daw] .ls-visual header{display:flex;flex-wrap:wrap;align-items:end;justify-content:start;gap:10px;margin-bottom:10px}\n.ls-desk[data-workspace=daw] .ls-visual header>div{margin-right:auto}\n.ls-desk[data-workspace=daw] .ls-visual h3{margin:4px 0}\n.ls-desk[data-workspace=daw] .ls-visual label{font-size:10px;color:#a8bfce}\n.ls-desk[data-workspace=daw] .ls-visual header select{display:block;margin-top:4px;max-width:190px}\n.ls-visual-check{display:flex!important;align-items:center;gap:6px;padding-bottom:8px}\n.ls-visual-check input{accent-color:#b8d699;margin:0}\n.ls-visual-stage{position:relative;border:1px solid #415c6e;border-radius:4px;background:#050f16;overflow:hidden}\n.ls-desk[data-workspace=daw] .ls-visual canvas{display:block;width:100%;aspect-ratio:16/9;height:auto;background:#050f16}\n.ls-visual[data-visual-ready=false] .ls-visual-stage{background:repeating-linear-gradient(135deg,#0d1c26 0,#0d1c26 12px,#132534 12px,#132534 24px)}\n.ls-visual-lock{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:10px 0 14px;font-size:10px;color:#9db3c1}\n.ls-desk[data-workspace=daw] .ls-visual-lock output{padding:5px 9px;border:1px solid #47606b;border-radius:4px;background:#101c24;font:11px ui-monospace,monospace;color:#d7e9d9}\n.ls-visual[data-visual-live=true] .ls-visual-lock output{border-color:#7fa87c;color:#cfe9b8}\n.ls-visual-lock span{flex:1 1 240px;min-width:0}\n.ls-desk[data-workspace=daw] .ls-visual-code label{font-size:10px}\n.ls-desk[data-workspace=daw] .ls-visual-code label>span{float:right;color:#7d9aac}\n.ls-desk[data-workspace=daw] .ls-visual .ls-editor-frame{border-color:#415c6e;border-radius:4px;background:#0d1c26}\n.ls-desk[data-workspace=daw] .ls-visual .ls-editor-surface textarea{min-height:250px}\n.ls-desk[data-workspace=daw] .ls-visual .ls-gutter{background:#101f2a;color:#5c7c8c}\n.ls-visual-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0}\n.ls-visual-actions a{font-size:10px;margin-left:auto}\n.ls-desk[data-workspace=daw] .ls-visual [data-visual=status]{min-height:20px;margin:4px 0;font-size:11px;color:#bcd7a8;white-space:pre-wrap}\n.ls-desk[data-workspace=daw] .ls-visual [data-visual=status][data-error=true]{color:#ffb4a6}\n.ls-visual-inputs{margin-top:14px}\n.ls-desk[data-workspace=daw] .ls-visual-inputs summary{font-size:11px}\n.ls-desk[data-workspace=daw] .ls-visual-inputs dl{display:grid;grid-template-columns:132px minmax(0,1fr);gap:3px 12px;margin:10px 0;font-size:10px}\n.ls-desk[data-workspace=daw] .ls-visual-inputs dt{color:#bcee83;font-family:ui-monospace,monospace}\n.ls-desk[data-workspace=daw] .ls-visual-inputs dd{margin:0;color:#a0b7c6}\n.ls-desk[data-workspace=daw] .ls-visual>p{font-size:11px}\n@media(max-width:800px){.ls-desk[data-workspace=daw] .ls-visual-inputs dl{grid-template-columns:minmax(0,1fr)}.ls-desk[data-workspace=daw] .ls-visual-inputs dd{margin-bottom:6px}.ls-visual-actions a{margin-left:0}}\n/* Scope controls belong to the shared Visuals pane and wrap within narrow desks. */\n.ls-scope-controls { display:flex; flex-wrap:wrap; align-items:center; gap:12px; padding:12px; background:#091a22; border:1px solid #29434a; border-radius:8px; }\n.ls-scope-controls[hidden] { display:none; }\n.ls-scope-controls label { display:flex; align-items:center; gap:6px; font-size:12px; }\n.ls-scope-controls input[type=range] { width:100px; }\n.ls-scope-controls output { flex-basis:100%; color:#86dfb8; font:12px monospace; }\n.ls-visual[data-scope-mode]:not([data-scope-mode=\"shader\"]) [data-visual-shader-only] { display:none!important; }\n.ls-sound-source { display:block; margin:0 0 12px; color:var(--text-muted,#a6b7c3); font-size:12px; }\n.ls-field-experiment { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:12px 0 8px; }\n.ls-field-experiment label { display:flex; align-items:center; gap:8px; }\n.ls-field-panel .ls-field-save-help { font-size:12px; opacity:.75; margin:4px 0; }\n.ls-field-panel [data-field-saved] { display:block; font-size:12px; margin:4px 0 12px; }\n.ls-visual-surfaces { display:flex; gap:4px; padding:4px; border:1px solid #35505a; border-radius:8px; }\n.ls-visual-surfaces button[aria-pressed=true] { background:#234b43!important; border-color:#8bcfb5!important; color:#e2fff1!important; }\n.ls-shader-trace { display:flex; flex-wrap:wrap; align-items:center; gap:12px; padding:10px 0; }\n.ls-shader-trace output { flex:1 1 320px; color:#a8bfce; font-size:11px; }\n.ls-shader-live { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin-bottom:12px; padding:10px; border:1px solid #35505a; border-radius:6px; }\n.ls-shader-live label { display:flex; align-items:center; gap:6px; }\n.ls-shader-live input[type=range] { width:100px; }\n.ls-shader-live output { flex:1 1 320px; color:#a8bfce; font-size:11px; }\n.ls-visual[data-live-shader=true] .ls-shader-live { border-color:#8bcfb5; }\n.ls-scope-controls { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); margin-top:12px; align-items:start; }\n.ls-scope-section { display:flex; flex-wrap:wrap; gap:12px; min-width:0; margin:0; padding:12px; border:1px solid #35505a; border-radius:6px; }\n.ls-scope-section legend { color:#e1f0df; font-size:12px; padding:0 6px; }\n.ls-scope-section p,.ls-scope-fields p { flex-basis:100%; margin:0; font-size:11px; line-height:1.5; color:#9eb6c2; }\n.ls-scope-controls>output,.ls-scope-midi { grid-column:1/-1; }\n.ls-scope-controls select { max-width:100%; }\n.ls-scope-spatial { flex-basis:100%; }\n.ls-scope-fields { display:flex; flex-wrap:wrap; gap:12px; padding:12px 0; }\n.ls-spectrum-controls { grid-column:1/-1; }\n.ls-spectrum-controls[hidden],.ls-scope-fields[hidden] { display:none; }\n.ls-spectrum-controls input[type=file] { max-width:100%; width:240px; }\n[data-theremini-mapping] input[type=number] { width:76px; }\n.ls-visual[data-scope-mode=spectrum] .ls-scope-section:first-child>label:not(:first-of-type),\n.ls-visual[data-scope-mode=spectrum] .ls-scope-section:first-child>.ls-scope-spatial { display:none; }\n.ls-scope-controls summary { cursor:pointer; color:#b8d9cc; font-size:12px; }\n.ls-field-panel { margin:0 0 12px; padding:16px; border:1px solid #538a7b; border-radius:10px; background:linear-gradient(120deg,#102d2b,#101f2b); }\n.ls-field-panel[hidden] { display:none; }\n.ls-field-heading,.ls-field-actions { display:flex; flex-wrap:wrap; align-items:center; gap:12px; }\n.ls-field-heading h4 { margin:4px 0; font-size:18px; color:#dcfff0; }\n.ls-field-panel p { flex:1 1 240px; margin:0; color:#adc6cb; font-size:12px; line-height:1.5; }\n.ls-field-presets { display:flex; flex-wrap:wrap; gap:6px; margin:12px 0; }\n.ls-field-presets [aria-pressed=true],.ls-visual[data-field-active=true] [data-field-open] { background:#234b43!important; border-color:#8bcfb5!important; color:#e2fff1!important; }\n.ls-field-knobs { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:16px; margin:16px 0; }\n.ls-desk[data-workspace=daw] .ls-field-knobs label { display:grid; grid-template-columns:1fr auto; gap:7px; font-size:12px; }\n.ls-field-knobs input { grid-column:1; grid-row:2; width:100%; min-width:0; }\n.ls-field-knobs output { grid-column:2; grid-row:2; min-width:42px; color:#9df4ca; font:12px ui-monospace,monospace; }\n.ls-field-play{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(180px,1fr);gap:20px;align-items:center;margin:16px 0;}\n.ls-field-play .ls-field-knobs{grid-template-columns:1fr;margin:0;gap:12px;}\n.ls-field-pad-wrap{min-width:0;}\n.ls-field-pad-wrap .ls-field-pad{position:relative;display:block;width:100%;height:160px;padding:0;overflow:hidden;touch-action:none;user-select:none;cursor:crosshair;border:1px solid #547b80;border-radius:9px;background:radial-gradient(ellipse at center,#163c45,#071b25);}\n.ls-field-pad:focus-visible{outline:2px solid #adf7cf;outline-offset:3px;}\n.ls-field-pad svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ls-field-pad path{stroke:#578087;stroke-dasharray:3 5;fill:none;}\n.ls-field-pad circle{fill:#c7ffe3;stroke:#65dda7;stroke-width:2;}\n.ls-field-pad span{position:absolute;color:#b1d2d6;font:10px ui-monospace,monospace;pointer-events:none;}\n.ls-field-pad-x{bottom:8px;right:10px;}.ls-field-pad-y{top:8px;left:10px;}\n.ls-field-pad-wrap p{font-size:11px;margin-top:7px;}\n.ls-field-gesture{border-top:1px solid #35545c;padding-top:14px;margin:14px 0;}\n.ls-field-gesture-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0;}\n.ls-field-gesture-actions label{display:flex;align-items:center;gap:6px;font-size:12px;}\n.ls-field-gesture-actions input{width:90px;}.ls-field-gesture-actions select{max-width:230px;}\n.ls-field-gesture output{display:block;font-size:12px;color:#a4e4cd;min-height:20px;margin:10px 0;}\n.ls-field-gesture details{margin:10px 0;}.ls-field-gesture summary{cursor:pointer;font-size:12px;color:#d0e6e3;}\n.ls-field-gesture svg{display:block;width:100%;height:100px;background:#071b25;margin:10px 0;border-radius:6px;}\n.ls-field-gesture path{fill:none;stroke-width:1.5;vector-effect:non-scaling-stroke;}\n[data-field-gesture-curve=xw]{stroke:#86ebc0;}[data-field-gesture-curve=xy]{stroke:#87baf5;}[data-field-gesture-curve=interaction]{stroke:#e6b978;}\n.ls-field-gesture line{stroke:#fff;stroke-width:1;opacity:.65;vector-effect:non-scaling-stroke;}\n.ls-field-gesture .ls-field-gesture-legend{display:flex;gap:15px;font-size:10px;}\n.ls-field-gesture-legend span:nth-child(1){color:#86ebc0;}.ls-field-gesture-legend span:nth-child(2){color:#87baf5;}.ls-field-gesture-legend span:nth-child(3){color:#e6b978;}\n@media(max-width:650px){.ls-field-play{grid-template-columns:minmax(0,1fr);}}\n.ls-visual[data-field-active=true]:not([data-live-shader=true]) .ls-shader-live { display:none; }\n@media(max-width:800px){.ls-scope-controls{grid-template-columns:minmax(0,1fr)}.ls-scope-controls label{flex-wrap:wrap}.ls-visual-surfaces{width:100%}.ls-visual-surfaces button{flex:1}}\n\n[data-spectrum-slot] .primitive-card__body{display:flex;flex-wrap:wrap;align-items:center;gap:14px}\n[data-spectrum-slot] .primitive-input{display:flex;flex-direction:column;gap:6px;min-width:150px}\n[data-spectrum-slot] .primitive-input input[type=file]{max-width:240px}\n[data-spectrum-slot] .primitive-text{flex-basis:100%}\n[data-spectrum-slot] .primitive-card{padding:16px;border:1px solid #31505b;border-radius:8px}\n[data-spectrum-slot] .primitive-card h3{font-size:14px}\n[data-spectrum-slot] [data-cre8-host-ready=false]{opacity:.8}\n\n[data-spectrum-slot]{flex-basis:100%;min-width:0}\n[data-spectrum-slot] .primitive-card__title{font-size:14px}\n\n[data-cre8-host-component=\"virtual.shader-studio\"] {min-width:0;}\n[data-cre8-host-component=\"virtual.shader-studio\"] > .primitive-card > .primitive-card__body {display:flex;flex-wrap:wrap;gap:12px;align-items:center;}\n[data-cre8-host-component=\"virtual.shader-studio\"] .ssr-code-editor {flex-basis:100%;width:100%;min-width:0;}\n[data-cre8-host-component=\"virtual.shader-studio\"] .primitive-text,\n[data-cre8-host-component=\"virtual.shader-studio\"] .primitive-card {flex-basis:100%;min-width:0;overflow-wrap:anywhere;}\n[data-cre8-host-component=\"virtual.shader-studio\"] .primitive-select {min-width:160px;}\n\n/* Workspace panels share a canvas and one instrument transport. */\n.ls-field-views{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;margin:12px 0;}\n.ls-visual[data-field-active=true] .ls-field-views{grid-template-columns:repeat(2,minmax(0,1fr));}\n.ls-field-views figure{margin:0;min-width:0;}\n.ls-field-views figcaption{display:flex;flex-direction:column;gap:3px;min-height:48px;font-size:13px;color:#def5ef;}\n.ls-field-views figcaption span{font-size:11px;color:#9cb7c4;}\n.ls-field-geometry svg{display:block;width:100%;aspect-ratio:1;background:#071720;border:1px solid #35505a;border-radius:6px;box-sizing:border-box;}\n.ls-field-geometry [data-field-axes] line{stroke:#344d5a;stroke-dasharray:3 4;}\n.ls-field-geometry [data-field-axes] text{fill:#9db7c4;font:11px ui-monospace,monospace;}\n.ls-field-geometry label{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;margin:12px 0 8px;}\n.ls-field-geometry input{flex:1;min-width:100px;}\n.ls-field-geometry output{display:block;font:11px/1.7 ui-monospace,monospace;color:#c6e1dd;overflow-wrap:anywhere;}\n.ls-field-views p{font-size:11px;color:#9eb8c3;line-height:1.5;margin:8px 0;}\n.ls-field-legend{display:flex;align-items:center;gap:8px;margin-top:8px;font:10px ui-monospace,monospace;color:#aec6d0;}\n.ls-field-color-key{flex:1;height:5px;border-radius:4px;background:linear-gradient(90deg,hsl(210 85% 67%),hsl(122.5 85% 67%),hsl(35 85% 67%));}\n.ls-visual[data-field-active=true] .ls-field-sound .ls-visual-stage{aspect-ratio:1;}\n.ls-visual[data-field-active=true] .ls-field-sound canvas{display:block;width:100%;height:100%;aspect-ratio:1;}\n@media(max-width:800px){.ls-visual[data-field-active=true] .ls-field-views{grid-template-columns:minmax(0,1fr);}}\n.ls-visual [data-visual-for][hidden] {display:none!important;}\n.ls-visual-workspaces {display:flex;flex-wrap:wrap;gap:4px;width:100%;}\n.ls-visual-workspaces>button[aria-pressed=true]{background:#234b43!important;border-color:#8bcfb5!important;color:#e2fff1!important;}\n.ls-visual-workspaces>div>span {display:block;margin:0 0 6px;color:#8faeae;font-size:11px;}\n.ls-visual-workspaces .ls-visual-surfaces {width:auto;}\n.ls-visual-workspaces .ls-visual-surfaces button {flex:1;min-width:0;}\n.ls-workspace-description {color:#a8c4c9;line-height:1.5;margin:4px 0 14px;}\n.ls-instrument-bar {display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px;margin-bottom:12px;border:1px solid #35505a;border-radius:8px;background:#102329;}\n.ls-instrument-bar label {display:flex;align-items:center;gap:8px;}\n.ls-instrument-bar input[type=range] {width:120px;}\n.ls-instrument-bar p,.ls-instrument-bar output {flex-basis:100%;margin:0;color:#a8c4c9;font-size:11px;}\n.ls-visual>[data-visual-for=\"geometry\"] {margin-bottom:12px;}\n.ls-scope-controls {display:block;}\n.ls-scope-controls>output {display:block;margin-bottom:10px;}\n.ls-scope-controls details,.ls-shader-sound {margin-top:12px;}\n.ls-display-settings>summary,.ls-shader-sound>summary {cursor:pointer;color:#bed6cf;font-size:12px;padding:8px 0;}\n.ls-shader-sound {padding:0 12px;border:1px solid #35505a;border-radius:8px;}\n.ls-visual .ls-shader-sound .ls-shader-live {display:flex;}\n.ls-shader-editor,.ls-visual-help{margin-top:12px;border-top:1px solid #35505a;padding-top:8px;}\n.ls-shader-editor>summary,.ls-visual-help>summary{cursor:pointer;color:#bed6cf;font-size:12px;padding:6px 0;}\n.ls-visual-help{font-size:12px;color:#9eb6c2;}\n.ls-visual output:empty{display:none;}\n@media(max-width:600px){.ls-visual-workspaces{grid-template-columns:minmax(0,1fr);}.ls-instrument-bar label{flex-wrap:wrap;}}\n\n.ls-field-arrangement { margin:12px 0; padding:12px; border:1px solid #538a7b; border-radius:8px; }\n.ls-field-arrangement svg { display:block; width:100%; height:90px; margin:12px 0 6px; background:#091a22; }\n.ls-field-arrangement path { fill:none; stroke-width:1.5; vector-effect:non-scaling-stroke; }\n[data-field-arrangement-curve=xw] { stroke:#83dfb1; }\n[data-field-arrangement-curve=xy] { stroke:#81bfff; }\n[data-field-arrangement-curve=interaction] { stroke:#efbb84; }\n[data-field-arrangement-playhead] { stroke:#fff; stroke-width:1; }\n.ls-field-arrangement>label { display:flex; align-items:center; gap:12px; }\n.ls-field-arrangement input[type=range] { flex:1; min-width:0; }\n.ls-field-arrangement select { max-width:100%; }\n.ls-field-arrangement output { display:block; margin:8px 0; font:12px ui-monospace,monospace; color:#dcfff0; }\n\n.ls-field-arrangement .ls-field-gesture-legend { display:flex; gap:16px; margin:6px 0 10px; }\n.ls-field-arrangement .ls-field-gesture-legend span:nth-child(1) { color:#83dfb1; }\n.ls-field-arrangement .ls-field-gesture-legend span:nth-child(2) { color:#81bfff; }\n.ls-field-arrangement .ls-field-gesture-legend span:nth-child(3) { color:#efbb84; }\n\n/* Portable arrangement controls share the compact instrument layout. */\n.ls-field-arrangement .primitive-card {background:transparent;border:0;box-shadow:none;padding:0;}\n.ls-field-arrangement .primitive-card__header {padding:0 0 12px;border:0;}\n.ls-field-arrangement .primitive-card__title {font-size:16px;margin:0;}\n.ls-field-arrangement .primitive-card__body {display:flex;flex-wrap:wrap;gap:12px;align-items:end;padding:0;}\n.ls-field-arrangement .primitive-input,.ls-field-arrangement .primitive-select {flex:1 1 180px;min-width:0;}\n.ls-field-arrangement .primitive-checkbox {flex-basis:100%;}\n.ls-field-arrangement .primitive-checkbox__label {justify-content:flex-start;gap:8px;}\n.ls-field-arrangement .primitive-checkbox__text {flex:none;}\n.ls-field-arrangement .primitive-input__control,.ls-field-arrangement .primitive-select__control {width:100%;box-sizing:border-box;}\n.ls-field-arrangement .primitive-text {flex-basis:100%;font-size:12px;line-height:1.6;}\n.ls-field-arrangement [role=status] {color:#dcfff0;}\n</style>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<script type=\"application/json\" data-ls=\"presets\">{\n  \"pulse\": \"// Pulse engine · x is a hit, X is an accent\\ntempo 124\\nbars 2\\ninstrument bass saw_bass\\ninstrument arp bell\\nlevel reverb 0.25\\n\\npattern kick X...x...X...x... 0 8 0.8\\npattern snare ....x.......x... 0 8 0.65\\npattern hat ..x...x...x...x. 0 8 0.35\\nsequence bass C2,-,C2,G2,A#1,-,G2,- 0 8 0.65 0.7\\nsequence arp C4,D#4,G4,A#4,G4,D#4,C4,G3 0 8 0.45 0.45\\n\",\n  \"drift\": \"// Drift · long gates and soft space\\ntempo 72\\nbars 4\\ninstrument pads warm_pad\\ninstrument melody bell\\nlevel drums 0.45\\nlevel reverb 0.55\\n\\nsequence pads C3,D#3,G3,A#2 0 16 0.95 0.5\\nsequence melody G4,-,D#4,-,A#4,G4,-,D#4 0 16 0.6 0.5\\npattern kick x.......x....... 0 16 0.7\\npattern hat ..x...x...x...x. 0 16 0.3\\n\",\n  \"composer\": \"// Composer seed → editable score\\ntempo 110\\nbars 4\\ncompose house 7\\nclear bass\\ninstrument bass saw_bass\\nsequence bass C2,-,G2,-,A#1,-,G2,C2 0 16 0.75 0.8\\nlevel reverb 0.3\\n\",\n  \"console\": \"// Console · the same notes through inserts and sends\\ntempo 118\\nbars 2\\nkit house\\ninstrument bass saw_bass\\ninstrument arp bell\\n\\npattern kick x...x...x...x... 0 8 0.85\\npattern hat ..x...x...x...x. 0 8 0.3\\nsequence bass C2,-,G2,-,A#1,-,G2,- 0 8 0.7 0.75\\nsequence arp C4,D#4,G4,A#4 0 8 0.4 0.4\\n\\npan arp -0.5\\nfx bass filter mode=low_pass cutoff_hz=900 resonance=1.4\\nfx bass sat kind=tube drive=2.5 mix=0.6\\nfx drums comp threshold_db=-16 ratio=4 attack_ms=8\\nfx master eq3 low_gain_db=1.5 high_gain_db=2\\nmaster glue=1 threshold=-14 ratio=3\\n\",\n  \"echoes\": \"// Echoes · the delay bus, tempo synced\\ntempo 92\\nbars 2\\nlevel reverb 0.25\\ninstrument melody bell\\n\\npattern kick x.......x....... 0 8 0.7\\nsequence melody G4,-,D#4,-,A#4,-,G4,- 0 8 0.35 0.6\\nsequence bass C2,-,-,-,A#1,-,-,- 0 8 0.9 0.7\\n\\ndelay time=1/8. feedback=0.45 pingpong=1 damping=4200\\nsend melody delay 0.6\\nsend arp delay 0.3\\nlevel delay 0.8\\n\",\n  \"sweep\": \"// Sweep · automation on a fader and a filter\\ntempo 126\\nbars 4\\nkit analog_808\\ninstrument pads warm_pad\\n\\npattern kick x...x...x...x...x...x...x...x... 0 16 0.85\\nsequence pads C3,D#3,G3,A#3 0 16 0.95 0.5\\nsequence bass C2,C2,G2,A#1 0 16 0.6 0.75\\n\\nfx pads filter mode=low_pass cutoff_hz=400 resonance=3\\nautomation pads fx.1.cutoff_hz 0 300\\nautomation pads fx.1.cutoff_hz 12 6000\\nautomation pads fx.1.cutoff_hz 16 300\\nautomation bass gain 0 0.15\\nautomation bass gain 16 1\\nreverb preset=classic mix=0.4\\n\"\n}\n</script>"},"tag":"RawHtml"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-eyebrow","text":"CRE8 DAW / SONG WORKSPACE","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Song studio","variant":"h1"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Code notes, play the synth, shape the mix. Your next edit lands on a bar.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-nav":true,"href":"/view/virtual/performance","label":"Performance editor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-ls-nav":true,"href":"/view/audio/workbench","label":"Audio workbench"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Related audio areas","element":"nav"},"tag":"Section"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<style>.ssr-action-menu{position:relative;display:inline-block;font:12px/1.5 system-ui,sans-serif;color:var(--vp-ink,#e4f2ee)}\n.ssr-action-menu>summary{display:flex;align-items:center;gap:16px;cursor:pointer;list-style:none;padding:6px 10px;border:1px solid transparent;border-radius:5px;user-select:none}\n.ssr-action-menu>summary::-webkit-details-marker{display:none}\n.ssr-action-menu>summary:hover,.ssr-action-menu[open]>summary{background:#1b3229;border-color:#385747}\n.ssr-action-menu>summary>span{color:#97b3a4;font-size:11px}\n.ssr-action-menu>[role=menu]{position:absolute;top:calc(100% + 4px);left:0;z-index:50;min-width:190px;max-width:calc(100vw - 48px);padding:5px;border:1px solid #426151;border-radius:8px;background:#10221c;box-shadow:0 12px 32px #0008}\n.ssr-action-menu:not([open])>[role=menu]{display:none}\nbody .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]){display:block;width:100%;text-align:left;white-space:normal;border:0;border-radius:4px;padding:9px 12px;background:transparent;color:#e4f2ee;font:12px/1.5 system-ui;cursor:pointer}\nbody .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):hover,body .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):focus-visible{background:#2b4b3b;outline:2px solid #99cfad;outline-offset:-2px}\nbody .ssr-action-menu :is([role=menuitem],[role=menuitemcheckbox]):disabled{opacity:.4;cursor:default;background:transparent}\n.ssr-action-menu [role=menuitemcheckbox]::after{content:'○' / '';float:right;margin-left:12px}\n.ssr-action-menu [role=menuitemcheckbox][aria-checked=true]::after{content:'✓' / ''}\n.ssr-action-menu>summary:focus-visible{outline:2px solid #99cfad;outline-offset:2px}\n.ssr-action-menu[data-align=end]>[role=menu]{left:auto;right:0}\n</style><script>/* Shared enhancement of server-authored action menus; commands remain app-owned. */\n(() => {\n  if (window.__cre8SsrActionMenus) return;\n  window.__cre8SsrActionMenus = true;\n  const menuOf = node => node instanceof Element ? node.closest('[data-ssr-menu]') : null;\n  const trigger = menu => menu.querySelector('summary');\n  const targetOf = item => document.getElementById(item.dataset.ssrMenuTarget);\n  const available = target => target instanceof HTMLButtonElement && !target.hasAttribute('data-ssr-menu-target') && !target.matches(':disabled') && target.getAttribute('aria-disabled') !== 'true' && !target.closest('[inert]');\n  const returnFocus = new WeakMap();\n  function sync(menu) {\n    if (trigger(menu).getAttribute('aria-expanded') !== String(menu.open)) trigger(menu).setAttribute('aria-expanded', String(menu.open));\n    for (const item of menu.querySelectorAll('[data-ssr-menu-target]')) {\n      const target = targetOf(item);\n      item.disabled = !available(target);\n      const checked = target?.getAttribute('aria-pressed') ?? target?.getAttribute('aria-expanded');\n      item.setAttribute('role', checked === 'true' || checked === 'false' ? 'menuitemcheckbox' : 'menuitem');\n      if (checked === 'true' || checked === 'false') item.setAttribute('aria-checked', checked);\n      else item.removeAttribute('aria-checked');\n    }\n  }\n  const items = menu => [...menu.querySelectorAll('[data-ssr-menu-target]')].filter(item => !item.disabled);\n  function close(menu, focus = false) {\n    menu.open = false; sync(menu);\n    const previous = returnFocus.get(menu);\n    const anchor = previous?.id ? document.getElementById(previous.id) : previous;\n    if (focus) (anchor?.isConnected ? anchor : trigger(menu)).focus({preventScroll:true});\n    returnFocus.delete(menu);\n  }\n  function open(menu, last = false, context = null) {\n    document.querySelectorAll('[data-ssr-menu][open]').forEach(other => { if (other !== menu) close(other); });\n    returnFocus.set(menu, context?.owner || trigger(menu));\n    menu.open = true; sync(menu);\n    const list = items(menu);\n    menu.dataset.align = 'start';\n    const rect = menu.querySelector('[role=menu]').getBoundingClientRect();\n    menu.dataset.align = rect.right > innerWidth - 12 ? 'end' : 'start';\n    if (menu.hasAttribute('data-ssr-menu-floating')) {\n      const panel = menu.querySelector('[role=menu]'), anchor = trigger(menu).getBoundingClientRect();\n      const left = Math.max(12, Math.min(context ? context.x : anchor.left, innerWidth - rect.width - 12));\n      const preferredTop = context ? context.y : anchor.bottom + 4;\n      const top = Math.max(12, Math.min(preferredTop, innerHeight - rect.height - 12));\n      Object.assign(panel.style, {position:'fixed', left:left+'px', right:'auto', top:top+'px', maxHeight:'calc(100dvh - 24px)', overflowY:'auto'});\n    }\n    ((last ? list.at(-1) : list[0]) || trigger(menu)).focus({preventScroll:true});\n  }\n  // Consumers opt in with the ID of their server-rendered menu. No commands or selectors are evaluated.\n  const contextMenu = node => {\n    const owner = node instanceof Element ? node.closest('[data-ssr-context-menu]') : null;\n    const menu = owner && document.getElementById(owner.dataset.ssrContextMenu);\n    return menu?.matches('[data-ssr-menu]') ? menu : null;\n  };\n  document.addEventListener('contextmenu', event => {\n    const menu = contextMenu(event.target);\n    if (event.defaultPrevented || !menu || event.target.closest('input,textarea,select,[contenteditable=true]')) return;\n    const owner = event.target.closest('button,[tabindex]') || trigger(menu);\n    const rect = owner.getBoundingClientRect();\n    event.preventDefault(); open(menu, false, {owner, x:event.clientX || rect.left, y:event.clientY || rect.bottom});\n  });\n  document.addEventListener('click', event => {\n    const opener = event.target.closest?.('[data-ssr-menu-open]');\n    if (opener && !opener.matches(':disabled') && opener.getAttribute('aria-disabled') !== 'true') {\n      const linked = document.getElementById(opener.dataset.ssrMenuOpen);\n      if (linked?.matches('[data-ssr-menu]')) {\n        event.preventDefault();\n        const owner = (opener.id && document.getElementById(opener.id)) || opener;\n        const rect = owner.getBoundingClientRect();\n        open(linked, false, {owner, x:rect.left, y:rect.bottom});\n        return;\n      }\n    }\n    const menu = menuOf(event.target);\n    if (!menu) return;\n    if (event.target.closest('summary') === trigger(menu)) {\n      event.preventDefault(); menu.open ? close(menu) : open(menu); return;\n    }\n    const item = event.target.closest('[data-ssr-menu-target]');\n    if (!item || !menu.contains(item)) return;\n    const target = targetOf(item);\n    if (!available(target)) { sync(menu); return; }\n    close(menu, true);\n    target.click();\n  });\n  document.addEventListener('keydown', event => {\n    if (event.key === 'ContextMenu' || (event.shiftKey && event.key === 'F10')) {\n      const context = contextMenu(event.target);\n      if (context && !event.defaultPrevented && !event.target.closest('input,textarea,select,[contenteditable=true]')) {\n        const owner = (event.target.id && document.getElementById(event.target.id)) || event.target;\n        const rect = owner.getBoundingClientRect();\n        event.preventDefault(); open(context, false, {owner,x:rect.left,y:rect.bottom}); return;\n      }\n    }\n    const menu = menuOf(event.target);\n    if (!menu) return;\n    if (event.key === 'Escape' && menu.open) { event.preventDefault(); close(menu, true); return; }\n    if (event.key === 'Tab' && menu.open) { close(menu, true); return; }\n    if (event.isComposing || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n    const onTrigger = event.target === trigger(menu);\n    if (['ArrowLeft','ArrowRight'].includes(event.key) && menu.closest('[data-ssr-menubar]')) {\n      const peers = [...menu.closest('[data-ssr-menubar]').querySelectorAll('[data-ssr-menu]')];\n      const next = peers[(peers.indexOf(menu) + (event.key === 'ArrowRight' ? 1 : -1) + peers.length) % peers.length];\n      event.preventDefault(); menu.open ? open(next) : trigger(next).focus(); return;\n    }\n    if (onTrigger && ['ArrowDown', 'ArrowUp'].includes(event.key)) { event.preventDefault(); open(menu, event.key === 'ArrowUp'); return; }\n    if (!menu.open || !['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n    event.preventDefault(); sync(menu);\n    const list = items(menu), index = list.indexOf(document.activeElement);\n    const next = event.key === 'Home' ? 0 : event.key === 'End' ? list.length - 1 : (index + (event.key === 'ArrowDown' ? 1 : -1) + list.length) % list.length;\n    list[next]?.focus();\n  });\n  document.addEventListener('pointerdown', event => {\n    document.querySelectorAll('[data-ssr-menu][open]').forEach(menu => { if (!menu.contains(event.target)) close(menu); });\n  });\n  document.addEventListener('focusin', event => {\n    document.querySelectorAll('[data-ssr-menu][open]').forEach(menu => { if (!menu.contains(event.target)) close(menu); });\n  });\n  document.addEventListener('toggle', event => { if (event.target.matches?.('[data-ssr-menu]')) sync(event.target); }, true);\n  const closeFloating = event => document.querySelectorAll('[data-ssr-menu-floating][open]').forEach(menu => {\n    if (!(event.target instanceof Node) || !menu.contains(event.target)) close(menu);\n  });\n  document.addEventListener('scroll', closeFloating, true);\n  window.addEventListener('resize', closeFloating);\n  // A native preparation can enable exports while a menu is already open.\n  new MutationObserver(records => {\n    if (records.some(record => !record.target.hasAttribute('data-ssr-menu-target'))) {\n      document.querySelectorAll('[data-ssr-menu][open]').forEach(sync);\n    }\n  }).observe(document, {subtree:true, attributes:true, attributeFilter:['disabled','aria-disabled','aria-pressed','aria-expanded','inert']});\n})();\n</script><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-file-menu\"><summary role=\"button\" id=\"ls-file-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-file-menu-items\">File<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-file-menu-items\" role=\"menu\" aria-labelledby=\"ls-file-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-open-file\" >Open score / session…</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-save-file\" >Save music draft…</button></div></details><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-edit-menu\"><summary role=\"button\" id=\"ls-edit-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-edit-menu-items\">Edit<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-edit-menu-items\" role=\"menu\" aria-labelledby=\"ls-edit-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-undo-draft\" disabled>Undo draft replacement</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-revert-draft\" disabled>Restore prepared take</button></div></details><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-view-menu\"><summary role=\"button\" id=\"ls-view-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-view-menu-items\">View<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-view-menu-items\" role=\"menu\" aria-labelledby=\"ls-view-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-focus-editor\" >Focus editor</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-tracks\" >Tracks</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-instruments\" >Instruments</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-flow\" >Signal flow</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-clips\" >Clips</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-waveform\" >Waveform</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-piano\" >Piano roll</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-code\" >Music code</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-session\" >Session</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-midi\" >MIDI recorder</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-visual\" >Visuals</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-view-mixer\" >Mixer</button></div></details><details class=\"ssr-action-menu\" data-ssr-menu data-ssr-menu-floating id=\"ls-export-menu\"><summary role=\"button\" id=\"ls-export-menu-trigger\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"ls-export-menu-items\">Export song<span aria-hidden=\"true\">⌄</span></summary><div id=\"ls-export-menu-items\" role=\"menu\" aria-labelledby=\"ls-export-menu-trigger\"><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-export-wav\" disabled>Song audio · WAV (one loop)</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-export-midi\" disabled>Song notes · MIDI (.mid)</button><button type=\"button\" role=\"menuitem\" tabindex=\"-1\" data-ssr-menu-target=\"ls-export-session\" disabled>Song session (.json)</button></div></details>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"hidden":true},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Editor menus","className":"ls-menu-bar","data-editor-strip":"menu","data-ssr-menubar":true,"element":"nav"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"saved-state","text":"Draft stays in this browser tab","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.13","data-ls":"save-project","disabled":false,"hidden":true,"id":"ls-save-file","label":"Save draft file"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.14","data-ls":"open-project","disabled":false,"hidden":true,"id":"ls-open-file","label":"Open score / session"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"accept":".json,.cre8score,.txt","controlKey":"live-score.15","data-ls":"file","disabled":false,"hidden":true,"kind":"file","label":"","name":"live-score-15"},"tag":"Input"}],"kind":"view-node","props":{"hidden":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Switching pages preserves your draft. Prepare again to play.","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-project-bar","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.prepare","event":"click"},"hostOutputs":{"disabled":"prepareDisabled","text":"prepareLabel"},"id":"ls-prepare","label":"Prepare score"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.start","event":"click"},"hostOutputs":{"disabled":"startDisabled","text":"startLabel"},"id":"ls-start","label":"Start audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.stop","event":"click"},"hostOutputs":{"disabled":"stopDisabled"},"id":"ls-stop","label":"Stop"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.wav","event":"click"},"hostOutputs":{"disabled":"exportDisabled"},"id":"ls-export-wav","label":"Song audio · WAV (one loop)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.midi","event":"click"},"hostOutputs":{"disabled":"exportDisabled"},"id":"ls-export-midi","label":"Song notes · MIDI (.mid)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"audio.session.session","event":"click"},"hostOutputs":{"disabled":"exportDisabled"},"id":"ls-export-session","label":"Song session (.json)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","hostOutput":"exportLabel","id":"ls-export-state","role":"status","text":"Prepare a song to export WAV, MIDI or session JSON."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"audio.session","hostVersion":1,"id":"audio-session-transport"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"audio.session\",\"source_hash\":\"b250633a7bba1ba6586dcfa79b13e07eb16c7a9e44afe3f2b8c6713466f616e2\",\"context_hash\":\"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a\",\"tree_hash\":\"cb02892a985fd0398d538ea2d3cd683eba30037b5a36d45382bfe55b4553f8f3\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.prepare\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"prepareDisabled\\\",\\\"text\\\":\\\"prepareLabel\\\"},\\\"id\\\":\\\"ls-prepare\\\",\\\"label\\\":\\\"Prepare score\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.start\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"startDisabled\\\",\\\"text\\\":\\\"startLabel\\\"},\\\"id\\\":\\\"ls-start\\\",\\\"label\\\":\\\"Start audio\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.stop\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"stopDisabled\\\"},\\\"id\\\":\\\"ls-stop\\\",\\\"label\\\":\\\"Stop\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.wav\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"exportDisabled\\\"},\\\"id\\\":\\\"ls-export-wav\\\",\\\"label\\\":\\\"Song audio · WAV (one loop)\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.midi\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"exportDisabled\\\"},\\\"id\\\":\\\"ls-export-midi\\\",\\\"label\\\":\\\"Song notes · MIDI (.mid)\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"audio.session.session\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"exportDisabled\\\"},\\\"id\\\":\\\"ls-export-session\\\",\\\"label\\\":\\\"Song session (.json)\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"aria-live\\\":\\\"polite\\\",\\\"hostOutput\\\":\\\"exportLabel\\\",\\\"id\\\":\\\"ls-export-state\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Prepare a song to export WAV, MIDI or session JSON.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"audio.session\\\",\\\"hostVersion\\\":1,\\\"id\\\":\\\"audio-session-transport\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.prepare\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"prepareDisabled\",\"text\":\"prepareLabel\"},\"id\":\"ls-prepare\",\"label\":\"Prepare score\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.start\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"startDisabled\",\"text\":\"startLabel\"},\"id\":\"ls-start\",\"label\":\"Start audio\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.stop\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"stopDisabled\"},\"id\":\"ls-stop\",\"label\":\"Stop\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.wav\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"exportDisabled\"},\"id\":\"ls-export-wav\",\"label\":\"Song audio · WAV (one loop)\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.midi\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"exportDisabled\"},\"id\":\"ls-export-midi\",\"label\":\"Song notes · MIDI (.mid)\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"audio.session.session\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"exportDisabled\"},\"id\":\"ls-export-session\",\"label\":\"Song session (.json)\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"aria-live\":\"polite\",\"hostOutput\":\"exportLabel\",\"id\":\"ls-export-state\",\"role\":\"status\",\"text\":\"Prepare a song to export WAV, MIDI or session JSON.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"audio.session\",\"hostVersion\":1,\"id\":\"audio-session-transport\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"cb02892a985fd0398d538ea2d3cd683eba30037b5a36d45382bfe55b4553f8f3\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"audio.session","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-label":"Playback position","aria-live":"off","data-ls":"clock","role":"timer","text":"Stopped · prepare a score","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"meter","text":"","variant":"i"},"tag":"Text"}],"kind":"view-node","props":{"aria-hidden":"true","className":"ls-meter","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"className":"ls-live-badge","data-ls":"live-state","text":"NO LIVE TAKE","variant":"span"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-ls":"status","role":"status","text":"Connecting audio controls…","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.24","data-ls":"error-line","disabled":false,"hidden":true,"label":"Go to error line"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-transport-feedback","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Song transport","className":"ls-transport","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.3","data-daw-editor":"code","data-daw-view":"tracks","disabled":false,"id":"ls-view-tracks","label":"Tracks","pressed":true},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.4","data-daw-editor":"code","data-daw-view":"instruments","disabled":false,"id":"ls-view-instruments","label":"Instruments","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.5","data-daw-editor":"session","data-daw-view":"flow","disabled":false,"id":"ls-view-flow","label":"Signal flow","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.6","data-daw-editor":"piano","data-daw-view":"clips","disabled":false,"id":"ls-view-clips","label":"Clips","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.7","data-daw-open":"live-score-waveform","data-daw-view":"waveform","disabled":false,"id":"ls-view-waveform","label":"Waveform","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.8","data-daw-editor":"piano","data-daw-view":"piano","disabled":false,"id":"ls-view-piano","label":"Piano roll","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.9","data-daw-editor":"code","data-daw-view":"code","disabled":false,"id":"ls-view-code","label":"Music code","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.10","data-daw-editor":"session","data-daw-view":"session","disabled":false,"id":"ls-view-session","label":"Session","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.11","data-daw-open":"live-score-midi","data-daw-view":"midi","disabled":false,"id":"ls-view-midi","label":"MIDI recorder","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.12","data-daw-editor":"code","data-daw-view":"visual","disabled":false,"id":"ls-view-visual","label":"Visuals","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.13","data-daw-mixer":true,"disabled":false,"id":"ls-view-mixer","label":"Mixer","pressed":true},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"DAW workspace","className":"ls-daw-tabs","data-editor-strip":"modes","element":"nav"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"SESSION CHANNELS","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Your sound","variant":"h3"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Select a channel to reach its fader.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"01 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Drums","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Rhythm","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.18","data-daw-track":"drums","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"02 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Bass","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Low end","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.21","data-daw-track":"bass","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"03 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Pads","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Harmony","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.24","data-daw-track":"pads","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"04 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Melody","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Lead","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.27","data-daw-track":"melody","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"05 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Arp","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Motion","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.30","data-daw-track":"arp","disabled":false,"pressed":false},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"text":"06 "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Space","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Reverb return","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"controlKey":"daw-workspace.33","data-daw-track":"reverb","disabled":false,"pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"daw-workspace.36","data-ls-nav":true,"href":"/view/device/midi","label":"Device connections ↗"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Session channels","className":"ls-daw-library","element":"aside"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"PHRASES / NOTES","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Clips & notes","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.8","data-piano":"lane","default":"melody","disabled":false,"label":"Lane","name":"piano-roll-8","options":[{"label":"Bass","value":"bass"},{"label":"Pads","value":"pads"},{"label":"Melody","value":"melody"},{"label":"Arp","value":"arp"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.9","data-piano":"load","disabled":false,"label":"Load prepared lane"},"tag":"Action"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-piano":"status","role":"status","text":"Prepare a score, then load a lane to edit its notes.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Bar phrases","className":"ls-clip-grid","data-piano":"clips","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-clip-scroll","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-piano":"region-status","text":"Select a bar phrase to arrange its notes.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.17","data-piano":"region-target","default":"0","disabled":false,"kind":"number","label":"Destination beat","max":"16","min":"0","name":"piano-roll-17","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.18","data-piano":"region-move","disabled":true,"label":"Move phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.19","data-piano":"region-duplicate","disabled":true,"label":"Duplicate phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.20","data-piano":"region-delete","disabled":true,"label":"Delete phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.21","data-piano":"region-open","disabled":true,"label":"Open in piano roll"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-clip-controls","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Select or drag a bar phrase · double-click to edit notes. Overlapping phrases retain their notes. Bar groups rebuild when you load a lane.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Phrase arrangement","className":"ls-clip-editor","element":"section"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Note grid","className":"ls-piano-grid","data-piano":"grid","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Piano roll notes; scroll to explore pitches","className":"ls-piano-scroll","element":"div","tabIndex":0},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.27","data-piano":"pitch","default":"60","disabled":false,"kind":"number","label":"Pitch (MIDI)","max":"127","min":"0","name":"piano-roll-27","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.29","data-piano":"beat","default":"0","disabled":false,"kind":"number","label":"Beat (from 0)","max":"16","min":"0","name":"piano-roll-29","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.31","data-piano":"duration","default":"1","disabled":false,"kind":"number","label":"Length (beats)","max":"16","min":".0020833333333333333","name":"piano-roll-31","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.33","data-piano":"velocity","default":".8","disabled":false,"kind":"number","label":"Velocity","max":"1","min":"0","name":"piano-roll-33","step":".05"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.34","data-piano":"update","disabled":true,"label":"Update note"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.35","data-piano":"add","disabled":true,"label":"Add note"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.36","data-piano":"delete","disabled":true,"label":"Delete note"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.duplicate","data-piano":"duplicate","disabled":true,"label":"Duplicate note"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-piano-inspector","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.39","data-piano":"undo","disabled":true,"label":"Undo note edit"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.redo","data-piano":"redo","disabled":true,"label":"Redo note edit"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.quantize","data-piano":"quantize","disabled":true,"label":"Quantize lane"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"piano-roll.snap","data-piano":"snap","default":".25","label":"Snap (beats)","name":"piano-snap","options":[{"label":"1 beat","value":"1"},{"label":"½ beat","value":".5"},{"label":"¼ beat","value":".25"},{"label":"⅛ beat","value":".125"},{"label":"⅓ beat (triplet)","value":"0.3333333333333333"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"className":"ls-piano-hints","text":"Drag notes to move · drag right edge to resize · arrows move · Shift + arrows resize · Delete removes. Snap controls movement and lane quantization.","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"footer"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Note and phrase edits update your draft automatically. Prepare to hear changes. Your playing take stays intact.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Piano roll","className":"ls-piano","data-piano-roll":true,"element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"AUDIO EDITOR","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Waveform","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-wave":"info","text":"Import audio or open a prepared mix.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.10","data-audio":"name","default":"Untitled audio project","disabled":false,"kind":"text","label":"Project name","maxlength":256,"name":"waveform-editor-10"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.11","data-audio-action":"save","disabled":false,"label":"Save project"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.12","data-audio-action":"open","disabled":false,"label":"Open project…"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"accept":".cre8audio","controlKey":"waveform-editor.13","data-audio":"project-file","disabled":false,"hidden":true,"kind":"file","label":"","name":"waveform-editor-13"},"tag":"Input"}],"kind":"view-node","props":{"hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.15","data-audio":"recoveries","default":"","disabled":false,"label":"Local recovery","name":"waveform-editor-15","options":[{"label":"No saved recovery","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.16","data-audio-action":"recover","disabled":true,"label":"Restore recovery"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"save-status","role":"status","text":"Checking local recovery…","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Audio project","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Song in this project","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Keep the editable score and MIDI with your audio tracks. Update song audio after preparing edits. The project mix plays one song pass from time zero.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-update","data-audio-action":"song-update","disabled":false,"label":"Update song audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-remove","data-audio-action":"song-remove","disabled":false,"label":"Remove song audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-gain","data-audio":"song-gain","default":"0","disabled":false,"kind":"number","label":"Song gain dB","max":"24","min":"-60","name":"waveform-editor-song-gain","step":"0.5"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.song-mute","data-audio":"song-mute","default":false,"disabled":false,"kind":"checkbox","label":"Mute song audio","name":"waveform-editor-song-mute"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"song-status","text":"Prepare your song, then Update song audio.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Song in project","className":"ls-audio-project","data-audio":"song-panel","element":"section"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Channel inserts","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-channel","data-insert":"channel","disabled":true,"label":"Insert channel","name":"waveform-editor-insert-channel","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-entry","data-insert":"entry","disabled":true,"label":"Channel insert","name":"waveform-editor-insert-entry","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-name","data-insert":"name","default":"","disabled":true,"kind":"text","label":"Insert name","maxLength":80,"name":"waveform-editor-insert-name"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-add","data-insert-action":"add","disabled":true,"label":"Add current effect settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-load","data-insert-action":"load","disabled":true,"label":"Load insert settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-update","data-insert-action":"update","disabled":true,"label":"Update selected insert"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-toggle","data-insert-action":"toggle","disabled":true,"label":"Bypass / enable insert"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-up","data-insert-action":"up","disabled":true,"label":"Move insert up"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-down","data-insert-action":"down","disabled":true,"label":"Move insert down"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.insert-remove","data-insert-action":"remove","disabled":true,"label":"Remove insert"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-insert":"summary","text":"Add an audio track or song to set up channel inserts.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-insert":"status","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Choose EQ, filter, compressor, limiter or gate settings in Effects, then add them to a channel. Inserts run in order before channel gain and pan for project playback, overdub and stems. Source audio stays unchanged.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Channel inserts","className":"ls-wave-tools","data-audio":"insert-panel","element":"section"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.19","data-wave-action":"import","disabled":false,"label":"Import audio…"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"accept":"audio/*,.wav,.mp3,.flac,.ogg,.m4a","controlKey":"waveform-editor.20","data-wave":"file","disabled":false,"hidden":true,"kind":"file","label":"","name":"waveform-editor-20"},"tag":"Input"}],"kind":"view-node","props":{"hidden":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.21","data-wave-action":"prepared","disabled":false,"label":"Open prepared mix"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.22","data-wave-action":"export","disabled":true,"label":"Export WAV"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.23","data-wave-action":"export-selection","disabled":true,"label":"Export selection"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.25","data-audio":"sample-rate","default":"48000","disabled":false,"kind":"number","label":"Sample rate Hz","max":"192000","min":"8000","name":"waveform-editor-25","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.26","data-audio-action":"resample","disabled":false,"label":"Convert sample rate"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform files","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.28","data-wave-action":"play","disabled":true,"label":"Play selection / cursor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.29","data-wave-action":"stop","disabled":false,"label":"Stop"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.31","data-wave":"loop","default":false,"disabled":false,"label":"Loop selection","name":"waveform-editor-31"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.33","data-wave":"scrub","default":false,"disabled":false,"label":"Scrub on drag","name":"waveform-editor-33"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.34","data-wave-action":"zoom-in","disabled":true,"label":"Zoom +"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.35","data-wave-action":"zoom-out","disabled":true,"label":"Zoom −"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.36","data-wave-action":"fit","disabled":true,"label":"Fit audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.37","data-wave-action":"fit-selection","disabled":true,"label":"Fit selection"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform transport and navigation","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.40","data-spectrum":"view","default":"waveform","disabled":false,"label":"Audio view","name":"waveform-editor-40","options":[{"label":"Waveform","value":"waveform"},{"label":"Spectrogram","value":"spectrogram"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Spectrum settings"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.45","data-spectrum":"size","default":"2048","disabled":false,"label":"FFT size","name":"waveform-editor-45","options":[{"label":"256","value":"256"},{"label":"512","value":"512"},{"label":"1024","value":"1024"},{"label":"2048","value":"2048"},{"label":"4096","value":"4096"},{"label":"8192","value":"8192"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.47","data-spectrum":"window","default":"hann","disabled":false,"label":"FFT window","name":"waveform-editor-47","options":[{"label":"Hann","value":"hann"},{"label":"Hamming","value":"hamming"},{"label":"Blackman","value":"blackman"},{"label":"Rectangular","value":"rectangular"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.49","data-spectrum":"scale","default":"log","disabled":false,"label":"Frequency scale","name":"waveform-editor-49","options":[{"label":"Logarithmic","value":"log"},{"label":"Linear","value":"linear"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.51","data-spectrum":"min","default":"20","disabled":false,"kind":"number","label":"Minimum Hz","max":"95999","min":"0","name":"waveform-editor-51","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.53","data-spectrum":"max","default":"20000","disabled":false,"kind":"number","label":"Maximum Hz","max":"96000","min":"1","name":"waveform-editor-53","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.55","data-spectrum":"floor","default":"-100","disabled":false,"kind":"number","label":"Display floor dBFS","max":"23","min":"-160","name":"waveform-editor-55","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.57","data-spectrum":"ceiling","default":"0","disabled":false,"kind":"number","label":"Display ceiling dBFS","max":"24","min":"-159","name":"waveform-editor-57","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Applies to spectrogram and selection analysis. Larger FFT windows resolve closer frequencies but blur timing. Zoom in to inspect brief events: the overview samples a bounded number of time windows. Stereo channels remain separate. Frequency labels describe the display; selection and edits still operate on time ranges across all channels.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-spectrum-settings","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Waveform display","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-spectrum":"display-status","role":"status","text":"Switch to Spectrogram to inspect frequency content.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-wave=\"canvas\" height=\"280\" tabindex=\"0\" role=\"img\" aria-label=\"Audio waveform. Drag to select; Shift-click to extend; arrow keys move one sample; Shift-arrow extends the selection.\"></canvas>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"aria-label":"Waveform horizontal scroll","controlKey":"waveform-editor.61","data-wave":"scroll","default":"0","disabled":true,"kind":"range","label":"Waveform horizontal scroll","max":"0","min":"0","name":"waveform-editor-61","step":"1"},"tag":"Input"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.64","data-wave":"units","default":"seconds","disabled":false,"label":"Units","name":"waveform-editor-64","options":[{"label":"Seconds","value":"seconds"},{"label":"Samples","value":"samples"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.66","data-wave":"start","default":"0","disabled":true,"kind":"number","label":"Selection start","min":"0","name":"waveform-editor-66","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.68","data-wave":"end","default":"0","disabled":true,"kind":"number","label":"Selection end","min":"0","name":"waveform-editor-68","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.69","data-wave-action":"select-all","disabled":true,"label":"Select all"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-wave":"selection","text":"0 samples selected","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.71","data-wave-action":"zero-crossings","disabled":true,"label":"Snap to zero crossings"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-selection","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Analyze selection · spectrum and levels"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.75","data-spectrum":"analyze","data-spectrum-action":"analyze","disabled":true,"label":"Analyze selection"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.76","data-spectrum":"export","data-spectrum-action":"export","disabled":true,"label":"Export spectrum CSV"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-spectrum":"summary","role":"status","text":"Select a time range, then analyze. Results refresh only when requested.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-spectrum=\"plot\" width=\"800\" height=\"220\" role=\"img\" aria-label=\"Selection frequency spectrum. Left or mono is green; right is blue. Peak frequencies and levels are also listed in the table.\" hidden></canvas>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"className":"ls-spectrum-results","data-spectrum":"results","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Peak, RMS, DC and clipping cover every selected sample. Clipping counts samples at or above full scale; this is not a true-peak or LUFS meter. Spectrum levels use window-corrected tone amplitudes, not noise spectral density. Peak frequencies are estimates; spectral levels can read lower for tones between FFT bins. Long selections use up to 128 evenly spaced FFT windows; narrow selections use a smaller FFT. Correlation is +1 for matching channels, −1 for opposite polarity and undefined for a silent or constant channel. Results clear when audio, selection or spectrum settings change. CSV includes all FFT bins.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-analysis","element":"details"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.82","data-wave-action":"undo","disabled":true,"label":"Undo"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.83","data-wave-action":"redo","disabled":true,"label":"Redo"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.84","data-wave-action":"cut","disabled":true,"label":"Cut"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.85","data-wave-action":"copy","disabled":true,"label":"Copy"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.86","data-wave-action":"paste","disabled":true,"label":"Paste"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.87","data-wave-action":"delete","disabled":true,"label":"Delete"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.88","data-wave-action":"trim","disabled":true,"label":"Trim to selection"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform edits","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.90","data-wave-action":"silence","disabled":true,"label":"Silence"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.91","data-wave-action":"reverse","disabled":true,"label":"Reverse"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.92","data-wave-action":"fade-in","disabled":true,"label":"Fade in"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.93","data-wave-action":"fade-out","disabled":true,"label":"Fade out"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.94","data-wave-action":"dc","disabled":true,"label":"Remove DC offset"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.96","data-wave":"db","default":"-1","disabled":false,"kind":"number","label":"Level dB","max":"24","min":"-60","name":"waveform-editor-96","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.97","data-wave-action":"normalize","disabled":true,"label":"Normalize peak"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.98","data-wave-action":"gain","disabled":true,"label":"Apply gain"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Waveform processing","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Generate audio · geometry, beats, tones and noise"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.103","data-audio":"gen-kind","default":"tone","disabled":false,"label":"Generator","name":"waveform-editor-103","options":[{"label":"Tone","value":"tone"},{"label":"Binaural beats","value":"binaural"},{"label":"Monaural beats · mixed tones","value":"monaural"},{"label":"Geometry · E8 / tesseract","value":"geometry"},{"label":"Frequency sweep / chirp","value":"chirp"},{"label":"Amplitude modulation","value":"am"},{"label":"Noise","value":"noise"},{"label":"Rhythm clicks","value":"rhythm"},{"label":"DTMF keypad","value":"dtmf"},{"label":"Silence","value":"silence"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.105","data-audio":"gen-duration","default":"2","disabled":false,"kind":"number","label":"Duration s","max":"60","min":"0.001","name":"waveform-editor-105","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.107","data-audio":"gen-rate","default":"48000","disabled":false,"kind":"number","label":"Generator rate Hz","max":"192000","min":"8000","name":"waveform-editor-107","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.109","data-audio":"gen-channels","default":"1","disabled":false,"label":"Output channels","name":"waveform-editor-109","options":[{"label":"Mono","value":"1"},{"label":"Stereo","value":"2"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.111","data-audio":"gen-level","default":"-12","disabled":false,"kind":"number","label":"Peak level dBFS","max":"0","min":"-96","name":"waveform-editor-111","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.113","data-audio":"gen-fadeIn","default":"5","disabled":false,"kind":"number","label":"Generator fade in ms","max":"60000","min":"0","name":"waveform-editor-113","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.115","data-audio":"gen-fadeOut","default":"5","disabled":false,"kind":"number","label":"Generator fade out ms","max":"60000","min":"0","name":"waveform-editor-115","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.118","data-audio":"gen-wave","default":"sine","disabled":false,"label":"Wave shape","name":"waveform-editor-118","options":[{"label":"Sine","value":"sine"},{"label":"Square (smoothed edges)","value":"square"},{"label":"Sawtooth (smoothed edges)","value":"saw"},{"label":"Triangle","value":"triangle"},{"label":"Pulse (smoothed edges)","value":"pulse"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.120","data-audio":"gen-duty","default":"50","disabled":false,"kind":"number","label":"Pulse duty %","max":"99","min":"1","name":"waveform-editor-120","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"data-generator-duty":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"tone chirp am","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.123","data-audio":"gen-frequency","default":"440","disabled":false,"kind":"number","label":"Frequency / carrier Hz","max":"95999","min":"1","name":"waveform-editor-123","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.125","data-audio":"gen-phase","default":"0","disabled":false,"kind":"number","label":"Starting phase °","max":"360","min":"0","name":"waveform-editor-125","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"tone chirp am binaural monaural geometry","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.128","data-audio":"gen-endFrequency","default":"880","disabled":false,"kind":"number","label":"End frequency Hz","max":"95999","min":"1","name":"waveform-editor-128","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.130","data-audio":"gen-endLevel","default":"-12","disabled":false,"kind":"number","label":"End peak level dBFS","max":"0","min":"-96","name":"waveform-editor-130","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.132","data-audio":"gen-sweep","default":"log","disabled":false,"label":"Frequency interpolation","name":"waveform-editor-132","options":[{"label":"Logarithmic","value":"log"},{"label":"Linear","value":"linear"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"chirp","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Shape your sound","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"className":"ls-wave-geometry-intro","text":"Choose a shape and how it moves. Preview to listen, then generate a waveform to edit or export.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-shape","data-audio":"gen-geometryShape","default":"e8","label":"Geometry","name":"waveform-editor-geometry-shape","options":[{"label":"E8 · 240 roots in 8D","value":"e8"},{"label":"Tesseract · 16 vertices in 4D","value":"tesseract"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-rotation","data-audio":"gen-geometryRotation","default":"fixed","label":"Sound motion","name":"waveform-editor-geometry-rotation","options":[{"label":"Fixed angle · steady tone","value":"fixed"},{"label":"Follow rotation · evolving tone","value":"rotate"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-angle","data-audio":"gen-geometryAngle","default":"35","kind":"number","label":"Starting angle °","max":"360","min":"0","name":"waveform-editor-geometry-angle","step":"0.1"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-speed","data-audio":"gen-geometrySpeed","default":"15","label":"Rotation speed","name":"waveform-editor-geometry-speed","options":[{"label":"Slow · 6° / s","value":"6"},{"label":"Gentle · 15° / s","value":"15"},{"label":"Medium · 30° / s","value":"30"},{"label":"Fast · 60° / s","value":"60"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-harmonics","data-audio":"gen-geometryHarmonics","default":"24","kind":"number","label":"Harmonic slots","max":"64","min":"2","name":"waveform-editor-geometry-harmonics","step":"1"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.geometry-motion","data-audio":"gen-geometryMotion","default":"steady","label":"Volume envelope","name":"waveform-editor-geometry-motion","options":[{"label":"Steady","value":"steady"},{"label":"Amplitude modulation","value":"am"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-wave-geometry-summary","data-audio":"geometry-summary","role":"status","text":"Choose your sound motion.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-geometry-controls","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Choose Geometry to explore the projection, then Preview or generate audio.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Geometry projection and harmonic amplitudes","data-audio":"generator-projection","element":"div","role":"img"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-pressed":"false","controlKey":"waveform-editor.geometry-animate","data-audio":"geometry-animate","disabled":true,"label":"Animate picture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"geometry-animation-status","role":"status","text":"Silent picture preview. Pause to keep a starting angle.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-geometry-visual","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-geometry-grid","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"How geometry becomes sound","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Left: the projected shape. Right: harmonic strengths from low to high. Position maps to harmonics; projection height weights their amplitude. Dimmed bars are omitted to fit the sample rate.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Follow rotation changes the sound over the full Duration at the selected Rotation speed. Preview or generate pauses the picture and uses that starting angle. Fixed angle keeps a steady spectrum; the volume envelope can still pulse it.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Moving harmonic strengths are smoothed. High harmonics are omitted to leave room for rotation and modulation. Stereo repeats the same tone in both ears. Peak level is a ceiling, not matched loudness.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-geometry-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-geometry","data-generator-for":"geometry","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.135","data-audio":"gen-beat","default":"8","disabled":false,"kind":"number","label":"Beat difference Hz","max":"1000","min":"0","name":"waveform-editor-135","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.beat-curve","data-audio":"gen-beatCurve","default":"hold","label":"Beat movement","name":"waveform-editor-beat-curve","options":[{"label":"Hold","value":"hold"},{"label":"Linear sweep","value":"linear"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.end-beat","data-audio":"gen-endBeat","default":"8","disabled":true,"kind":"number","label":"End beat difference Hz","max":"1000","min":"0","name":"waveform-editor-end-beat","step":"any"},"tag":"Input"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Binaural sends one sine to each ear; use headphones for separation. Monaural mixes both sines into each output channel. Hold or sweep their frequency difference around a fixed carrier.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"binaural monaural","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.139","data-audio":"gen-modulation","default":"4","disabled":false,"kind":"number","label":"Modulation Hz","max":"1000","min":"0.01","name":"waveform-editor-139","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.141","data-audio":"gen-depth","default":"100","disabled":false,"kind":"number","label":"Modulation depth %","max":"100","min":"0","name":"waveform-editor-141","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"am geometry","data-generator-modulation":true,"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.144","data-audio":"gen-color","default":"pink","disabled":false,"label":"Noise color","name":"waveform-editor-144","options":[{"label":"Pink","value":"pink"},{"label":"White","value":"white"},{"label":"Brownian","value":"brown"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.146","data-audio":"gen-seed","default":"1","disabled":false,"kind":"number","label":"Repeatable seed","max":"4294967295","min":"1","name":"waveform-editor-146","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"noise","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.149","data-audio":"gen-bpm","default":"120","disabled":false,"kind":"number","label":"Tempo BPM","max":"400","min":"20","name":"waveform-editor-149","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.151","data-audio":"gen-beats","default":"4","disabled":false,"kind":"number","label":"Beats per bar","max":"16","min":"1","name":"waveform-editor-151","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.153","data-audio":"gen-swing","default":"0","disabled":false,"kind":"number","label":"Swing %","max":"75","min":"0","name":"waveform-editor-153","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"rhythm","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.156","data-audio":"gen-sequence","default":"123#","disabled":false,"kind":"text","label":"Key sequence","maxlength":128,"name":"waveform-editor-156"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.158","data-audio":"gen-toneMs","default":"150","disabled":false,"kind":"number","label":"Tone ms","max":"5000","min":"10","name":"waveform-editor-158","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.160","data-audio":"gen-gapMs","default":"75","disabled":false,"kind":"number","label":"Gap ms","max":"5000","min":"0","name":"waveform-editor-160","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Duration follows the sequence, with no trailing gap. Keys: 0–9, A–D, * and #.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","data-generator-for":"dtmf","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.163","data-audio-action":"generator-selection","disabled":false,"label":"Use selection duration and format"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.164","data-audio-action":"preview-generator","disabled":false,"label":"Preview audio (up to 5 s)"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.165","data-audio-action":"stop","disabled":false,"label":"Stop generator preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.166","data-audio-action":"generate-wave","disabled":false,"label":"Generate waveform"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.167","data-audio-action":"insert-generator","disabled":false,"label":"Insert / replace selection"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.168","data-audio-action":"generator-track","disabled":false,"label":"Add generated track"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Generate audio actions","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"generator-status","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Preview plays up to 5 seconds without changing the project. Generate replaces the waveform; Undo restores it. Use Export WAV to save the result. Insert replaces the selection or inserts at the cursor; format must match. Add track places a clip at the timeline cursor. Maximum 60 seconds / 64 MiB. Start quietly when auditioning tones.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-generator","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Filters, dynamics and noise repair"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.175","data-audio":"processor","default":"high-pass","disabled":false,"label":"Processor","name":"waveform-editor-175","options":[{"label":"High-pass filter","value":"high-pass"},{"label":"Low-pass filter","value":"low-pass"},{"label":"Parametric EQ","value":"eq"},{"label":"Compressor","value":"compress"},{"label":"Peak limiter","value":"limit"},{"label":"Noise gate","value":"noise-gate"},{"label":"Profile noise reduction","value":"noise-reduction"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.177","data-audio":"frequency","default":"1000","disabled":false,"kind":"number","label":"Frequency Hz","max":"96000","min":"20","name":"waveform-editor-177"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.179","data-audio":"eq-gain","default":"0","disabled":false,"kind":"number","label":"EQ gain dB","max":"24","min":"-24","name":"waveform-editor-179","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.181","data-audio":"eq-q","default":"0.707","disabled":false,"kind":"number","label":"EQ Q","max":"20","min":"0.1","name":"waveform-editor-181","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.183","data-audio":"threshold","default":"-18","disabled":false,"kind":"number","label":"Threshold dB","max":"0","min":"-96","name":"waveform-editor-183"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.185","data-audio":"ratio","default":"4","disabled":false,"kind":"number","label":"Ratio","max":"40","min":"1","name":"waveform-editor-185","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.187","data-audio":"attack","default":"10","disabled":false,"kind":"number","label":"Attack ms","max":"1000","min":"0.1","name":"waveform-editor-187","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.189","data-audio":"release","default":"100","disabled":false,"kind":"number","label":"Release ms","max":"5000","min":"1","name":"waveform-editor-189"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.191","data-audio":"noise-db","default":"12","disabled":false,"kind":"number","label":"Noise reduction dB","max":"36","min":"0","name":"waveform-editor-191","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.193","data-audio":"noise-sensitivity","default":"0","disabled":false,"kind":"number","label":"Sensitivity boost dB","max":"24","min":"-12","name":"waveform-editor-193","step":"0.5"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.195","data-audio":"noise-smoothing","default":"1","disabled":false,"kind":"number","label":"Frequency smoothing bands","max":"12","min":"0","name":"waveform-editor-195","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.196","data-audio-action":"noise-profile","disabled":false,"label":"Capture noise profile"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"noise-status","text":"No noise profile","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.198","data-audio-action":"preview-original","disabled":false,"label":"A: original selection"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.199","data-audio-action":"preview-effect","disabled":false,"label":"B: preview effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.200","data-audio-action":"preview-noise-residue","disabled":false,"label":"Listen to removed noise"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.201","data-audio-action":"stop","disabled":false,"label":"Stop preview / cancel repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.202","data-audio-action":"apply-effect","disabled":false,"label":"Apply effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"effect-status","role":"status","text":"Choose a processor; preview before applying.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Processing uses the selected audio. Filters use frequency; EQ also uses gain and Q (band width); dynamics use threshold. Compression links stereo channels. The limiter applies an immediate peak ceiling. For noise repair, capture a noise-only passage, then select the audio to clean. Sensitivity boosts the measured noise power; higher values remove more signal. Smoothing spreads gains over neighboring FFT bands; 0 disables it. Listen to removed noise to check what would be lost. A/B previews restart at the same selection start, up to five seconds, with short audition fades and no automatic level matching. Apply commits the full selection with Undo available. Noise profiling and reduction support up to 30 seconds.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Pitch and time · transpose and change tempo"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.209","data-audio":"pitch-semitones","default":"0","disabled":false,"kind":"number","label":"Pitch semitones","max":"12","min":"-12","name":"waveform-editor-209","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.211","data-audio":"pitch-cents","default":"0","disabled":false,"kind":"number","label":"Pitch cents","max":"100","min":"-100","name":"waveform-editor-211","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.213","data-audio":"tempo-percent","default":"0","disabled":false,"kind":"number","label":"Tempo change %","max":"100","min":"-50","name":"waveform-editor-213","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.215","data-audio":"pitch-size","default":"2048","disabled":false,"label":"Pitch/time FFT window","name":"waveform-editor-215","options":[{"label":"1024","value":"1024"},{"label":"2048","value":"2048"},{"label":"4096","value":"4096"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.217","data-audio":"pitch-transients","default":false,"disabled":false,"label":"Protect transient attacks","name":"waveform-editor-217"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.219","data-audio":"pitch-formants","default":false,"disabled":false,"label":"Preserve formants (experimental)","name":"waveform-editor-219"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.221","data-audio":"from-bpm","default":"120","disabled":false,"kind":"number","label":"Original BPM","max":"400","min":"20","name":"waveform-editor-221","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.223","data-audio":"to-bpm","default":"120","disabled":false,"kind":"number","label":"Target BPM","max":"400","min":"20","name":"waveform-editor-223","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.224","data-audio-action":"pitch-bpm","disabled":false,"label":"Use BPM conversion"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"pitch-summary","role":"status","text":"Select audio to change pitch or tempo.","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.227","data-audio-action":"pitch-original","disabled":false,"label":"A: original before pitch/time"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.228","data-audio-action":"pitch-preview","disabled":false,"label":"B: preview pitch / tempo"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.229","data-audio-action":"stop","disabled":false,"label":"Stop preview / cancel pitch/time"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.230","data-audio-action":"pitch-apply","disabled":false,"label":"Apply pitch / tempo"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"pitch-status","role":"status","text":"Pitch and tempo are independent. Zero leaves that parameter unchanged.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Positive tempo makes audio shorter; −50% doubles its duration and +100% halves it. Pitch totals −12 to +12 semitones, including cents. Input: up to 30 seconds; output: up to 60 seconds, within 64 MiB processing buffers. Select at least one FFT window. Larger windows favor sustained tones; smaller windows retain more timing detail. Transient protection resets phase at detected attacks. Experimental formant preservation estimates the broad spectral envelope and can color the sound; compare previews on your material. Preview starts at the selection beginning and plays up to five output seconds. Apply replaces only the selection, shifts following waveform audio, and keeps Undo. Stop or parameter changes cancel an unfinished render.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-audio":"pitch-panel","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Targeted repair · clicks, gaps and clipping"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.237","data-audio":"repair-kind","default":"clicks","disabled":false,"label":"Repair tool","name":"waveform-editor-237","options":[{"label":"Remove isolated clicks","value":"clicks"},{"label":"Interpolate selected gap","value":"gap"},{"label":"Reconstruct clipped peaks","value":"clipping"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.239","data-audio":"repair-threshold","default":"0.9","disabled":false,"kind":"number","label":"Repair threshold (amplitude)","max":"1","min":"0.05","name":"waveform-editor-239","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.241","data-audio":"repair-width","default":"16","disabled":false,"kind":"number","label":"Maximum repair width (samples)","max":"128","min":"1","name":"waveform-editor-241","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.242","data-audio-action":"repair-original","disabled":false,"label":"A: original before repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.243","data-audio-action":"repair-preview","disabled":false,"label":"B: preview targeted repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.244","data-audio-action":"repair-apply","disabled":false,"label":"Apply targeted repair"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.245","data-audio-action":"stop","disabled":false,"label":"Stop / cancel targeted repair"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"repair-status","role":"status","text":"Select the damaged audio and preview first.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Click threshold is the minimum sample jump; lower values detect smaller spikes and may alter transients. Clipping threshold is the absolute peak level of damaged samples; set it to the recorded clipping level. Repairs use neighboring intact samples and keep duration. Gap repair needs a selection of 1–128 samples with two intact samples on each side. Automatic tools skip damage wider than the width limit or without intact boundaries. Reconstructed peaks can exceed full scale; lower gain before exporting. These estimates cannot recover the original lost recording. Maximum selection: 30 seconds.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-audio":"repair-panel","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Markers, regions and volume envelope"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.252","data-precision":"name","default":"Region 1","disabled":false,"kind":"text","label":"Marker or region name","maxlength":100,"name":"waveform-editor-252"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.253","data-precision-action":"label-add","disabled":false,"label":"Name selection / cursor"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.255","data-precision":"labels","default":"","disabled":false,"label":"Saved marker or region","name":"waveform-editor-255","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.256","data-precision-action":"label-update","disabled":false,"label":"Update name and range"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.257","data-precision-action":"label-remove","disabled":false,"label":"Remove label"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-precision=\"envelope\" width=\"640\" height=\"120\" style=\"width:100%;height:120px;touch-action:none\" aria-label=\"Volume envelope draft\"></canvas>"},"tag":"RawHtml"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.261","data-precision":"time","default":"0","disabled":false,"kind":"number","label":"Envelope time s","min":"0","name":"waveform-editor-261","step":"any"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.263","data-precision":"gain","default":"1","disabled":false,"kind":"number","label":"Envelope linear gain","max":"2","min":"0","name":"waveform-editor-263","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.264","data-precision-action":"point-set","disabled":false,"label":"Set envelope point"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.266","data-precision":"points","default":"","disabled":false,"label":"Envelope point","name":"waveform-editor-266","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.267","data-precision-action":"point-remove","disabled":false,"label":"Remove point"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.268","data-precision-action":"envelope-clear","disabled":false,"label":"Clear envelope draft"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.269","data-precision-action":"envelope-apply","disabled":false,"label":"Apply envelope to selection"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-precision":"status","role":"status","text":"Click or drag the envelope to shape volume, or enter exact values.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"The envelope spans the whole waveform. Gain 1 is unchanged, 0 is silence, 2 is twice the amplitude. Points interpolate linearly; the first and last gains extend to the edges. It is a draft until Apply renders the selected range and clears the draft. Undo restores both. Markers, regions and envelope drafts save in audio projects and follow time edits. Up to 256 labels and 128 points.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Non-destructive effect rack"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.276","data-audio":"rack-family","default":"apply-effect","disabled":false,"label":"Rack effect family","name":"waveform-editor-276","options":[{"label":"Filters / dynamics / noise","value":"apply-effect"},{"label":"Pitch / tempo","value":"pitch-apply"},{"label":"Targeted repair","value":"repair-apply"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.278","data-audio":"rack-name","disabled":false,"kind":"text","label":"Rack effect name","maxlength":80,"name":"waveform-editor-278","placeholder":"Optional effect name"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.279","data-audio-action":"rack-add","disabled":false,"label":"Add current settings to rack"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.281","data-audio":"rack-entry","default":"","disabled":false,"label":"Rack effect","name":"waveform-editor-281","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.282","data-audio-action":"rack-load","disabled":false,"label":"Edit selected rack settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.283","data-audio-action":"rack-update","disabled":false,"label":"Update selected rack effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.284","data-audio-action":"rack-toggle","disabled":false,"label":"Bypass / enable effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.285","data-audio-action":"rack-up","disabled":false,"label":"Move effect earlier"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.286","data-audio-action":"rack-down","disabled":false,"label":"Move effect later"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.287","data-audio-action":"rack-remove","disabled":false,"label":"Remove rack effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"rack-summary","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.290","data-audio-action":"rack-original","disabled":false,"label":"A: original before rack"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.291","data-audio-action":"rack-preview","disabled":false,"label":"B: preview effect rack"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.292","data-audio-action":"rack-export","disabled":false,"label":"Export selection through rack"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.293","data-audio-action":"rack-apply","disabled":false,"label":"Render rack into waveform and bypass"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.294","data-audio-action":"stop","disabled":false,"label":"Stop / cancel rack"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-audio":"rack-status","role":"status","text":"Set an effect's controls, choose its family here, then add it to the rack.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"The rack processes effects from top to bottom. Edit loads a node into its effect panel; Update captures those controls. Rack edits and settings save with the waveform and support Undo. Preview renders from the current selected source and plays up to five seconds; rack export downloads the whole processed selection. Ordinary waveform playback and export use source PCM. Render replaces the selection and bypasses every rack effect in one Undo step. Changing the rack does not automatically alter an existing preview; preview again to hear it. Start with up to 30 seconds; output is limited to 60 seconds / 64 MiB, and each processor retains its own limits. Gap repair uses intact samples outside the selection. This is an offline rack, not a real-time insert chain.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","data-render-controls":true,"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Effect presets and repeat"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.301","data-audio":"preset-family","default":"apply-effect","disabled":false,"label":"Preset effect family","name":"waveform-editor-301","options":[{"label":"Filters / dynamics / noise","value":"apply-effect"},{"label":"Pitch / tempo","value":"pitch-apply"},{"label":"Targeted repair","value":"repair-apply"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.303","data-audio":"preset-name","default":"My preset","disabled":false,"kind":"text","label":"Effect preset name","maxlength":80,"name":"waveform-editor-303"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.304","data-audio-action":"preset-save","disabled":false,"label":"Save current effect settings"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.306","data-audio":"presets","default":"","disabled":false,"label":"Saved effect preset","name":"waveform-editor-306","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.307","data-audio-action":"preset-load","disabled":false,"label":"Load effect settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.308","data-audio-action":"repeat-effect","disabled":false,"label":"Repeat last effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"preset-status","role":"status","text":"Presets are saved with this audio project. Loading changes controls only.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Choose the family whose current controls you want to save. Saving the same name replaces that preset. Noise recipes include the captured noise profile. Repeat applies the last successful filter, noise, pitch/time or targeted repair to the current selection with Undo. Shortcut: Ctrl/⌘+R while the waveform has focus. Up to 32 presets.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-wave-process","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Audio tracks","variant":"h3"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-audio":"timeline-info","text":"No audio clips","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.316","data-audio-action":"add-track","disabled":false,"label":"Add selection as track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.317","data-audio-action":"add-clip","disabled":false,"label":"Add selection to selected track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.318","data-audio-action":"play-mix","disabled":false,"label":"Play project mix"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.319","data-audio-action":"stop","disabled":false,"label":"Stop audio"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.320","data-audio-action":"export-mix","disabled":false,"label":"Export project mix WAV"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.321","data-audio-action":"undo","disabled":false,"label":"Undo timeline"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.322","data-audio-action":"redo","disabled":false,"label":"Redo timeline"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.324","data-audio":"cursor","default":"0","disabled":false,"kind":"number","label":"Timeline cursor s","min":"0","name":"waveform-editor-324","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.stem","data-audio":"stem","default":"","label":"Aligned stem","name":"waveform-editor-stem","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.export-stem","data-audio-action":"export-stem","disabled":false,"label":"Export selected stem WAV"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Native VST3 effects","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Process the selected aligned stem with a native effect. The render becomes a new audio track; your original audio stays editable.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.address","data-native-effect":"address","default":"http://127.0.0.1:5279","kind":"text","label":"Native host address","name":"waveform-native-address"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"autocomplete":"off","controlKey":"waveform.native.code","data-native-effect":"code","default":"","kind":"password","label":"Native host pairing code","maxlength":64,"name":"waveform-native-code"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.connect","data-native-action":"connect","disabled":false,"label":"Connect native host"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.module","data-native-effect":"module","default":"","label":"Native plugin","name":"waveform-native-module","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.inspect","data-native-action":"inspect","disabled":true,"label":"Inspect plugin"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.effect","data-native-effect":"effect","default":"","label":"Plugin effect","name":"waveform-native-effect","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.load","data-native-action":"load","disabled":true,"label":"Load effect"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.parameter","data-native-effect":"parameter","default":"","label":"Plugin parameter","name":"waveform-native-parameter","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.value","data-native-effect":"value","default":"","kind":"number","label":"Parameter value (0–1)","max":1,"min":0,"name":"waveform-native-value","step":0.001},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.tail","data-native-effect":"tail","default":"0","kind":"number","label":"Render tail seconds","max":30,"min":0,"name":"waveform-native-tail","step":0.1},"tag":"Input"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.save","data-native-action":"save","disabled":true,"label":"Store effect settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.render","data-native-action":"render","disabled":true,"label":"Render selected stem with VST3"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.cancel","data-native-action":"cancel","disabled":true,"label":"Cancel native job"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-native-effect":"status","text":"Connect a native effects host for this DAW. Load effect checks channel support without changing your audio.","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-native-effect":"saved","text":"No native effect settings stored in this project.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.preview","data-native-action":"preview","disabled":true,"label":"Prepare VST3 preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.original","data-native-action":"original","disabled":true,"label":"Original preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.processed","data-native-action":"processed","disabled":true,"label":"Processed preview"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.keep","data-native-action":"keep","disabled":true,"label":"Keep preview as track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform.native.discard","data-native-action":"discard","disabled":true,"label":"Discard preview"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Native effect audition","className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-native-effect":"preview-status","text":"Prepare a preview to compare before adding a track. Project, source or effect changes discard it.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Native VST3 effects","className":"ls-native-effects","data-native-effects":true,"element":"section"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-audio":"tracks","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"data-track":"label","text":"","variant":"strong"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.331","data-track":"name","disabled":false,"kind":"text","label":"Track name","maxlength":256,"name":"waveform-editor-331"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.333","data-track":"gain","disabled":false,"kind":"number","label":"Gain dB","max":"24","min":"-60","name":"waveform-editor-333","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.335","data-track":"pan","disabled":false,"kind":"range","label":"Pan","max":"1","min":"-1","name":"waveform-editor-335","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.337","data-track":"mute","default":false,"disabled":false,"label":"Mute","name":"waveform-editor-337"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.339","data-track":"solo","default":false,"disabled":false,"label":"Solo","name":"waveform-editor-339"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.340","data-track-remove":true,"disabled":false,"label":"Remove track"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-audio-lane","data-track":"lane","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-audio-track","element":"section"},"tag":"Section"}],"kind":"view-node","props":{"data-audio":"track-template","element":"template"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.344","data-audio":"clip","default":"","disabled":false,"label":"Selected clip","name":"waveform-editor-344","options":[{"label":"Select a clip","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.346","data-audio":"destination","default":"","disabled":false,"label":"Destination track","name":"waveform-editor-346","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.348","data-audio":"clip-at","default":"0","disabled":false,"kind":"number","label":"Clip start s","min":"0","name":"waveform-editor-348","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.350","data-audio":"clip-offset","default":"0","disabled":false,"kind":"number","label":"Source offset s","min":"0","name":"waveform-editor-350","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.352","data-audio":"clip-length","default":"0","disabled":false,"kind":"number","label":"Clip duration s","min":"0","name":"waveform-editor-352","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.354","data-audio":"clip-gain","default":"0","disabled":false,"kind":"number","label":"Clip gain dB","max":"24","min":"-60","name":"waveform-editor-354","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.356","data-audio":"clip-fade-in","default":"0","disabled":false,"kind":"number","label":"Fade in s","min":"0","name":"waveform-editor-356","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.358","data-audio":"clip-fade-out","default":"0","disabled":false,"kind":"number","label":"Fade out s","min":"0","name":"waveform-editor-358","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.359","data-audio-action":"update-clip","disabled":false,"label":"Apply clip settings"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.360","data-audio-action":"split","disabled":false,"label":"Split at cursor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.361","data-audio-action":"duplicate","disabled":false,"label":"Duplicate clip"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.362","data-audio-action":"delete","disabled":false,"label":"Delete clip"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.364","data-audio":"ripple","default":false,"disabled":false,"label":"Ripple following clips on this track","name":"waveform-editor-364"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.365","data-audio-action":"crossfade","disabled":false,"label":"Crossfade overlap"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.366","data-audio-action":"edit-clip","disabled":false,"label":"Copy clip to waveform"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Selected audio clip","className":"ls-wave-tools","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Track automation","variant":"h4"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Gain and pan follow project time after inserts. Click the curve to set a point, or enter exact values. Undo and Redo use timeline history.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.track","data-automation":"track","default":"","label":"Audio track","name":"automation-track","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.parameter","data-automation":"parameter","default":"gain","label":"Parameter","name":"automation-parameter","options":[{"label":"Gain (dB)","value":"gain"},{"label":"Pan","value":"pan"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.interpolation","data-automation":"interpolation","default":"linear","label":"Between points","name":"automation-interpolation","options":[{"label":"Linear ramp","value":"linear"},{"label":"Hold value","value":"hold"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.point","data-automation":"point","default":"","label":"Saved point","name":"automation-point","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.time","data-automation":"time","default":"0","kind":"number","label":"Time (seconds)","min":"0","name":"automation-time","step":"any"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.value","data-automation":"value","default":"0","kind":"number","label":"Value","max":"24","min":"-60","name":"automation-value","step":".5"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.cursor","data-automation-action":"cursor","label":"Use timeline cursor"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.set","data-automation-action":"set","label":"Set point"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.delete","data-automation-action":"delete","label":"Delete point"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"audio.automation.clear","data-automation-action":"clear","label":"Clear lane"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-automation-controls","element":"section"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<canvas width=\"900\" height=\"140\" data-automation=\"curve\" aria-label=\"Automation curve\" class=\"ls-automation-curve\"></canvas>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-automation":"status","role":"status","text":"Add an audio track to draw automation.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-audio-automation","data-automation-editor":"","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Select a clip to edit it. Drag clips to move them in time or between tracks. Left/right arrows on a clip move one sample; hold Ctrl/⌘ for one second. Clips and recorded takes are resampled to the timeline rate when added. Clip changes are non-destructive. Copy clip to waveform opens its source range for processing; add the result to the timeline when ready.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Audio clip timeline","className":"ls-audio-timeline","data-audio":"timeline","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Record audio"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.372","data-audio":"device","default":"","disabled":false,"label":"Microphone","name":"waveform-editor-372","options":[{"label":"System default input","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.373","data-audio-action":"devices","disabled":false,"label":"Refresh input devices"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.375","data-audio":"channels","default":"1","disabled":false,"label":"Channels","name":"waveform-editor-375","options":[{"label":"Mono","value":"1"},{"label":"Stereo","value":"2"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.377","data-audio":"overdub","default":false,"disabled":false,"label":"Play timeline while recording","name":"waveform-editor-377"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.379","data-audio":"monitor","default":false,"disabled":false,"label":"Monitor input (use headphones)","name":"waveform-editor-379"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.381","data-audio":"latency","default":"0","disabled":false,"kind":"number","label":"Input latency correction ms","max":"2000","min":"0","name":"waveform-editor-381","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.382","data-audio-action":"record","disabled":false,"label":"Record microphone"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.383","data-audio-action":"record-stop","disabled":true,"label":"Finish recording"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"html":"<meter data-audio=\"meter\" min=\"0\" max=\"1\" value=\"0\" aria-label=\"Microphone peak level\"></meter>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"data-audio":"record-status","role":"status","text":"Ready. Recording creates a new audio track at the timeline cursor.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Measure recording latency"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.391","data-audio-action":"calibrate","disabled":false,"label":"Measure round-trip latency"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"waveform-editor.392","data-audio-action":"use-latency","disabled":true,"label":"Use measured correction"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-audio":"latency-status","role":"status","text":"No measured correction.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-wave-tools","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Measure plays three quiet test tones and records 2.5 seconds with input monitoring off. Let the selected microphone hear the speakers, or connect an audio loopback cable. Keep levels low. The result includes output, input and acoustic travel time; remeasure when your audio route changes. Test audio is discarded. If the tones cannot be identified consistently, no correction is applied.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Capture stops at five minutes or 64 MiB of PCM. Input latency correction shifts the take earlier; calibrate it for your device. Microphone audio stays in this browser and your saved project.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-wave":"status","role":"status","text":"Import audio, open a prepared mix, or restore a saved audio project.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Editing help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Drag a range, or enter exact seconds or sample positions. Double-click selects all. Ctrl/⌘ + wheel zooms around the pointer; wheel scrolls. Space plays/stops; Ctrl/⌘ A, X, C, V, Z, Shift Z; Delete removes the range. Left/right moves one sample; hold Shift to extend. Home/End jumps to the audio edges. Scrub plays short previews as you drag.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Open prepared mix copies the prepared song; music code and song exports keep their own state. Audio project files include waveform edits, tracks, selection and undo history. Local recovery is browser-specific; save a project file for a portable copy. Each open editor writes a separate recovery. WAV export is 16-bit PCM. Browser imports may resample to the audio device rate. Undo retains up to 32 changes within a 128 MiB budget per editor. Timeline limits: 16 tracks, 128 clips, 64 MiB source PCM and 64 MiB stereo mix.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Waveform editor","className":"ls-waveform","data-waveform-editor":true,"element":"section","id":"live-score-waveform","tabIndex":0},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"SOUND DESIGN","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Create an instrument","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Design a patch, assign it to a musical channel, then Prepare score to hear it. Reuse its name in Music code.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.9","data-instrument":"name","default":"my_synth","disabled":false,"kind":"text","label":"Name","maxlength":48,"name":"instrument-editor-9","pattern":"[a-z][a-z0-9_]*","required":true},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.11","data-instrument":"lane","default":"melody","disabled":false,"label":"Channel","name":"instrument-editor-11","options":[{"label":"bass","value":"bass"},{"label":"pads","value":"pads"},{"label":"melody","value":"melody"},{"label":"arp","value":"arp"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.13","data-instrument":"base","default":"warm_pad","disabled":false,"label":"Starting patch","name":"instrument-editor-13","options":[{"label":"warm_pad","value":"warm_pad"},{"label":"bright_lead","value":"bright_lead"},{"label":"bell","value":"bell"},{"label":"hollow","value":"hollow"},{"label":"saw_bass","value":"saw_bass"},{"label":"sub_sine","value":"sub_sine"},{"label":"square_lead","value":"square_lead"},{"label":"triangle_keys","value":"triangle_keys"},{"label":"organ","value":"organ"},{"label":"pluck","value":"pluck"},{"label":"glass","value":"glass"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-instrument-fields","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Parameters"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Enable a parameter to override the starting patch.","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"osc1","label":"Enable Waveform","name":"enable-osc1"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"osc1","disabled":true,"label":"Waveform","name":"instrument-osc1","options":[{"label":"sine","value":"sine"},{"label":"triangle","value":"triangle"},{"label":"saw","value":"saw"},{"label":"square","value":"square"},{"label":"additive","value":"additive"}]},"tag":"Select"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"filter","label":"Enable Filter","name":"enable-filter"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"filter","disabled":true,"label":"Filter","name":"instrument-filter","options":[{"label":"none","value":"none"},{"label":"lp","value":"lp"},{"label":"hp","value":"hp"},{"label":"bp","value":"bp"},{"label":"notch","value":"notch"}]},"tag":"Select"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"osc1.detune","label":"Enable Detune (cents)","name":"enable-osc1.detune"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"osc1.detune","default":"0","disabled":true,"kind":"number","label":"Detune (cents)","max":"100","min":"-100","name":"instrument-osc1.detune","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"cutoff","label":"Enable Cutoff (Hz)","name":"enable-cutoff"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"cutoff","default":"20000","disabled":true,"kind":"number","label":"Cutoff (Hz)","max":"20000","min":"20","name":"instrument-cutoff","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"res","label":"Enable Resonance","name":"enable-res"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"res","default":"0","disabled":true,"kind":"number","label":"Resonance","max":"1","min":"0","name":"instrument-res","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.a","label":"Enable Attack (ms)","name":"enable-amp.a"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.a","default":"8","disabled":true,"kind":"number","label":"Attack (ms)","max":"8000","min":"0","name":"instrument-amp.a","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.d","label":"Enable Decay (ms)","name":"enable-amp.d"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.d","default":"120","disabled":true,"kind":"number","label":"Decay (ms)","max":"8000","min":"0","name":"instrument-amp.d","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.s","label":"Enable Sustain","name":"enable-amp.s"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.s","default":"0.7","disabled":true,"kind":"number","label":"Sustain","max":"1","min":"0","name":"instrument-amp.s","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"amp.r","label":"Enable Release (ms)","name":"enable-amp.r"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"amp.r","default":"180","disabled":true,"kind":"number","label":"Release (ms)","max":"8000","min":"0","name":"instrument-amp.r","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"gain","label":"Enable Gain","name":"enable-gain"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"gain","default":"0.3","disabled":true,"kind":"number","label":"Gain","max":"1","min":"0","name":"instrument-gain","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-param-enable":"pan","label":"Enable Pan","name":"enable-pan"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"data-instrument-param":"pan","default":"0","disabled":true,"kind":"number","label":"Pan","max":"1","min":"-1","name":"instrument-pan","step":"any"},"tag":"Input"}],"kind":"view-node","props":{},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-instrument-fields","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"element":"details","open":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.18","data-instrument":"add-track","disabled":false,"label":"Add instrument track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"instrument-editor.19","data-instrument":"update-track","disabled":true,"label":"Update selected track"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"className":"ls-legacy-patch","controlKey":"instrument-editor.20","data-instrument":"create","disabled":false,"label":"Assign to score channel"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-instrument":"status","role":"status","text":"Custom instruments are saved with your score draft.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Instrument builder","className":"ls-instrument-editor","data-instrument-editor":true,"element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Prepare a score to open its tracks, clips and envelopes.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Track session","className":"ls-session-editor","data-session-editor":true,"element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Visuals","variant":"h3"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.7","data-visual":"fullscreen","disabled":false,"label":"Fullscreen"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.12","data-scope-surface":"shader","data-visual-workspace":"shader","disabled":false,"label":"Shaders","pressed":true},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-shader-scope","data-scope-surface":"trace","data-visual-workspace":"trace","disabled":false,"label":"Shader → scope","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.13","data-scope-surface":"scope","data-visual-workspace":"scope","disabled":false,"label":"Oscilloscope","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.14","data-scope-surface":"spectrum","data-visual-workspace":"spectrum","disabled":false,"label":"Spectrogram","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.18","data-scope-surface":"geometry","data-visual-workspace":"geometry","disabled":false,"label":"Geometry","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.19","data-field-open":true,"data-visual-workspace":"field","disabled":false,"label":"4D field","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.20","data-scope-surface":"plate","data-visual-workspace":"plate","disabled":false,"label":"Resonant plate","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Visual workspace","className":"ls-visual-workspaces","element":"nav"},"tag":"Section"}],"kind":"view-node","props":{"element":"header"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","className":"ls-sound-source","data-scope":"source","role":"status","text":"Sound · stopped","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Geometry instrument"},"tag":"Text"}],"kind":"view-node","props":{"element":"legend"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Vector shape","controlKey":"visual-performance-visual.36","data-scope":"shape","default":"circle","disabled":false,"label":"From","name":"visual-performance-visual-36","options":[{"label":"Circle","value":"circle"},{"label":"Lissajous 3:2","value":"lissajous"},{"label":"Diamond","value":"diamond"},{"label":"Rose","value":"rose"},{"label":"Orbit knot","value":"orbit"},{"label":"Five-point star","value":"star"},{"label":"Triangle","value":"triangle"},{"label":"Hexagon","value":"hexagon"},{"label":"Spirograph","value":"spirograph"},{"label":"Torus knot","value":"torus"},{"label":"Circle grid 3 × 3","value":"grid"},{"label":"Honeycomb","value":"honeycomb"},{"label":"Smooth 4D field","value":"field"},{"label":"Captured shader contour","value":"shader"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Target shape","controlKey":"visual-performance-visual.38","data-scope":"target","default":"rose","disabled":false,"label":"To","name":"visual-performance-visual-38","options":[{"label":"Rose","value":"rose"},{"label":"Circle","value":"circle"},{"label":"Lissajous 3:2","value":"lissajous"},{"label":"Diamond","value":"diamond"},{"label":"Orbit knot","value":"orbit"},{"label":"Five-point star","value":"star"},{"label":"Triangle","value":"triangle"},{"label":"Hexagon","value":"hexagon"},{"label":"Spirograph","value":"spirograph"},{"label":"Torus knot","value":"torus"},{"label":"Circle grid 3 × 3","value":"grid"},{"label":"Honeycomb","value":"honeycomb"},{"label":"Smooth 4D field","value":"field"},{"label":"Captured shader contour","value":"shader"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Shape morph","controlKey":"visual-performance-visual.40","data-scope":"morph","default":"0","disabled":false,"kind":"range","label":"Morph","max":"1","min":"0","name":"visual-performance-visual-40","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Morph motion rate","controlKey":"visual-performance-visual.42","data-scope":"motion","default":"0","disabled":false,"kind":"range","label":"Motion Hz","max":"2","min":"0","name":"visual-performance-visual-42","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Journey seed","controlKey":"visual-performance-visual.44","data-scope":"seed","default":"1","disabled":false,"kind":"number","label":"Seed","max":"4294967295","min":"0","name":"visual-performance-visual-44","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.45","data-scope":"journey","disabled":false,"label":"Generate journey"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"text":"Harmony voices share the MIDI root and morph, with normalized level. Tiled paths include connecting strokes; summed voices reshape the trace.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-section","data-visual-for":"geometry","element":"fieldset","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"className":"ls-daw-caption","text":"FIELD INSTRUMENT","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Smooth 4D field","variant":"h4"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Scan a smooth field into sound. Rotate it to reshape the harmonics.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-heading","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"checked":true,"disabled":true,"hostBinding":{"action":"virtual.field.follow","event":"change","key":"follow","read":"checked"},"hostOutputs":{"checked":"follow","disabled":"busy"},"label":"Follow prepared take","name":"virtual-field-arrangement-follow"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.clip","event":"change","key":"clip","read":"text"},"hostOutputs":{"disabled":"clipDisabled","options":"clips","value":"clip"},"label":"Arrangement field clip","name":"virtual-field-arrangement-clip","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.point","event":"change","key":"point","read":"text"},"hostOutputs":{"disabled":"editDisabled","options":"points","value":"point"},"label":"Curve point","name":"virtual-field-arrangement-point","options":[]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"html":"<svg id=\"virtual-field-arrangement-plot\" viewBox=\"0 0 320 100\" preserveAspectRatio=\"none\" role=\"img\" aria-label=\"Field curves: XW, XY and Interaction\"><path data-field-arrangement-curve=\"xw\"/><path data-field-arrangement-curve=\"xy\"/><path data-field-arrangement-curve=\"interaction\"/><line data-field-arrangement-playhead x1=\"0\" x2=\"0\" y1=\"0\" y2=\"100\"/></svg>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"text":"XW · XY · Interaction"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.scrub","event":"input","key":"beat","read":"number"},"hostOutputs":{"disabled":"scrubDisabled","max":"duration","value":"beat"},"kind":"range","label":"Explore clip beat","max":4,"min":0,"name":"virtual-field-arrangement-scrub","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.value","event":"input","key":"xw","read":"number"},"hostOutputs":{"disabled":"editDisabled","value":"xw"},"kind":"number","label":"Point XW (degrees)","max":180.0,"min":-180.0,"name":"virtual-field-arrangement-xw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.value","event":"input","key":"xy","read":"number"},"hostOutputs":{"disabled":"editDisabled","value":"xy"},"kind":"number","label":"Point XY (degrees)","max":180.0,"min":-180.0,"name":"virtual-field-arrangement-xy","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0,"disabled":true,"hostBinding":{"action":"virtual.field.value","event":"input","key":"interaction","read":"number"},"hostOutputs":{"disabled":"editDisabled","value":"interaction"},"kind":"number","label":"Point interaction","max":1.0,"min":0.0,"name":"virtual-field-arrangement-interaction","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.edit","event":"click"},"hostOutputs":{"disabled":"loadDisabled"},"id":"virtual-field-arrangement-edit","label":"Load draft curves"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.field.save","event":"click"},"hostOutputs":{"disabled":"saveDisabled"},"id":"virtual-field-arrangement-save","label":"Save point to draft"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-field-arrangement-status","role":"status","text":"Prepare an arrangement with a 4D field clip to explore its movement."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Scrub during playback to hear the arrangement; stopped scrubbing stays silent. Load draft curves to edit a point. The first and last points stay linked for a closed loop. Save changes the draft; Prepare adopts it into audio. Undo draft replacement restores the edit."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"virtual.field-arrangement","hostInitial":{"follow":true},"hostPlotId":"virtual-field-arrangement-plot","hostVersion":1,"id":"virtual-field-arrangement","title":"Arrangement movement"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.field-arrangement\",\"source_hash\":\"cf9515fc9b956bdfd98d73b62f463ea1182a887bd3811dac029e19aca5da7516\",\"context_hash\":\"09742b83331e8f809bca436422bb0ffc9f4827a49af2cfdd54b810442588cfa0\",\"tree_hash\":\"89b2976c5da8160acbb88dc335b0d823ac78d01e4120fe883a233497d25a3997\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"checked\\\":true,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.follow\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"follow\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"follow\\\",\\\"disabled\\\":\\\"busy\\\"},\\\"label\\\":\\\"Follow prepared take\\\",\\\"name\\\":\\\"virtual-field-arrangement-follow\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.clip\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"clip\\\",\\\"read\\\":\\\"text\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"clipDisabled\\\",\\\"options\\\":\\\"clips\\\",\\\"value\\\":\\\"clip\\\"},\\\"label\\\":\\\"Arrangement field clip\\\",\\\"name\\\":\\\"virtual-field-arrangement-clip\\\",\\\"options\\\":[]},\\\"tag\\\":\\\"Select\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.point\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"point\\\",\\\"read\\\":\\\"text\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"options\\\":\\\"points\\\",\\\"value\\\":\\\"point\\\"},\\\"label\\\":\\\"Curve point\\\",\\\"name\\\":\\\"virtual-field-arrangement-point\\\",\\\"options\\\":[]},\\\"tag\\\":\\\"Select\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"html\\\":\\\"<svg id=\\\\\\\"virtual-field-arrangement-plot\\\\\\\" viewBox=\\\\\\\"0 0 320 100\\\\\\\" preserveAspectRatio=\\\\\\\"none\\\\\\\" role=\\\\\\\"img\\\\\\\" aria-label=\\\\\\\"Field curves: XW, XY and Interaction\\\\\\\"><path data-field-arrangement-curve=\\\\\\\"xw\\\\\\\"/><path data-field-arrangement-curve=\\\\\\\"xy\\\\\\\"/><path data-field-arrangement-curve=\\\\\\\"interaction\\\\\\\"/><line data-field-arrangement-playhead x1=\\\\\\\"0\\\\\\\" x2=\\\\\\\"0\\\\\\\" y1=\\\\\\\"0\\\\\\\" y2=\\\\\\\"100\\\\\\\"/></svg>\\\"},\\\"tag\\\":\\\"RawHtml\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"XW · XY · Interaction\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.scrub\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"beat\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"scrubDisabled\\\",\\\"max\\\":\\\"duration\\\",\\\"value\\\":\\\"beat\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Explore clip beat\\\",\\\"max\\\":4,\\\"min\\\":0,\\\"name\\\":\\\"virtual-field-arrangement-scrub\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.value\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"xw\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"value\\\":\\\"xw\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Point XW (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-field-arrangement-xw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.value\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"xy\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"value\\\":\\\"xy\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Point XY (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-field-arrangement-xy\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.value\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"interaction\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"editDisabled\\\",\\\"value\\\":\\\"interaction\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Point interaction\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-field-arrangement-interaction\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.edit\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"loadDisabled\\\"},\\\"id\\\":\\\"virtual-field-arrangement-edit\\\",\\\"label\\\":\\\"Load draft curves\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.field.save\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"saveDisabled\\\"},\\\"id\\\":\\\"virtual-field-arrangement-save\\\",\\\"label\\\":\\\"Save point to draft\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-field-arrangement-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Prepare an arrangement with a 4D field clip to explore its movement.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Scrub during playback to hear the arrangement; stopped scrubbing stays silent. Load draft curves to edit a point. The first and last points stay linked for a closed loop. Save changes the draft; Prepare adopts it into audio. Undo draft replacement restores the edit.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.field-arrangement\\\",\\\"hostInitial\\\":{\\\"follow\\\":true},\\\"hostPlotId\\\":\\\"virtual-field-arrangement-plot\\\",\\\"hostVersion\\\":1,\\\"id\\\":\\\"virtual-field-arrangement\\\",\\\"title\\\":\\\"Arrangement movement\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"checked\":true,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.follow\",\"event\":\"change\",\"key\":\"follow\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"follow\",\"disabled\":\"busy\"},\"label\":\"Follow prepared take\",\"name\":\"virtual-field-arrangement-follow\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.clip\",\"event\":\"change\",\"key\":\"clip\",\"read\":\"text\"},\"hostOutputs\":{\"disabled\":\"clipDisabled\",\"options\":\"clips\",\"value\":\"clip\"},\"label\":\"Arrangement field clip\",\"name\":\"virtual-field-arrangement-clip\",\"options\":[]},\"tag\":\"Select\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.point\",\"event\":\"change\",\"key\":\"point\",\"read\":\"text\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"options\":\"points\",\"value\":\"point\"},\"label\":\"Curve point\",\"name\":\"virtual-field-arrangement-point\",\"options\":[]},\"tag\":\"Select\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"html\":\"<svg id=\\\"virtual-field-arrangement-plot\\\" viewBox=\\\"0 0 320 100\\\" preserveAspectRatio=\\\"none\\\" role=\\\"img\\\" aria-label=\\\"Field curves: XW, XY and Interaction\\\"><path data-field-arrangement-curve=\\\"xw\\\"/><path data-field-arrangement-curve=\\\"xy\\\"/><path data-field-arrangement-curve=\\\"interaction\\\"/><line data-field-arrangement-playhead x1=\\\"0\\\" x2=\\\"0\\\" y1=\\\"0\\\" y2=\\\"100\\\"/></svg>\"},\"tag\":\"RawHtml\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"XW · XY · Interaction\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.scrub\",\"event\":\"input\",\"key\":\"beat\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"scrubDisabled\",\"max\":\"duration\",\"value\":\"beat\"},\"kind\":\"range\",\"label\":\"Explore clip beat\",\"max\":4,\"min\":0,\"name\":\"virtual-field-arrangement-scrub\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.value\",\"event\":\"input\",\"key\":\"xw\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"value\":\"xw\"},\"kind\":\"number\",\"label\":\"Point XW (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-field-arrangement-xw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.value\",\"event\":\"input\",\"key\":\"xy\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"value\":\"xy\"},\"kind\":\"number\",\"label\":\"Point XY (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-field-arrangement-xy\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.value\",\"event\":\"input\",\"key\":\"interaction\",\"read\":\"number\"},\"hostOutputs\":{\"disabled\":\"editDisabled\",\"value\":\"interaction\"},\"kind\":\"number\",\"label\":\"Point interaction\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-field-arrangement-interaction\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.edit\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"loadDisabled\"},\"id\":\"virtual-field-arrangement-edit\",\"label\":\"Load draft curves\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.field.save\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"saveDisabled\"},\"id\":\"virtual-field-arrangement-save\",\"label\":\"Save point to draft\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-field-arrangement-status\",\"role\":\"status\",\"text\":\"Prepare an arrangement with a 4D field clip to explore its movement.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Scrub during playback to hear the arrangement; stopped scrubbing stays silent. Load draft curves to edit a point. The first and last points stay linked for a closed loop. Save changes the draft; Prepare adopts it into audio. Undo draft replacement restores the edit.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.field-arrangement\",\"hostInitial\":{\"follow\":true},\"hostPlotId\":\"virtual-field-arrangement-plot\",\"hostVersion\":1,\"id\":\"virtual-field-arrangement\",\"title\":\"Arrangement movement\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"89b2976c5da8160acbb88dc335b0d823ac78d01e4120fe883a233497d25a3997\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.field-arrangement","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Arrangement movement","className":"ls-field-arrangement","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field visual","controlKey":"visual-smooth-field.11","data-field-view":true,"default":"xy","disabled":false,"label":"View sound","name":"visual-smooth-field-11","options":[{"label":"Stereo orbit","value":"xy"},{"label":"Waveforms","value":"wave"},{"label":"3D spectrogram","value":"spectrum"},{"label":"Shader","value":"shader"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.12","data-field-experiment":"save","disabled":false,"label":"Save experiment"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.13","data-field-experiment":"recall","disabled":false,"label":"Recall saved"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-experiment","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-field-save-help","text":"One saved experiment on this browser: field, gesture, frequency, voices and visual choice. Shader edits and display settings stay separate.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-field-saved":true,"role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.17","data-field-preset":"{\"xw\":0,\"xy\":0,\"interaction\":0}","disabled":false,"label":"Pure orbit"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.18","data-field-preset":"{\"xw\":25,\"xy\":-20,\"interaction\":0.65}","disabled":false,"label":"Folded ribbon"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.19","data-field-preset":"{\"xw\":75,\"xy\":-20,\"interaction\":0.9}","disabled":false,"label":"Braided loop"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Field starting shapes","className":"ls-field-presets","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"html":"<svg viewbox=\"0 0 320 160\" preserveaspectratio=\"none\" aria-hidden=\"true\"><path d=\"M160 0V160M0 80H320\"></path><circle data-field-pad-marker cx=\"182.2\" cy=\"88.9\" r=\"5\"></circle></svg>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"className":"ls-field-pad-x","text":"XW · left / right","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"className":"ls-field-pad-y","text":"XY · up / down","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"aria-describedby":"field-pad-help","aria-label":"Field rotation pad","className":"ls-field-pad","controlKey":"visual-smooth-field.22","data-field-pad":true,"disabled":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"id":"field-pad-help","text":"Drag to rotate. Arrow keys move 5°; Shift moves 1°; Home centres. Press Play instrument to hear it.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-pad-wrap","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field rotation XW","controlKey":"visual-smooth-field.30","data-scope":"field-xw","default":"25","disabled":false,"kind":"range","label":"Rotate XW","max":"180","min":"-180","name":"visual-smooth-field-30","step":"any"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-field-value":"xw","text":"25°","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field rotation XY","controlKey":"visual-smooth-field.33","data-scope":"field-xy","default":"-20","disabled":false,"kind":"range","label":"Rotate XY","max":"180","min":"-180","name":"visual-smooth-field-33","step":"any"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-field-value":"xy","text":"−20°","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field interaction","controlKey":"visual-smooth-field.36","data-scope":"field-interaction","default":"0.65","disabled":false,"kind":"range","label":"Interaction","max":"1","min":"0","name":"visual-smooth-field-36","step":"0.01"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-field-value":"interaction","text":"65%","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-field-knobs","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-field-play","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.39","data-field-gesture-action":"record","disabled":false,"label":"Record gesture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.40","data-field-gesture-action":"finish","disabled":true,"label":"Finish gesture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.41","data-field-gesture-action":"loop","disabled":true,"label":"Loop gesture","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.42","data-field-gesture-action":"download","disabled":true,"label":"Download gesture WAV"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-gesture-actions","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-field-gesture-status":true,"text":"Record a movement to make a reusable gesture. Record and Loop start the instrument.","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Gesture curves & editing"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<svg viewbox=\"0 0 320 100\" preserveaspectratio=\"none\" role=\"img\" aria-label=\"Recorded gesture curves: XW, XY and Interaction\">\n        <path data-field-gesture-curve=\"xw\"></path><path data-field-gesture-curve=\"xy\"></path><path data-field-gesture-curve=\"interaction\"></path>\n        <line data-field-gesture-playhead x1=\"0\" x2=\"0\" y1=\"0\" y2=\"100\"></line>\n      </svg>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"XW","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"XY","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Interaction","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-gesture-legend","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Gesture duration seconds","controlKey":"visual-smooth-field.53","data-field-gesture-length":true,"disabled":true,"kind":"number","label":"Duration (s)","max":"16.08","min":"0.1","name":"visual-smooth-field-53","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.54","data-field-gesture-action":"duration","disabled":true,"label":"Apply duration"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Gesture point","controlKey":"visual-smooth-field.56","data-field-gesture-point":true,"default":"","disabled":true,"label":"Point","name":"visual-smooth-field-56","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.57","data-field-gesture-action":"update","disabled":true,"label":"Update point"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-gesture-actions","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Select a point, adjust the pad or Interaction, then Update point. Duration changes gesture speed; pitch stays independent. Save experiment keeps the gesture.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Send to arrangement"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field clip start beat","controlKey":"visual-smooth-field.63","data-field-clip-start":true,"default":"0","disabled":false,"kind":"number","label":"Start beat","min":"0","name":"visual-smooth-field-63","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field clip length beats","controlKey":"visual-smooth-field.65","data-field-clip-beats":true,"default":"4","disabled":false,"kind":"number","label":"Length (beats)","min":".25","name":"visual-smooth-field-65","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-smooth-field.66","data-field-gesture-action":"arrange","disabled":true,"label":"Add field clip"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-field-gesture-actions","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Adds a new track with an editable held MIDI note and this gesture stretched across the clip. Beat 0 is the start. Pitch uses the nearest MIDI note; voices are preserved. Prepare the score first.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Capture up to 16 seconds on the audio clock, with a short return to the start. WAV exports one dry cycle. Native field clips keep the movement editable and follow the arrangement tempo.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Gesture clip","className":"ls-field-gesture","data-field-gesture-controls":true,"element":"section"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Visuals follow the sound; switching views keeps the instrument playing. Stereo orbit shows the audio readout, not all four coordinates.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Smooth 4D field","className":"ls-field-panel","data-scope":"field-controls","element":"section","hidden":true},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Geometry · the 4D scan","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"XYZ projection · colour shows rotated W","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"figcaption"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<svg viewbox=\"0 0 320 320\" role=\"img\" aria-label=\"Four-dimensional scan projected into XYZ; blue is negative W and amber is positive W\">\n        <g data-field-axes></g><g data-field-curve fill=\"none\" stroke-width=\"2.2\" stroke-linecap=\"round\"></g>\n        <circle data-field-probe cx=\"160\" cy=\"160\" r=\"4.5\" fill=\"#fff\" stroke-width=\"2.5\"></circle>\n      </svg>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"W −√2","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-hidden":"true","className":"ls-field-color-key","text":"","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"+√2","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-legend","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Field phase probe","controlKey":"visual-performance-visual.58","data-field-phase":true,"default":"0","disabled":false,"kind":"range","label":"Phase probe · picture only","max":"1","min":"0","name":"visual-performance-visual-58","step":"0.001"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-label":"Coordinates at phase probe","data-field-coordinates":true,"text":"","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-label":"Raw stereo readout at phase probe","data-field-readout":true,"text":"","variant":"output"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Full cycle, fixed scale. Rotation changes the path; Interaction changes its stereo readout. Raw values precede audio filtering and level compensation.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-geometry","data-field-geometry":true,"data-visual-for":"field","element":"figure","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Shader"},"tag":"Text"}],"kind":"view-node","props":{"element":"figcaption"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<canvas data-shader-preview width=\"960\" height=\"540\" role=\"img\" aria-label=\"Shader source before contour capture\"></canvas>"},"tag":"RawHtml"}],"kind":"view-node","props":{"className":"ls-shader-preview","data-visual-for":"trace","element":"figure","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Audio output"},"tag":"Text"}],"kind":"view-node","props":{"data-visual-for":"field trace","element":"figcaption","hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<canvas data-visual=\"canvas\" width=\"960\" height=\"540\" role=\"img\" aria-label=\"Shader picture driven by the prepared score\"></canvas>"},"tag":"RawHtml"}],"kind":"view-node","props":{"className":"ls-visual-stage","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-visual-for":"field","hidden":true,"text":"Play the instrument to compare the sound with its geometry. This view includes the voice's filtering, harmony and spatial settings.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-field-sound","element":"figure"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-field-views","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-contour-preset","data-visual":"contour-preset","disabled":true,"label":"Contour preset"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.144","data-scope":"trace","disabled":false,"label":"Capture"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-scope":"trace-status","role":"status","text":"Capture an outline to play.","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-shader-trace","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.147","data-scope":"live","disabled":false,"label":"Link live"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Live shader trace rate","controlKey":"visual-performance-visual.149","data-scope":"live-rate","default":"10","disabled":false,"label":"Trace rate","name":"visual-performance-visual-149","options":[{"label":"5 / sec","value":"5"},{"label":"10 / sec","value":"10"},{"label":"20 / sec","value":"20"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Contour brightness","controlKey":"visual-performance-visual.151","data-scope":"threshold","default":"0.5","disabled":false,"kind":"range","label":"Contour brightness","max":"0.95","min":"0.05","name":"visual-performance-visual-151","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-scope":"live-status","role":"status","text":"","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-shader-live","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-shader-sound","data-visual-for":"trace","element":"section","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Vector frequency","controlKey":"visual-performance-visual.25","data-scope":"frequency","default":"110","disabled":false,"kind":"range","label":"Frequency","max":"2000","min":"20","name":"visual-performance-visual-25","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Vector voices","controlKey":"visual-performance-visual.27","data-scope":"voices","default":"solo","disabled":false,"label":"Voices","name":"visual-performance-visual-27","options":[{"label":"Solo","value":"solo"},{"label":"Octave · 2 voices","value":"octave"},{"label":"Perfect fifth · 2 voices","value":"fifth"},{"label":"Major triad · 3 voices","value":"triad"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.28","data-scope":"play","disabled":false,"label":"Play"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.29","data-scope":"stop","disabled":false,"label":"Stop"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-describedby":"scope-wav-help","controlKey":"visual-performance-visual.30","data-scope":"export","disabled":false,"label":"Export WAV"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-scope":"export-status","role":"status","text":"","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Instrument playback","className":"ls-instrument-bar","data-visual-for":"geometry field trace","element":"section","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Simply supported aluminium rectangle · up to 64 bending modes. Choose harmonic RMS or live displacement driven by the DAW mix. Gold marks low vibration; red marks the point exciter."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"default":350.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"frequency","read":"number"},"hostOutputs":{"value":"frequency"},"kind":"number","label":"Drive frequency (Hz)","max":2000.0,"min":30.0,"name":"virtual-plate-frequency","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":300.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"width","read":"number"},"hostOutputs":{"value":"width"},"kind":"number","label":"Plate width (mm)","max":600.0,"min":200.0,"name":"virtual-plate-width","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"aspect","read":"number"},"hostOutputs":{"value":"aspect"},"kind":"number","label":"Height / width","max":1.5,"min":0.75,"name":"virtual-plate-aspect","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"thickness","read":"number"},"hostOutputs":{"value":"thickness"},"kind":"number","label":"Thickness (mm)","max":3.0,"min":0.5,"name":"virtual-plate-thickness","step":0.05},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.01,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"damping","read":"number"},"hostOutputs":{"value":"damping"},"kind":"number","label":"Damping ratio","max":0.1,"min":0.002,"name":"virtual-plate-damping","step":0.001},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"force","read":"number"},"hostOutputs":{"value":"force"},"kind":"number","label":"Drive force (mN)","max":100.0,"min":0.0,"name":"virtual-plate-force","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":25.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"audioForce","read":"number"},"hostOutputs":{"value":"audioForce"},"kind":"number","label":"Live force (mN per full-scale sample)","max":100.0,"min":0.0,"name":"virtual-plate-audioForce","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.37,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"x","read":"number"},"hostOutputs":{"value":"x"},"kind":"number","label":"Exciter X (fraction)","max":1.0,"min":0.0,"name":"virtual-plate-x","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.41,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"y","read":"number"},"hostOutputs":{"value":"y"},"kind":"number","label":"Exciter Y (fraction)","max":1.0,"min":0.0,"name":"virtual-plate-y","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":90.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"phase","read":"number"},"hostOutputs":{"value":"phase"},"kind":"number","label":"Surface phase (degrees)","max":360.0,"min":0.0,"name":"virtual-plate-phase","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":-25.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"yaw","read":"number"},"hostOutputs":{"value":"yaw"},"kind":"number","label":"Surface orbit (degrees)","max":180.0,"min":-180.0,"name":"virtual-plate-yaw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":40.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"tilt","read":"number"},"hostOutputs":{"value":"tilt"},"kind":"number","label":"Surface tilt (degrees)","max":80.0,"min":10.0,"name":"virtual-plate-tilt","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.5,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"height","read":"number"},"hostOutputs":{"value":"height"},"kind":"number","label":"Display height (relative)","max":1.0,"min":0.1,"name":"virtual-plate-height","step":0.05},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.35,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"blend","read":"number"},"hostOutputs":{"value":"blend"},"kind":"number","label":"Hyperedge blend","max":1.0,"min":0.0,"name":"virtual-plate-blend","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.5,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"bridge","read":"number"},"hostOutputs":{"value":"bridge"},"kind":"number","label":"AD bridge weight","max":2.0,"min":0.0,"name":"virtual-plate-bridge","step":0.05},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":25.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"xw","read":"number"},"hostOutputs":{"value":"xw"},"kind":"number","label":"4D rotation XW (degrees)","max":180.0,"min":-180.0,"name":"virtual-plate-xw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":-20.0,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"yz","read":"number"},"hostOutputs":{"value":"yz"},"kind":"number","label":"4D rotation YZ (degrees)","max":180.0,"min":-180.0,"name":"virtual-plate-yz","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.5,"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"input","initialize":true,"key":"axisDelay","read":"number"},"hostOutputs":{"value":"axisDelay"},"kind":"number","label":"Axis delay step (ms)","max":5.0,"min":0.0,"name":"virtual-plate-axisDelay","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"live","read":"checked"},"hostOutputs":{"checked":"live"},"label":"Live response · DAW mix","name":"virtual-plate-live"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"surface","read":"checked"},"hostOutputs":{"checked":"surface"},"label":"3D surface · phase slice","name":"virtual-plate-surface"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"trace","read":"checked"},"hostOutputs":{"checked":"trace"},"label":"4D pickup trajectory","name":"virtual-plate-trace"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.set","event":"change","initialize":true,"key":"listen","read":"checked"},"hostOutputs":{"checked":"listen"},"label":"Listen to pickup blend","name":"virtual-plate-listen"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.tune","event":"click"},"hostOutputs":{},"id":"virtual-plate-tune","label":"Tune nearest mode"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.play","event":"click"},"hostOutputs":{"disabled":"playDisabled"},"id":"virtual-plate-play","label":"Hear drive tone"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.plate.stop","event":"click"},"hostOutputs":{"disabled":"stopDisabled"},"id":"virtual-plate-stop","label":"Stop drive tone"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-plate-status","role":"status","text":"Preparing physical response…"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"modes","id":"virtual-plate-modes","role":"status","text":"Mode frequencies follow dimensions, thickness and material."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"audio","id":"virtual-plate-audio","role":"status","text":"Tone is an audible frequency reference; speaker level is independent of simulated force."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"hyper","id":"virtual-plate-hyper","role":"status","text":"Four virtual pickups A(.19,.23), B(.73,.29), C(.31,.79), D(.81,.67). Hyperedges ABC and BCD blend groups; AD is the adjustable bridge. Enable the trajectory, then play a score or hear the drive tone."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Harmonic mode reports RMS with a frozen phase slice. Live mode integrates every audio sample and shows instantaneous displacement; phase control is ignored. Live force uses the mono DAW mix, not microphone capture. Picture height is normalized (1 nm floor in live mode); physical values remain in µm. Display snapshots may alias audio-frequency motion. E = 69 GPa, density = 2700 kg/m³, Poisson ratio = 0.33. No sand transport, free-edge or centre-clamp approximation."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"4D trajectory: X/Y screen position, Z perspective, W colour. Shows 512 consecutive audio samples; picture size is normalized. Hypergraph averaging and orthogonal rotations act on pickup signals, not plate mechanics. Optional stereo audition maps rotated X/Y to L/R at 0.03 digital units per µm, capped at ±0.1, alongside the dry source. Global Stop and leaving this view mute it. Changes to the blend do not reset plate motion."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Axis delay embeds rotated signals at t, t−τ, t−2τ, t−3τ using audio samples. Set delay to zero for simultaneous physical pickups. Time offsets change the stereo audition as well as the trajectory."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"virtual.plate","hostInitial":{"aspect":1.0,"audioForce":25.0,"axisDelay":1.5,"blend":0.35,"bridge":0.5,"damping":0.01,"force":1.0,"frequency":350.0,"height":0.5,"listen":false,"live":false,"phase":90.0,"surface":false,"thickness":1.0,"tilt":40.0,"trace":false,"width":300.0,"x":0.37,"xw":25.0,"y":0.41,"yaw":-25.0,"yz":-20.0},"hostLimits":{"aspect":[0.75,1.5],"audioForce":[0.0,100.0],"axisDelay":[0.0,5.0],"blend":[0.0,1.0],"bridge":[0.0,2.0],"damping":[0.002,0.1],"force":[0.0,100.0],"frequency":[30.0,2000.0],"height":[0.1,1.0],"phase":[0.0,360.0],"thickness":[0.5,3.0],"tilt":[10.0,80.0],"width":[200.0,600.0],"x":[0.0,1.0],"xw":[-180.0,180.0],"y":[0.0,1.0],"yaw":[-180.0,180.0],"yz":[-180.0,180.0]},"hostVersion":1,"id":"virtual-plate","title":"Resonant plate"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.plate\",\"source_hash\":\"8f1a0ec669e961846be031b7d9ece72b7577208120e1b6923c8117fe7a9f7e2e\",\"context_hash\":\"b4478446303f92d2720210e42e874bc0975eac38c221e6eab7dfa6b4a3e00bd5\",\"tree_hash\":\"3dd562ac957cce1c3711af0de1cac6be89c0f1a8cb31861656969d97105ac9d7\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Simply supported aluminium rectangle · up to 64 bending modes. Choose harmonic RMS or live displacement driven by the DAW mix. Gold marks low vibration; red marks the point exciter.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":350.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"frequency\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"frequency\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Drive frequency (Hz)\\\",\\\"max\\\":2000.0,\\\"min\\\":30.0,\\\"name\\\":\\\"virtual-plate-frequency\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":300.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"width\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"width\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Plate width (mm)\\\",\\\"max\\\":600.0,\\\"min\\\":200.0,\\\"name\\\":\\\"virtual-plate-width\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"aspect\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"aspect\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Height / width\\\",\\\"max\\\":1.5,\\\"min\\\":0.75,\\\"name\\\":\\\"virtual-plate-aspect\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"thickness\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"thickness\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Thickness (mm)\\\",\\\"max\\\":3.0,\\\"min\\\":0.5,\\\"name\\\":\\\"virtual-plate-thickness\\\",\\\"step\\\":0.05},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.01,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"damping\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"damping\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Damping ratio\\\",\\\"max\\\":0.1,\\\"min\\\":0.002,\\\"name\\\":\\\"virtual-plate-damping\\\",\\\"step\\\":0.001},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"force\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"force\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Drive force (mN)\\\",\\\"max\\\":100.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-force\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"audioForce\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"audioForce\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Live force (mN per full-scale sample)\\\",\\\"max\\\":100.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-audioForce\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.37,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"x\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"x\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Exciter X (fraction)\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-x\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.41,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"y\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"y\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Exciter Y (fraction)\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-y\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":90.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"phase\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"phase\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Surface phase (degrees)\\\",\\\"max\\\":360.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-phase\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":-25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"yaw\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"yaw\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Surface orbit (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-plate-yaw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":40.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"tilt\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"tilt\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Surface tilt (degrees)\\\",\\\"max\\\":80.0,\\\"min\\\":10.0,\\\"name\\\":\\\"virtual-plate-tilt\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"height\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"height\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Display height (relative)\\\",\\\"max\\\":1.0,\\\"min\\\":0.1,\\\"name\\\":\\\"virtual-plate-height\\\",\\\"step\\\":0.05},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.35,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"blend\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"blend\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Hyperedge blend\\\",\\\"max\\\":1.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-blend\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"bridge\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"bridge\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"AD bridge weight\\\",\\\"max\\\":2.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-bridge\\\",\\\"step\\\":0.05},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"xw\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"xw\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"4D rotation XW (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-plate-xw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":-20.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"yz\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"yz\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"4D rotation YZ (degrees)\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-plate-yz\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"axisDelay\\\",\\\"read\\\":\\\"number\\\"},\\\"hostOutputs\\\":{\\\"value\\\":\\\"axisDelay\\\"},\\\"kind\\\":\\\"number\\\",\\\"label\\\":\\\"Axis delay step (ms)\\\",\\\"max\\\":5.0,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-plate-axisDelay\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"live\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"live\\\"},\\\"label\\\":\\\"Live response · DAW mix\\\",\\\"name\\\":\\\"virtual-plate-live\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"surface\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"surface\\\"},\\\"label\\\":\\\"3D surface · phase slice\\\",\\\"name\\\":\\\"virtual-plate-surface\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"trace\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"trace\\\"},\\\"label\\\":\\\"4D pickup trajectory\\\",\\\"name\\\":\\\"virtual-plate-trace\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"listen\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"listen\\\"},\\\"label\\\":\\\"Listen to pickup blend\\\",\\\"name\\\":\\\"virtual-plate-listen\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.tune\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{},\\\"id\\\":\\\"virtual-plate-tune\\\",\\\"label\\\":\\\"Tune nearest mode\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.play\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"playDisabled\\\"},\\\"id\\\":\\\"virtual-plate-play\\\",\\\"label\\\":\\\"Hear drive tone\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.plate.stop\\\",\\\"event\\\":\\\"click\\\"},\\\"hostOutputs\\\":{\\\"disabled\\\":\\\"stopDisabled\\\"},\\\"id\\\":\\\"virtual-plate-stop\\\",\\\"label\\\":\\\"Stop drive tone\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-plate-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Preparing physical response…\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"modes\\\",\\\"id\\\":\\\"virtual-plate-modes\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Mode frequencies follow dimensions, thickness and material.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"audio\\\",\\\"id\\\":\\\"virtual-plate-audio\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Tone is an audible frequency reference; speaker level is independent of simulated force.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"hyper\\\",\\\"id\\\":\\\"virtual-plate-hyper\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Four virtual pickups A(.19,.23), B(.73,.29), C(.31,.79), D(.81,.67). Hyperedges ABC and BCD blend groups; AD is the adjustable bridge. Enable the trajectory, then play a score or hear the drive tone.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Harmonic mode reports RMS with a frozen phase slice. Live mode integrates every audio sample and shows instantaneous displacement; phase control is ignored. Live force uses the mono DAW mix, not microphone capture. Picture height is normalized (1 nm floor in live mode); physical values remain in µm. Display snapshots may alias audio-frequency motion. E = 69 GPa, density = 2700 kg/m³, Poisson ratio = 0.33. No sand transport, free-edge or centre-clamp approximation.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"4D trajectory: X/Y screen position, Z perspective, W colour. Shows 512 consecutive audio samples; picture size is normalized. Hypergraph averaging and orthogonal rotations act on pickup signals, not plate mechanics. Optional stereo audition maps rotated X/Y to L/R at 0.03 digital units per µm, capped at ±0.1, alongside the dry source. Global Stop and leaving this view mute it. Changes to the blend do not reset plate motion.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Axis delay embeds rotated signals at t, t−τ, t−2τ, t−3τ using audio samples. Set delay to zero for simultaneous physical pickups. Time offsets change the stereo audition as well as the trajectory.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.plate\\\",\\\"hostInitial\\\":{\\\"aspect\\\":1.0,\\\"audioForce\\\":25.0,\\\"axisDelay\\\":1.5,\\\"blend\\\":0.35,\\\"bridge\\\":0.5,\\\"damping\\\":0.01,\\\"force\\\":1.0,\\\"frequency\\\":350.0,\\\"height\\\":0.5,\\\"listen\\\":false,\\\"live\\\":false,\\\"phase\\\":90.0,\\\"surface\\\":false,\\\"thickness\\\":1.0,\\\"tilt\\\":40.0,\\\"trace\\\":false,\\\"width\\\":300.0,\\\"x\\\":0.37,\\\"xw\\\":25.0,\\\"y\\\":0.41,\\\"yaw\\\":-25.0,\\\"yz\\\":-20.0},\\\"hostLimits\\\":{\\\"aspect\\\":[0.75,1.5],\\\"audioForce\\\":[0.0,100.0],\\\"axisDelay\\\":[0.0,5.0],\\\"blend\\\":[0.0,1.0],\\\"bridge\\\":[0.0,2.0],\\\"damping\\\":[0.002,0.1],\\\"force\\\":[0.0,100.0],\\\"frequency\\\":[30.0,2000.0],\\\"height\\\":[0.1,1.0],\\\"phase\\\":[0.0,360.0],\\\"thickness\\\":[0.5,3.0],\\\"tilt\\\":[10.0,80.0],\\\"width\\\":[200.0,600.0],\\\"x\\\":[0.0,1.0],\\\"xw\\\":[-180.0,180.0],\\\"y\\\":[0.0,1.0],\\\"yaw\\\":[-180.0,180.0],\\\"yz\\\":[-180.0,180.0]},\\\"hostVersion\\\":1,\\\"id\\\":\\\"virtual-plate\\\",\\\"title\\\":\\\"Resonant plate\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Simply supported aluminium rectangle · up to 64 bending modes. Choose harmonic RMS or live displacement driven by the DAW mix. Gold marks low vibration; red marks the point exciter.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":350.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"frequency\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"frequency\"},\"kind\":\"number\",\"label\":\"Drive frequency (Hz)\",\"max\":2000.0,\"min\":30.0,\"name\":\"virtual-plate-frequency\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":300.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"width\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"width\"},\"kind\":\"number\",\"label\":\"Plate width (mm)\",\"max\":600.0,\"min\":200.0,\"name\":\"virtual-plate-width\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"aspect\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"aspect\"},\"kind\":\"number\",\"label\":\"Height / width\",\"max\":1.5,\"min\":0.75,\"name\":\"virtual-plate-aspect\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"thickness\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"thickness\"},\"kind\":\"number\",\"label\":\"Thickness (mm)\",\"max\":3.0,\"min\":0.5,\"name\":\"virtual-plate-thickness\",\"step\":0.05},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.01,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"damping\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"damping\"},\"kind\":\"number\",\"label\":\"Damping ratio\",\"max\":0.1,\"min\":0.002,\"name\":\"virtual-plate-damping\",\"step\":0.001},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"force\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"force\"},\"kind\":\"number\",\"label\":\"Drive force (mN)\",\"max\":100.0,\"min\":0.0,\"name\":\"virtual-plate-force\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"audioForce\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"audioForce\"},\"kind\":\"number\",\"label\":\"Live force (mN per full-scale sample)\",\"max\":100.0,\"min\":0.0,\"name\":\"virtual-plate-audioForce\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.37,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"x\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"x\"},\"kind\":\"number\",\"label\":\"Exciter X (fraction)\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-plate-x\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.41,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"y\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"y\"},\"kind\":\"number\",\"label\":\"Exciter Y (fraction)\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-plate-y\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":90.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"phase\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"phase\"},\"kind\":\"number\",\"label\":\"Surface phase (degrees)\",\"max\":360.0,\"min\":0.0,\"name\":\"virtual-plate-phase\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":-25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"yaw\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"yaw\"},\"kind\":\"number\",\"label\":\"Surface orbit (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-plate-yaw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":40.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"tilt\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"tilt\"},\"kind\":\"number\",\"label\":\"Surface tilt (degrees)\",\"max\":80.0,\"min\":10.0,\"name\":\"virtual-plate-tilt\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"height\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"height\"},\"kind\":\"number\",\"label\":\"Display height (relative)\",\"max\":1.0,\"min\":0.1,\"name\":\"virtual-plate-height\",\"step\":0.05},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.35,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"blend\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"blend\"},\"kind\":\"number\",\"label\":\"Hyperedge blend\",\"max\":1.0,\"min\":0.0,\"name\":\"virtual-plate-blend\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"bridge\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"bridge\"},\"kind\":\"number\",\"label\":\"AD bridge weight\",\"max\":2.0,\"min\":0.0,\"name\":\"virtual-plate-bridge\",\"step\":0.05},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"xw\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"xw\"},\"kind\":\"number\",\"label\":\"4D rotation XW (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-plate-xw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":-20.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"yz\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"yz\"},\"kind\":\"number\",\"label\":\"4D rotation YZ (degrees)\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-plate-yz\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"axisDelay\",\"read\":\"number\"},\"hostOutputs\":{\"value\":\"axisDelay\"},\"kind\":\"number\",\"label\":\"Axis delay step (ms)\",\"max\":5.0,\"min\":0.0,\"name\":\"virtual-plate-axisDelay\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"live\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"live\"},\"label\":\"Live response · DAW mix\",\"name\":\"virtual-plate-live\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"surface\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"surface\"},\"label\":\"3D surface · phase slice\",\"name\":\"virtual-plate-surface\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"trace\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"trace\"},\"label\":\"4D pickup trajectory\",\"name\":\"virtual-plate-trace\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"listen\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"listen\"},\"label\":\"Listen to pickup blend\",\"name\":\"virtual-plate-listen\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.tune\",\"event\":\"click\"},\"hostOutputs\":{},\"id\":\"virtual-plate-tune\",\"label\":\"Tune nearest mode\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.play\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"playDisabled\"},\"id\":\"virtual-plate-play\",\"label\":\"Hear drive tone\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.plate.stop\",\"event\":\"click\"},\"hostOutputs\":{\"disabled\":\"stopDisabled\"},\"id\":\"virtual-plate-stop\",\"label\":\"Stop drive tone\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-plate-status\",\"role\":\"status\",\"text\":\"Preparing physical response…\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"modes\",\"id\":\"virtual-plate-modes\",\"role\":\"status\",\"text\":\"Mode frequencies follow dimensions, thickness and material.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"audio\",\"id\":\"virtual-plate-audio\",\"role\":\"status\",\"text\":\"Tone is an audible frequency reference; speaker level is independent of simulated force.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"hyper\",\"id\":\"virtual-plate-hyper\",\"role\":\"status\",\"text\":\"Four virtual pickups A(.19,.23), B(.73,.29), C(.31,.79), D(.81,.67). Hyperedges ABC and BCD blend groups; AD is the adjustable bridge. Enable the trajectory, then play a score or hear the drive tone.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Harmonic mode reports RMS with a frozen phase slice. Live mode integrates every audio sample and shows instantaneous displacement; phase control is ignored. Live force uses the mono DAW mix, not microphone capture. Picture height is normalized (1 nm floor in live mode); physical values remain in µm. Display snapshots may alias audio-frequency motion. E = 69 GPa, density = 2700 kg/m³, Poisson ratio = 0.33. No sand transport, free-edge or centre-clamp approximation.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"4D trajectory: X/Y screen position, Z perspective, W colour. Shows 512 consecutive audio samples; picture size is normalized. Hypergraph averaging and orthogonal rotations act on pickup signals, not plate mechanics. Optional stereo audition maps rotated X/Y to L/R at 0.03 digital units per µm, capped at ±0.1, alongside the dry source. Global Stop and leaving this view mute it. Changes to the blend do not reset plate motion.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Axis delay embeds rotated signals at t, t−τ, t−2τ, t−3τ using audio samples. Set delay to zero for simultaneous physical pickups. Time offsets change the stereo audition as well as the trajectory.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.plate\",\"hostInitial\":{\"aspect\":1.0,\"audioForce\":25.0,\"axisDelay\":1.5,\"blend\":0.35,\"bridge\":0.5,\"damping\":0.01,\"force\":1.0,\"frequency\":350.0,\"height\":0.5,\"listen\":false,\"live\":false,\"phase\":90.0,\"surface\":false,\"thickness\":1.0,\"tilt\":40.0,\"trace\":false,\"width\":300.0,\"x\":0.37,\"xw\":25.0,\"y\":0.41,\"yaw\":-25.0,\"yz\":-20.0},\"hostLimits\":{\"aspect\":[0.75,1.5],\"audioForce\":[0.0,100.0],\"axisDelay\":[0.0,5.0],\"blend\":[0.0,1.0],\"bridge\":[0.0,2.0],\"damping\":[0.002,0.1],\"force\":[0.0,100.0],\"frequency\":[30.0,2000.0],\"height\":[0.1,1.0],\"phase\":[0.0,360.0],\"thickness\":[0.5,3.0],\"tilt\":[10.0,80.0],\"width\":[200.0,600.0],\"x\":[0.0,1.0],\"xw\":[-180.0,180.0],\"y\":[0.0,1.0],\"yaw\":[-180.0,180.0],\"yz\":[-180.0,180.0]},\"hostVersion\":1,\"id\":\"virtual-plate\",\"title\":\"Resonant plate\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"3dd562ac957cce1c3711af0de1cac6be89c0f1a8cb31861656969d97105ac9d7\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.plate","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"data-plate-slot":true,"element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-scope":"status","role":"status","text":"","variant":"output"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Scope settings"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Scope display"},"tag":"Text"}],"kind":"view-node","props":{"element":"legend"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope trace","controlKey":"visual-performance-visual.77","data-scope":"mode","default":"xy","disabled":false,"label":"Trace","name":"visual-performance-visual-77","options":[{"label":"XY path","value":"xy"},{"label":"Stereo waveform","value":"wave"},{"label":"3D spectrogram","value":"spectrum"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope gain","controlKey":"visual-performance-visual.79","data-scope":"gain","default":"4","disabled":false,"kind":"range","label":"Picture gain","max":"8","min":"0.25","name":"visual-performance-visual-79","step":"0.25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope window","controlKey":"visual-performance-visual.81","data-scope":"window","default":"20","disabled":false,"label":"Window","name":"visual-performance-visual-81","options":[{"label":"5 ms","value":"5"},{"label":"20 ms","value":"20"},{"label":"50 ms","value":"50"},{"label":"100 ms","value":"100"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope persistence","controlKey":"visual-performance-visual.83","data-scope":"persistence","default":"100","disabled":false,"kind":"range","label":"Persistence","max":"500","min":"0","name":"visual-performance-visual-83","step":"10"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.85","data-scope":"trigger","default":true,"disabled":false,"label":"Rising-edge trigger (waveform)","name":"visual-performance-visual-85"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.87","data-scope":"freeze","default":false,"disabled":false,"label":"Freeze picture","name":"visual-performance-visual-87"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"3D rotation & depth"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope axes","controlKey":"visual-performance-visual.92","data-scope":"space","default":"flat","disabled":false,"label":"Axes","name":"visual-performance-visual-92","options":[{"label":"Stereo plane · L / R","value":"flat"},{"label":"Stereo + delayed L depth","value":"stereo-depth"},{"label":"Delay space · L / Lτ / L2τ","value":"delay"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Depth delay milliseconds","controlKey":"visual-performance-visual.94","data-scope":"delay","default":"1","disabled":false,"kind":"range","label":"Delay ms","max":"5","min":"0.1","name":"visual-performance-visual-94","step":"0.1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope projection","controlKey":"visual-performance-visual.96","data-scope":"projection","default":"orthographic","disabled":false,"label":"Projection","name":"visual-performance-visual-96","options":[{"label":"Orthographic","value":"orthographic"},{"label":"Perspective","value":"perspective"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope rotation X","controlKey":"visual-performance-visual.98","data-scope":"rotate-x","default":"0","disabled":false,"kind":"range","label":"Rotate X","max":"180","min":"-180","name":"visual-performance-visual-98","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope rotation Y","controlKey":"visual-performance-visual.100","data-scope":"rotate-y","default":"0","disabled":false,"kind":"range","label":"Rotate Y","max":"180","min":"-180","name":"visual-performance-visual-100","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Scope rotation Z","controlKey":"visual-performance-visual.102","data-scope":"rotate-z","default":"0","disabled":false,"kind":"range","label":"Rotate Z","max":"180","min":"-180","name":"visual-performance-visual-102","step":"1"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.103","data-scope":"reset-view","disabled":false,"label":"Reset rotation"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"text":"Depth is derived from delayed audio, not a third input channel. Projection changes the picture only; waveform view ignores these controls.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-fields","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-spatial","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-section","element":"fieldset"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-display-settings","data-visual-for":"scope geometry field trace","element":"details","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"default":-25.0,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"yaw","read":"number"},"kind":"range","label":"Spectrum orbit","max":180.0,"min":-180.0,"name":"virtual-spectrum-yaw","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":35.0,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"tilt","read":"number"},"kind":"range","label":"Spectrum tilt","max":80.0,"min":5.0,"name":"virtual-spectrum-tilt","step":1.0},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":1.5,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"height","read":"number"},"kind":"range","label":"Spectrum height","max":3.0,"min":0.2,"name":"virtual-spectrum-height","step":0.1},"tag":"Input"},{"children":[],"kind":"view-node","props":{"default":0.3,"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"input","initialize":true,"key":"opacity","read":"number"},"kind":"range","label":"Video mix","max":0.8,"min":0.0,"name":"virtual-spectrum-opacity","step":0.01},"tag":"Input"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.set","event":"change","initialize":true,"key":"frozen","read":"checked"},"label":"Freeze spectrum","name":"virtual-spectrum-frozen"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.clear","event":"click"},"id":"virtual-spectrum-clear","label":"Clear history"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.camera","event":"click"},"id":"virtual-spectrum-camera","label":"Use camera"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.spectrogram.video-stop","event":"click"},"id":"virtual-spectrum-video-stop","label":"Stop video"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"accept":"video/*","disabled":true,"hostBinding":{"action":"virtual.spectrogram.file","event":"change","read":"file"},"kind":"file","label":"Local video","name":"virtual-spectrum-file"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-spectrum-status","role":"status","text":"Frequency left to right · level in height and color · six seconds of measured history in depth."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostOutput":"videoStatus","id":"virtual-spectrum-videoStatus","role":"status","text":"Local picture only. Video loops freely; camera stops when this view is hidden. No upload or video audio."},"tag":"Text"}],"kind":"view-node","props":{"hostCapability":"virtual.spectrogram","hostInitial":{"frozen":false,"height":1.5,"opacity":0.3,"tilt":35.0,"yaw":-25.0},"hostLimits":{"height":[0.2,3.0],"opacity":[0.0,0.8],"tilt":[5.0,80.0],"yaw":[-180.0,180.0]},"hostVersion":1,"id":"virtual-spectrum","title":"Virtual · frequency landscape & video"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.spectrogram\",\"source_hash\":\"b5ca5478f57926ed995aeb344a15b8bb6487ab4e4ca9f0b9e858937d5b3b015d\",\"context_hash\":\"ac2653378140b7020e1b10976d97e196a56daac74580d42e4787381d3c14ba97\",\"tree_hash\":\"611f1135776cbd2dada96963f086ee96b20c59111037a402533c6dd3ee375e85\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":-25.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"yaw\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Spectrum orbit\\\",\\\"max\\\":180.0,\\\"min\\\":-180.0,\\\"name\\\":\\\"virtual-spectrum-yaw\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":35.0,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"tilt\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Spectrum tilt\\\",\\\"max\\\":80.0,\\\"min\\\":5.0,\\\"name\\\":\\\"virtual-spectrum-tilt\\\",\\\"step\\\":1.0},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":1.5,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"height\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Spectrum height\\\",\\\"max\\\":3.0,\\\"min\\\":0.2,\\\"name\\\":\\\"virtual-spectrum-height\\\",\\\"step\\\":0.1},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"default\\\":0.3,\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"input\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"opacity\\\",\\\"read\\\":\\\"number\\\"},\\\"kind\\\":\\\"range\\\",\\\"label\\\":\\\"Video mix\\\",\\\"max\\\":0.8,\\\"min\\\":0.0,\\\"name\\\":\\\"virtual-spectrum-opacity\\\",\\\"step\\\":0.01},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.set\\\",\\\"event\\\":\\\"change\\\",\\\"initialize\\\":true,\\\"key\\\":\\\"frozen\\\",\\\"read\\\":\\\"checked\\\"},\\\"label\\\":\\\"Freeze spectrum\\\",\\\"name\\\":\\\"virtual-spectrum-frozen\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.clear\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-spectrum-clear\\\",\\\"label\\\":\\\"Clear history\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.camera\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-spectrum-camera\\\",\\\"label\\\":\\\"Use camera\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.video-stop\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-spectrum-video-stop\\\",\\\"label\\\":\\\"Stop video\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"accept\\\":\\\"video/*\\\",\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.spectrogram.file\\\",\\\"event\\\":\\\"change\\\",\\\"read\\\":\\\"file\\\"},\\\"kind\\\":\\\"file\\\",\\\"label\\\":\\\"Local video\\\",\\\"name\\\":\\\"virtual-spectrum-file\\\"},\\\"tag\\\":\\\"Input\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-spectrum-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Frequency left to right · level in height and color · six seconds of measured history in depth.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"videoStatus\\\",\\\"id\\\":\\\"virtual-spectrum-videoStatus\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Local picture only. Video loops freely; camera stops when this view is hidden. No upload or video audio.\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.spectrogram\\\",\\\"hostInitial\\\":{\\\"frozen\\\":false,\\\"height\\\":1.5,\\\"opacity\\\":0.3,\\\"tilt\\\":35.0,\\\"yaw\\\":-25.0},\\\"hostLimits\\\":{\\\"height\\\":[0.2,3.0],\\\"opacity\\\":[0.0,0.8],\\\"tilt\\\":[5.0,80.0],\\\"yaw\\\":[-180.0,180.0]},\\\"hostVersion\\\":1,\\\"id\\\":\\\"virtual-spectrum\\\",\\\"title\\\":\\\"Virtual · frequency landscape & video\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":-25.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"yaw\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Spectrum orbit\",\"max\":180.0,\"min\":-180.0,\"name\":\"virtual-spectrum-yaw\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":35.0,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"tilt\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Spectrum tilt\",\"max\":80.0,\"min\":5.0,\"name\":\"virtual-spectrum-tilt\",\"step\":1.0},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":1.5,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"height\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Spectrum height\",\"max\":3.0,\"min\":0.2,\"name\":\"virtual-spectrum-height\",\"step\":0.1},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"default\":0.3,\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"input\",\"initialize\":true,\"key\":\"opacity\",\"read\":\"number\"},\"kind\":\"range\",\"label\":\"Video mix\",\"max\":0.8,\"min\":0.0,\"name\":\"virtual-spectrum-opacity\",\"step\":0.01},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.set\",\"event\":\"change\",\"initialize\":true,\"key\":\"frozen\",\"read\":\"checked\"},\"label\":\"Freeze spectrum\",\"name\":\"virtual-spectrum-frozen\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.clear\",\"event\":\"click\"},\"id\":\"virtual-spectrum-clear\",\"label\":\"Clear history\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.camera\",\"event\":\"click\"},\"id\":\"virtual-spectrum-camera\",\"label\":\"Use camera\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.video-stop\",\"event\":\"click\"},\"id\":\"virtual-spectrum-video-stop\",\"label\":\"Stop video\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"accept\":\"video/*\",\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.spectrogram.file\",\"event\":\"change\",\"read\":\"file\"},\"kind\":\"file\",\"label\":\"Local video\",\"name\":\"virtual-spectrum-file\"},\"tag\":\"Input\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-spectrum-status\",\"role\":\"status\",\"text\":\"Frequency left to right · level in height and color · six seconds of measured history in depth.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"videoStatus\",\"id\":\"virtual-spectrum-videoStatus\",\"role\":\"status\",\"text\":\"Local picture only. Video loops freely; camera stops when this view is hidden. No upload or video audio.\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.spectrogram\",\"hostInitial\":{\"frozen\":false,\"height\":1.5,\"opacity\":0.3,\"tilt\":35.0,\"yaw\":-25.0},\"hostLimits\":{\"height\":[0.2,3.0],\"opacity\":[0.0,0.8],\"tilt\":[5.0,80.0],\"yaw\":[-180.0,180.0]},\"hostVersion\":1,\"id\":\"virtual-spectrum\",\"title\":\"Virtual · frequency landscape & video\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"611f1135776cbd2dada96963f086ee96b20c59111037a402533c6dd3ee375e85\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.spectrogram","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"data-spectrum-slot":true,"element":"div","hidden":true},"tag":"Section"}],"kind":"view-node","props":{"data-visual-for":"spectrum","element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"MIDI & spatial audio"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.110","data-scope":"midi-scan","disabled":false,"label":"Scan MIDI inputs"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Vector MIDI input","controlKey":"visual-performance-visual.111","data-scope":"midi-port","default":"","disabled":false,"label":"Vector MIDI input","name":"visual-performance-visual-111","options":[{"label":"Scan for a device","value":""}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.112","data-scope":"midi-connect","disabled":true,"label":"Connect MIDI"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"MIDI controller profile","controlKey":"visual-performance-visual.114","data-scope":"midi-profile","default":"keyboard","disabled":false,"label":"Controller","name":"visual-performance-visual-114","options":[{"label":"Keyboard · notes & bend","value":"keyboard"},{"label":"Theremini · antenna CCs","value":"theremini"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna MIDI channel","controlKey":"visual-performance-visual.117","data-scope":"midi-channel","default":"1","disabled":false,"kind":"number","label":"Channel","max":"16","min":"1","name":"visual-performance-visual-117"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Pitch antenna CC","controlKey":"visual-performance-visual.119","data-scope":"pitch-cc","default":"20","disabled":false,"kind":"number","label":"Pitch CC","max":"119","min":"0","name":"visual-performance-visual-119"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Volume antenna CC","controlKey":"visual-performance-visual.121","data-scope":"volume-cc","default":"2","disabled":false,"kind":"number","label":"Volume CC","max":"119","min":"0","name":"visual-performance-visual-121"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna CC resolution","controlKey":"visual-performance-visual.123","data-scope":"cc-bits","default":"7","disabled":false,"label":"Resolution","name":"visual-performance-visual-123","options":[{"label":"7-bit","value":"7"},{"label":"14-bit CC pairs","value":"14"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna low frequency","controlKey":"visual-performance-visual.125","data-scope":"low-hz","default":"55","disabled":false,"kind":"number","label":"Low Hz","max":"1999","min":"20","name":"visual-performance-visual-125"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Antenna high frequency","controlKey":"visual-performance-visual.127","data-scope":"high-hz","default":"1760","disabled":false,"kind":"number","label":"High Hz","max":"2000","min":"21","name":"visual-performance-visual-127"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Match the instrument’s MIDI CC OUT settings. Default: channel 1, pitch CC20, volume CC2, 7-bit. This plays CRE8’s geometry voice; USB MIDI does not carry the Theremini’s own audio.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-fields","data-theremini-mapping":true,"element":"div","hidden":true},"tag":"Section"},{"children":[],"kind":"view-node","props":{"data-scope":"midi-status","role":"status","text":"Select a controller profile, scan, then connect. Keyboard: notes, bend ±2, CC1 morph and CC74 motion. Theremini: continuous antenna pitch and level.","variant":"output"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.131","data-scope":"spatial","default":false,"disabled":false,"label":"Spatial audio (HRTF)","name":"visual-performance-visual-131"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Instrument azimuth","controlKey":"visual-performance-visual.133","data-scope":"azimuth","default":"0","disabled":false,"kind":"range","label":"Azimuth","max":"180","min":"-180","name":"visual-performance-visual-133"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"visual-performance-visual.135","data-scope":"antenna-space","default":false,"disabled":false,"label":"MIDI pitch moves left ↔ right","name":"visual-performance-visual-135"},"tag":"Checkbox"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Headphones reveal spatial placement. HRTF changes the monitored stereo signal; instrument WAV export stays dry.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-scope-fields","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-midi","data-visual-for":"geometry field","element":"details","hidden":true},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-scope-controls","data-scope":"controls","element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-visual":"lock","text":"Locked to the transport · stopped","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-visual-lock","variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Shader editor"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.effect","event":"change","key":"effect","read":"text"},"hostOutputs":{"options":"effects","value":"effect"},"label":"Shader effect","name":"virtual-shader-effect","options":[{"label":"NEBULA","value":"NEBULA"},{"label":"SPECTRUM TUNNEL","value":"SPECTRUM TUNNEL"},{"label":"LATTICE","value":"LATTICE"},{"label":"WAVEFORM HALO","value":"WAVEFORM HALO"},{"label":"PLASMA","value":"PLASMA"},{"label":"POLAR EQ","value":"POLAR EQ"},{"label":"OSCILLOSCOPE","value":"OSCILLOSCOPE"},{"label":"VORONOI","value":"VORONOI"},{"label":"STARFIELD","value":"STARFIELD"},{"label":"FLOW FIELD","value":"FLOW FIELD"},{"label":"KALEIDO","value":"KALEIDO"},{"label":"METABALLS","value":"METABALLS"},{"label":"CONTOUR BLOOM","value":"CONTOUR BLOOM"},{"label":"AURORA CURTAINS","value":"AURORA CURTAINS"},{"label":"HARMONIC RIBBONS","value":"HARMONIC RIBBONS"},{"label":"CYMATIC PLATE","value":"CYMATIC PLATE"},{"label":"SPECTRAL DUNES","value":"SPECTRAL DUNES"},{"label":"PRISM ORBIT","value":"PRISM ORBIT"},{"label":"CONTOUR KNOT","value":"CONTOUR KNOT"}]},"tag":"Select"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.auto","event":"change","key":"auto","read":"checked"},"hostOutputs":{"checked":"auto"},"label":"Auto-cycle every four bars","name":"virtual-shader-auto"},"tag":"Checkbox"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.projector","event":"click"},"id":"virtual-shader-projector","label":"Send to projector"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.apply","event":"click"},"id":"virtual-shader-apply","label":"Apply effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"disabled":true,"hostBinding":{"action":"virtual.shader.revert","event":"click"},"id":"virtual-shader-revert","label":"Restore starter effect"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"text":"Effect source · GLSL ES 3.0 · Ctrl / ⌘ Enter applies the effect."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"hostBinding":{"action":"virtual.shader.source","event":"input","key":"source","maxLength":65536,"read":"text"},"hostEditor":true,"hostOutputs":{"errorLine":"errorLine","value":"source"},"hostShortcut":"virtual.shader.apply","html":"<div class=\"ssr-code-editor\" data-ssr-code-editor=\"glsl\">\n<style>.ssr-code-editor{min-width:0}.ssr-code-frame{display:flex;position:relative;overflow:hidden;background:#031013;border:1px solid #355a51;border-radius:8px}\n.ssr-code-gutter{position:relative;flex:0 0 42px;overflow:hidden;text-align:right;background:#07191b;color:#70938b;user-select:none}\n.ssr-code-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box;padding:14px 8px 14px 0;margin:0;font:12px/21px ui-monospace,monospace;white-space:pre}\n.ssr-code-surface{position:relative;flex:1;min-width:0;overflow:hidden}\n.ssr-code-surface textarea,.ssr-code-surface>pre{box-sizing:border-box;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;font:12px/21px ui-monospace,monospace;letter-spacing:normal;tab-size:2;white-space:pre;overflow-wrap:normal}\n.ssr-code-surface textarea{display:block;position:relative;width:100%;min-height:390px;resize:vertical;color:#d0eddf;caret-color:#e4f7ee;outline-offset:-2px}\n.ssr-code-surface>pre{display:none;position:absolute;top:0;left:0;min-width:100%;pointer-events:none;color:#d0eddf}\n.ssr-code-frame.is-enhanced .ssr-code-surface>pre{display:block}\n.ssr-code-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}\n.ssr-code-frame.is-enhanced textarea::selection{background:#bcee8340}\n.ssr-code-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 2px;color:#89aaa0;font:10px/1.5 ui-monospace,monospace}\n.ssr-code-token--keyword{color:#c2ef8b}.ssr-code-token--type{color:#91dcd1}.ssr-code-token--builtin{color:#bfaeff}.ssr-code-token--number{color:#f5c187}.ssr-code-token--comment{color:#789c92}.ssr-code-token--attribute{color:#edaccc}.ssr-code-token--string{color:#edc589}\n.ssr-code-frame[data-error=true]{border-color:#f0a28e}.ssr-code-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}\n@media(max-width:540px){.ssr-code-gutter{flex-basis:32px}.ssr-code-footer{font-size:9px}}\n.ssr-code-navigation,.ssr-code-find{padding:10px 12px;background:#0b1d19;border-top:1px solid #29453b;font:11px/1.5 system-ui;color:#adcbbf}\n.ssr-code-navigation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.ssr-code-navigation button,.ssr-code-find button{cursor:pointer;padding:5px 9px;border:1px solid #36584b;border-radius:6px;background:#122b24;color:#d5eadf;font:inherit}\n.ssr-code-navigation button:disabled,.ssr-code-find button:disabled{opacity:.45;cursor:default}\n.ssr-code-navigation input,.ssr-code-query input{box-sizing:border-box;border:1px solid #3e6153;border-radius:5px;background:#061410;color:#e4f4e7;padding:5px 7px;font:inherit;min-width:0}\n.ssr-code-navigation input{width:68px}.ssr-code-navigation kbd{font:9px ui-monospace,monospace;color:#87a498}\n.ssr-code-navigation [data-code=navigation-status]{font-size:10px;flex-basis:100%;empty-cells:hide}\n.ssr-code-navigation [data-code=navigation-status]:empty{display:none}\n.ssr-code-navigation input[aria-invalid=true]{border-color:#f0a28e}\n.ssr-code-find[hidden]{display:none}.ssr-code-find{display:grid;gap:8px}\n.ssr-code-query{display:flex;align-items:center;gap:8px}.ssr-code-query input{flex:1;width:100%}\n.ssr-code-find-options,.ssr-code-find-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n.ssr-code-find-options label{display:flex;align-items:center;gap:5px}.ssr-code-find-options input{accent-color:#c2ef8b}\n.ssr-code-find-actions [data-code=find-close]{margin-left:auto}.ssr-code-find-actions [data-code=find-count]{font:10px ui-monospace,monospace}\n.ssr-code-match{background:#786a235c}.ssr-code-match-active{background:#8f6a3280;box-shadow:inset 0 -2px #edcc7a}\n.ssr-code-navigation :focus-visible,.ssr-code-find :focus-visible{outline:2px solid #c2ef8b;outline-offset:2px}\n.ssr-code-replace{display:grid;gap:8px;border-top:1px solid #29453b;padding-top:10px}.ssr-code-replace[hidden]{display:none}\n.ssr-code-replace [data-code=replace-status]{font-size:10px;color:#a8c7ba}.ssr-code-query>span{flex-shrink:0}\n</style>\n<div class=\"ssr-code-navigation\" role=\"group\" aria-label=\"Code navigation\">\n  <button type=\"button\" data-code=\"find-toggle\" data-code-nav-control aria-expanded=\"false\" aria-controls=\"virtual-shader-source-find\" title=\"Find (Ctrl or Command F); F3 next, Shift F3 previous\" disabled>Find <kbd>⌘/Ctrl F</kbd></button>\n  <label for=\"virtual-shader-source-line\">Line</label><input id=\"virtual-shader-source-line\" data-code=\"goto-line\" data-code-nav-control type=\"number\" min=\"1\" step=\"1\" value=\"1\" aria-describedby=\"virtual-shader-source-navigation-status\" title=\"Go to line (Ctrl or Command G)\" disabled><button type=\"button\" data-code=\"goto-submit\" data-code-nav-control disabled>Go</button>\n  <span id=\"virtual-shader-source-navigation-status\" data-code=\"navigation-status\" role=\"status\" aria-live=\"polite\"></span>\n</div>\n<div id=\"virtual-shader-source-find\" class=\"ssr-code-find\" data-code=\"find-bar\" role=\"search\" aria-label=\"Find in code\" hidden>\n  <label class=\"ssr-code-query\"><span>Find text</span><input data-code=\"find-query\" data-code-nav-control type=\"search\" maxlength=\"1024\" autocomplete=\"off\" spellcheck=\"false\" disabled></label>\n  <div class=\"ssr-code-find-options\"><label><input data-code=\"find-case\" data-code-nav-control type=\"checkbox\" disabled>Match case</label><label><input data-code=\"find-word\" data-code-nav-control type=\"checkbox\" disabled>Whole word</label></div>\n  <div class=\"ssr-code-find-actions\"><button type=\"button\" data-code=\"find-prev\" data-code-nav-control aria-label=\"Previous match\" disabled>↑</button><button type=\"button\" data-code=\"find-next\" data-code-nav-control aria-label=\"Next match\" disabled>↓</button><span data-code=\"find-count\" role=\"status\" aria-live=\"polite\">Type to find</span><button type=\"button\" data-code=\"replace-toggle\" data-code-nav-control aria-expanded=\"false\" aria-controls=\"virtual-shader-source-replace\" disabled>Replace…</button><button type=\"button\" data-code=\"find-close\" data-code-nav-control aria-label=\"Close find\" disabled>Close</button></div>\n  <div id=\"virtual-shader-source-replace\" class=\"ssr-code-replace\" data-code=\"replace-bar\" hidden>\n    <label class=\"ssr-code-query\"><span>Replace with</span><input data-code=\"replace-query\" data-code-nav-control type=\"text\" maxlength=\"65536\" autocomplete=\"off\" spellcheck=\"false\" disabled></label>\n    <div class=\"ssr-code-find-actions\"><button type=\"button\" data-code=\"replace-one\" data-code-nav-control disabled>Replace</button><button type=\"button\" data-code=\"replace-all\" data-code-nav-control disabled>Replace all</button><button type=\"button\" data-code=\"replace-undo\" data-code-nav-control disabled>Undo replacement</button></div>\n    <span data-code=\"replace-status\" role=\"status\" aria-live=\"polite\">Replacement is literal. An empty value deletes matches.</span>\n  </div>\n</div>\n<div class=\"ssr-code-frame\" data-code=\"frame\">\n  <div class=\"ssr-code-gutter\" aria-hidden=\"true\"><pre data-code=\"lines\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24</pre></div>\n  <div class=\"ssr-code-surface\"><pre data-code=\"highlight\" aria-hidden=\"true\"></pre><textarea disabled aria-label=\"Code source\" id=\"virtual-shader-source\" data-code=\"source\" rows=\"18\" maxlength=\"65536\" wrap=\"off\" spellcheck=\"false\" autocapitalize=\"off\" autocomplete=\"off\" aria-describedby=\"virtual-shader-help virtual-shader-source-keys\">// Bar-locked rings. Every input below comes from the score you are playing.\nvoid main(){\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\n  float r=length(uv);\n\n  // One ring per beat, pushed outward by the transport&#39;s own beat phase.\n  float ring=fract(r*3.0-uBeatPhase);\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\n\n  // The bar advances the hue, so the picture shows its place in the loop.\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\n\n  // Pads wash the frame; melody and arp sparkle over it.\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\n\n  // A scored hit lands as a flash and a kick of brightness, then decays.\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\n  col*=1.+.35*uParts.x*uOnset;\n\n  col*=smoothstep(1.35,.25,r);\n  fragColor=vec4(col,1.);\n}</textarea></div>\n</div>\n<div class=\"ssr-code-footer\"><span data-code=\"cursor\">Ln 1 · Col 1</span><span id=\"virtual-shader-source-keys\">Tab indent · Ctrl/⌘ / comment · Esc then Tab to leave</span></div>\n</div>","id":"virtual-shader-source"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"hostOutput":"status","id":"virtual-shader-status","role":"status","text":"Starting the visualizer…"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"id":"virtual-shader-help","text":"Write a void main() body. The shared prelude provides uniforms and spec(), wav(), hsv(), pal(), rot(), noise(), fbm(), smin(), sdCircle() and sdBox(). A compile error keeps the running picture."},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Shader inputs"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"uBar — Bar number the transport is on, counting from 1; 0 when stopped."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBarPhase — 0..1 sawtooth across one bar."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBass — Measured low-band energy, 0..1 (smoothed)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBeat — Envelope that pops to 1 on a bass transient and decays."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uBeatPhase — 0..1 sawtooth across one beat."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uCentroid — Spectral centroid (brightness), 0..1."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uLvl — Alias of uRms, kept for the original effects."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uMid — Measured mid-band energy, 0..1 (smoothed)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uOnset — 1 on a scored note or drum hit, decaying to 0."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uParts — Score energy per part: x drums, y bass, z pads, w melody+arp."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uRes — Canvas size in pixels (vec2)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uRms — Measured waveform level, 0..1 (smoothed)."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uSpec — Two-row texture: row 0 spectrum, row 1 waveform (use spec()/wav())."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTempo — Beats per minute of the running score."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTime — Seconds since the visualizer was created."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTre — Alias of uTreble, kept for the original effects."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"uTreble — Measured high-band energy, 0..1 (smoothed)."},"tag":"Text"}],"kind":"view-node","props":{"title":"Shader inputs"},"tag":"Card"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"}],"kind":"view-node","props":{"hostCapability":"virtual.shader-studio","hostInitial":{"source":"// Bar-locked rings. Every input below comes from the score you are playing.\nvoid main(){\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\n  float r=length(uv);\n\n  // One ring per beat, pushed outward by the transport's own beat phase.\n  float ring=fract(r*3.0-uBeatPhase);\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\n\n  // The bar advances the hue, so the picture shows its place in the loop.\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\n\n  // Pads wash the frame; melody and arp sparkle over it.\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\n\n  // A scored hit lands as a flash and a kick of brightness, then decays.\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\n  col*=1.+.35*uParts.x*uOnset;\n\n  col*=smoothstep(1.35,.25,r);\n  fragColor=vec4(col,1.);\n}"},"hostVersion":1,"title":"Shader studio"},"tag":"Card"}],"kind":"view-node","props":{"data-cre8-host-artifact":"{\"schema\":\"cre8.view.ir\",\"version\":1,\"template_id\":\"virtual.shader-studio\",\"source_hash\":\"79f254ae041a9a0c60332339965ce014249c90cbb9f5fa45b7e7b25aa22ce571\",\"context_hash\":\"e53384975d531088890d0f5c789834494bac395897904a7a42ad86740ed2c09c\",\"tree_hash\":\"05086bd41452445fac8745b00e554c7ecb34aa71bf39188d0ba3fcadc93efff3\",\"tree_json\":\"{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.effect\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"effect\\\",\\\"read\\\":\\\"text\\\"},\\\"hostOutputs\\\":{\\\"options\\\":\\\"effects\\\",\\\"value\\\":\\\"effect\\\"},\\\"label\\\":\\\"Shader effect\\\",\\\"name\\\":\\\"virtual-shader-effect\\\",\\\"options\\\":[{\\\"label\\\":\\\"NEBULA\\\",\\\"value\\\":\\\"NEBULA\\\"},{\\\"label\\\":\\\"SPECTRUM TUNNEL\\\",\\\"value\\\":\\\"SPECTRUM TUNNEL\\\"},{\\\"label\\\":\\\"LATTICE\\\",\\\"value\\\":\\\"LATTICE\\\"},{\\\"label\\\":\\\"WAVEFORM HALO\\\",\\\"value\\\":\\\"WAVEFORM HALO\\\"},{\\\"label\\\":\\\"PLASMA\\\",\\\"value\\\":\\\"PLASMA\\\"},{\\\"label\\\":\\\"POLAR EQ\\\",\\\"value\\\":\\\"POLAR EQ\\\"},{\\\"label\\\":\\\"OSCILLOSCOPE\\\",\\\"value\\\":\\\"OSCILLOSCOPE\\\"},{\\\"label\\\":\\\"VORONOI\\\",\\\"value\\\":\\\"VORONOI\\\"},{\\\"label\\\":\\\"STARFIELD\\\",\\\"value\\\":\\\"STARFIELD\\\"},{\\\"label\\\":\\\"FLOW FIELD\\\",\\\"value\\\":\\\"FLOW FIELD\\\"},{\\\"label\\\":\\\"KALEIDO\\\",\\\"value\\\":\\\"KALEIDO\\\"},{\\\"label\\\":\\\"METABALLS\\\",\\\"value\\\":\\\"METABALLS\\\"},{\\\"label\\\":\\\"CONTOUR BLOOM\\\",\\\"value\\\":\\\"CONTOUR BLOOM\\\"},{\\\"label\\\":\\\"AURORA CURTAINS\\\",\\\"value\\\":\\\"AURORA CURTAINS\\\"},{\\\"label\\\":\\\"HARMONIC RIBBONS\\\",\\\"value\\\":\\\"HARMONIC RIBBONS\\\"},{\\\"label\\\":\\\"CYMATIC PLATE\\\",\\\"value\\\":\\\"CYMATIC PLATE\\\"},{\\\"label\\\":\\\"SPECTRAL DUNES\\\",\\\"value\\\":\\\"SPECTRAL DUNES\\\"},{\\\"label\\\":\\\"PRISM ORBIT\\\",\\\"value\\\":\\\"PRISM ORBIT\\\"},{\\\"label\\\":\\\"CONTOUR KNOT\\\",\\\"value\\\":\\\"CONTOUR KNOT\\\"}]},\\\"tag\\\":\\\"Select\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.auto\\\",\\\"event\\\":\\\"change\\\",\\\"key\\\":\\\"auto\\\",\\\"read\\\":\\\"checked\\\"},\\\"hostOutputs\\\":{\\\"checked\\\":\\\"auto\\\"},\\\"label\\\":\\\"Auto-cycle every four bars\\\",\\\"name\\\":\\\"virtual-shader-auto\\\"},\\\"tag\\\":\\\"Checkbox\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.projector\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-shader-projector\\\",\\\"label\\\":\\\"Send to projector\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.apply\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-shader-apply\\\",\\\"label\\\":\\\"Apply effect\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"disabled\\\":true,\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.revert\\\",\\\"event\\\":\\\"click\\\"},\\\"id\\\":\\\"virtual-shader-revert\\\",\\\"label\\\":\\\"Restore starter effect\\\"},\\\"tag\\\":\\\"Action\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Effect source · GLSL ES 3.0 · Ctrl / ⌘ Enter applies the effect.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostBinding\\\":{\\\"action\\\":\\\"virtual.shader.source\\\",\\\"event\\\":\\\"input\\\",\\\"key\\\":\\\"source\\\",\\\"maxLength\\\":65536,\\\"read\\\":\\\"text\\\"},\\\"hostEditor\\\":true,\\\"hostOutputs\\\":{\\\"errorLine\\\":\\\"errorLine\\\",\\\"value\\\":\\\"source\\\"},\\\"hostShortcut\\\":\\\"virtual.shader.apply\\\",\\\"html\\\":\\\"<div class=\\\\\\\"ssr-code-editor\\\\\\\" data-ssr-code-editor=\\\\\\\"glsl\\\\\\\">\\\\n<style>.ssr-code-editor{min-width:0}.ssr-code-frame{display:flex;position:relative;overflow:hidden;background:#031013;border:1px solid #355a51;border-radius:8px}\\\\n.ssr-code-gutter{position:relative;flex:0 0 42px;overflow:hidden;text-align:right;background:#07191b;color:#70938b;user-select:none}\\\\n.ssr-code-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box;padding:14px 8px 14px 0;margin:0;font:12px/21px ui-monospace,monospace;white-space:pre}\\\\n.ssr-code-surface{position:relative;flex:1;min-width:0;overflow:hidden}\\\\n.ssr-code-surface textarea,.ssr-code-surface>pre{box-sizing:border-box;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;font:12px/21px ui-monospace,monospace;letter-spacing:normal;tab-size:2;white-space:pre;overflow-wrap:normal}\\\\n.ssr-code-surface textarea{display:block;position:relative;width:100%;min-height:390px;resize:vertical;color:#d0eddf;caret-color:#e4f7ee;outline-offset:-2px}\\\\n.ssr-code-surface>pre{display:none;position:absolute;top:0;left:0;min-width:100%;pointer-events:none;color:#d0eddf}\\\\n.ssr-code-frame.is-enhanced .ssr-code-surface>pre{display:block}\\\\n.ssr-code-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}\\\\n.ssr-code-frame.is-enhanced textarea::selection{background:#bcee8340}\\\\n.ssr-code-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 2px;color:#89aaa0;font:10px/1.5 ui-monospace,monospace}\\\\n.ssr-code-token--keyword{color:#c2ef8b}.ssr-code-token--type{color:#91dcd1}.ssr-code-token--builtin{color:#bfaeff}.ssr-code-token--number{color:#f5c187}.ssr-code-token--comment{color:#789c92}.ssr-code-token--attribute{color:#edaccc}.ssr-code-token--string{color:#edc589}\\\\n.ssr-code-frame[data-error=true]{border-color:#f0a28e}.ssr-code-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}\\\\n@media(max-width:540px){.ssr-code-gutter{flex-basis:32px}.ssr-code-footer{font-size:9px}}\\\\n.ssr-code-navigation,.ssr-code-find{padding:10px 12px;background:#0b1d19;border-top:1px solid #29453b;font:11px/1.5 system-ui;color:#adcbbf}\\\\n.ssr-code-navigation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\\\\n.ssr-code-navigation button,.ssr-code-find button{cursor:pointer;padding:5px 9px;border:1px solid #36584b;border-radius:6px;background:#122b24;color:#d5eadf;font:inherit}\\\\n.ssr-code-navigation button:disabled,.ssr-code-find button:disabled{opacity:.45;cursor:default}\\\\n.ssr-code-navigation input,.ssr-code-query input{box-sizing:border-box;border:1px solid #3e6153;border-radius:5px;background:#061410;color:#e4f4e7;padding:5px 7px;font:inherit;min-width:0}\\\\n.ssr-code-navigation input{width:68px}.ssr-code-navigation kbd{font:9px ui-monospace,monospace;color:#87a498}\\\\n.ssr-code-navigation [data-code=navigation-status]{font-size:10px;flex-basis:100%;empty-cells:hide}\\\\n.ssr-code-navigation [data-code=navigation-status]:empty{display:none}\\\\n.ssr-code-navigation input[aria-invalid=true]{border-color:#f0a28e}\\\\n.ssr-code-find[hidden]{display:none}.ssr-code-find{display:grid;gap:8px}\\\\n.ssr-code-query{display:flex;align-items:center;gap:8px}.ssr-code-query input{flex:1;width:100%}\\\\n.ssr-code-find-options,.ssr-code-find-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\\\\n.ssr-code-find-options label{display:flex;align-items:center;gap:5px}.ssr-code-find-options input{accent-color:#c2ef8b}\\\\n.ssr-code-find-actions [data-code=find-close]{margin-left:auto}.ssr-code-find-actions [data-code=find-count]{font:10px ui-monospace,monospace}\\\\n.ssr-code-match{background:#786a235c}.ssr-code-match-active{background:#8f6a3280;box-shadow:inset 0 -2px #edcc7a}\\\\n.ssr-code-navigation :focus-visible,.ssr-code-find :focus-visible{outline:2px solid #c2ef8b;outline-offset:2px}\\\\n.ssr-code-replace{display:grid;gap:8px;border-top:1px solid #29453b;padding-top:10px}.ssr-code-replace[hidden]{display:none}\\\\n.ssr-code-replace [data-code=replace-status]{font-size:10px;color:#a8c7ba}.ssr-code-query>span{flex-shrink:0}\\\\n</style>\\\\n<div class=\\\\\\\"ssr-code-navigation\\\\\\\" role=\\\\\\\"group\\\\\\\" aria-label=\\\\\\\"Code navigation\\\\\\\">\\\\n  <button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-toggle\\\\\\\" data-code-nav-control aria-expanded=\\\\\\\"false\\\\\\\" aria-controls=\\\\\\\"virtual-shader-source-find\\\\\\\" title=\\\\\\\"Find (Ctrl or Command F); F3 next, Shift F3 previous\\\\\\\" disabled>Find <kbd>⌘/Ctrl F</kbd></button>\\\\n  <label for=\\\\\\\"virtual-shader-source-line\\\\\\\">Line</label><input id=\\\\\\\"virtual-shader-source-line\\\\\\\" data-code=\\\\\\\"goto-line\\\\\\\" data-code-nav-control type=\\\\\\\"number\\\\\\\" min=\\\\\\\"1\\\\\\\" step=\\\\\\\"1\\\\\\\" value=\\\\\\\"1\\\\\\\" aria-describedby=\\\\\\\"virtual-shader-source-navigation-status\\\\\\\" title=\\\\\\\"Go to line (Ctrl or Command G)\\\\\\\" disabled><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"goto-submit\\\\\\\" data-code-nav-control disabled>Go</button>\\\\n  <span id=\\\\\\\"virtual-shader-source-navigation-status\\\\\\\" data-code=\\\\\\\"navigation-status\\\\\\\" role=\\\\\\\"status\\\\\\\" aria-live=\\\\\\\"polite\\\\\\\"></span>\\\\n</div>\\\\n<div id=\\\\\\\"virtual-shader-source-find\\\\\\\" class=\\\\\\\"ssr-code-find\\\\\\\" data-code=\\\\\\\"find-bar\\\\\\\" role=\\\\\\\"search\\\\\\\" aria-label=\\\\\\\"Find in code\\\\\\\" hidden>\\\\n  <label class=\\\\\\\"ssr-code-query\\\\\\\"><span>Find text</span><input data-code=\\\\\\\"find-query\\\\\\\" data-code-nav-control type=\\\\\\\"search\\\\\\\" maxlength=\\\\\\\"1024\\\\\\\" autocomplete=\\\\\\\"off\\\\\\\" spellcheck=\\\\\\\"false\\\\\\\" disabled></label>\\\\n  <div class=\\\\\\\"ssr-code-find-options\\\\\\\"><label><input data-code=\\\\\\\"find-case\\\\\\\" data-code-nav-control type=\\\\\\\"checkbox\\\\\\\" disabled>Match case</label><label><input data-code=\\\\\\\"find-word\\\\\\\" data-code-nav-control type=\\\\\\\"checkbox\\\\\\\" disabled>Whole word</label></div>\\\\n  <div class=\\\\\\\"ssr-code-find-actions\\\\\\\"><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-prev\\\\\\\" data-code-nav-control aria-label=\\\\\\\"Previous match\\\\\\\" disabled>↑</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-next\\\\\\\" data-code-nav-control aria-label=\\\\\\\"Next match\\\\\\\" disabled>↓</button><span data-code=\\\\\\\"find-count\\\\\\\" role=\\\\\\\"status\\\\\\\" aria-live=\\\\\\\"polite\\\\\\\">Type to find</span><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-toggle\\\\\\\" data-code-nav-control aria-expanded=\\\\\\\"false\\\\\\\" aria-controls=\\\\\\\"virtual-shader-source-replace\\\\\\\" disabled>Replace…</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"find-close\\\\\\\" data-code-nav-control aria-label=\\\\\\\"Close find\\\\\\\" disabled>Close</button></div>\\\\n  <div id=\\\\\\\"virtual-shader-source-replace\\\\\\\" class=\\\\\\\"ssr-code-replace\\\\\\\" data-code=\\\\\\\"replace-bar\\\\\\\" hidden>\\\\n    <label class=\\\\\\\"ssr-code-query\\\\\\\"><span>Replace with</span><input data-code=\\\\\\\"replace-query\\\\\\\" data-code-nav-control type=\\\\\\\"text\\\\\\\" maxlength=\\\\\\\"65536\\\\\\\" autocomplete=\\\\\\\"off\\\\\\\" spellcheck=\\\\\\\"false\\\\\\\" disabled></label>\\\\n    <div class=\\\\\\\"ssr-code-find-actions\\\\\\\"><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-one\\\\\\\" data-code-nav-control disabled>Replace</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-all\\\\\\\" data-code-nav-control disabled>Replace all</button><button type=\\\\\\\"button\\\\\\\" data-code=\\\\\\\"replace-undo\\\\\\\" data-code-nav-control disabled>Undo replacement</button></div>\\\\n    <span data-code=\\\\\\\"replace-status\\\\\\\" role=\\\\\\\"status\\\\\\\" aria-live=\\\\\\\"polite\\\\\\\">Replacement is literal. An empty value deletes matches.</span>\\\\n  </div>\\\\n</div>\\\\n<div class=\\\\\\\"ssr-code-frame\\\\\\\" data-code=\\\\\\\"frame\\\\\\\">\\\\n  <div class=\\\\\\\"ssr-code-gutter\\\\\\\" aria-hidden=\\\\\\\"true\\\\\\\"><pre data-code=\\\\\\\"lines\\\\\\\">1\\\\n2\\\\n3\\\\n4\\\\n5\\\\n6\\\\n7\\\\n8\\\\n9\\\\n10\\\\n11\\\\n12\\\\n13\\\\n14\\\\n15\\\\n16\\\\n17\\\\n18\\\\n19\\\\n20\\\\n21\\\\n22\\\\n23\\\\n24</pre></div>\\\\n  <div class=\\\\\\\"ssr-code-surface\\\\\\\"><pre data-code=\\\\\\\"highlight\\\\\\\" aria-hidden=\\\\\\\"true\\\\\\\"></pre><textarea disabled aria-label=\\\\\\\"Code source\\\\\\\" id=\\\\\\\"virtual-shader-source\\\\\\\" data-code=\\\\\\\"source\\\\\\\" rows=\\\\\\\"18\\\\\\\" maxlength=\\\\\\\"65536\\\\\\\" wrap=\\\\\\\"off\\\\\\\" spellcheck=\\\\\\\"false\\\\\\\" autocapitalize=\\\\\\\"off\\\\\\\" autocomplete=\\\\\\\"off\\\\\\\" aria-describedby=\\\\\\\"virtual-shader-help virtual-shader-source-keys\\\\\\\">// Bar-locked rings. Every input below comes from the score you are playing.\\\\nvoid main(){\\\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\\\n  float r=length(uv);\\\\n\\\\n  // One ring per beat, pushed outward by the transport&#39;s own beat phase.\\\\n  float ring=fract(r*3.0-uBeatPhase);\\\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\\\n\\\\n  // The bar advances the hue, so the picture shows its place in the loop.\\\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\\\n\\\\n  // Pads wash the frame; melody and arp sparkle over it.\\\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\\\n\\\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\\\n  col*=1.+.35*uParts.x*uOnset;\\\\n\\\\n  col*=smoothstep(1.35,.25,r);\\\\n  fragColor=vec4(col,1.);\\\\n}</textarea></div>\\\\n</div>\\\\n<div class=\\\\\\\"ssr-code-footer\\\\\\\"><span data-code=\\\\\\\"cursor\\\\\\\">Ln 1 · Col 1</span><span id=\\\\\\\"virtual-shader-source-keys\\\\\\\">Tab indent · Ctrl/⌘ / comment · Esc then Tab to leave</span></div>\\\\n</div>\\\",\\\"id\\\":\\\"virtual-shader-source\\\"},\\\"tag\\\":\\\"RawHtml\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostOutput\\\":\\\"status\\\",\\\"id\\\":\\\"virtual-shader-status\\\",\\\"role\\\":\\\"status\\\",\\\"text\\\":\\\"Starting the visualizer…\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"id\\\":\\\"virtual-shader-help\\\",\\\"text\\\":\\\"Write a void main() body. The shared prelude provides uniforms and spec(), wav(), hsv(), pal(), rot(), noise(), fbm(), smin(), sdCircle() and sdBox(). A compile error keeps the running picture.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"Shader inputs\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"element\\\":\\\"summary\\\"},\\\"tag\\\":\\\"Section\\\"},{\\\"children\\\":[{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBar — Bar number the transport is on, counting from 1; 0 when stopped.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBarPhase — 0..1 sawtooth across one bar.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBass — Measured low-band energy, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBeat — Envelope that pops to 1 on a bass transient and decays.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uBeatPhase — 0..1 sawtooth across one beat.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uCentroid — Spectral centroid (brightness), 0..1.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uLvl — Alias of uRms, kept for the original effects.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uMid — Measured mid-band energy, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uOnset — 1 on a scored note or drum hit, decaying to 0.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uParts — Score energy per part: x drums, y bass, z pads, w melody+arp.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uRes — Canvas size in pixels (vec2).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uRms — Measured waveform level, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uSpec — Two-row texture: row 0 spectrum, row 1 waveform (use spec()/wav()).\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTempo — Beats per minute of the running score.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTime — Seconds since the visualizer was created.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTre — Alias of uTreble, kept for the original effects.\\\"},\\\"tag\\\":\\\"Text\\\"},{\\\"children\\\":[],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"text\\\":\\\"uTreble — Measured high-band energy, 0..1 (smoothed).\\\"},\\\"tag\\\":\\\"Text\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"title\\\":\\\"Shader inputs\\\"},\\\"tag\\\":\\\"Card\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"element\\\":\\\"details\\\"},\\\"tag\\\":\\\"Section\\\"}],\\\"kind\\\":\\\"view-node\\\",\\\"props\\\":{\\\"hostCapability\\\":\\\"virtual.shader-studio\\\",\\\"hostInitial\\\":{\\\"source\\\":\\\"// Bar-locked rings. Every input below comes from the score you are playing.\\\\nvoid main(){\\\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\\\n  float r=length(uv);\\\\n\\\\n  // One ring per beat, pushed outward by the transport's own beat phase.\\\\n  float ring=fract(r*3.0-uBeatPhase);\\\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\\\n\\\\n  // The bar advances the hue, so the picture shows its place in the loop.\\\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\\\n\\\\n  // Pads wash the frame; melody and arp sparkle over it.\\\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\\\n\\\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\\\n  col*=1.+.35*uParts.x*uOnset;\\\\n\\\\n  col*=smoothstep(1.35,.25,r);\\\\n  fragColor=vec4(col,1.);\\\\n}\\\"},\\\"hostVersion\\\":1,\\\"title\\\":\\\"Shader studio\\\"},\\\"tag\\\":\\\"Card\\\"}\",\"tree\":{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.effect\",\"event\":\"change\",\"key\":\"effect\",\"read\":\"text\"},\"hostOutputs\":{\"options\":\"effects\",\"value\":\"effect\"},\"label\":\"Shader effect\",\"name\":\"virtual-shader-effect\",\"options\":[{\"label\":\"NEBULA\",\"value\":\"NEBULA\"},{\"label\":\"SPECTRUM TUNNEL\",\"value\":\"SPECTRUM TUNNEL\"},{\"label\":\"LATTICE\",\"value\":\"LATTICE\"},{\"label\":\"WAVEFORM HALO\",\"value\":\"WAVEFORM HALO\"},{\"label\":\"PLASMA\",\"value\":\"PLASMA\"},{\"label\":\"POLAR EQ\",\"value\":\"POLAR EQ\"},{\"label\":\"OSCILLOSCOPE\",\"value\":\"OSCILLOSCOPE\"},{\"label\":\"VORONOI\",\"value\":\"VORONOI\"},{\"label\":\"STARFIELD\",\"value\":\"STARFIELD\"},{\"label\":\"FLOW FIELD\",\"value\":\"FLOW FIELD\"},{\"label\":\"KALEIDO\",\"value\":\"KALEIDO\"},{\"label\":\"METABALLS\",\"value\":\"METABALLS\"},{\"label\":\"CONTOUR BLOOM\",\"value\":\"CONTOUR BLOOM\"},{\"label\":\"AURORA CURTAINS\",\"value\":\"AURORA CURTAINS\"},{\"label\":\"HARMONIC RIBBONS\",\"value\":\"HARMONIC RIBBONS\"},{\"label\":\"CYMATIC PLATE\",\"value\":\"CYMATIC PLATE\"},{\"label\":\"SPECTRAL DUNES\",\"value\":\"SPECTRAL DUNES\"},{\"label\":\"PRISM ORBIT\",\"value\":\"PRISM ORBIT\"},{\"label\":\"CONTOUR KNOT\",\"value\":\"CONTOUR KNOT\"}]},\"tag\":\"Select\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.auto\",\"event\":\"change\",\"key\":\"auto\",\"read\":\"checked\"},\"hostOutputs\":{\"checked\":\"auto\"},\"label\":\"Auto-cycle every four bars\",\"name\":\"virtual-shader-auto\"},\"tag\":\"Checkbox\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.projector\",\"event\":\"click\"},\"id\":\"virtual-shader-projector\",\"label\":\"Send to projector\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.apply\",\"event\":\"click\"},\"id\":\"virtual-shader-apply\",\"label\":\"Apply effect\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"disabled\":true,\"hostBinding\":{\"action\":\"virtual.shader.revert\",\"event\":\"click\"},\"id\":\"virtual-shader-revert\",\"label\":\"Restore starter effect\"},\"tag\":\"Action\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Effect source · GLSL ES 3.0 · Ctrl / ⌘ Enter applies the effect.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostBinding\":{\"action\":\"virtual.shader.source\",\"event\":\"input\",\"key\":\"source\",\"maxLength\":65536,\"read\":\"text\"},\"hostEditor\":true,\"hostOutputs\":{\"errorLine\":\"errorLine\",\"value\":\"source\"},\"hostShortcut\":\"virtual.shader.apply\",\"html\":\"<div class=\\\"ssr-code-editor\\\" data-ssr-code-editor=\\\"glsl\\\">\\n<style>.ssr-code-editor{min-width:0}.ssr-code-frame{display:flex;position:relative;overflow:hidden;background:#031013;border:1px solid #355a51;border-radius:8px}\\n.ssr-code-gutter{position:relative;flex:0 0 42px;overflow:hidden;text-align:right;background:#07191b;color:#70938b;user-select:none}\\n.ssr-code-gutter pre{position:absolute;top:0;left:0;width:100%;box-sizing:border-box;padding:14px 8px 14px 0;margin:0;font:12px/21px ui-monospace,monospace;white-space:pre}\\n.ssr-code-surface{position:relative;flex:1;min-width:0;overflow:hidden}\\n.ssr-code-surface textarea,.ssr-code-surface>pre{box-sizing:border-box;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;font:12px/21px ui-monospace,monospace;letter-spacing:normal;tab-size:2;white-space:pre;overflow-wrap:normal}\\n.ssr-code-surface textarea{display:block;position:relative;width:100%;min-height:390px;resize:vertical;color:#d0eddf;caret-color:#e4f7ee;outline-offset:-2px}\\n.ssr-code-surface>pre{display:none;position:absolute;top:0;left:0;min-width:100%;pointer-events:none;color:#d0eddf}\\n.ssr-code-frame.is-enhanced .ssr-code-surface>pre{display:block}\\n.ssr-code-frame.is-enhanced textarea{color:transparent;-webkit-text-fill-color:transparent}\\n.ssr-code-frame.is-enhanced textarea::selection{background:#bcee8340}\\n.ssr-code-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:8px 2px;color:#89aaa0;font:10px/1.5 ui-monospace,monospace}\\n.ssr-code-token--keyword{color:#c2ef8b}.ssr-code-token--type{color:#91dcd1}.ssr-code-token--builtin{color:#bfaeff}.ssr-code-token--number{color:#f5c187}.ssr-code-token--comment{color:#789c92}.ssr-code-token--attribute{color:#edaccc}.ssr-code-token--string{color:#edc589}\\n.ssr-code-frame[data-error=true]{border-color:#f0a28e}.ssr-code-gutter [data-error-line=true]{color:#ffb5a6;background:#522e28}\\n@media(max-width:540px){.ssr-code-gutter{flex-basis:32px}.ssr-code-footer{font-size:9px}}\\n.ssr-code-navigation,.ssr-code-find{padding:10px 12px;background:#0b1d19;border-top:1px solid #29453b;font:11px/1.5 system-ui;color:#adcbbf}\\n.ssr-code-navigation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\\n.ssr-code-navigation button,.ssr-code-find button{cursor:pointer;padding:5px 9px;border:1px solid #36584b;border-radius:6px;background:#122b24;color:#d5eadf;font:inherit}\\n.ssr-code-navigation button:disabled,.ssr-code-find button:disabled{opacity:.45;cursor:default}\\n.ssr-code-navigation input,.ssr-code-query input{box-sizing:border-box;border:1px solid #3e6153;border-radius:5px;background:#061410;color:#e4f4e7;padding:5px 7px;font:inherit;min-width:0}\\n.ssr-code-navigation input{width:68px}.ssr-code-navigation kbd{font:9px ui-monospace,monospace;color:#87a498}\\n.ssr-code-navigation [data-code=navigation-status]{font-size:10px;flex-basis:100%;empty-cells:hide}\\n.ssr-code-navigation [data-code=navigation-status]:empty{display:none}\\n.ssr-code-navigation input[aria-invalid=true]{border-color:#f0a28e}\\n.ssr-code-find[hidden]{display:none}.ssr-code-find{display:grid;gap:8px}\\n.ssr-code-query{display:flex;align-items:center;gap:8px}.ssr-code-query input{flex:1;width:100%}\\n.ssr-code-find-options,.ssr-code-find-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\\n.ssr-code-find-options label{display:flex;align-items:center;gap:5px}.ssr-code-find-options input{accent-color:#c2ef8b}\\n.ssr-code-find-actions [data-code=find-close]{margin-left:auto}.ssr-code-find-actions [data-code=find-count]{font:10px ui-monospace,monospace}\\n.ssr-code-match{background:#786a235c}.ssr-code-match-active{background:#8f6a3280;box-shadow:inset 0 -2px #edcc7a}\\n.ssr-code-navigation :focus-visible,.ssr-code-find :focus-visible{outline:2px solid #c2ef8b;outline-offset:2px}\\n.ssr-code-replace{display:grid;gap:8px;border-top:1px solid #29453b;padding-top:10px}.ssr-code-replace[hidden]{display:none}\\n.ssr-code-replace [data-code=replace-status]{font-size:10px;color:#a8c7ba}.ssr-code-query>span{flex-shrink:0}\\n</style>\\n<div class=\\\"ssr-code-navigation\\\" role=\\\"group\\\" aria-label=\\\"Code navigation\\\">\\n  <button type=\\\"button\\\" data-code=\\\"find-toggle\\\" data-code-nav-control aria-expanded=\\\"false\\\" aria-controls=\\\"virtual-shader-source-find\\\" title=\\\"Find (Ctrl or Command F); F3 next, Shift F3 previous\\\" disabled>Find <kbd>⌘/Ctrl F</kbd></button>\\n  <label for=\\\"virtual-shader-source-line\\\">Line</label><input id=\\\"virtual-shader-source-line\\\" data-code=\\\"goto-line\\\" data-code-nav-control type=\\\"number\\\" min=\\\"1\\\" step=\\\"1\\\" value=\\\"1\\\" aria-describedby=\\\"virtual-shader-source-navigation-status\\\" title=\\\"Go to line (Ctrl or Command G)\\\" disabled><button type=\\\"button\\\" data-code=\\\"goto-submit\\\" data-code-nav-control disabled>Go</button>\\n  <span id=\\\"virtual-shader-source-navigation-status\\\" data-code=\\\"navigation-status\\\" role=\\\"status\\\" aria-live=\\\"polite\\\"></span>\\n</div>\\n<div id=\\\"virtual-shader-source-find\\\" class=\\\"ssr-code-find\\\" data-code=\\\"find-bar\\\" role=\\\"search\\\" aria-label=\\\"Find in code\\\" hidden>\\n  <label class=\\\"ssr-code-query\\\"><span>Find text</span><input data-code=\\\"find-query\\\" data-code-nav-control type=\\\"search\\\" maxlength=\\\"1024\\\" autocomplete=\\\"off\\\" spellcheck=\\\"false\\\" disabled></label>\\n  <div class=\\\"ssr-code-find-options\\\"><label><input data-code=\\\"find-case\\\" data-code-nav-control type=\\\"checkbox\\\" disabled>Match case</label><label><input data-code=\\\"find-word\\\" data-code-nav-control type=\\\"checkbox\\\" disabled>Whole word</label></div>\\n  <div class=\\\"ssr-code-find-actions\\\"><button type=\\\"button\\\" data-code=\\\"find-prev\\\" data-code-nav-control aria-label=\\\"Previous match\\\" disabled>↑</button><button type=\\\"button\\\" data-code=\\\"find-next\\\" data-code-nav-control aria-label=\\\"Next match\\\" disabled>↓</button><span data-code=\\\"find-count\\\" role=\\\"status\\\" aria-live=\\\"polite\\\">Type to find</span><button type=\\\"button\\\" data-code=\\\"replace-toggle\\\" data-code-nav-control aria-expanded=\\\"false\\\" aria-controls=\\\"virtual-shader-source-replace\\\" disabled>Replace…</button><button type=\\\"button\\\" data-code=\\\"find-close\\\" data-code-nav-control aria-label=\\\"Close find\\\" disabled>Close</button></div>\\n  <div id=\\\"virtual-shader-source-replace\\\" class=\\\"ssr-code-replace\\\" data-code=\\\"replace-bar\\\" hidden>\\n    <label class=\\\"ssr-code-query\\\"><span>Replace with</span><input data-code=\\\"replace-query\\\" data-code-nav-control type=\\\"text\\\" maxlength=\\\"65536\\\" autocomplete=\\\"off\\\" spellcheck=\\\"false\\\" disabled></label>\\n    <div class=\\\"ssr-code-find-actions\\\"><button type=\\\"button\\\" data-code=\\\"replace-one\\\" data-code-nav-control disabled>Replace</button><button type=\\\"button\\\" data-code=\\\"replace-all\\\" data-code-nav-control disabled>Replace all</button><button type=\\\"button\\\" data-code=\\\"replace-undo\\\" data-code-nav-control disabled>Undo replacement</button></div>\\n    <span data-code=\\\"replace-status\\\" role=\\\"status\\\" aria-live=\\\"polite\\\">Replacement is literal. An empty value deletes matches.</span>\\n  </div>\\n</div>\\n<div class=\\\"ssr-code-frame\\\" data-code=\\\"frame\\\">\\n  <div class=\\\"ssr-code-gutter\\\" aria-hidden=\\\"true\\\"><pre data-code=\\\"lines\\\">1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12\\n13\\n14\\n15\\n16\\n17\\n18\\n19\\n20\\n21\\n22\\n23\\n24</pre></div>\\n  <div class=\\\"ssr-code-surface\\\"><pre data-code=\\\"highlight\\\" aria-hidden=\\\"true\\\"></pre><textarea disabled aria-label=\\\"Code source\\\" id=\\\"virtual-shader-source\\\" data-code=\\\"source\\\" rows=\\\"18\\\" maxlength=\\\"65536\\\" wrap=\\\"off\\\" spellcheck=\\\"false\\\" autocapitalize=\\\"off\\\" autocomplete=\\\"off\\\" aria-describedby=\\\"virtual-shader-help virtual-shader-source-keys\\\">// Bar-locked rings. Every input below comes from the score you are playing.\\nvoid main(){\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\n  float r=length(uv);\\n\\n  // One ring per beat, pushed outward by the transport&#39;s own beat phase.\\n  float ring=fract(r*3.0-uBeatPhase);\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\n\\n  // The bar advances the hue, so the picture shows its place in the loop.\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\n\\n  // Pads wash the frame; melody and arp sparkle over it.\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\n\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\n  col*=1.+.35*uParts.x*uOnset;\\n\\n  col*=smoothstep(1.35,.25,r);\\n  fragColor=vec4(col,1.);\\n}</textarea></div>\\n</div>\\n<div class=\\\"ssr-code-footer\\\"><span data-code=\\\"cursor\\\">Ln 1 · Col 1</span><span id=\\\"virtual-shader-source-keys\\\">Tab indent · Ctrl/⌘ / comment · Esc then Tab to leave</span></div>\\n</div>\",\"id\":\"virtual-shader-source\"},\"tag\":\"RawHtml\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"hostOutput\":\"status\",\"id\":\"virtual-shader-status\",\"role\":\"status\",\"text\":\"Starting the visualizer…\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"id\":\"virtual-shader-help\",\"text\":\"Write a void main() body. The shared prelude provides uniforms and spec(), wav(), hsv(), pal(), rot(), noise(), fbm(), smin(), sdCircle() and sdBox(). A compile error keeps the running picture.\"},\"tag\":\"Text\"},{\"children\":[{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"Shader inputs\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"element\":\"summary\"},\"tag\":\"Section\"},{\"children\":[{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBar — Bar number the transport is on, counting from 1; 0 when stopped.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBarPhase — 0..1 sawtooth across one bar.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBass — Measured low-band energy, 0..1 (smoothed).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBeat — Envelope that pops to 1 on a bass transient and decays.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uBeatPhase — 0..1 sawtooth across one beat.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uCentroid — Spectral centroid (brightness), 0..1.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uLvl — Alias of uRms, kept for the original effects.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uMid — Measured mid-band energy, 0..1 (smoothed).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uOnset — 1 on a scored note or drum hit, decaying to 0.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uParts — Score energy per part: x drums, y bass, z pads, w melody+arp.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uRes — Canvas size in pixels (vec2).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uRms — Measured waveform level, 0..1 (smoothed).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uSpec — Two-row texture: row 0 spectrum, row 1 waveform (use spec()/wav()).\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTempo — Beats per minute of the running score.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTime — Seconds since the visualizer was created.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTre — Alias of uTreble, kept for the original effects.\"},\"tag\":\"Text\"},{\"children\":[],\"kind\":\"view-node\",\"props\":{\"text\":\"uTreble — Measured high-band energy, 0..1 (smoothed).\"},\"tag\":\"Text\"}],\"kind\":\"view-node\",\"props\":{\"title\":\"Shader inputs\"},\"tag\":\"Card\"}],\"kind\":\"view-node\",\"props\":{\"element\":\"details\"},\"tag\":\"Section\"}],\"kind\":\"view-node\",\"props\":{\"hostCapability\":\"virtual.shader-studio\",\"hostInitial\":{\"source\":\"// Bar-locked rings. Every input below comes from the score you are playing.\\nvoid main(){\\n  vec2 uv=(gl_FragCoord.xy-.5*uRes)/uRes.y;\\n  float r=length(uv);\\n\\n  // One ring per beat, pushed outward by the transport's own beat phase.\\n  float ring=fract(r*3.0-uBeatPhase);\\n  float pulse=smoothstep(.55,.0,abs(ring-.5))*(.25+1.6*uParts.y);\\n\\n  // The bar advances the hue, so the picture shows its place in the loop.\\n  float hue=fract(.55+uBar*.07+uBarPhase*.12+r*.1);\\n  vec3 col=hsv(vec3(hue,.7,1.))*pulse;\\n\\n  // Pads wash the frame; melody and arp sparkle over it.\\n  col+=pal(hue+.4)*uParts.z*.35*smoothstep(1.2,.2,r);\\n  col+=pal(fract(hue+.6))*pow(fbm(uv*6.+uTime*.3),5.)*6.*uParts.w;\\n\\n  // A scored hit lands as a flash and a kick of brightness, then decays.\\n  col+=uOnset*.5*hsv(vec3(fract(hue+.5),.35,1.))*smoothstep(.9,.0,r);\\n  col*=1.+.35*uParts.x*uOnset;\\n\\n  col*=smoothstep(1.35,.25,r);\\n  fragColor=vec4(col,1.);\\n}\"},\"hostVersion\":1,\"title\":\"Shader studio\"},\"tag\":\"Card\"},\"execution\":{\"portable_ir_schema\":\"cre8.view.ir\",\"portable_ir_tree_hash\":\"05086bd41452445fac8745b00e554c7ecb34aa71bf39188d0ba3fcadc93efff3\",\"portable_ir_version\":1,\"producer\":\"rust-ssr\"}}","data-cre8-host-component":"virtual.shader-studio","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-shader-editor","data-visual-for":"shader trace","element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-workspace-description","data-visual-description":true,"text":"Create a shader picture driven by the audio. Edit effects below the canvas.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"id":"scope-wav-help","text":"Instrument sample · 2 seconds · stereo WAV · current instrument settings · dry audio.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-visual-shader-only":true,"text":"The picture reads the take that is playing: measured audio through the analyser, and the score's own bars, beats, per-part energy and note onsets. Prepare and start a score to see both.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Capture uses the longest bright outline in the center square. Link live follows that outline; blank frames keep the last valid path. Stop ends the link and audio."},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-visual-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Visuals","className":"ls-visual","data-field-default":null,"data-virtual-performance":"1","data-visual-desk":true,"element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.30","data-ls-tab":"code","disabled":false,"label":"Live code","pressed":true},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.31","data-ls-tab":"session","disabled":false,"label":"DAW session","pressed":false},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.32","data-ls":"focus","disabled":false,"id":"ls-focus-editor","label":"Focus editor","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Music editor","element":"nav"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-controls":"ls-edit-menu-items","aria-haspopup":"menu","aria-label":"More draft actions","controlKey":"live-score.34","data-ssr-menu-open":"ls-edit-menu","disabled":false,"id":"ls-draft-more","label":"⋯"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-ls":"draft-state","text":"Unprepared draft","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.36","data-ls":"revert","disabled":true,"id":"ls-revert-draft","label":"Restore prepared take"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.37","data-ls":"undo","disabled":true,"id":"ls-undo-draft","label":"Undo draft edit"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-draft-bar","data-ssr-context-menu":"ls-edit-menu","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Score "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"CRE8 SCORE","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"element":"label","for":"live-score-source"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"lines","text":"1","variant":"pre"},"tag":"Text"}],"kind":"view-node","props":{"aria-hidden":"true","className":"ls-gutter","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-hidden":"true","data-ls":"highlight","text":"","variant":"pre"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-label":"Score CRE8 SCORE","autocapitalize":"off","controlKey":"live-score.46","data-ls":"source","default":"// Change a note, then apply on the next bar.\ntempo 96\nbars 2\ninstrument bass saw_bass\ninstrument melody bell\nlevel bass 0.7\nlevel melody 0.55\nlevel drums 0.8\nlevel reverb 0.3\n\ndrum kick 0 0.9\ndrum kick 2 0.85\ndrum kick 4 0.9\ndrum kick 6 0.85\ndrum snare 1 0.65\ndrum snare 3 0.65\ndrum snare 5 0.65\ndrum snare 7 0.65\ndrum hat 0.5 0.3\ndrum hat 2.5 0.3\ndrum hat 4.5 0.3\ndrum hat 6.5 0.3\n\nnote bass C2 0 0.75 0.8\nnote bass C2 1.5 0.4 0.6\nnote bass G2 2 0.75 0.7\nnote bass A#1 4 0.75 0.8\nnote bass G2 6 0.75 0.7\nnote melody D#4 0.5 0.5 0.65\nnote melody G4 2.5 0.5 0.65\nnote melody A#4 4.5 0.5 0.65\nnote melody G4 6.5 0.5 0.65\n","disabled":false,"id":"live-score-source","kind":"textarea","label":"Score CRE8 SCORE","maxlength":16384,"name":"live-score-source","rows":17,"spellcheck":false,"wrap":"off"},"tag":"Input"}],"kind":"view-node","props":{"className":"ls-editor-surface","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-editor-frame","data-ls":"editor","data-ssr-context-menu":"ls-edit-menu","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls":"cursor","text":"Ln 1 · Col 1","variant":"span"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Tab indent · Ctrl / ⌘ / comment · Ctrl / ⌘ Enter apply · Esc then Tab to leave","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-editor-footer","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.52","data-ls":"preset","default":"starter","disabled":false,"label":"Sound sketch","name":"live-score-52","options":[{"label":"Orbit groove","value":"starter"},{"label":"Pulse engine","value":"pulse"},{"label":"Drift","value":"drift"},{"label":"Composer remix","value":"composer"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.53","data-ls":"preset-load","disabled":false,"label":"Load sketch"},"tag":"Action"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Prepared takes","controlKey":"live-score.55","data-ls":"takes","default":"","disabled":false,"label":"Prepared takes","name":"live-score-55","options":[{"label":"No takes yet","value":""}]},"tag":"Select"}],"kind":"view-node","props":{"className":"ls-takes","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.56","data-ls":"take-load","disabled":true,"label":"Recall take"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-preset-row","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.59","data-ls":"style","default":"house","disabled":false,"label":"Compose","name":"live-score-59","options":[{"label":"house","value":"house"},{"label":"chill","value":"chill"},{"label":"cosmic","value":"cosmic"},{"label":"lofi","value":"lofi"},{"label":"trance","value":"trance"},{"label":"pop","value":"pop"},{"label":"cinematic","value":"cinematic"},{"label":"tribal","value":"tribal"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.61","data-ls":"seed","default":"7","disabled":false,"kind":"number","label":"Seed","max":"999999","min":"0","name":"live-score-61"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.62","data-ls":"compose","disabled":false,"label":"Write composer draft"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-compose","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"data-ls-pane":"code","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.65","data-ls":"session","default":"","disabled":false,"kind":"textarea","label":"DAW session JSON","name":"live-score-65","placeholder":"Prepare your score to edit its session…","rows":15,"spellcheck":false,"wrap":"off"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Edit tempo, lane gains, mutes and instruments. The score source travels with this session.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"data-ls-pane":"session","element":"div","hidden":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Arrangement","variant":"strong"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"data-ls":"arrangement-state","text":"Prepare a score to see its notes","variant":"span"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Arrangement zoom","controlKey":"live-score.73","data-daw-zoom":true,"default":"1","disabled":false,"kind":"range","label":"Zoom","max":"3","min":"1","name":"live-score-73","step":"0.25"},"tag":"Input"},{"children":[],"kind":"view-node","props":{"data-daw-zoom-label":true,"text":"100%","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-daw-only ls-timeline-zoom","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Your compiled drums and note lanes appear here.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Prepared note lanes; scroll sideways on narrow screens","data-ls":"arrangement","element":"div","role":"region","tabIndex":0},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.4","data-arrange":"lane","default":"bass","disabled":false,"label":"Channel","name":"arrangement-controls-4","options":[{"label":"bass","value":"bass"},{"label":"pads","value":"pads"},{"label":"melody","value":"melody"},{"label":"arp","value":"arp"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.6","data-arrange":"beat","default":"0","disabled":false,"kind":"number","label":"Beat","max":"16","min":"0","name":"arrangement-controls-6","step":".25"},"tag":"Input"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.7","data-arrange":"move","disabled":false,"label":"Move phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"arrangement-controls.8","data-arrange":"duplicate","disabled":false,"label":"Duplicate phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"data-arrange":"status","role":"status","text":"Select a phrase or drag it between channels. Prepare applies each draft.","variant":"span"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-arrange-controls","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Compiled arrangement","className":"ls-arrangement","element":"section"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-code","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Mixer","variant":"h3"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Faders edit the draft. Apply mix to update the prepared song.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.81","data-ls":"tempo","default":"96","disabled":false,"kind":"number","label":"Tempo BPM","max":"180","min":"60","name":"live-score-81"},"tag":"Input"}],"kind":"view-node","props":{"className":"ls-tempo","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Drums channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Drums earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Drums later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">01</span><span class=\"mixer-name\">Drums</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Drum synth"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Drums","data-ls-mute":"drums","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drums","data-ls-lane":"drums","default":"0.8","id":"ls-gain-drums","kind":"range","max":"1","min":"0","name":"gain-drums","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"drums","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Drums","className":"mixer-strip ls-lane-row","data-ls-channel":"drums","data-mixer-role":"channel","data-mixer-strip":"drums","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Bass channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Bass earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Bass later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">02</span><span class=\"mixer-name\">Bass</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"bass","default":"saw_bass","disabled":true,"label":"Bass instrument","name":"instrument-bass","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Bass","data-ls-mute":"bass","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Bass","data-ls-lane":"bass","default":"0.7","id":"ls-gain-bass","kind":"range","max":"1","min":"0","name":"gain-bass","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"bass","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Bass","className":"mixer-strip ls-lane-row","data-ls-channel":"bass","data-mixer-role":"channel","data-mixer-strip":"bass","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Pads channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Pads earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Pads later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">03</span><span class=\"mixer-name\">Pads</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"pads","default":"warm_pad","disabled":true,"label":"Pads instrument","name":"instrument-pads","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Pads","data-ls-mute":"pads","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Pads","data-ls-lane":"pads","default":"0.8","id":"ls-gain-pads","kind":"range","max":"1","min":"0","name":"gain-pads","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"pads","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Pads","className":"mixer-strip ls-lane-row","data-ls-channel":"pads","data-mixer-role":"channel","data-mixer-strip":"pads","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Melody channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Melody earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Melody later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">04</span><span class=\"mixer-name\">Melody</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"melody","default":"bright_lead","disabled":true,"label":"Melody instrument","name":"instrument-melody","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Melody","data-ls-mute":"melody","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Melody","data-ls-lane":"melody","default":"0.55","id":"ls-gain-melody","kind":"range","max":"1","min":"0","name":"gain-melody","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"melody","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Melody","className":"mixer-strip ls-lane-row","data-ls-channel":"melody","data-mixer-role":"channel","data-mixer-strip":"melody","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Arp channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Arp earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Arp later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">05</span><span class=\"mixer-name\">Arp</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-instrument":"arp","default":"bell","disabled":true,"label":"Arp instrument","name":"instrument-arp","options":[{"label":"Saw bass","value":"saw_bass"},{"label":"Warm pad","value":"warm_pad"},{"label":"Bell","value":"bell"},{"label":"Bright lead","value":"bright_lead"}]},"tag":"Select"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Arp","data-ls-mute":"arp","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Arp","data-ls-lane":"arp","default":"0.8","id":"ls-gain-arp","kind":"range","max":"1","min":"0","name":"gain-arp","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"arp","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Arp","className":"mixer-strip ls-lane-row","data-ls-channel":"arp","data-mixer-role":"channel","data-mixer-strip":"arp","element":"div","role":"group"},"tag":"Section"},{"children":[{"children":[{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Drag Space channel","data-channel-drag":"true","label":"⠿"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Space earlier","data-channel-move":"up","label":"←"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"aria-label":"Move Space later","data-channel-move":"down","label":"→"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-channel-order","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-handle","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"html":"<div class=\"mixer-header\"><span class=\"mixer-number\">06</span><span class=\"mixer-name\">Space</span><span class=\"mixer-layout\" title=\"L R\">stereo</span></div>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Reverb return"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-slot","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Mute Space","data-ls-mute":"reverb","data-mixer-button":"mute","disabled":true,"label":"M","pressed":false},"tag":"Action"}],"kind":"view-node","props":{"className":"mixer-buttons","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"html":"<ol class=\"mixer-scale\" aria-hidden=\"true\"><li style=\"--at:1.0000\">0</li><li style=\"--at:0.7079\">-3</li><li style=\"--at:0.5012\">-6</li><li style=\"--at:0.2512\">-12</li><li style=\"--at:0.1000\">-20</li><li style=\"--at:0.0000\">-∞</li></ol>"},"tag":"RawHtml"},{"children":[{"children":[],"kind":"view-node","props":{"aria-label":"Space","data-ls-lane":"reverb","default":"0.3","id":"ls-gain-reverb","kind":"range","max":"1","min":"0","name":"gain-reverb","step":"0.01"},"tag":"Input"}],"kind":"view-node","props":{"className":"mixer-fader","data-mixer-fader":true,"element":"div"},"tag":"Section"}],"kind":"view-node","props":{"className":"mixer-fader-bay","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"data-ls-gain-label":"reverb","variant":"output"},"tag":"Text"}],"kind":"view-node","props":{"className":"mixer-readout","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Space","className":"mixer-strip ls-lane-row","data-ls-channel":"reverb","data-mixer-role":"bus","data-mixer-strip":"reverb","element":"div","role":"group"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-lanes","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.83","data-ls":"mix","disabled":true,"label":"Apply mix"},"tag":"Action"}],"kind":"view-node","props":{"aria-label":"Channel strips","className":"ls-channel-rack","element":"section"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Play a MIDI phrase"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Turn your controller into score code. The first note starts a phrase using this score’s tempo and bars, independent of loop playback.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.88","data-score-midi":"scan","disabled":true,"label":"Scan inputs"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.89","data-ls-nav":true,"href":"/view/device/midi","label":"Device ↗"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-midi-controls","element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.91","data-score-midi":"ports","default":"","disabled":true,"label":"Input","name":"live-score-91","options":[]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.93","data-score-midi":"channel","default":"0","disabled":false,"label":"Receive","name":"live-score-93","options":[{"label":"All channels","value":"0"},{"label":"Keyboard · channel 1","value":"1"},{"label":"Pads · channel 10","value":"10"}]},"tag":"Select"}],"kind":"view-node","props":{"element":"div"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"controlKey":"live-score.95","data-score-midi":"record","disabled":true,"label":"Record phrase"},"tag":"Action"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.96","data-score-midi":"stop","disabled":true,"label":"Stop recording"},"tag":"Action"}],"kind":"view-node","props":{"className":"ls-midi-controls","element":"div"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"aria-live":"polite","data-score-midi":"status","role":"status","text":"Connecting MIDI controls…","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"aria-label":"Recorded score phrase","data-score-midi":"preview","text":"Your recorded notes will appear here.","variant":"pre"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"controlKey":"live-score.99","data-score-midi":"insert","disabled":true,"label":"Insert into score"},"tag":"Action"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"1/16-note grid · up to 128 notes · review before inserting. Notes go to Melody; channel 10 maps 36 kick, 38 snare, 42 hat, 46 open hat. Other pads are skipped. Pressure, sustain and CC are not recorded. Prepare score to hear the result; live monitoring is off.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-midi","data-ls-midi":true,"element":"details","id":"live-score-midi","open":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Score language"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"Beats start at 0. Loops are 1–4 bars at 60–180 BPM.","variant":"p"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"tempo 96\nbars 2\ncompose house 7\nclear bass\ninstrument bass saw_bass\nnote bass C2 0 0.75 0.8\ndrum kick 0 0.9\nlevel reverb 0.3","variant":"pre"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"Note: part, pitch, beat, duration, velocity. Parts: bass, pads, melody, arp. Drums: kick, snare, hat, open_hat.","variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Song-wide: "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"kit <name>","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"swing 0..0.3","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"root C4","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"scale dorian","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Pattern playground"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"pattern kick X...x... 0 8 0.8\nsequence bass C2,-,G2,- 0 8 0.75 0.7","variant":"pre"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Pattern: voice, steps, start, span, velocity. "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"x","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" hit · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"X","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" full accent · "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":".","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" rest."},"tag":"Text"},{"children":[],"kind":"view-node","props":{"html":"<br>"},"tag":"RawHtml"},{"children":[],"kind":"view-node","props":{"text":"Sequence: part, comma-separated notes, start, span, gate, velocity. "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"-","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" is a rest. Gate is the fraction of each step held, from 0.01 to 1."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"element":"details","open":true},"tag":"Section"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Mixing console"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Targets: bass, pads, melody, arp, drums, master. Up to four "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"fx","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" per target, appended in order; "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"fx <target> clear","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" drops them."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Automate "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"gain","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":", "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"pan","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":", "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"send.reverb","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":", "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"send.delay","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" or "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"fx.<n>.<param>","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":" (1-based, declared first): one line per breakpoint, at most 64 per parameter and 256 per score."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"},{"children":[{"children":[],"kind":"view-node","props":{"text":"Every parameter is validated against the plugin catalog at "},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":"/audio/plugins","variant":"code"},"tag":"Text"},{"children":[],"kind":"view-node","props":{"text":". A score naming none of these renders exactly as before."},"tag":"Text"}],"kind":"view-node","props":{"variant":"p"},"tag":"Text"},{"children":[{"children":[{"children":[],"kind":"view-node","props":{"text":"Help"},"tag":"Text"}],"kind":"view-node","props":{"element":"summary"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"text":"pan arp -0.5\nsend melody reverb 0.35\nsend arp delay 0.4\nfx bass filter mode=low_pass cutoff_hz=900\nautomation bass gain 0 0.2\nautomation bass gain 8 1\nreverb preset=plate mix=0.4\ndelay time=1/8. feedback=0.45 pingpong=1\nmaster glue=1 ceiling=0.9","variant":"pre"},"tag":"Text"}],"kind":"view-node","props":{"className":"ls-quiet-help","element":"details"},"tag":"Section"}],"kind":"view-node","props":{"element":"details"},"tag":"Section"},{"children":[],"kind":"view-node","props":{"className":"ls-clock-boundary","text":"Audio uses its own sample clock. On the Virtual stage, DAW energy can drive shader level and tempo; beat phases remain independent.","variant":"p"},"tag":"Text"}],"kind":"view-node","props":{"aria-label":"Loop mixer","className":"ls-mix","element":"aside"},"tag":"Section"}],"kind":"view-node","props":{"className":"ls-columns","element":"div"},"tag":"Section"}],"kind":"view-node","props":{"aria-label":"Live music desk","className":"ls-desk","data-cre8-binding":"audio.liveScore","data-daw-contract":"1","data-daw-mixer":"true","data-daw-render":"audio.daw.render","data-daw-view":"tracks","data-editor-chrome":"audio","data-live-score":true,"data-workspace":"daw","element":"section","id":"live-music-desk"},"tag":"Section"}],"kind":"view-node","props":{"className":"media-fragment","element":"div"},"tag":"Section"},{"children":[{"children":[{"children":["Audio.audio.mixer SSR payload is live-ready."],"kind":"view-node","props":{},"tag":"Text"}],"kind":"view-node","props":{"id":"payload-live-content-audio-audio-mixer","title":"Live Payload"},"tag":"Card"}],"kind":"view-node","props":{"id":"payload-live-audio-audio-mixer","patchTarget":"#payload-live-content-audio-audio-mixer","pollIntervalMs":8000,"refreshHref":"/view/payload/patch?app=Audio&view=audio.mixer","streamUrl":"/view/payload/patch?app=Audio&view=audio.mixer","transport":"http","transportStatus":true},"tag":"LiveSlot"}],"kind":"view-node","ok":true,"props":{},"tag":"Page"},"kind":"view-node","ok":true,"props":{},"tag":"Page"}