DEV Community

J Now
J Now

Posted on

A terminal theme built for reading paragraphs, not scanning tokens

Most of my working day is spent reading prose in a terminal. Tool output, reasoning traces, permission prompts, explanations — the text-to-code ratio runs close to 80/20 in favor of paragraphs. Every theme I tried was optimized for syntax highlighting: maximize token contrast, make keywords pop. Wrong problem.

So I built klein-blue: four Terminal.app themes anchored to Yves Klein's IKB pigment, with APCA contrast gates set per text role rather than per syntax class.

The central constraint that shaped everything: pure IKB (the pigment's hex value, 002FA7) fails APCA contrast on a dark background — Lc -12, effectively invisible as readable text. The fix was splitting it across two ANSI slots. The blue slot gets pure IKB for borders and decorative highlights. The blueBright slot gets a lifted Klein-family value (A8BEF0) for permission-prompt text that actually needs to be read. One pigment family, two roles, two different slots.

The APCA gates across variations: body >= 90 Lc, subtle >= 75, muted >= 45, accent >= 60. Klein Void Prot is the only one of four variations where every slot passes strict gates. The others make deliberate tradeoffs — more void, or a second hero color — at the cost of one or two marginal accent values.

The four variations differ on one axis: what to do with the ANSI redBright slot, which Claude Code uses for its claude-sand brand color. Refined neutralizes it so nothing competes with IKB. Sand & Sea accepts it as a second hero. Gallery pushes toward monochrome. Prot locks everything to verified contrast.

One non-obvious install step: Claude Code's built-in theme picker must be set to dark-ansi. Any other setting and it uses hardcoded RGB values, ignoring the Terminal.app ANSI profile entirely.

Ships with CommitMono-Regular and IBM Plex Mono, copied to the system font directory on install. Fully rollback-able. MIT licensed.

https://github.com/robertnowell/klein-void

Top comments (0)