Show the content to people who asked for less motion - #629
Merged
Conversation
The first pass caught the evidence and licensing pages. Grepping the bundle rather than trusting the diff found it still shipping from the service page's proof strip, the about page's achievements list, and module 05 of the course, in both languages — six more strings. Module 05 no longer promises a frequency at all. It now teaches the thing that is actually true and more useful: that a hard multiplier in the path can leave you with no frequency report whatsoever, because the router has no timing model through the block. Verified by grepping the served bundle, not the source: the only remaining occurrences are inside the two withdrawal notices. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Third pass, and the reason there was a third: the i18n messages live in apps/website/messages/, not under src/, so every grep scoped to src reported clean while the bundle still shipped the claim from en.json and ru.json — the about page's achievements list takes the locale value over its own default. Found by grepping the built bundle. That is now the only check I trust for this: the source can look clean while the artefact is not. Also removed it from the course's why2 paragraph in Russian and its English lede. Built bundle now contains three occurrences of the digits 323: the two withdrawal notices, and .6932323 inside an unrelated formula constant.
…lumn The service depends on one idea that a paragraph carries badly: a testbench written from the same assumptions as the design agrees with the design's bugs, so the check has to be derived independently. That is a claim about the shape of a process, which is what a diagram is for. New VerificationDiagram puts the two shapes side by side — one specification producing RTL and a testbench derived from that RTL, faint, versus one specification producing the RTL and a reference model independently, meeting at a bit-exact comparison and carried through simulate → synthesise → route → board. Inline SVG so it inherits the page's colours and needs no second asset, with a title and description for screen readers. It sits directly after the hero, because every item in the deliverables list below depends on the reader believing this first. Trust signals moved up beside the CTA rather than sitting 1500px below it, which is where the research on B2B landing pages puts them. They are measured facts — cycles run, mismatches found, turnaround, price of the first module — because badges are not something this page has earned. Fixed a real layout defect found while measuring rather than looking: `section` is a centring flex column, so every card shrank to its own content and the column had ragged edges — 782, 860, 650, 786 and 585 pixels on a single page. The cards now stretch, so all six pages share one 860px column. Text stays centred; that comes from the stylesheet, not from align-items. The diagram cannot reflow and its 9px labels would be illegible scaled to a phone, so below 640px it scrolls, with a line of copy saying so — a silent scroll container reads as a cropped image. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every card on these pages starts at opacity 0 and is revealed by a scroll-triggered animation. That is fine while the animation runs, and leaves the page blank when it does not — and the site had no prefers-reduced-motion rule at all. Anyone whose system asks for reduced motion now gets the content immediately at full opacity, with transitions collapsed. The !important is unavoidable: the animation library writes opacity and transform as inline styles. Found while chasing what looked like a rendering bug — cards measured at 0.086 opacity — which turned out to be requestAnimationFrame throttled to zero frames in a hidden tab, not a defect. The real page renders correctly. But the same frozen-animation state is what a reduced-motion user would have been left with, so the check was worth making.
# Conflicts: # apps/website/src/index.css
github-actions Bot
added a commit
that referenced
this pull request
Aug 8, 2026
Show the content to people who asked for less motion (#629) * Finish the withdrawal: the figure was on four more pages The first pass caught the evidence and licensing pages. Grepping the bundle rather than trusting the diff found it still shipping from the service page's proof strip, the about page's achievements list, and module 05 of the course, in both languages — six more strings. Module 05 no longer promises a frequency at all. It now teaches the thing that is actually true and more useful: that a hard multiplier in the path can leave you with no frequency report whatsoever, because the router has no timing model through the block. Verified by grepping the served bundle, not the source: the only remaining occurrences are inside the two withdrawal notices. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * The last two copies were in the locale files, outside src/ Third pass, and the reason there was a third: the i18n messages live in apps/website/messages/, not under src/, so every grep scoped to src reported clean while the bundle still shipped the claim from en.json and ru.json — the about page's achievements list takes the locale value over its own default. Found by grepping the built bundle. That is now the only check I trust for this: the source can look clean while the artefact is not. Also removed it from the course's why2 paragraph in Russian and its English lede. Built bundle now contains three occurrences of the digits 323: the two withdrawal notices, and .6932323 inside an unrelated formula constant. * Draw the argument the service rests on, and align the cards to one column The service depends on one idea that a paragraph carries badly: a testbench written from the same assumptions as the design agrees with the design's bugs, so the check has to be derived independently. That is a claim about the shape of a process, which is what a diagram is for. New VerificationDiagram puts the two shapes side by side — one specification producing RTL and a testbench derived from that RTL, faint, versus one specification producing the RTL and a reference model independently, meeting at a bit-exact comparison and carried through simulate → synthesise → route → board. Inline SVG so it inherits the page's colours and needs no second asset, with a title and description for screen readers. It sits directly after the hero, because every item in the deliverables list below depends on the reader believing this first. Trust signals moved up beside the CTA rather than sitting 1500px below it, which is where the research on B2B landing pages puts them. They are measured facts — cycles run, mismatches found, turnaround, price of the first module — because badges are not something this page has earned. Fixed a real layout defect found while measuring rather than looking: `section` is a centring flex column, so every card shrank to its own content and the column had ragged edges — 782, 860, 650, 786 and 585 pixels on a single page. The cards now stretch, so all six pages share one 860px column. Text stays centred; that comes from the stylesheet, not from align-items. The diagram cannot reflow and its 9px labels would be illegible scaled to a phone, so below 640px it scrolls, with a line of copy saying so — a silent scroll container reads as a cropped image. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Show the content to people who asked for less motion Every card on these pages starts at opacity 0 and is revealed by a scroll-triggered animation. That is fine while the animation runs, and leaves the page blank when it does not — and the site had no prefers-reduced-motion rule at all. Anyone whose system asks for reduced motion now gets the content immediately at full opacity, with transitions collapsed. The !important is unavoidable: the animation library writes opacity and transform as inline styles. Found while chasing what looked like a rendering bug — cards measured at 0.086 opacity — which turned out to be requestAnimationFrame throttled to zero frames in a hidden tab, not a defect. The real page renders correctly. But the same frozen-animation state is what a reduced-motion user would have been left with, so the check was worth making. --------- Co-authored-by: Dmitrii Vasilev <admin@t27.dev> Co-authored-by: Claude Opus 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.
Every card on these pages starts at
opacity: 0and is revealed by a scroll-triggered animation. That is fine while the animation runs, and leaves the page blank when it does not — and the site had noprefers-reduced-motionrule at all.Anyone whose system asks for reduced motion now gets the content immediately at full opacity, transitions collapsed. The
!importantis unavoidable: the animation library writesopacityandtransformas inline styles.Found while chasing what looked like a rendering bug — cards measuring at 0.086 opacity — which turned out to be
requestAnimationFramethrottled to zero frames in a hidden tab, not a defect. The real page renders correctly. But that frozen-animation state is exactly what a reduced-motion user would have been left with, so the check was worth making.🤖 Generated with Claude Code