Ground
One faint, out-of-focus network under every page.
Anatomy
| Cells | scattered band by band down a sheet with no end: one per 90,000px², at least 170px apart, each wired to its two nearest neighbours |
|---|---|
| blue noise in --ground-tissue (oklch(45% 0.01 80 / 0.26); dark oklch(66% 0.008 80 / 0.22)), in 1024px bands; only those within a screen of the view are kept | |
| Out of focus | each point of a fibre spreads its 2px dots over the cells round it, a blur in 1-bit |
| Depth | the sheet moves at 0.4× the scroll, on a CSS scroll timeline where there is one; scrolling never repaints it |
| Firing | every 1.6–4s a cell in view fires: a pulse of ink dots runs down one or two axons at 0.6px/ms |
| Seed | the page’s path, so a page keeps its tissue between visits |
| Reading veil | paper at --ground-veil (75%) behind anything read, fading out over two modules at the sides and one above and below |
| Reduced motion | the sheet scrolls with the page and nothing fires |
From src/lib/exposure/ground.ts, global.css and the guide’s Motion §14.
Decisions
-
Random, not ruled
Replaced the 48px hairline lattice, which boxed the whole page once the components had lost their frames and read as graph paper. Registration crosses, column guides and a module ledger were rejected as the same grid with lines missing.
-
Out of focus
The first version printed 1px dots at the hairlines’ weight, and fibres read as part of the rows and text they crossed. Plain 2px dots read as dashed stitching.
-
No CSS blur
Soft grey is outside the 1-bit language, and a filter over a full-screen layer is the cost the film grain was baked to avoid.
-
The one parallax
Allowed because it is a single flat 1-bit sheet at a fixed rate; the hero’s rule against depth layers still stands for the culture.
-
A veil, not a halo
Replaced a paper text-shadow round every glyph, which cleared the letters but left fibres running between the lines.