fix(chat): unify context rail hover states, dropdown surfaces, and radii - #37
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cynfria
approved these changes
Aug 14, 2026
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.
Category: fix
User Impact: Hovering cards and menus in the chat context rail is now visible in light mode, dropdowns match the rail's surface color and corner radius in dark mode, and non-clickable rows no longer light up on hover.
Problem: The rail's hover fills used
sidebar-accent, which is near-invisible in light mode (gray-50 on white) while fine in dark; its dropdowns inherited the overflow-menupopoversurface, which reads too dark against the rail's card family in dark mode; dropdown radii didn't relate to the rail container's; the Changes tab stacked three nested surfaces; and disabled branch rows still showed hover feedback.Solution: Move all rail hover/selected fills to
muted— identical pixels in dark (wheremuted≡ the oldsidebar-accentvalue) and visible in light — matching the design system's ownRowButtonmenu convention. Rail dropdowns now usebg-cardwith the rail'srounded-md, and their rows userounded-smconcentric inside the padding. The Changes tab drops its filled slab and hover-pill overlay in favor of flatrounded-smrows with the standard fills, and hovers are scoped withenabled:so disabled rows stay inert while the active row keeps itsaria-currenthighlight.Note for design reviewers:
sq agents review --localflags two deliberate deviations fromdocs/color-token-mapping.md: dropdown surfaces here usecard(notpopover) and menu highlights usemuted(notaccent). Both were chosen intentionally — the darkpopovertoken is reserved-darker for overflow menus (BOT-1600) and doesn't suit rail-attached dropdowns, and lightaccenton white surfaces is the invisible-hover defect this PR fixes;RowButtonalready usesmutedfor these states. If we keep this, the mapping doc could use a follow-up alignment.Before / After (Light, Default)
before-default-light.mov
after-default-light.mov
Before / After (Light, Multi-workspace)
before-multi-light.mov
after-multi-light.mov
Before / After (Dark, Default)
before-default-dark.mov
after-default-dark.mov
Before / After (Dark, Multi-workspace)
before-multi-dark.mov
after-multi-dark.mov
File changes
src/features/chat/ui/widgets/WorkingContextPicker.tsx
Legacy (single-workspace) worktree/branch pickers: hover fills to
muted, dropdown surfaces tobg-card rounded-md p-1.5with concentricrounded-smrows, search field highlight made hover-only, and hover scoped to enabled rows so the current/checked-out-elsewhere branches stay inert.src/features/chat/ui/widgets/WorkspaceContextPicker.tsx
Multi-workspace pickers: same treatment as the legacy pickers, plus the trigger cards' resting fill moves from
background/45(darker than the rail surface in dark mode) tomuted/60to match the legacy cards, and the active row gains thearia-currentselected fill.src/features/chat/ui/widgets/ChangesWidget.tsx
De-nests the Changes tab: removes the filled scroll slab and its colored bottom fade plus the per-row hover-pill overlay, replacing them with flat
rounded-smrows using the standardmutedhover and a shared scrolling list that fades scrolled rows under a top mask like the picker dropdowns.src/features/chat/ui/widgets/WorkspaceActionsMenu.tsx
Legacy rail actions menu: content surface to
bg-card rounded-md, items torounded-smwithmutedhover/focus/highlight fills, dropping the no-opsidebar-foregroundtext swaps.src/features/chat/ui/widgets/WorkspaceRowActionsMenu.tsx
Multi-workspace row actions menu: content surface to
bg-card rounded-md(items keeprounded-xs, concentric inside thepx-3gutter), highlight fills tomuted.src/features/chat/ui/widgets/WorkspaceWidget.tsx
Multi-workspace widget rows (add-workspace, change-folder, section actions menu): hover fills to
muted, section menu surface tobg-card rounded-md p-1.5.🤖 Generated with Claude Code