From f4e042f4665e0f981b5df003aebbd6ef971770b8 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Mon, 27 Jul 2026 18:02:20 -0500 Subject: [PATCH] style(desktop): sit every pane tab strip on the sidebar surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The strips painted with `--theme-card-seed` — the raw, unmixed seed rather than a surface token — so they read as their own band beside the sidebar and titlebar, which share `--ui-bg-sidebar`. Fixed at the default in `PaneTab` rather than per strip. The right-rail preview strip never set the vars at all, so its inactive tabs fell through to the seed even though its container was already on the sidebar surface; correcting the fallback fixes that one for free and keeps the next strip from regressing. With the default right, the two zone strips no longer need to redeclare the var and paint the token directly. --- .../pane-shell/tree/renderer/tree-group.tsx | 10 +++++----- apps/desktop/src/components/ui/pane-tab.tsx | 14 ++++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/apps/desktop/src/components/pane-shell/tree/renderer/tree-group.tsx b/apps/desktop/src/components/pane-shell/tree/renderer/tree-group.tsx index fc920ff2ca7..b46d4068479 100644 --- a/apps/desktop/src/components/pane-shell/tree/renderer/tree-group.tsx +++ b/apps/desktop/src/components/pane-shell/tree/renderer/tree-group.tsx @@ -353,7 +353,7 @@ export function TreeGroup({
{ setMenuPane( diff --git a/apps/desktop/src/components/ui/pane-tab.tsx b/apps/desktop/src/components/ui/pane-tab.tsx index 5606e9a7f28..eb553a770e5 100644 --- a/apps/desktop/src/components/ui/pane-tab.tsx +++ b/apps/desktop/src/components/ui/pane-tab.tsx @@ -23,10 +23,12 @@ const TAB_ACTIVE = 'h-full text-foreground [--tab-bg:var(--pane-tab-active-bg,va // so it costs no layout and can't shift the tab. const TAB_ACTIVE_UNDERLINE = 'shadow-[inset_0_-2px_0_var(--pane-tab-active-accent,var(--theme-primary))]' -// Inactive = gutter. Hover DARKENS: active is the lighter content surface, so a -// lightening wash made the two nearly indistinguishable. +// Inactive = gutter, defaulting to the shared chrome surface so a strip that +// sets no vars still matches the sidebar/titlebar instead of falling through to +// the raw (unmixed) card seed. Hover DARKENS: surfaces this close in value need +// a darkening wash to register at all. const TAB_IDLE = - 'text-(--ui-text-tertiary) [--tab-bg:var(--pane-tab-strip-bg,var(--theme-card-seed))] hover:shadow-[inset_0_0_0_100vmax_color-mix(in_srgb,#000_var(--ui-tab-hover-darken),transparent)] hover:text-(--ui-text-secondary)' + 'text-(--ui-text-tertiary) [--tab-bg:var(--pane-tab-strip-bg,var(--ui-sidebar-surface-background))] hover:shadow-[inset_0_0_0_100vmax_color-mix(in_srgb,#000_var(--ui-tab-hover-darken),transparent)] hover:text-(--ui-text-secondary)' interface PaneTabProps extends React.ComponentProps<'div'> { active?: boolean @@ -49,9 +51,9 @@ const isMetaClose = (event: { button: number; metaKey: boolean }) => event.butto /** * Editor tab shell — preview rail + zone headers + collapsed vertical rails. * - * Strip sets `--pane-tab-active-bg` (content surface) and `--pane-tab-strip-bg` - * (gutter; prefer `--theme-card-seed` = VS Code `tab.inactiveBackground`). - * Active merges into content; inactive sits flush in the gutter. + * Defaults need no vars: the active tab takes the editor surface, inactive the + * sidebar one. Override `--pane-tab-active-bg` to change what the active tab + * merges into, `--pane-tab-strip-bg` for a gutter unlike the bar around it. */ export const PaneTab = React.forwardRef(function PaneTab( {