DEV Community

J Now
J Now

Posted on

A Terminal Theme Tuned for Paragraphs, Not Keywords

Syntax highlighting themes make contrast decisions for tokens: keywords, string literals, type annotations. That's the wrong optimization when your terminal is showing you permission prompts, reasoning traces, and tool output in body-size prose for hours at a stretch. The ANSI slots theme authors tune for code are the same slots Claude Code uses for sentences.

Klein-blue is four macOS Terminal.app themes built around Yves Klein's IKB pigment, with contrast targets sized for reading rather than scanning. APCA Lc metric with per-role gates: body >= 90, subtle >= 75, muted >= 45, accent >= 60.

The pigment is hex 002FA7. It fails as body text on a dark ground — APCA Lc -12, effectively invisible. That forces a slot split: pure IKB in the ansi:blue slot, which Claude Code uses decoratively (borders, highlights you glance at); a lifted Klein-family 00A8BEF0 in ansi:blueBright, which is where permission-prompt text actually renders and needs to be legible.

The four variations exist because one design question doesn't have a single answer: what to do with ansi:redBright, the slot Claude Code uses for its claude-sand brand color.

  • Refined — neutralizes claude-sand so IKB isn't competing with a warm second color
  • Sand & Sea — accepts claude-sand as a deliberate co-hero
  • Prot — every slot passes strict APCA gates without exception; the only variation that makes no aesthetic compromise on contrast
  • Gallery — one-blue maximum void; minimal palette

Ships as .terminal profile files. Built from build.m, a variation-aware Objective-C builder. install.sh installs; restore.sh rolls back. Fonts (CommitMono-Regular on V1/V3, IBM Plex Mono on V2/V4) install to ~/Library/Fonts/.

One prerequisite: Claude Code's /theme picker must be set to dark-ansi. Any other setting and Claude Code falls back to its hardcoded RGB palette, ignoring the ANSI profile entirely.

MIT licensed.

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

Top comments (0)