skip to content

foundations

Texture

ASCII lattices drawn in CSS. One textured region per view, never behind text.

ascii ladder

ordered dither, not random

Block shades drawn as CSS lattices so they tile, print, and never wait on a face. Each step is a superset of the one before it, so a region can ramp without the pattern jumping. Ink defaults to the hairline. Never behind prose, never behind a table.

--tex-125bayer 2/16
--tex-25lightest usable
--tex-375bayer 6/16
--tex-50checkerboard
--tex-75inverse of 25

bands and boards

scan · hatch · grid

Scanline and column are the printout/CRT band. Hatch is the 45° screen-door on a locked fill. Dots are the specimen canvas — an 18px lattice quiet enough that a control's own edge stays the edge. The line grid is the same pitch as graph paper.

--tex-scan1px every 3px
--tex-columnvertical counterpart
--hatch45° screen-door
--tex-dotsspecimen canvas
--tex-grid18px graph paper

where they belong

A texture may fill a vacant region, the inert half of a meter, or a disabled control. One textured region per view. Two reads as decoration. Set --tex-ink only when the lattice itself must carry the accent — almost never.

vacant

no jobs queued

meter remainder

8 of 12 · inert cells take --tex-25

locked

disabled fill is --tex-25, not a fade

tex-ink

retint

--tex-ink is local. The mark grade, not --accent: a lattice is a fill, and 3:1 is enough. Leave ink on the hairline unless the region is claiming the accent as its only job.

default ink

accent mark

star field

large empty only

Three 1px lattices at coprime intervals. Roughly 0.4% coverage. A hero, a vacant canvas, the back of a print cover — never behind text, and never on the same screen as another texture.

printout

Tractor-feed perforation down both sides. Only where the printout metaphor is the point — a receipt, a log export, a printed manifest. It is a frame, not a decoration.

job 4f21

halted · disk quota exceeded

pagetexturethemelighttokenscopy2026srclinknominal