Foundations & UI
Wave A Polish
Three contained fixes on the live Android app + PWA: edge-to-edge status bar insets, a real amplitude-reactive voice visualiser, and a one-tap way to jump back into an open loop.
Situation
Bumping targetSdk to 36 opted the app into Android 15+ edge-to-edge enforcement, so the activity now draws behind the status bar and the PWA masthead rendered under the clock/icons — partly unusable.
Two smaller irritants rode along: the "Listening…" indicator was a decorative fixed CSS animation ignoring actual mic input, and Open Loops thread rows had no way to jump back in — both were free wins once the inset fix was in flight.
Key decisions
Embrace edge-to-edge
Rather than opt out, MainActivity reads system-bar insets and injects them as CSS custom properties (--safe-top/--safe-bottom) into the WebView, since Android WebView doesn't populate env(safe-area-inset-*) like iOS.
Header fills the status bar
The masthead's own background extends up under the status bar for a "match header" look, rather than leaving a gap.
Reuse the existing AnalyserNode
The visualiser reads getByteFrequencyData inside the existing monitorSilence rAF tick (no new loop), bucketed into 5 log-spaced bands with fast-attack/slow-decay smoothing.
Continue seeds the composer, no backend change
Tapping a thread's "Continue" button seeds the input with a pickup line and focuses the textarea; M already gets thread context server-side via recall.
Risks & guardrails
Icon contrast
Status-bar icon appearance (isAppearanceLightStatusBars) is set from the device's night-mode flag so icons stay legible in both themes.
Visualiser jitter
Per-band smoothing (level = max(target, prev * DECAY), DECAY ≈0.82) avoids a twitchy bar chart from raw frequency data.
Delivery
Task 1
Status-bar inset — native inset listener + injected CSS vars, web padding consumption.
Task 2
Amplitude-reactive visualiser — frequency read added to the existing tick, bars bound to smoothed levels.
Task 3
Loops "jump in" — Continue button seeds composer and closes the panel.
Out of scope
docs/superpowers/specs/2026-06-07-wave-a-polish-design.mdplan ·
docs/superpowers/plans/2026-06-07-wave-a-polish.md