Colophon
Taste, enforced by machinery.
This page and the test suite read the same file. The palette below is imported from the module the contract tests import; if a value on this page ever disagrees with a value in CI, one of us is lying and the build is red.
The token contract
| Token | Night | Day |
|---|---|---|
| --floor | #0A141C | #FBF6EC |
| --floor-raised | #0F1D28 | #F3EADA |
| --chalk | #DCE8EE | #14303F |
| --chalk-soft | #93A9B6 | #4A6272 |
| --chalk-faint | #71889A | #576B7E |
| --batten | #2E4150 | #C3B896 |
| --magenta | #FF5C9E | #C4106B |
| --buff | #C9BB8E | #8A7A45 |
One recorded deviation
Day --chalk-faint is #576B7E, not the family's #5C7080. The family value measures 4.31 against the deep tracing ground — below the 4.5 the contrast suite demands — because the portfolio never renders that pair and the loft does. The contract caught it before the first pixel shipped.
The gates
- Every token's name and exact hex, asserted in both modes — a drive-by tweak is a red build.
- Every text token measured against both grounds, both modes, at AA for small text. Buff is the one large-mark exception, held at 3.0 and used only for ≥18px shipped marks.
- Behavior and axe checks on every study; reduced-motion branches are asserted, not assumed.
- Typecheck, lint, tests, and build on every push and pull request.
Type, stack, budgets
IBM Plex Mono carries the instrument voice; Public Sans carries prose; Fraunces italic appears once per page, as a study's thesis. All three are self-hosted latin subsets. Next.js App Router, React 19, Tailwind v4 with the family tokens mapped through @theme inline, Motion for the curves. Interaction budgets print in every study's footer; the floor targets a perfect Lighthouse pass and each study holds ninety-five or better.