diff --git a/web/src/index.css b/web/src/index.css index 0ced4eeb50..2211a2d4ea 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -587,14 +587,22 @@ html:not(.dark) .conversations-sidebar { /* Right rail (workspace panel) in dark: blends into the canvas, keeping only * its left divider. Excluded from the glass rule above, so this just clears * the rail's md:bg-card fill and the bg-card fills its panel contents paint - * (FilesPanel/TerminalsPanel/SubagentsPanel + the graph surface). */ -.dark aside[aria-label="Workspace"], + * (FilesPanel/TerminalsPanel/SubagentsPanel + the graph surface). + * Skip when maximized — the panel covers the full content area and needs an + * opaque background so the chat beneath doesn't bleed through. */ +.dark aside[aria-label="Workspace"]:not([data-maximized]), .dark - aside[aria-label="Workspace"] + aside[aria-label="Workspace"]:not([data-maximized]) :is([data-workspace-panel-content] > *, [data-workspace-panel-surface]) { background: transparent !important; } +/* When maximized the workspace panel covers the full content area; use an + * opaque background so the chat underneath doesn't bleed through. */ +aside[aria-label="Workspace"][data-maximized] { + background: var(--card-solid) !important; +} + /* Popovers/menus — same glass treatment */ .dark [data-slot="popover-content"], .dark [role="menu"], @@ -1776,17 +1784,17 @@ html:not(.dark) .conversations-sidebar { } @media (min-width: 48rem) { :root:not(.dark)[data-theme="custom"][data-custom-translucent-sidebar] - :is(.conversations-sidebar, aside[aria-label="Workspace"]) { + :is(.conversations-sidebar, aside[aria-label="Workspace"]:not([data-maximized])) { background-color: var(--custom-light-sidebar); backdrop-filter: blur(20px) saturate(1.12); } .dark[data-theme="custom"][data-custom-translucent-sidebar] - :is(.conversations-sidebar, aside[aria-label="Workspace"]) { + :is(.conversations-sidebar, aside[aria-label="Workspace"]:not([data-maximized])) { background-color: var(--custom-dark-sidebar); backdrop-filter: blur(20px) saturate(1.12); } :root[data-theme="custom"][data-custom-translucent-sidebar] - aside[aria-label="Workspace"] + aside[aria-label="Workspace"]:not([data-maximized]) :is([data-workspace-panel-content] > *, [data-workspace-panel-surface]) { background-color: transparent; } diff --git a/web/src/shell/WorkspacePanel.tsx b/web/src/shell/WorkspacePanel.tsx index faefe320e1..d92d931042 100644 --- a/web/src/shell/WorkspacePanel.tsx +++ b/web/src/shell/WorkspacePanel.tsx @@ -685,6 +685,7 @@ export function WorkspacePanel({ // same flush/bordered styling — only the width changes. The resize // handle is suppressed in that state — there's no neighbor to resize // against. + data-maximized={maximized || undefined} className={cn( "@container/rail relative z-40 hidden md:flex md:min-h-0 md:flex-col md:overflow-hidden md:border-l md:border-border md:bg-card", maximized ? "md:absolute md:inset-0" : "md:shrink-0",