+ C15 mode — TODO
+
+ The C15 WASM synthesizer hasn't been ported into the SolidJS rewrite
+ yet. The legacy bridge lives in playground/c15/ and
+ playground/js/synth/c15-bridge.js; stream 11+ will wrap
+ it as an AudioWorklet engine alongside the firmware-derived ones.
+
+
+ Until then, pick one of the firmware modes (PAFSynth, Channel Strip,
+ Verb FX, etc.) from the mode switcher above.
+
+
+ );
+};
+
+export default C15Mode;
diff --git a/playground/src/modes/ChannelStripMode.tsx b/playground/src/modes/ChannelStripMode.tsx
new file mode 100644
index 0000000..37094f2
--- /dev/null
+++ b/playground/src/modes/ChannelStripMode.tsx
@@ -0,0 +1,68 @@
+/**
+ * ChannelStripMode — channel-strip processor controlled by joystick.
+ *
+ * 24 outputs feed EQ / dynamics / gain. Schema has no voice spaces so the
+ * shell omits the selector. Drawer shows the live param sliders.
+ */
+
+import { Component } from 'solid-js';
+import { ModeShell } from './ModeShell';
+import { useModeRuntime } from './mode-runtime';
+import { VirtualJoystick } from '../primitives/VirtualJoystick';
+import { OutputDisplay } from '../primitives/OutputDisplay';
+import { SliderBank } from '../primitives/SliderBank';
+import { LossPlot } from '../primitives/LossPlot';
+import { paramsToSliderConfig, outputsToSliderValues } from './mode-helpers';
+import { ChannelStripSchema } from './generated/channel_strip_schema';
+
+export const ChannelStripMode: Component = () => {
+ const schema = ChannelStripSchema;
+ const runtime = useModeRuntime(schema);
+
+ const sliderConfig = paramsToSliderConfig(schema.params);
+ const sliderValues = () => outputsToSliderValues(runtime.processedOutputs(), schema.params);
+
+ return (
+