Skip to content

refactor: theme steering initial pass - #609

Open
emrberk wants to merge 16 commits into
mainfrom
refactor/theme-steering-initial-pass
Open

emrberk wants to merge 16 commits into
mainfrom
refactor/theme-steering-initial-pass

Conversation

@emrberk

@emrberk emrberk commented Sep 7, 2026

Copy link
Copy Markdown
Member

A light/dark theme pass across the console, landing on a single palette. Supersedes #607. Original theme steering work by @zacknelson.

Palette decisions

The A/B review overlays are gone. Treatment B is the shipped palette and there is no runtime concept of a treatment any more: src/theme/treatments.ts is deleted, ThemeModeProvider picks the dark or light theme directly, and no query string or path changes colors.

Rail navigation is info cyan on the isolated brandAccent* roles.

Token Dark Light
brandAccent #81d3f9 #176f87
brandAccentActive cyan at .075 cyan at .075
brandAccentBorder cyan at .14 cyan at .14

Run query is a secondary success action on the isolated brandAction* roles.

Token Dark Light
brandAction / brandActionHover #27723a / #367f47 #b3e5c1 / #88dda0
brandActionBorder #34d55c #27723c
brandActionForeground contentInverse contentPrimary

Tab underlines, SelectMenu checks, drag chrome, Save/Connect, non-rail info latches, switches, checkboxes, and keyboard focus stay on contentAccent, actionPrimary, and the status families.

Sidebar toggles

The pressed rail button keeps its cyan glyph, well, and stroke, and gains the same edge and shadow as the notebook List/Grid and Table/Chart selectors:

  • 1px brandAccentBorder stroke with a 2px bottom edge at .22, drawn on a pseudo element so the pressed button keeps the same box as the resting button and the icon does not shift.
  • The same mode-split shadow as the glass selection lens.

AI colors

Every AI affordance now reads one invariant pair, aiPinkStart #d14671 and aiPinkEnd #892c6c, in both themes. This is the original assistant gradient and matches the lightest and darkest pinks of the QuestDB logo.

  • Sparkle icons, the Monaco gutter glyphs, and the circle notch spinner.
  • Gradient buttons: configure, fix query, explain query, schema Ask AI, build with AI, and Resume WAL.
  • The chat input border, the status indicator border and icon, the assistant mode pickers, the chat badge and divider, the explain shortcut keys, and the promo icon.

The aiGradient* and brandGradient* tokens are removed. The gradient helpers are assistantLinearGradientHorizontal and assistantLinearGradientVertical.

Also in this pass

  • Timestamp clocks in the schema tree and table-details Columns are statusInfo. The designated timestamp is a filled clock at statusInfoSubtle.
  • Left-rail Grid result-panel glyph is Phosphor GridNine, matching the Chart glyph beside it.
  • Run-query menu is bottom-end on the chevron, replacing a hardcoded translateX that drifted on the longer "Run selected queries" label.
  • Orphan tokens removed: contentOnWarning, aiGradientStart, aiGradientEnd, brandGradientStart, brandGradientEnd.

Earlier theme steering

Palette retunes, accent to neutral interaction colours, a reworked shadow ramp, focus rings routed through a shared statusInfoFocus helper, and per-mode surfaces for the chrome that needed them.

Surfaces touched: notebook and SQL editor chrome, schema tree, table details drawer, result grid, MCP pair popover and footer pill, AI chat window, top bar, drawers, calendar, and the shared Badge / Switch / SegmentedControl / SelectMenu primitives.

MCP footer pill. Idle is neutral chrome: no fill, outlined in borderStrong to match the version badge beside it. Pill sits flush on the footer in dark mode. Agent changes read cyan (statusInfo).

MCP pair popover. All status notices are one full-bleed band. Danger bands use neutral title/body text with a red icon and surface.

Theme hygiene. yarn lint:colors passes with a single palette file. src/theme/THEMING.md documents the shipped palette, the rail and Run query anatomy, and the assistant gradient. src/components/Select deleted in favour of SelectMenuControl.

Test plan

  • Dark and light: pressed rail buttons on both rails show the cyan glyph, well, 1px stroke, and 2px bottom edge; the icon does not move between rest and pressed
  • Dark and light: Run query is the green well with its stroke; Save/Connect stay primary pink
  • Dark and light: every sparkle, gradient button, chat input border, and status indicator uses the same pink gradient
  • ?treatment=b and /review/b have no effect
  • Timestamp clocks in schema tree and Columns; designated timestamp is filled and quieter
  • Left-rail Grid glyph matches Chart weight/family
  • Open the Run chevron on both "Run query" and "Run selected queries": menu flush to the right edge
  • Tab underline, switches, checkboxes, keyboard focus unchanged

🤖 Generated with Claude Code

zacknelson and others added 9 commits September 1, 2026 18:19
WIP theme pass: compress the light elevation ramp, quiet shadows, and
rebind hover/focus/selection off brand so crimson stays on tabs, notebook
identity, and primary actions.

Co-authored-by: Cursor <cursoragent@cursor.com>
Record the remaining palette and binding decisions in THEME-STEERING.md and apply them: status chips, Enabled/Validated, form SelectMenu, and the leftover light chrome leftover from the first lift.

Co-authored-by: Cursor <cursoragent@cursor.com>
Retune pink and danger roles and rebind latches, tooltips, dropdown shadows, and result-grid type so light chrome matches Figma without new tokens.

Co-authored-by: Cursor <cursoragent@cursor.com>
Light provider-tab hover sits lighter than the selected well. Result-grid selection uses a double hover wash and info cell chrome without retuning the shared gridSelection token.

Co-authored-by: Cursor <cursoragent@cursor.com>
Light metrics calendar flips enabled/disabled wells and keeps selected dates inverse. Monitoring count pills match Figma geometry with the quieter 32% stroke. Table and column glyphs settle on contentPrimary.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

Web Console deploy preview

Preview Commit Logs
https://pr-609--web-console.netlify.app 69b6ab0 build log

emrberk and others added 5 commits September 8, 2026 16:18
Split rail latch and Run query onto brand* tokens so treatment A (brighter magenta) and B (info rail + success Run) can be compared without moving leftover chrome. Also retune timestamp clocks, swap the left-rail Grid glyph to Phosphor GridNine, and right-align the Run menu.

Co-authored-by: Cursor <cursoragent@cursor.com>
@emrberk emrberk changed the title refactor: theme steering initial pass refactor: light/dark theme pass with a single palette Sep 15, 2026
@emrberk emrberk changed the title refactor: light/dark theme pass with a single palette refactor: theme steering initial pass Sep 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants