Make the command palette follow the active desktop theme - #438
Merged
Conversation
The Site Assistant / command palette overlay was themed only halfway: its text tones read `--wpd-fg` / `--wpd-fg-muted`, but the panel itself was a hardcoded `rgba( 255, 255, 255, 0.97 )` and every hairline was a literal `rgba( 0, 0, 0, … )`. Under a dark desktop theme that put the theme's light foreground on a white card — the result rows were close to invisible. The search field was worse than untouched: it is a raw `<input type="text">` in the parent shell, so core's `forms.css` (`input[type="text"]` — specificity (0,1,1)) outranked the bare `.desktop-mode-ai__input` class (0,1,0) and painted its own white, bordered, `#2c3338` box with a focus ring, ignoring both the palette and the file's own chromeless design intent. - Panel background, text colour and hairline ring now read `--wpd-surface` / `--wpd-fg` / `--wpd-border`, plus the DIALOG texture slot; the backdrop picks up the SCRIM slot alongside `--wpd-scrim`. - Every remaining literal border resolves through `--wpd-border` / `--wpd-border-strong`, including the ones mixed with the accent. - The input rule is scoped to the overlay root (0,2,0) so it beats core, matching the native-window form-control fix in `window-chrome.css`. - The active mode pill prefers `--wpd-surface-elevated` so it stays legible against a header that is itself `--wpd-surface`. Every token keeps the literal that was there before as its fallback, so an unthemed shell is unchanged apart from the search field, which now renders chromeless as its stylesheet always intended. Docs: the DIALOG/SCRIM slot rows name the palette as a consumer, the `--wpd-*` section notes that body-mounted shell overlays read the palette too, and the core-CSS note points at both form-control overrides. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015sKW1mu1SGg5k9oSHgxv5s
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

The Site Assistant / command palette overlay was themed only halfway. Its text tones already read
--wpd-fg/--wpd-fg-muted, but the panel itself was a hardcodedrgba( 255, 255, 255, 0.97 )and every hairline was a literalrgba( 0, 0, 0, … ). Under a dark desktop theme that put the theme's light foreground on a white card — result rows came out nearly invisible.The search field was worse than untouched. It's a raw
<input type="text">living in the parent shell, so core'sforms.cssreaches it:That selector weighs (0,1,1) and beat the bare
.desktop-mode-ai__inputclass at (0,1,0), so core painted its own white bordered box with a focus ring — ignoring both the palette and the stylesheet's own chromeless design intent.What changed —
assets/css/ai-assistant.css--wpd-surface,--wpd-fgand--wpd-border(the hairline ring), plus the desktop-themeDIALOGtexture slot. Background is longhand so the texture slot isn't reset by a shorthand.SCRIMtexture slot alongside the--wpd-scrimcolour it already had.--wpd-border/--wpd-border-strong, including the ones mixed with the accent viacolor-mix()..desktop-mode-ai .desktop-mode-ai__inputweighs (0,2,0) and beats core. Same fix as the native-window form-control rule inwindow-chrome.css. Border, radius, box-shadow and padding are reset;min-height: 30pxkeeps the hit target core was providing.--wpd-surface-elevatedso it stays legible against a header that is itself--wpd-surface.Every token keeps the literal that was already there as its fallback, so an unthemed shell is pixel-identical — with one deliberate exception: the search field now renders chromeless, as its stylesheet always intended.
The three black atmospheric shadows stay literal on purpose: they read as depth against the wallpaper, not as part of the surface.
Docs
DIALOG/SCRIMslot rows name the command palette as a consumer.--wpd-*palette section notes that body-mounted shell overlays (toasts, dialogs, context menus, the palette) read the palette too.How to test
Checks
npm run build·npm run lint·npm run typecheck·npm run test:js(2448 tests) — all green. No PHP touched.🤖 Generated with Claude Code