DEV Community

J Now
J Now

Posted on

Klein blue is invisible as text — here's how I worked around it

I spend several hours a day reading Claude Code output in a terminal. Tool output, reasoning traces, permission prompts — it's mostly prose, not code. Standard terminal themes optimize for syntax highlighting: vivid reds and greens for keywords, muted grays for comments. That's the wrong tradeoff when your screen is 80% English sentences at body size.

I wanted a theme anchored to Yves Klein's IKB pigment (hex 002FA7). The first thing I checked: does pure IKB work as readable text on a dark ground?

No. APCA Lc score: -12. Effectively invisible.

IKB fails because it's a deep saturated blue optimized as a physical pigment — it absorbs and scatters light in a way that reads as intense presence on a gallery wall, but against a dark terminal background it has almost no luminance differential from the ground. APCA measures contrast as a human perceives it at body text size, not as a ratio, and -12 is below the threshold for any intentional use.

The fix was a two-slot split. Terminal themes have separate ANSI slots for ansi:blue and ansi:blueBright. I assigned pure IKB to ansi:blue, which Claude Code uses for decorative elements — borders, structural highlights — where contrast as readable text doesn't matter. Then I lifted it to a Klein-family blue (A8BEF0) for ansi:blueBright, which Claude Code routes permission-prompt text through. That slot needs to be legible; it gets the lightened variant.

The result: IKB stays present as pure pigment in the decorative layer. The readable text layer gets a blue in the same family that passes a body-text gate (Lc >= 90 for main content, >= 60 for accents).

I built four variations. Klein Void Prot is the strict one — every accent slot passes APCA gates, no exceptions. Klein Void Gallery goes full void with maximum IKB saturation. Klein Void Sand & Sea accepts Claude's ansi:redBright brand color as a second hero rather than neutralizing it. Klein Void Refined splits the difference.

All four ship as macOS Terminal.app .terminal profile files with an Objective-C builder, install via install.sh, and are fully rollback-able. One required prerequisite: Claude Code's /theme picker must be set to dark-ansi, otherwise Claude Code ignores the ANSI layer entirely and renders its own hardcoded RGB palette.

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

Top comments (0)