DESIGN.md@examples/shapes-acme-tasks · git:20260928.0c6cae9 · 2026-09-28 · sha256 d77085b89cf43408

DESIGN.md@examples/shapes-acme-tasks git:20260928.0c6cae9A

Immutable. This exact content never changes and is served at /api/v1/blob/d77085b89cf43408.

# Design: shapes-acme-tasks

The spec `src/film.html` was built from. Sizes and boxes are the values `render.mjs layout` measured; times are on the 120 BPM grid.

## Canvas and grid

- 1080 x 1080, 60 fps, 10.000 s = 600 frames, hold loop.
- Live area 104 to 976 on both axes (margin 104). Every text layer and every shape at rest is inside it.
- Baseline unit 8 px: every text baseline is a multiple of 8.
- Tempo 120 BPM: beat 0.5 s, 16th 0.125 s, bar 2 s. Every entrance starts on a 16th.

## Palette

| Role | Hex | Used for | Contrast on its backdrop |
|---|---|---|---|
| bg | #111018 | background | |
| paper | #F6F4EE | type on bg, strokes, rows | 17.9:1 on bg |
| ink | #111018 | type on the sun scene | 11.7:1 on sun |
| red | #FF4F2E | the tick, the mark, the bars | |
| sun | #FFC21A | list background, sparks, the domain | 11.7:1 on bg |
| teal | #2EC4B6 | the week ring | |

Shapes overlap only when opaque, so no two inks blend into a third.

## Type roles

| Role | Face | Size rule | Tracking | Use |
|---|---|---|---|---|
| display | Unbounded 700 | cap height: 128 (DONE.), 96 (ONE LIST.), 88 (EVERY DAY.), 112 (ACME) | +10 to +20 | beats, wordmark |
| mono | IBM Plex Mono 500 | 40 px (the domain), 26 px (small print) | +40, +20 | typed |

## Beat sheet

| # | Scene | Window (s) | In | Picture | Words | Accent (frame) |
|---|---|---|---|---|---|---|
| 0 | lockup, at rest | frame 0; shrinks away at 0.00 | | the mark, ACME, EXAMPLE.COM | ACME | |
| 1 | hook | 0.00 to 2.50 | none | checkbox, tick, sparks | DONE. | tick lands, 1.089 s (65) |
| 2 | list | 2.50 to 5.00 | circle wipe from the tick, into sun | three task rows | ONE LIST. | last dot lands, 4.104 s (246) |
| 3 | week | 5.00 to 8.00 | five red bars, up, 32nds | a ring round seven dots | EVERY DAY. | last day lands, 6.354 s (381) |
| 4 | lockup | 7.50 to 10.00 | none: the ring shrinks away as the mark pops | the mark, ACME, EXAMPLE.COM | ACME | the mark's tick lands, 8.214 s (493) |

## Per beat

### Hook, 0.00 to 2.50

| Layer | Shape and size | Position | Paint | Enter | Keys |
|---|---|---|---|---|---|
| BOX | rect 296 x 296, radius 64 | 540, 432 | stroke paper 28 | 0.125, trim 0 to 1, TRACE | |
| CHECK | line through (-84, 0), (-26, 58), (92, -70) | 540, 432 | stroke red 44 | 0.75, trim 0 to 1, TRACE | |
| SPARK | line 226 to 300 px out, 8 radial copies | 540, 432 | stroke sun 16 | | 1.0: trim to [0, 1] SNAP; 1.25: to [1, 1] GLIDE |
| DONE | text, cap 128, centred, baseline 872 | box 207 to 873 | paper | 0.875, from 240 px below, LAND, 32nds; clipped at y 976 | |

- Camera: punch to 1.06 at 2.00; reset at the circle wipe.

### List, 2.50 to 5.00 (background sun)

| Layer | Shape and size | Position | Paint | Enter |
|---|---|---|---|---|
| LIST | text, cap 96, baseline 256 | box 162 to 918 | ink | 2.625, from 48 below, blur 8, LAND, 32nds |
| ROW | rect 760 x 128, radius 64; 3 copies 168 apart | 540, 424 | paper | 2.75, from 1000 px right, LAND, eighths |
| RING, BAR | circle r 30 stroke ink 10; rect 380 x 24 | 250 / 526, 424 | ink | with the rows |
| DOT | circle r 30 | 250, 424 | red | 3.5, from scale 0, POP, eighths |

### Week, 5.00 to 8.00

| Layer | Shape and size | Position | Paint | Enter |
|---|---|---|---|---|
| TRACK | circle r 212, stroke 20, opacity 0.16 | 540, 448 | paper | on screen |
| FILLRING | circle r 212, stroke 44 | 540, 448 | teal | 5.25, trim 0 to 1, FILL |
| DAYS | circle r 20, 7 radial copies at r 212 | 540, 448 | sun | 5.5, from scale 0, POP, 16ths |
| DAILY | text, cap 88, baseline 880 | box 117 to 963 | paper | 5.75, from 48 below, blur 8, LAND, 32nds |

- Exit at 7.50: every layer to scale 0 on EXIT, 32nds by layer; DAILY drops 360 px.

### Lockup, 7.50 to 10.00, and frame 0

| Layer | Shape and size | Position | Paint | Enter |
|---|---|---|---|---|
| MARK | circle r 104 | 540, 392 | red | 7.625, from scale 0, POP |
| TICK | line through (-46, 4), (-12, 38), (52, -34) | 540, 392 | stroke paper 26 | 7.875, trim 0 to 1, TRACE |
| ACME | text, cap 112, track +20, baseline 664 | box 249 to 831 | paper | 8.0, from 64 below, blur 10, LAND, 32nds |
| URL | text, mono 40, baseline 752 | box 403 to 678 | sun | typed from 8.375 |
| DEMO | text, mono 26, baseline 872 | box 316 to 764 | paper | typed from 8.75 |

## Transitions

| At (s) | From | To | Kind | Notes |
|---|---|---|---|---|
| 0.00 | lockup | hook | wrap exit | the lockup shrinks away (EXIT, 32nds by layer) as the checkbox starts drawing |
| 2.50 | hook | list | circle wipe from the tick, into sun | about 0.3 s to cover the frame |
| 5.00 | list | week | five red bars, up | they cover the frame by 5.00, the scenes swap under them, then they clear |
| 7.50 | week | lockup | none | the ring shrinks away as the mark pops in the same place |

## Loop seam

- Frame 0 is the lockup at rest. It shrinks away at 0.00 and is rebuilt from 7.625.
- The last change is the small print's cursor at about 9.27 s; loopcheck finds the last 44 frames identical to frame 0.
- The camera ends in world 0 at z = 1, where it starts.

## Checks

- Stills critique: 32 checks, all pass. Palette gate: 20 accent frames, no mixed ink.
- Loopcheck: every maximum channel difference 0.
- Verify: H.264 High, yuv420p, 1080 x 1080, 60/1, 600 frames, 10.000 s, BT.709 tags, faststart; the background decodes to (16, 16, 23) for #111018.