Skip to main content

Killed the CRT vocabulary, switched to Fraunces and warm paper

Sitewide pivot from the retro-terminal aesthetic to an editorial one. Dropped VT323, Anonymous Pro, scan lines, film grain, and boot flicker. Body type is now Fraunces at 18px on a hue-55 paper background.

View raw

Light mode had been quietly hard to read for months and I kept blaming the wrong thing. The actual culprit was that two visual-noise overlays — a repeating-linear-gradient of CRT scan lines fixed to the viewport, and an SVG fractal-noise film grain on body::after — were stacking on top of monospace body type at 17px. Three layers of texture fighting each other. The retro-terminal look was a costume the site had outgrown.

So I pulled it off in one pass. Body and headings are now Fraunces (variable serif, opsz + SOFT axes — the optical-size axis auto-tightens contrast at display sizes, which is why I could invert the heading tracking to negative: -0.025em on h1, -0.02em on h2). UI chrome moved to IBM Plex Sans, code to IBM Plex Mono. VT323, Anonymous Pro, and Instrument Serif are gone. The crt-lines overlay, the body::after grain, and the boot-flicker keyframe are all neutralized — class names left as no-ops so I don't have to chase down stale references in old MDX. The blinking .terminal-cursor got repurposed as a quiet 1px editorial rule, same selector, completely different feel.

The light palette retinted to hue 55 (signal/amber) at chroma ≤ 0.012 — warm paper instead of cool neutral. The dual-hue lock and WCAG contrast gate still hold; design-check passes, 202 pages build. Dark mode untouched. The site reads like something you'd want to actually read now.