Rail preview card: the chat under it blurs in see-through Chromium pages

Merged
TE
5d ago
+96-11

Leo-ask: ask-87b699d5b1

Leo, 2026-10-28, relaying Lawrence: "leo clicking retry doesnt seem ideal / popovers in general need glassier bg blur / try to match liquid glass somehow"

The rail's preview card (hovering a prompt mark on the transcript's left rail) is the one chat popover that still let the transcript read sharp through it. In a see-through Chromium page, a backdrop-filter draws its blurred copy over the page's pixels instead of in their place, so the card's blur did nothing to the rows behind it. The card was not .ui-glass either, so it did not get the Chromium underlay that menus get. The rows showed through its 60% tint at full contrast (Lawrence's second screenshot).

  • PreviewCard.tsx: while the card draws in the scroller's parent, .acpmux-scroll blurs its own rows inside the card's rounded rect, through the same useSeeThroughBlur the Summary popover and Session Info use (#30302, #31581). The rail and the Find bar beside it are never filtered. WebKit, the lens and Reduce Transparency are unchanged, since glass.css applies the filter only in see-through Chromium.
  • seeThroughBlur.ts: the follow loop now also re-measures when the surface's inline style changes. The card moves from row to row by its own transform, which changes neither its size nor any child list, so the blur used to stay on the old row.

The retry half is covered by work that has already landed. acpmux now retries errors on its own (#31709, Settings > Retry After Errors) and the chat shows the retry status (#31648), so nobody has to click Retry.

Stop and cleanup: the follow loop stops after 3 unchanged frames, and closing the card detaches every observer, the SVG filter and the attributes (unchanged from #30302). The one new observer is an attribute filter on the card's own style.

Spec: leo-workspace design/glass.md / overlay-surfaces.md. No design change: the card keeps its tint, rim and elevation.

Changelog

Fixed: The transcript under the prompt rail's preview card is blurred in see-through windows, as it is under other popovers.

Observed / Not run

  • Regression: webviews/test/see-through-blur.test.ts "a surface moved by its inline transform takes its blur with it". The red commit (5ec90c7ec37) and the fix are on this branch; the Chromium run goes through cmux-ci on this PR.
  • scripts/web-lint.sh: format and fast lint pass locally; type-aware lint and type check run in CI (this host skips heavy checks).
  • No capture: a webview hover state in a see-through native window; Leo tries the build.

Agent session: agent session

šŸ¤– Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Fixes the transcript showing sharp through the rail's preview card in see-through Chromium pages. The card's backdrop blur drew over the page's pixels instead of in their place, so the rows behind it were never filtered. The scroller now blurs its own rows inside the card's rounded rect, matching the other popovers. The blur also follows the card as it moves from row to row by its inline transform, since that movement changes neither the card's size nor its children.