Hero animation sandbox

Dev-only sandbox at /dev/hero-sandbox (not linked, not indexed) for iterating on the homepage hero’s right-hand animation. Locks the hero into a chosen aspect ratio with no top nav, so it can be screen-captured cleanly.

Run it

cd artifacts/marketing && pnpm astro dev

Open http://127.0.0.1:4321/dev/hero-sandbox.

Page layout

Five switchable layouts

All five render into the same right-column slot. Switching layouts (or hitting Replay) re-mounts immediately and skips the 5-second initial delay. Only the first page load has the 5s pause.

LayoutBehaviour
Worklog (default)Compact feed. Items drop in at top one-by-one using FLIP (existing items slide down smoothly). Once full, rotates: oldest fades off, new pops in on top. 1s entrance, 1s stagger, 1s rotation tick.
Deck3 rich approval-style cards stacked with depth/scale offset. Top card flies off, others step forward, new joins at back. Header strip, status pill, body + image grid, platform pills, optional floating callout. 1.2s build stagger, 4.5s rotation tick.
CarouselOne big rich card at a time. Current slides off left, next slides in from right. 3s interval.
Grid2x2 of rich cards. Drop in to build, then one card’s content crossfades to a new agent state every couple of ticks.
MorphSingle rich card. Eyebrow / title / body morph in place to the next agent state, each line staggered ~80ms so it reads as live writing. 3s interval.

Timing constants (top of <script> block)

const INITIAL_DELAY_MS = 5000;  // page-load pause before first animation
const POP_IN_MS = 1000;          // entrance duration (card + items)
const STAGGER_MS = 1000;         // gap between items in worklog fill
const TICK_MS = 1000;            // worklog rotation cadence
const DROP_DISTANCE = 14;        // px above slot 0 items enter from
const EXIT_MS = 320;             // worklog oldest-item fade-out

The deck has its own DECK_STAGGER_MS = 1200 and DECK_TICK_MS = 4500 since rich cards need reading time. Other layouts derive from the shared constants (e.g. carousel uses TICK_MS * 3).

Datasets (frontmatter)

All three datasets pass through a single JSON island ([data-sandbox-data]).

Architecture

Known follow-ups

Brand voice when editing copy

Per the project CLAUDE.md (Brand Positioning section): we do the work, not “help you” do it. No em dashes (use commas, periods, colons, semicolons, or parentheses). British / Australian spelling (optimise, organisation). Action verbs (writes, publishes, launches, ships). The owner is the protagonist; In-House does the labour.