cmux-next: one popup elevation, and the New Tab field sits solid on art (coherence pass)

Merged
TE
24d ago
+176-33

First batch of Leo's 10-13 coherence pass: the New Tab field, plus one shared popup elevation in the agent pane.

What changes

  • One popup elevation. Every menu and popover in the agent pane now draws --acpmux-popup-elevation: the composer's hairline over the shared --ui-popup-shadow, using --ui-popup-radius and no border of its own.
    • Before this, several surfaces drew their own. The New Tab suggestions had a deeper, darker shadow (0 16px 40px). The effort menu had radius 10 and a 1px border. The model picker and context popovers had a 1px border. Model submenus had radius 12 and their own shadow.
    • Tailwind's --shadow-menu now reads the same token.
    • A Base UI popup with no surface class of its own gets the token too, and so does a menu portaled straight to the body (ui/ContextMenu.tsx). Neither has the composer edge, so they take the shared hairline instead. Before, that menu's shadow was invalid there and it drew flat.
  • The New Tab box sits solid on art. Its fill mixed the text color into the page background, which is transparent on a wallpaper theme, so the box was a thin film over the art. It is now the composer tint over the theme's solid surface (--cmux-surface-solid). Plain themes don't change, because their page background is already opaque.
  • Suggestion rows are menu rows. They use the shared row height (28 instead of 32), row corners and list inset.
  • Focus steps toward the theme accent. In both the New Tab box and the chat composer, the focused edge is a 1px step toward the theme accent. Under the default neutral accent that is the text color.

Coordination: op-next-steering (suggestions behavior) and op-next-appstore (#20148, New Tab composer) own behavior. This PR changes visual properties only and leaves their lines alone. Lawrence's omnibar files (cx-d0d.80) are untouched.

Verification

  • Red then green: popup-surface.test.ts ("every menu and popover in the agent pane casts the one popup elevation") and the new new-tab-field-on-art.test.ts. Both are browser-lane tests that run in react-apps-check. The red is the first commit's CI run on this PR.
  • bun run check and test/ui-rules.test.ts pass locally. With CMUX_BROWSER_TESTS=1, these pass locally too: popup-surface, new-tab-field-on-art, composer-menu-width, selected-row-accent, new-tab-picker-clip and popup-surface-dev.
  • A review subagent caught one defect: on the first fix commit the elevation test still failed for a bare popup and the model picker. The last fix commit addresses it.
  • Not in this batch: the legacy .acpmux-omni dropdown keeps its 16px radius and 40px rows.
  • Before/after: the gallery render for this PR.

Changelog

  • Changed: Menus and popovers in agent chats share one shadow and corner, and the New Tab search field stays solid over a wallpaper.

🤖 Generated with Claude Code