From 16ef964fdb8a600d449fe872d3f658213187e551 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Mon, 27 Jul 2026 23:27:29 -0500 Subject: [PATCH] feat(desktop): rest the thinking caret at a faint hint instead of invisible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A run of thinking headers is the one place the disclosure affordance isn't otherwise discoverable — every other one sits in a row you're already reaching for. The resting opacity becomes a token so only that surface opts in; DisclosureRow is shared with tool rows and run headers, which keep the invisible-until-hover default. --- apps/desktop/src/components/chat/disclosure-row.tsx | 2 +- apps/desktop/src/styles.css | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/components/chat/disclosure-row.tsx b/apps/desktop/src/components/chat/disclosure-row.tsx index 56cd6d9a3ddd..fc81ea867c70 100644 --- a/apps/desktop/src/components/chat/disclosure-row.tsx +++ b/apps/desktop/src/components/chat/disclosure-row.tsx @@ -55,7 +55,7 @@ export function DisclosureRow({ 'flex h-(--conversation-line-height) shrink-0 items-center justify-center transition-opacity duration-150', open ? 'opacity-80' - : 'opacity-0 group-hover/disclosure-row:opacity-80 group-focus-within/disclosure-row:opacity-80' + : 'opacity-(--disclosure-caret-rest) group-hover/disclosure-row:opacity-80 group-focus-within/disclosure-row:opacity-80' )} > diff --git a/apps/desktop/src/styles.css b/apps/desktop/src/styles.css index e304eb9487e9..b37d94bc2941 100644 --- a/apps/desktop/src/styles.css +++ b/apps/desktop/src/styles.css @@ -413,6 +413,9 @@ /* Tight gap between tool rows inside a single action group, so a back-to-back run still reads as one cohesive sequence. */ --tool-row-gap: 0.375rem; + /* Resting opacity of a disclosure caret — invisible until hover, except + where a surface opts into a faint hint of the affordance. */ + --disclosure-caret-rest: 0; /* Paragraph spacing — vertical gap between prose paragraphs, both inside a markdown block and between consecutive prose parts. Single knob; tweak freely. */ @@ -1548,6 +1551,14 @@ text-* variant utilities. */ .btn-arc { margin-block: var(--turn-block-gap); } +/* Thinking headers carry a faint resting caret. A run of them is the one place + the affordance isn't otherwise discoverable — every other disclosure sits in + a row you're already reaching for. The scaffold fade multiplies this, so the + painted value lands well under the number here. */ +[data-slot='aui_thinking-disclosure'] { + --disclosure-caret-rest: 0.4; +} + /* A streaming turn is sealed into several assistant bubbles as it goes (`message.interim`) and rehydrates into fewer, so the same two blocks are sometimes siblings inside one bubble and sometimes split across two. The