Repository navigation
Fade content into the top edges of the document and Chat - #514
Open
MaggieAppleton wants to merge 4 commits into
Open
MaggieAppleton wants to merge 4 commits into
MaggieAppleton wants to merge 4 commits into
Conversation
Content scrolling under the views bar or the top of Chat now dissolves into the surface instead of being cut by the scroller's edge. A sticky ::before on each pane's scroller carries a paper-to-transparent gradient, folded out of flow by a negative margin, and a scroll-driven animation reveals it over the first 24px of scroll so nothing is veiled at rest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A 56px scrim-curve gradient replaces the 24px linear one, so the fade has no visible band edge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A scroll-driven animation never stops running, so every check that waits for motion to settle timed out. A scroll-state container query with a short opacity transition shows the fade once content has scrolled under the edge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Review: Changes needed (one small fix; otherwise this is ready) I checked it in headless Chromium against a fake server, at 1x and 2x. I used a seeded long document, 30 Chat messages, 4 decisions and a Zoom child. What works
Needs fixing
Nits (optional)
|
Its selector list was less specific than the base rule's, so the solid-first gradient never applied. Cover it, and the Decisions fade's clip edge, in e2e. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Content scrolling under the views bar (Document · Decisions · Build) or the top of Chat was hard-cut by the scroller's edge, slicing headings and messages in half. It now dissolves into the surface.
How
::beforeon each pane's scroller ([data-plan-scroll],[data-plan-decisions-scroll],[data-build-view-scroll],[data-chat-scroll]) draws a gradient from the surface colour to transparent. It is folded out of flow with a negative margin, so there's no layout shift (the e2e test checks this).--color-pageon the paper;--color-groundfor split Chat;--color-chat-panefor compact Chat. Height is a new token,--scroll-edge-fade-size(56px). The gradient uses an eased scrim curve (12color-mixstops) rather than two linear stops, so it has no visible band edge.scroll-state(scrollable: top)container query on each scroller reveals it with a 120ms opacity transition, so at rest it's invisible. There's no JS scroll listener and no scroll-timeline animation: a scroll-driven animation counts as running forever, and the e2e checks that wait for motion to settle timed out in CI. Browsers without scroll-state queries get no fade.pointer-events: none,z-index: 3. Decision markers (2) pass under it. The comment menu (3, later in the DOM), rails (40), the table toolbar (50) and the selection bar (50) stay above it.--scroll-edge-insetpulls the fade back to the true clip edge, so it's at full opacity exactly where content is clipped.prefers-reduced-transparency: reduce: the gradient stays solid for its first half before fading. The fade is driven by scroll, not time, so reduced motion is unaffected.Document under the tabs, mid-scroll
Chat top, mid-scroll
Decisions
Zoom child (after)
Phone (unchanged: the bar is already translucent material)
Tests
e2e/paper-layout.e2e.ts. It checks the scroller starts at the views bar's lower edge and that hiding the fade doesn't change layout. It also checks the fade is sticky andpointer-events: none, invisible at rest and visible once scrolled, and that animations still settle. In Chat, it's visible at the newest message and hidden at the top.bun run typespasses. The token, design-contract and design-check findings come only from untracked local design-jig files, not this diff.🤖 Generated with Claude Code