From f8e657cc8bad6dff91705ed068ef6c3f7c3ed636 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 18 May 2026 23:36:14 +0000 Subject: [PATCH 1/2] =?UTF-8?q?feat(ui):=20D.8=20Signal=20Monitor=20?= =?UTF-8?q?=E2=86=92=20DeviceRack=20+=20SpectrogramViewer=20drift=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 12 of 16 in the UI consistency overhaul. Focused, surgical pass over the smaller-component surface — kills the SpectrogramViewer drift and wraps Signal Monitor in DeviceRack chrome. Changes: - App.tsx Signal Monitor wrapper (:1280-1290): hand-rolled bg-bg-surface-dark header + bg-bg-card body → . The status reflects the upstream pipeline (running → orange pulse, ready → green, idle → gray) — same vocabulary as every other rack in the migration. - bg-bg-card preserved on the inner data-testid="signal-panel" div to keep the palette contract (same pattern as the Input Source D.4 migration). - SpectrogramViewer.tsx:279: bg-blue-500/20 text-blue-400 border- blue-500/30 → bg-accent/20 text-accent border-accent/30. Kills the last raw-Tailwind drift the plan flagged (§F.9 grep would return 0 now). Deferred (out of scope, all preserved as-is): - IdleValuePropPanel — its VisualPlaceholder is already a clean three-step Audio → Measure → Live 12 flow. Wrapping in DeviceRack would add a redundant title strip; SignalChain doesn't match the visual semantic (decorative icons + labels vs racked devices + cables). Keep as-is. - WaveformPlayer — the WaveformPlayer component itself is a WaveSurfer.js canvas; wrapping its inner viz in DeviceRack would conflict with the Signal Monitor rack now wrapping the whole signal-panel column. - StickyNav — uses elements with anchor-scroll behavior; can't swap to