The stylesheet now says what actually applies

site-v18.css declared 67 properties that a later identical selector had already replaced, so reading it gave values that were not in effect. Removing them changes nothing a visitor sees, and a check proves it.

The main stylesheet grew in three layers: an original release around line 400, a redesign around line 1000, and another around line 4400. Each layer re-declared selectors the earlier ones had already set, without removing what it replaced. So the file stated .status-pill twice with different padding, colour, font size and text transform, and .inner-page three times with different backgrounds and four different brand colours.

None of this reached a visitor. The later declaration always wins, and the per-page purge keeps unused rules out of delivered bytes, so the cost was not performance. The cost was that reading the file told you the wrong thing. Anyone changing .status-pill would naturally edit the first block they found, see nothing happen, and conclude the stylesheet was haunted.

Sixty-seven declarations that could not apply

Two rule blocks with byte-identical selector text, in the same at-rule context, in the same file, have identical specificity — so source order decides, and a property declared in both is dead in the earlier one. That is the whole rule, and it is narrow on purpose: nothing was reordered and no blocks were merged, because only provably unreachable declarations were removed. What remains keeps its exact position in the cascade.

The one exception is importance. An earlier !important beats a later normal declaration, so that pair is left alone.

Sixty-seven declarations across thirty selectors went, taking the authored stylesheet from 118 KB to 114 KB and its bundle from 95 KB to 92 KB. Every other stylesheet in the repository was already clean.

Four colours that nothing wanted any more

Removing those declarations made something else visible. --bg, --electric-blue, --electric-purple and --sammy-orange were defined on :root and on .inner-page, and the only rules that referenced them were among the superseded ones. With those gone the four tokens had no reader at all, and the custom-property check added in an earlier pass said so immediately. Their definitions are removed too — a second layer of dead code that only became reachable once the first was cleared.

How “it changes nothing” was established

Not by looking at the pages. For every stylesheet, every combination of at-rule context, selector and property was flattened to the declaration that wins, honouring importance, and the two maps compared: 2,725 winning declarations before, 2,725 after, and no difference in a single one. That is deterministic, and it is the actual claim — only losers were removed, so what applies cannot have moved.

The browser was used as a cross-check rather than the proof, and it is worth saying why. A computed-style snapshot of fourteen routes at two widths, 434,220 measurements, showed sixteen differences, all on /work/. Running the same build four times showed eleven to thirty differences on that same route, in the same elements — the platform feed headers, whose text wraps differently depending on whether a lazily loaded platform icon has arrived yet. The browser measurement is noisier than the change it was meant to verify, which is exactly why the deterministic check is the one that counts.

Validation evidence

165 delivery tests, 263 built-output tests, 77 Worker and feature tests, 7 feed-delivery tests, the release audit across 35 canonical pages, the browser suite across 35 routes with zero failures, and 80 responsive, keyboard and print checks with zero failures. Unreachable CSS remains at 0 of 202,098 bytes. A check now fails if any stylesheet declares a property a later identical selector has already overridden, with eight fixtures proving it catches the three-layer case, the emptied rule, the custom property, the selector list that only looks identical, the media query that is a different context, and both directions of !important.