Skip to content

Commit 68915b9

Browse files
angusbezzinaclaude
andcommitted
design(web): captures sit beside the prose they show; captions say what to look at
§02: the loop takes the wide track with the three rules beside it instead of running full measure, and the click and frame stills read as an equal pair under it. §03: the note block and sinks share the wide track with the pins still alongside, so neither column outruns the other. The build hash stays in the manifest and leaves the captions; each caption now names the rule the capture demonstrates. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 7a72868 commit 68915b9

5 files changed

Lines changed: 35 additions & 21 deletions

File tree

web/src/captures.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
type Base = {
1919
/** Printed under the frame. Says what the reader is looking at. */
2020
caption: string;
21-
/** Short commit hash of the build the capture was taken from. */
21+
/** Short commit hash of the build the capture was taken from. Kept for
22+
* re-shoots; the page does not print it. */
2223
buildHash?: string;
2324
};
2425

@@ -68,7 +69,7 @@ export const annotateLoop: Capture = {
6869
alt: "AnnotKitDemo, a dark macOS settings window. Annotate is pressed, a control is clicked, a note is typed into the composer and sent; a numbered pin lands on the control.",
6970
width: 1274,
7071
height: 820,
71-
caption: "AnnotKitDemo: press Annotate, click a control, type a note, send. 22 seconds, muted.",
72+
caption: "The whole loop in the demo app: press Annotate, click the name field, type, send. The pin stays on the field.",
7273
buildHash: LOOP_HASH,
7374
};
7475

@@ -80,7 +81,7 @@ export const annotateClick: Capture = {
8081
alt: "The demo window after a click on the avatar. A chip above it reads Settings.Profile.Avatar and the composer below holds the note “Change the background color to green”.",
8182
width: 1428,
8283
height: 1378,
83-
caption: "A click on the avatar. The chip is the resolved selector, `Settings.Profile.Avatar`; the composer opens under it.",
84+
caption: "Click. The avatar is the deepest actionable control under the pointer, so the chip reads `Settings.Profile.Avatar` and the composer opens beneath it.",
8485
buildHash: HASH,
8586
};
8687

@@ -92,7 +93,7 @@ export const annotateFrame: Capture = {
9293
alt: "The demo window with a frame drawn around the heading and the Profile card. The composer title reads Frame → Settings… and waits for a note.",
9394
width: 1498,
9495
height: 1286,
95-
caption: "A frame drawn around the heading and the Profile card. The largest element it surrounds wins, not the labels inside.",
96+
caption: "Frame. The box takes in the heading and the whole Profile card, so the note binds to the card and not to a field inside it.",
9697
buildHash: HASH,
9798
};
9899

@@ -104,6 +105,6 @@ export const notesPins: Capture = {
104105
alt: "The demo window with five numbered blue pins on its controls and the toolbar’s copy button under the pointer, captioned Copy notes (Markdown).",
105106
width: 1570,
106107
height: 1350,
107-
caption: "Five notes pinned. Save writes them all to one `ANNOTKIT_NOTES.md`; the toolbar copies the same markdown.",
108+
caption: "Five notes, five pins. Click a pin to edit its note; Save writes all five to `ANNOTKIT_NOTES.md`, and the copy button puts the same markdown on the clipboard.",
108109
buildHash: HASH,
109110
};

web/src/components/Figure.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,9 @@ export function Figure({ capture }: { capture: Capture }) {
5353
/>
5454
)}
5555
</div>
56-
<figcaption>
57-
{withCode(capture.caption)}
58-
{capture.buildHash ? ` · captured at ${capture.buildHash}` : ""}
59-
</figcaption>
56+
{/* The build hash stays in the manifest, for whoever re-shoots; it is
57+
* not printed. A caption is for the reader, and says what to look at. */}
58+
<figcaption>{withCode(capture.caption)}</figcaption>
6059
</figure>
6160
);
6261
}

web/src/sections/AgentNotes.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ export function AgentNotes() {
1717
<div className="section__body section__body--7-5">
1818
<div className="stack stack--lg">
1919
<CodeBlock {...agentNotes.sample} />
20-
<Figure capture={notesPins} />
20+
<TermList terms={agentNotes.sinks} />
2121
</div>
22-
<TermList terms={agentNotes.sinks} />
22+
<Figure capture={notesPins} />
2323
</div>
2424
</Section>
2525
);

web/src/sections/Annotate.tsx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ import { annotate } from "../copy";
55
import { annotateClick, annotateFrame, annotateLoop } from "../captures";
66

77
/**
8-
* §02 — the targeting rules, led by the one moving figure on the page.
9-
* The loop sits directly under the hero fold; the two stills, a click and a
10-
* frame, stand beside the rules they illustrate.
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.
1114
*/
1215
export function Annotate() {
1316
return (
@@ -18,15 +21,15 @@ export function Annotate() {
1821
lead={annotate.lead}
1922
modifier="section--annotate"
2023
>
21-
<div className="stack stack--lg">
22-
<Figure capture={annotateLoop} />
23-
<div className="section__body section__body--5-7">
24-
<div className="stack stack--lg">
25-
<Figure capture={annotateClick} />
26-
<Figure capture={annotateFrame} />
27-
</div>
24+
<div className="stack stack--xl">
25+
<div className="section__body section__body--7-5">
26+
<Figure capture={annotateLoop} />
2827
<TermList terms={annotate.points} />
2928
</div>
29+
<div className="section__body section__body--6-6">
30+
<Figure capture={annotateClick} />
31+
<Figure capture={annotateFrame} />
32+
</div>
3033
</div>
3134
</Section>
3235
);

web/src/styles/base.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,13 @@ pre {
722722
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
723723
}
724724

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+
725732
/* §04 carries the page's shortest body — one command beside two tools, 125 px
726733
* of it. At the standard close (4rem) that body was followed by §05's heavier
727734
* open (6rem), so the WIDEST gap on the page sat under the THINNEST section
@@ -764,6 +771,10 @@ pre {
764771
gap: var(--space-lg);
765772
}
766773

774+
.stack--xl {
775+
gap: var(--space-xl);
776+
}
777+
767778
/* ══ CodeBlock — typographic frame, no re-drawn window chrome (gate 47) ══ */
768779

769780
.code {

0 commit comments

Comments
 (0)