From bf726a7ab8d0316ffcb8b3e71612c16f0ca4b685 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Sun, 26 Jul 2026 01:21:47 -0500 Subject: [PATCH] fix(desktop): drop the fade mask on the live thinking preview The preview window masked its top 28% to transparent while reasoning streamed, so a gradient appeared over the thinking text and vanished the moment the block finished. Remove the mask; the max-height window and bottom-pinned scroll still keep the preview compact and following the newest tokens. --- .../src/components/assistant-ui/thread/message-parts.tsx | 6 ++---- apps/desktop/src/styles.css | 8 -------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/apps/desktop/src/components/assistant-ui/thread/message-parts.tsx b/apps/desktop/src/components/assistant-ui/thread/message-parts.tsx index d578710b3d16..ac0b42423e9f 100644 --- a/apps/desktop/src/components/assistant-ui/thread/message-parts.tsx +++ b/apps/desktop/src/components/assistant-ui/thread/message-parts.tsx @@ -74,9 +74,7 @@ const ThinkingDisclosure: FC<{ const isPreview = pending && userOpen === null // While the preview is live, pin the scroll container to the bottom on - // every content growth so the latest tokens are always visible. Combined - // with the top mask in styles.css, this reads as text settling in from - // below while older lines fade out at the top. + // every content growth so the latest tokens are always visible. useEffect(() => { if (!isPreview) { return @@ -134,7 +132,7 @@ const ThinkingDisclosure: FC<{ // and inherits the disclosure-level opacity fade defined in // styles.css (~0.67 at rest, 1 on hover/focus). 'mt-0.5 w-full min-w-0 max-w-full overflow-hidden wrap-anywhere pb-1', - isPreview && 'thinking-preview max-h-40' + isPreview && 'max-h-40' )} ref={scrollRef} > diff --git a/apps/desktop/src/styles.css b/apps/desktop/src/styles.css index 6216e94a9f64..2bd50d7e0ebb 100644 --- a/apps/desktop/src/styles.css +++ b/apps/desktop/src/styles.css @@ -1467,14 +1467,6 @@ text-* variant utilities. */ .btn-arc { height: 0.875rem; } -/* Live thinking preview window. Pairs with the ResizeObserver in - ThinkingDisclosure that pins scrollTop to the bottom — older lines fade - into the top mask while the latest tokens settle in below. */ -.thinking-preview { - -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 28%, black 100%); - mask-image: linear-gradient(to bottom, transparent 0%, black 28%, black 100%); -} - /* Long adjacent tool-call run collapsed into a fixed, auto-scrolling window. ToolGroupSlot pins the newest call to the bottom (unless the user scrolls up), so a back-to-back run stays compact instead of pushing the reply off