Design system
Your UI is not my UI — React Advanced 2026. Every sample on this page is styled by the
same rules as the slides (css/talk.css), inside a card at slide scale: 1em = the
card's 1.5em body size. The specs beside each sample are read live from the browser, so resize
below 700px to see the mobile values.
Typefaces
Two families, both openly licensed and served from fonts/: a sans for titles, body and
meta, and a serif for headlines and quotes. The weights listed are the ones
css/talk.css declares.
Styles
Every type style in the deck, each beside the rule that sets it and its size, weight and line height as the browser computes them here.
.act-title, [data-scene='your-ui-is-not-my-ui-title'] h2
research
main h2
The industry is already doing this
main p, main ul
Rose tried to build a bespoke Steam library manager. We replaced configuration toil with developer toil.
- Setups are very personalized
- Adaptations conflict with each other
- Configuration costs energy
main blockquote
“[…] you have to put your name to things. If it went ahead, did a bunch of tasks, emailed people, and I couldn't really take it back — that feels … uncomfortable.”
main small, .deck-chrome
We replaced configuration toil with developer toil.
.sub-meta
React Advanced
.video-play
.drawer-footer a
Notes
The speaker notes, read mid-talk in the drawer. Default is the drawer's size; large, for reading
from further away, is .notes-large on the notes.
#notes-drawer
.notes-large
Melody struggled to see and uses a collection of tools to navigate her life relatively independently. Uses a screen reader at a very fast speed.
- Magnifier on every device
- Speech output at 3× speed
Act colours
One named colour per act (--act-*), used for all of that act's text, rules and diagram
strokes, in deck order. Each should pass WCAG AAA (≥ 7:1) on white; any that doesn't is flagged.
Greys
The neutrals beside the act colours (--grey-*), lightest first: light ones for rules
(this page's dividers, the index card, the footer, the cards beside the open drawer), dark ones for
secondary text, which should pass AAA on white.
Icons
The deck's icon set: the sprite at the top of index.html, used with
<use href="#icon-…"> and styled by .icon, one 2.5 stroke on a 24px
grid. Lucide's x, menu, pin, pin-off and play (filled), and the deck's own two arrows, long in the shaft and short in the head. Turned 45°, the x is the notes toggle's +.
Illustrations
Every persona illustration in the deck, each in its act's colour.
scripts/normalize-personas.mjs builds them from the traced originals in
media/personas/originals/: every colour snaps to the ramp below (--ramp-*),
and each drawing is cropped to a square with the same padding and its floor on the bottom edge, so
the figures share a scale.
Slide templates
The three layouts in the talk, rendered from the live slides in index.html at 1280×800.
Left: the labelled areas, measured from the example. Right: the slide itself, with its
chrome. Stepped reveals are shown fully revealed; a dashed line marks the fold on slides that
scroll.