Skip to content

sync: unify chat topbar tint and fold tool calls inline - #123

Merged
Luhaozhu merged 2 commits into
mainfrom
sync/ce-topbar-tint-2026-08-25
Aug 26, 2026
Merged

sync: unify chat topbar tint and fold tool calls inline#123
Luhaozhu merged 2 commits into
mainfrom
sync/ce-topbar-tint-2026-08-25

Conversation

@Luhaozhu

Copy link
Copy Markdown
Contributor

Derived from the full source tree with scripts/build_ce.py; all release gates (brand scan, binary allowlist, LICENSE, overlay split assertions) passed.

Chat topbar matches the surface below it

The chat topbar painted itself with --color-bg-container while the pane underneath uses --color-bg-chat, so a lighter band ran across the top of every conversation. Measured against the shipped bundle in a headless browser:

Theme Topbar (before) Pane below After
Light rgb(255,255,255) rgb(253,253,252) both rgb(253,253,252)
Dark rgb(21,27,35) rgb(17,23,32) both rgb(17,23,32)

The bar is now transparent and inherits whatever the pane paints, so it stays matched on chat and non-chat pages in both themes without tracking a second token. The backdrop blur is dropped along with it — the bar sits in flow and no content scrolls beneath it, so the filter did nothing except risk bleeding the sidebar colour along the left edge.

Desktop titlebar follows the surface underneath

The injected desktop titlebar hardcoded a background token, which drifted from the app the moment either side changed. It now samples the computed background of the sidebar and main pane directly below it and mirrors those into CSS variables, so theme switches and page changes are picked up automatically. Writes are short-circuited when the value is unchanged, which also stops a per-frame sync loop that the previous unconditional setProperty kept alive.

Tool calls fold in place

Hidden tool calls expand inline instead of pushing their cards into a side rail, and the tool views now share a single overflow-fade hook. The standalone timeline and thinking-detail panels that only existed for the side rail are removed.

Chat topbar no longer paints a surface of its own. It was filled with
--color-bg-container while the pane underneath uses --color-bg-chat, so a
lighter band ran across the top of every conversation: measured
rgb(255,255,255) against rgb(253,253,252) in light mode and rgb(21,27,35)
against rgb(17,23,32) in dark mode. The bar is now transparent and inherits
whatever the pane below paints, which keeps it matched on chat and non-chat
pages in both themes. The vestigial backdrop blur goes with it: the bar sits
in flow and no content scrolls beneath it, so the filter only risked bleeding
the sidebar colour along the left edge.

The desktop titlebar gets the same treatment from the other side. Instead of
hardcoding a background token it samples the computed background of the
sidebar and main pane directly below it and mirrors them into CSS variables,
so it follows theme switches and page changes on its own.

Hidden tool calls now expand in place rather than pushing their cards into a
side rail, sharing one overflow-fade hook across the tool views.
The desktop titlebar test asserts the bar never renders the brand name
(no logo, no product name — the tab shows the current page instead), written
as !block.contains(">{brand::NAME}<"). Seeding the tab with a literal product
name only passed upstream because the two strings happened to differ there;
once the derivation aligns the brand they are equal and the assertion trips,
which is what turned the desktop Rust tests red on this branch.

The placeholder is now the same fallback the script already uses for an
unknown page, so the block carries no brand literal at all and the first
frame shows a page label rather than a product name.
@Luhaozhu
Luhaozhu merged commit f694442 into main Aug 26, 2026
5 checks passed
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.

1 participant