Skip to content

Commit 3abe919

Browse files
angusbezzinaclaude
andcommitted
design(web): the loop moves into the hero; §02 keeps one still beside its rules
The demo loop takes the hero's right-hand track, copy left, loop right. §02 drops the pair of stills and keeps the click capture on the narrow track beside the three rules, which is the width at which the two columns end together. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 68915b9 commit 3abe919

4 files changed

Lines changed: 46 additions & 30 deletions

File tree

web/src/captures.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ const HASH = "b5f58cf";
6060
* file, which `b5f58cf` renamed, so it was built from the commit before. */
6161
const LOOP_HASH = "4db8fc6";
6262

63-
/** §02 lead — the one moving figure on the page. */
63+
/** The hero, right-hand track — the one moving figure on the page. */
6464
export const annotateLoop: Capture = {
6565
status: "ready",
6666
kind: "loop",
@@ -85,7 +85,7 @@ export const annotateClick: Capture = {
8585
buildHash: HASH,
8686
};
8787

88-
/** §02 support still — a frame, and what it bound to. */
88+
/** Not placed. A frame, and what it bound to; kept for a future slot. */
8989
export const annotateFrame: Capture = {
9090
status: "ready",
9191
kind: "still",

web/src/sections/Annotate.tsx

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ import { Section } from "../components/Section";
22
import { Figure } from "../components/Figure";
33
import { TermList } from "../components/TermList";
44
import { annotate } from "../copy";
5-
import { annotateClick, annotateFrame, annotateLoop } from "../captures";
5+
import { annotateClick } from "../captures";
66

77
/**
8-
* §02 — the targeting rules and the captures that show them.
9-
*
10-
* The loop takes the wide track with the three rules beside it, so the first
11-
* moving figure on the page does not run the full measure and the rules are
12-
* read while it plays. The two stills, a click and a frame, sit as a pair
13-
* under it: same height, same frame, one rule each.
8+
* §02 — the targeting rules, with the click capture beside them. The loop
9+
* lives in the hero; one still here is enough to show the chip and the
10+
* composer that the rules produce. The still takes the narrow track: it is
11+
* nearly square, and on the wide one it outran the three rules by half its
12+
* own height.
1413
*/
1514
export function Annotate() {
1615
return (
@@ -21,15 +20,9 @@ export function Annotate() {
2120
lead={annotate.lead}
2221
modifier="section--annotate"
2322
>
24-
<div className="stack stack--xl">
25-
<div className="section__body section__body--7-5">
26-
<Figure capture={annotateLoop} />
27-
<TermList terms={annotate.points} />
28-
</div>
29-
<div className="section__body section__body--6-6">
30-
<Figure capture={annotateClick} />
31-
<Figure capture={annotateFrame} />
32-
</div>
23+
<div className="section__body section__body--5-7">
24+
<Figure capture={annotateClick} />
25+
<TermList terms={annotate.points} />
3326
</div>
3427
</Section>
3528
);

web/src/sections/Hero.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,21 @@ import { Icon } from "../components/Icon";
33
import { hero } from "../copy";
44
import { site } from "../config";
55
import { track } from "../analytics";
6+
import { Figure } from "../components/Figure";
7+
import { annotateLoop } from "../captures";
68

79
/**
8-
* Typography only — no mockup in the fold (epic §6.1). The page's one
9-
* orchestrated entrance lives here: three elements, staggered by DOM index,
10-
* settling inside ~200 ms. Nothing below the fold animates on scroll except
11-
* the section rules.
10+
* The display, the standfirst and the two CTAs on the left; the demo loop on
11+
* the right, a real capture in a bare frame (gate 47 still holds — nothing is
12+
* drawn). The page's one orchestrated entrance lives here: four elements,
13+
* staggered by DOM index, settling inside ~200 ms. Nothing below the fold
14+
* animates on scroll except the section rules.
1215
*/
1316
export function Hero() {
1417
return (
1518
<section className="hero" aria-labelledby="hero-display">
16-
<div className="u-shell">
19+
<div className="u-shell hero__grid">
20+
<div className="hero__copy">
1721
<h1 className="hero__display reveal" id="hero-display" style={{ "--i": 0 } as React.CSSProperties}>
1822
{hero.display}
1923
</h1>
@@ -44,6 +48,10 @@ export function Hero() {
4448
<Icon as={ArrowDown} />
4549
</a>
4650
</div>
51+
</div>
52+
<div className="hero__figure reveal" style={{ "--i": 3 } as React.CSSProperties}>
53+
<Figure capture={annotateLoop} />
54+
</div>
4755
</div>
4856
</section>
4957
);

web/src/styles/base.css

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,28 @@ pre {
650650
gap: var(--space-lg);
651651
}
652652

653+
/* Copy left, the loop right, from the span breakpoint up. Centred on the
654+
* cross axis: the copy is the taller of the two at most widths and the loop
655+
* should sit against its middle, not hang off its first line. Below the
656+
* breakpoint the loop follows the CTAs. */
657+
.hero__grid {
658+
display: grid;
659+
grid-template-columns: minmax(0, 1fr);
660+
gap: var(--space-xl);
661+
align-items: center;
662+
}
663+
664+
@media (min-width: 60rem) {
665+
.hero__grid {
666+
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
667+
gap: var(--space-2xl);
668+
}
669+
}
670+
671+
.hero__figure {
672+
min-width: 0;
673+
}
674+
653675
/* ══ Section shell ══════════════════════════════════════════════════════ */
654676

655677
.section {
@@ -722,13 +744,6 @@ pre {
722744
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
723745
}
724746

725-
/* Two captures of the same shape, read as a pair. Equal on purpose: the
726-
* asymmetric spans are for prose beside a figure, and here both tracks hold
727-
* a figure. */
728-
.section__body--6-6 {
729-
grid-template-columns: repeat(2, minmax(0, 1fr));
730-
}
731-
732747
/* §04 carries the page's shortest body — one command beside two tools, 125 px
733748
* of it. At the standard close (4rem) that body was followed by §05's heavier
734749
* open (6rem), so the WIDEST gap on the page sat under the THINNEST section

0 commit comments

Comments
 (0)