The system this site is built in. It is named for what it tries to look like: a measuring instrument, where every rule is a rule for a reason and the page shows its own construction. Six themes, four faces, one variable axis doing most of the work.
The page is drawn inside a frame rather than on an open canvas. Two vertical rails sit at the outer gutters, fixed to the viewport and capped at 1680px, and horizontal hatch bands separate the sections. Both are filled with the same 45° hatch at background-attachment: fixed, so the stripes are anchored to the viewport rather than to each element. The rails and the bands are windows onto one continuous field, which is why their diagonals meet exactly at every corner.
The rails and a hatch band, drawn at page scale
Where a band crosses a rail the system draws a crosshair rather than letting one line pass behind the other, which is the technical-drawing tick for two members meeting. Below 700px the rails are removed entirely, so there is nothing left to intersect and the crosshairs go with them.
Nothing in the system names a colour. Every rule reads a token, and a theme is a redefinition of those tokens on [data-dir]. Four grounds are general and two belong to a single page each. Because the tokens are the only interface, a page written for one ground works on all six without knowing which it is on.
Ink, dim, faint, signal, cool — the five that carry meaning
| Token | Carries | Rule |
|---|---|---|
| --bg / --bg-2 | The ground, and the raised panel above it. | Never text. |
| --ink | Headlines, marks, anything that must be read first. | Full contrast. |
| --ink-dim | Body copy and prose. | Clears 4.5:1 on every ground. |
| --ink-faint | Labels, readouts, the trademark. | Labels only, never prose. |
| --signal | One accent. Section indices, links on hover, live state. | Sparingly, or it stops meaning anything. |
| --cool | The second accent, for the rare case needing two. | Never decorative. |
| --rule / --rule-soft | Hairlines. The soft one for bands inside a section. | Alpha on ink, not a grey. |
| --panel | The barely-raised surface under specimens and code. | 2.5–3.5% ink. |
| --grain | Film grain opacity, per ground. | .02 on white, .09 on black. |
Archivo is variable on width, not just weight, and that is the part of the system worth understanding. Sixty-three rules, counted in August 2026, across the four stylesheets pin font-variation-settings: 'wdth' to a specific value, and they fall into two populations that behave differently.
The same string at each width the system actually uses
| Selector | Size | wdth | Band |
|---|---|---|---|
| .outro h2 | 240px | 74 | Text |
| .pl-count | 220px | 84 | Text |
| .hero h1 | 208px | 96 | Text |
| .act--weight h2 | 168px | 64 | Text |
| .dhero h1 | 150px | 88 | Text |
| .phero h1 | 140px | 88 | Text |
| .cortex h2.big | 132px | 86 | Text |
| .act h2 | 124px | 86 | Text |
| .chapter .cnum | 112px | 120 | Wide |
| .post .bignum | 104px | 118 | Wide |
| .spot h3 | 96px | 88 | Text |
| .paper-h1 | 84px | 82 | Text |
| .mtext | 66px | 84 | Text |
| .chapter h3 | 64px | 92 | Text |
| .nf-code | 58px | 120 | Wide |
| .dfeat-title | 58px | 86 | Text |
| .outro-foot .now .t | 46px | 110 | Wide |
| .dart h1 | 46px | 86 | Text |
| .mailto span | 44px | 90 | Text |
| .sheet h1 | 42px | 96 | Text |
| .lf-done h2 | 42px | 88 | Text |
| .pitem h3 | 40px | 84 | Text |
| .doc h1 | 38px | 94 | Text |
| .pillar h3 | 36px | 84 | Text |
| .signals .v | 34px | 90 | Text |
| .dcard h3 | 34px | 86 | Text |
| .ticker-track span | 34px | 74 | Text |
| .ocd-name | 32px | 90 | Text |
| .spot .metrics .v | 32px | 88 | Text |
| .ritem h3 | 32px | 86 | Text |
| .tl-item h4 | 30px | 90 | Text |
| .pcard h3 | 30px | 90 | Text |
| .prose h2 | 30px | 88 | Text |
| .sfield input | 28px | 92 | Text |
| .bhead h2 | 27px | 86 | Text |
| .phero .facts .v | 26px | 92 | Text |
| .post h4 | 26px | 88 | Text |
| .row .n | 25px | 94 | Text |
| .cmd-field input | 25px | 92 | Text |
| .adopt h3 | 25px | 88 | Text |
| .telemetry .v | 22px | 90 | Text |
| .oc-forge | 21px | 100 | Wide |
| .x-refs h2 | 21px | 88 | Text |
| .nf-route-label | 21px | 88 | Text |
| .dindex-row .nm | 20px | 90 | Text |
| .steps .sk | 19px | 92 | Text |
| .orrery-readout .t | 19px | 92 | Text |
| .plate .v | 19px | 90 | Text |
| .related .rr .n | 18px | 92 | Text |
| .anat h4 | 18px | 92 | Text |
| .mark | 15px | 125 | Wide |
| .brand .wordmark | 15px | 125 | Wide |
| .xv-name | 15px | 92 | Text |
| .cortex .pillars2 h4 | 15px | 92 | Text |
| .shead h2 | 15px | 88 | Text |
| .dart .prose h2 | 15px | 88 | Text |
| .xnav .mark | 14px | 125 | Wide |
| .cmd-row-title | 13.5px | 88 | Text |
| .pl-mark | 13px | 125 | Wide |
| .lf-kind b | 13px | 92 | Text |
| .prod .nm | 12px | 96 | Text |
| .dart .prose h3 | 12px | 92 | Text |
| .orrery-legend .ol-n | 11px | 92 | Text |
Text narrows as it grows. Across the 54 text rules the correlation between size and width is r = -0.46: a 240px outro headline is set at 64 to 74, a 30px sub-head at 88 to 92. Large type has enough room to be read condensed, and condensing it is what stops a headline turning into a wall.
Numerals and the mark do not. The other 9 rules sit at 100 to 125 whatever their size, because they are read as data rather than as language. A chapter number at 112px and the 15px wordmark are both near the ceiling. The one apparent exception, .pl-count at 220px and width 84, is a display numeral set like a headline, and it behaves like one.
The system has very few spacing tokens. Almost everything else is a clamp() tied to the viewport, so the page rescales continuously rather than snapping at breakpoints.
| Token | Value | What it positions |
|---|---|---|
| --gut | clamp(12px, 3vw, 52px) | The rail width, and so the page frame. |
| --pad | clamp(14px, 2vw, 34px) | Clearance between the rail and the text. |
| --nav | 62px | Header height; section heads stick beneath it. |
| max-width | 1680px | The rails, the bands and .wrap all share it. |
A content column is --gut + --pad in from the page edge, which is what keeps text off the rails at every width. Measure is capped by content rather than by the grid: the lede runs to 56 characters, prose to 70.
Two easings, and a rule about when each applies. Anything that enters or settles uses the decelerating curve; anything that swaps one state for another uses the symmetric one. Nothing in the system uses a linear or a default ease.
cubic-bezier(.16, 1, .3, 1) Reveals, hovers, theme changes. Fast out of the gate and a long settle.
cubic-bezier(.76, 0, .24, 1) State swaps and transforms. Symmetric, so it reads as one movement rather than an arrival.
Sections arrive on a stagger rather than together: .rv starts 26px low and transparent, and data-d="1" through "8" add 70ms each. Eight steps is the whole ladder, which caps the longest entrance at just over half a second.
A handful of components appear on nearly every page, and they carry the system more than any single rule does.
Label · mono 10px · tracked .22em
A lede. Sized between 14 and 17px against the viewport, capped at 56 characters, and set in --ink-dim so it reads as introduction rather than as body.
Live components, rendered from the system’s own classes
| Component | Behaviour worth knowing |
|---|---|
| .nav | Fixed and frosted in every theme, at 62% of the ground with a 16px blur. |
| .mark | The wordmark lockup at wdth 125 with a cap-flush trademark. Specified in full at /identity. |
| .shead | Sticks to the bottom of the nav while its section is in view, so you always know which one you are in. |
| .hatch | A separator band. Takes .soft for a lighter field and .tall for 1.6× the gutter. |
| .grain / .vig | Film grain over the whole viewport, and a vignette. Both are per-theme, and the docs ground drops the vignette entirely. |
| .rv | Scroll reveal, with an eight-step delay ladder. |
All of it is hand-written CSS, imported as one stylesheet. There is no utility framework and no component library underneath, and the classes on this page are the same classes every other page uses, which is the only reason a documentation page can be trusted to still be true.