One typeface,
four colours,
no round corners
Everything below is generated from app/globals.css and components/ui.tsx. If a page needs a shape that is not here, the shape gets added here first.
Colour
Four hues and a greyscale. The accent is the single loud colour and appears at most once per screen. Urgent is semantic and never decorative — if it is red, someone has to move.
Type
Figtree, and only Figtree. The handoff design loads three other families and uses none of them; the single-face discipline is a large part of why it reads as signage rather than as software. Figures align with tabular-nums, not a second face.
Used 30 times in the source design. Every eyebrow in the product is this and nothing else.
Icons
Lucide, at 2px stroke so icons sit in the same weight as every rule and border. Rationed hard: this is the whole allowlist, and no icon appears without a text label beside it. The arrow is type, not an icon — a Figtree → belongs to the display grammar in a way a drawn glyph does not.
Structure
Every divider, border and box is a 2px ink rule. Hairlines at 1px are permitted only inside dense tables.
Border radius is forced to 0 globally. Blocks are blocks.
A single 16px offset drop, tinted to the surface it falls from. No soft ambient shadows, no layered elevation scale.
Components
The only animation in the system. It stops under prefers-reduced-motion.
What “now” means
The event type is chosen at setup and reshapes the board. This is the only real branch in the attendee UI.
One thing at a time in rooms. Now is the current session.
Several at once. Now is a list, and closures stay visible.
One anchor moment. Operational notices outrank the schedule.
Voice
“Barn stage closed”, not “Barn stage status update”. British spelling. No exclamation marks anywhere.
Numbers shown to an organiser must be verifiable. “168 inboxes” is a promise; “381 phones” was a guess, and it is why push was cut.