diff --git a/components/chat.tsx b/components/chat.tsx
index f40bac1..00ee7d1 100644
--- a/components/chat.tsx
+++ b/components/chat.tsx
@@ -1070,9 +1070,11 @@ export function Chat({
{/* The dock: an overlay sibling of the scroller (the
- use-stick-to-bottom pattern — like the scroll button). Before
- the button in DOM order so the button keeps painting above
- the dock, as it always has. */}
+ use-stick-to-bottom pattern). The scroll-down button lives
+ INSIDE the overlay now (owner refinement round, 2026-09-24):
+ anchored to the dock block's top edge, so it rides every
+ height morph (typing, a question growing the band, the
+ fold) and NEVER overlaps the composer. */}
-
{/* The session-scoped focuses (chrome-melt wave, 2026-09-19): mounted
@@ -1504,6 +1505,18 @@ function DockOverlay({
turns={turns}
dictationSlot={dictationSlot}
/>
+ {/* The scroll-down disc (moved here from the Conversation,
+ owner refinement round 2026-09-24): anchored to the BLOCK's
+ top edge — above the composer shell AND the stats row, in
+ the gradient's transparent band — so it never overlaps
+ any dock element. Because the anchor is the block itself
+ (not the scroller's bottom), it rides every height change
+ LIVE: typing growth, a pending question expanding the
+ band, the 180ms fold morph. pointer-events-auto: the
+ overlay is none by default. The isAtBottom/scrollToBottom
+ context still reaches it — DockOverlay is a Conversation
+ child. */}
+
{/* The plan marginalia (owner, plan-placement round): the bare
diagram in the band's right flank — boundaless, meet-fitted, part