Foundations
Colour, type, space and themes. Every component is assembled from these, and nothing in a component may reach past them.
Colour
35 colours, two themes, 88 contrast checks that run at build time.
Type
17 named roles. Serif to read, sans to operate, tabular sans for figures.
Space and measure
An 11-step space scale and three line lengths.
Shape
Radius, rule weights and the three permitted shadows.
Charts
Series palette, sequential and diverging ramps, and how far the palette honestly goes.
Forms
Field colours and metrics. The largest unowned surface in the frontend.
Layering, breakpoints, icons
The three scales that were never written down.
Themes
How light and dark are built, and why the app drives it from a class.
The one rule
A component reads tokens. It does not declare a colour, a font size, a radius or a spacing value of its own. If something is missing, the foundation is missing a token, which is a conversation rather than a one-off override.
This is enforced twice: a test fails on a token that no theme defines, and a prebuild check in the frontend fails on any --p234- variable this package does not declare. Five such variables were live in the frontend before this system existed.