Chapter 03
Colour
Every colour has one job, and the job is the rule. There is no palette to pick from. Written from 01_BRAND-LAYER/colour.md v3.1.1 and two-grounds.md v3. Sixty two measured rules hold in 05_TOOLS/measure-palette.mjs.
Two grounds, and there is no dark mode
Paper is the sheet the work is read on. The flood is the same ink at full coverage: a place on the page where the ink has covered everything, and the one place the chrome mark is at home. Which one a block sits on follows from what the block does, never from a preference and never from a theme.
A theme is a preference the reader sets. A ground is a decision the document makes. A headline set in paper on the flood is an object; the same headline on paper is a heading in a report. Offering both would mean neither is designed. There is exactly one dark ground token and exactly one reading ground token, and no house stylesheet contains a colour scheme query or a theme attribute.
The flood is counted. The paper is not. At most two flood entries per surface, at most one in an audit, and the audit's one closes the document.
One pigment, and the ink ramp on each ground
The flood, the primary ink and the action are the same value. Paper, the inverse ink, the action ink and two of the signal inks are the same value. One near black, one near white.
On paper
On the flood
The lines
Three signals, three named jobs
A signal is a field: a full bleed band or a bounded field carrying display type in the signal's own ink. It is never type, never a control, never a border, never a chart colour, never a grade. Each field carries its own ink token, because the primary ink on vermilion measures 2.85 to 1 and is a defect. The four are named on the swatches below; heat's is a near black of its own and is not a value anyone would guess. And before you look for one: there is no warning colour, no error colour, no success colour. A surface that has to say something went wrong says so in words. The reason is under no status token exists.
The budget, as numbers
- Signal fields per viewport: 1. A viewport shows vermilion or heat and never both. Three signals on one viewport: never.
- A field's height: 25 percent of the viewport or less. The audit band is a module, not a field, and carries its own cap of 50 percent, measured at 1280 by 900 and 390 by 844.
- Acid per document: 1 or fewer.
- A signal adjacent to a flood: zero. The two measure 2.85 to 1 against each other and the seam reads as a fault.
- A signal carrying a mark: zero. Recognition lives on the field, not on the mark.
- A signal as type, control, rule, border, chart palette or grade: zero. The one exception is blue as link text on paper.
- Signals on the audit surface: zero. In the audit build the tokens do not exist, which is stronger than a rule telling people not to.
The action is the ink
One per viewport. An ink block, squared, uppercase label in paper, a two pixel border, inverting instantly when the pointer enters it. There is no chromatic action and no chrome action anywhere in the system. A vermilion button fails two rules at once.
Chrome is an ingredient, never a surface
The ramp was measured, not chosen: read off the wordmark itself over 780,205 opaque pixels. A chrome fill with ink text on it was ruled a catastrophe on 2026-08-22, and the two tokens that made it possible were deleted.
Chrome appears in exactly three places
- The mark. Light version at home on the flood, on paper only with air. Dark version for small sizes and inline use on paper. See Marks.
- The three explainer objects, the gear, the engine and the anvil, as cutouts lying on the paper against the type. See Imagery.
- The one pixel hairline frame, a ten stop gradient at 96 degrees applied as a border image on a transparent border. Paper only; on the flood a frame takes the flood's own hairline. This page head is framed with it.
Never a fill, a band, a slab, a button, a background, or a letterform other than the logo. In print, chrome is nothing, and the substitution is the mark's own mean.
The person pair, audit only
Two values that code which of two people a figure belongs to, and nothing else. Light grounds only, because on the flood they fall under the accessibility floor.
Colour never grades a person
This is the rule the whole palette is arranged around, and it is the reason there is nothing to argue about.
- No status token exists There is no success, warning, error, score or grade token in the file. A surface that has to say something went wrong says so in words. A colour a builder cannot reach is a rule that cannot be broken by accident.
- No chromatic value beside a finding On the audit surface the count is zero, and the tokens are absent from the audit build so it stays zero. A warm accent next to a finding reads as a verdict on the person reading it. At least one client's own diagnostic already trains them to read colour as a grade.
- The two audit colours differ by hue only Never by weight, never by lightness. Weight is the channel a reader mistakes for importance.
- Heat is a band, not a state An orange that means act now beside a finding is exactly the grade this rule bans. Heat never appears on the audit document. One job per colour, stated as a ban, is the only form of the rule that survives contact with a deadline.
What may sit on what
The quick answer to the question a builder actually has. Every ratio below is measured, and the floor beside it is the gate that fails first if a value moves.
| Ground | What may sit on it | Measured | What may not |
|---|---|---|---|
| Paper | Primary ink, either secondary, faint ink, the blue link, the dark mark, an explainer object, the chrome frame, a signal field, the ink action | 16.50, 7.90, 7.01, 4.98 | A tint of paper, a fourth light ground, the light mark outside a hero header |
| Paper raised | Primary ink, either secondary, faint ink, the blue link. As an element ground only | 14.96, 7.16, 6.35, 4.51 | A section, itself stacked, a mark |
| Trough | A bar, the axis line. Nothing else | 13.77 for ink | Words. The faint ink measures 4.16 there, under the floor |
| Flood | Inverse ink, inverse secondary, inverse faint, the flood hairline, the light mark at 240px or wider, the inverted action | 16.50, 7.04, 5.01 | A signal field or a shared edge with one, a chart, a table, the person pair, the chrome frame, a second chrome object |
| Vermilion | Its own ink, at display sizes only | 5.79 | A mark, a control, primary ink, an image, an adjacent flood |
| Blue | Its own ink as a field. As type it is the link on paper | 7.54 field, 7.54 as a link | Being the first field on a surface, or swapped in for vermilion page by page |
| Acid | Primary ink, behind one quoted client line | 15.81 | A band, a section ground, type, a position beside a finding |
| Heat | Heat ink for the label, statement and input text; the primary ink block as the action and the input hairline | 6.67 and 6.33 | Paper type at 2.61, faint ink at 1.91, any line that is not the audit band's |
The gate
Run node 05_TOOLS/measure-palette.mjs from 01_IDENTITY/. Exit 0 means all 62 rules hold. Exit 1 prints the broken rule with a detail line. The colour maths lives once, in that script, and nowhere else.
Paper is the stock reference. Ink is one pigment and the flood is that pigment at full coverage. The identity is print native by construction, which is what won it the direction.
Vermilion is a flat spot colour in its one job: the painted edge of a print object, the offer slide, the one band. Every adjacency rule holds on stock. Chrome is nothing in print, and the substitution is the mark's own mean at 3.14 to 1 on paper and 5.26 to 1 on a printed flood. A printed page passes when a viewer who saw the system once can still name the brand from a monochrome sheet with the wordmark covered.
Chapter 03 of the Unforged brand book. Written from 01_IDENTITY/01_BRAND-LAYER/colour.md v3.1.1 and two-grounds.md v3. Every chip above is painted from its token; the hex beside it is the same value printed as documentation.