The only values in the system.
#, px, or ms in a component — stop and find the token.Light + dark semantics.
Never use a raw hex in a component — always a semantic name. Light and dark values resolve from the same name via the asset catalog / CSS variables.
2 / 4 / 8 ramp.
Eleven stops from 0 to 96px. Mac convention uses 8pt grid — the ramp stays compatible. Always refer by step number (space.5), not the literal px.
Seven corners.
Note: SwiftUI .continuous corners match macOS squircles. Always prefer RoundedRectangle(…, style: .continuous) over the default .cornerRadius(…).
Five steps.
Four curves.
Duration is the first decision; curve is the second. Default to base. Use spring only for moments that should feel physical — drawer open, approval accepted.
Size ramp.
One canonical token file.
Source of truth is src/lib/tokens.ts on this repo. The CSS variables are generated into globals.css. For SwiftUI, the asset catalog is the source — see each section above for the exact key names.