From b9da964d23212d6ceb0568aa26110f960134983f Mon Sep 17 00:00:00 2001 From: ScottN-PV Date: Mon, 21 Sep 2026 18:02:55 -0400 Subject: [PATCH 1/3] fix(web): close the gap between the composer and its bottom toolbar Extend the context strip backdrop mask one CSS pixel under the composer to cover the lower seam when an attached banner splits the backdrops. Co-authored-by: Codex AI-Tool: OpenAI Codex AI-Harness: Codex CLI 0.155.1 app-server integration AI-Host: T3 Code desktop app AI-Model: gpt-6-astra AI-Reasoning: medium AI-Contribution: Investigation, implementation, automated checks, evidence preparation --- apps/web/src/components/chat/ComposerSurface.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/components/chat/ComposerSurface.tsx b/apps/web/src/components/chat/ComposerSurface.tsx index b7c134c29925..aecf6a901aaf 100644 --- a/apps/web/src/components/chat/ComposerSurface.tsx +++ b/apps/web/src/components/chat/ComposerSurface.tsx @@ -85,7 +85,7 @@ function ContextStrip({ className, ...props }: ComponentProps<"div">) { data-slot="composer-context-strip" className={cn( "group/composer-context relative isolate mx-auto -mt-4 flex w-[calc(100%-2*var(--chat-composer-drawer-inset))] items-center gap-2 overflow-x-clip overflow-y-visible ps-1 pe-2 pt-5 pb-1", - "before:absolute before:inset-0 before:-z-1 before:rounded-b-[16px] before:border before:border-(--chat-composer-outline) before:mask-[linear-gradient(to_bottom,transparent_0_1rem,black_1rem)] before:shadow-[0_12px_28px_-18px_rgb(0_0_0/40%)]", + "before:absolute before:inset-0 before:-z-1 before:rounded-b-[16px] before:border before:border-(--chat-composer-outline) before:mask-[linear-gradient(to_bottom,transparent_0_calc(1rem-1px),black_calc(1rem-1px))] before:shadow-[0_12px_28px_-18px_rgb(0_0_0/40%)]", "dark:before:border-white/7 dark:before:bg-[linear-gradient(to_bottom,transparent_0_1rem,rgb(0_0_0/18%)_1rem,transparent_calc(1rem+10px)),linear-gradient(rgb(255_255_255/1%),rgb(255_255_255/1%))] dark:before:shadow-[0_14px_32px_-18px_rgb(0_0_0/75%)]", "group-has-data-[composer-banner-surface=attached]/composer-surface:before:bg-[color-mix(in_srgb,var(--chat-composer-glass-surface)_var(--glass-opacity),transparent)] group-has-data-[composer-banner-surface=attached]/composer-surface:before:backdrop-blur-(--glass-blur) group-has-data-[composer-banner-surface=attached]/composer-surface:before:backdrop-saturate-(--glass-saturation)", "not-supports-[clip-path:shape(from_0_0,line_to_1px_1px)]:before:bg-[color-mix(in_srgb,var(--chat-composer-glass-surface)_var(--glass-opacity),transparent)] not-supports-[clip-path:shape(from_0_0,line_to_1px_1px)]:before:backdrop-blur-(--glass-blur) not-supports-[clip-path:shape(from_0_0,line_to_1px_1px)]:before:backdrop-saturate-(--glass-saturation)", From d5df3651a5404e18583cf3d598703f132aa0f4ff Mon Sep 17 00:00:00 2001 From: ScottN-PV Date: Sat, 26 Sep 2026 19:49:08 -0400 Subject: [PATCH 2/3] docs(web): describe composer context strip masking Document the existing behavior without changing executable code. Co-authored-by: Codex Co-authored-by: Claude AI-Tool: OpenAI Codex AI-Harness: Codex harness (integration/version not exposed) AI-Host: T3 Code AI-Model: gpt-6-astra AI-Reasoning: medium AI-Contribution: JSDoc drafting, source-equivalence checks, targeted lint, diff checks, and PR update preparation AI-Tool: Claude Code AI-Harness: Claude Code CLI 2.1.283 invoked by Codex harness AI-Host: T3 Code via PowerShell AI-Model: claude-fable-5-1 AI-Reasoning: high AI-Contribution: Independent review, docstring wording improvements, and follow-up drafting --- apps/web/src/components/chat/ComposerSurface.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/web/src/components/chat/ComposerSurface.tsx b/apps/web/src/components/chat/ComposerSurface.tsx index 827cfe5e65de..806cdcb31e81 100644 --- a/apps/web/src/components/chat/ComposerSurface.tsx +++ b/apps/web/src/components/chat/ComposerSurface.tsx @@ -79,6 +79,7 @@ function Main({ className, ...props }: ComponentProps<"div">) { ); } +/** Extends the composer outline below the input, masking its overlap up to one pixel above the shared edge so no seam shows. */ function ContextStrip({ className, ...props }: ComponentProps<"div">) { return (
Date: Mon, 28 Sep 2026 22:32:18 -0400 Subject: [PATCH 3/3] docs(web): document composer surface wrappers Co-authored-by: Codex Co-authored-by: Claude AI-Tool: OpenAI Codex AI-Harness: Codex harness (integration/version not exposed) AI-Host: T3 Code AI-Model: gpt-6-astra AI-Reasoning: medium AI-Contribution: Docstring drafting, source-equivalence checks, formatting, targeted lint, and publishing preparation AI-Tool: Claude Code AI-Harness: Claude Code CLI 2.1.283 invoked by Codex harness AI-Host: T3 Code via PowerShell AI-Model: claude-fable-5-1 AI-Reasoning: high AI-Contribution: Independent implementation and docstring review, follow-up drafting --- apps/web/src/components/chat/ComposerSurface.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/web/src/components/chat/ComposerSurface.tsx b/apps/web/src/components/chat/ComposerSurface.tsx index 806cdcb31e81..5e3015f22f89 100644 --- a/apps/web/src/components/chat/ComposerSurface.tsx +++ b/apps/web/src/components/chat/ComposerSurface.tsx @@ -43,6 +43,7 @@ const outlineClasses = const contextSeamClasses = "group-data-with-context/composer-surface:after:[clip-path:polygon(0_0,100%_0,100%_100%,calc(100%-22px)_100%,calc(100%-22px)_calc(100%-2px),22px_calc(100%-2px),22px_100%,0_100%)]"; +/** Frames the input while leaving the shared edge open for the context strip's outline. */ function Host({ className, ...props }: ComponentProps<"div">) { return (
) { ); } +/** Covers the input surface when an attached banner replaces the outer glass backdrop. */ function Main({ className, ...props }: ComponentProps<"div">) { return (