System

System

One system.
Five sheets:

Structure

Twelve columns on a 4px grid, one left axis. The structure stays still so the one element meant to move is the one you notice.

Columns, margin, gutter1440

12 columns · margin 48 · gutter 48Press G on the site to expose it

Spacing scale09

Every block's top and bottom padding rounds to the 4px grid, live. Never stack a margin onto the section beat.

Placement05

ElementSits onBelow 1280
Brand mark, kicker, title, body, rules, rowsOne left axisOne left axis
Index caption (column 2)Column 9Column 8
Brief valuesColumn 3Column 4
Body copy endsColumn 8Column 10
Nav fixed, no flow70px, content inset70px

Language

Every mark has one meaning and one home. Values stay values; controls own the arrows; labels carry affordance.

Marks09

MarkJob on the siteWhere it lives
↓ ↑ ↕Sort direction (Title / Author / Year) and movement (Top ↑)Control rows, never in data
→ ↗Destination: a page on this site (→) or one that leaves it (↗)After a link's words
—No value applies, or it is held elsewhere: "not one number." Never a year formIn a data column
–Span: one piece of work across years. Closed is a multi-year case study or a series; open is ongoingIn the year column
*Undated: no year appliesIn the year column
n / NPosition in a series, shown once a series opens (3 / 3)Caption of a book row
/Hierarchy: section above page (Tools / Script Rain)Breadcrumbs
·Separator: parts of one line (428 words · 2 min read)Eyebrows and captions
01Count: how many items a group holdsGroup labels

Year column04

Start years share one vertical line; tails hang into a reserved three-cell slot. Click a series to open it, newest first.

Tekkonkinkreet
1993
2012–19
Keep Going3 / 3
2019
Show Your Work!2 / 3
2014
Steal Like an Artist1 / 3
2012
Playground
2019–
Bio
*

The en dash standard05

  1. En dash for every range, never a hyphen: 2012–19. The hyphen joins words only.
  2. No spaces around it: 2012–19, not 2012 – 19.
  3. Second year shortened within a century (2012–19); across one, in full (1999–2004).
  4. An open range ends on the dash: 2019–. No "present".
  5. Never with from or between: from 2012 to 2019.

Rejected06

MarkTried asWhy it failed
Series of NTag after a series titleToo long
×NShort series tagReads as multiplication
N2Count codeReads as a product code
SeriesPlain tagThe range already says it
03Count in the year columnA count posing as a year
↓"Open" in a data cellArrows are controls

Color

One hover system, one motion color, two grounds measured separately. Click any swatch to copy its value.

Medusa's names03

Ink roles on dark04

Grounds02

Dark ramp05

Step down the ramp rather than inventing an alpha. Never write a hex in a component; use the token.

Type

Three faces, all at 400. Emphasis is length and tone, never weight.

Faces03

Display
Make something wonderful
65 Neue Haas Grotesk Display Pro · titles, values, names
Body
The structure stays still, so the one element meant to move is the one you notice.
55 Neue Haas Grotesk Display Pro · prose
Instrument
Writings / Goban · 428 words · 2 min read
Space Mono · labels, meta, captions, data · always uppercase

Registers of the instrument04

RegisterSize · trackingWhere
Instrument10–11px · .14emCaptions, plate labels, piano keys
Index12px · .02em / 13px · .04emGroup labels; year and meta
Brief14px · .02emLabel / value lists
Reference16px · .08emThe 404 index, fields

The measure narrows as the type grows04

Fraktur01

𝔅IO · W𝔒RK · JOURNAL · 𝔖HELF · TOOL𝔖

One fraktur letter per nav word. Search-facing labels never carry fraktur: aria-labels, titles, group labels.

Motion

Motion encodes role, not variety. If two blocks move differently, the difference means something.

The six states06

Hard rules06

  1. Above the fold is always static.
  2. Never two consecutive slides in the same direction.
  3. One reveal per block; text always wipes, never slides.
  4. Reduced motion disables everything.
  5. Ground is never conditional on JavaScript.
  6. Never clip a data plate; opacity fails to visible, a clip fails to nothing.