Every element that paints the weave starts its tile at its own top edge. Stack three sections and the pattern resets three times, so the tiles never meet and each boundary reads as an accidental header bar. --field-y shifts each layer by that section's distance down the document, so the page becomes a single field: the ink flips at a seam, the grid never does.
Not this. Each layer tiles from its own top. The T shapes restart at every edge and the seams read as bars.
Each layer is offset by its distance down the page. Only the ink changes at a seam.
The whole palette of section backgrounds. A panel on fog is var(--panel-on-fog); a panel on navy is var(--navy).
Banned. --mist is a chip and an avatar colour. Filling a band with it reads as a third ground.
Two seats, nineteen matches. Every scan, every transfer, and every seat still to play is listed below, and the weave runs straight through the words behind it.
Not this. A paragraph laid straight onto a navy field takes the weave across the line.
Two seats, nineteen matches. Every scan, every transfer, and every seat still to play is listed below, and the fill under this block stops the weave at the edge of the copy.
This. .on-solid fills the block with var(--navy). On navy it has no shape of its own; all it does is clear the weave behind the words.
How to use it: put .field plus .field-navy or .field-fog on the section, and load field.js. The script writes --field-y on load, on resize, after the fonts swap, and on any body resize, because all of those move the sections below them.
A sticky app bar is deliberately excluded. It slides over the content, so it can never stay in register: give it its own ::before, the way .appbar does, and a rule along its bottom edge.