DEV Community

J Now
J Now

Posted on

Why IKB Fails as Terminal Text (and the Two-Slot Fix)

Yves Klein's International Klein Blue is hex 002FA7. On a dark terminal background, APCA scores it Lc -12 — not low-contrast, effectively invisible. I found this out after building the first draft of klein-blue and noticing permission prompts had vanished into the void they were supposed to evoke.

The fix isn't to abandon IKB. It's to stop treating it as a single color with one job.

Claude Code maps its interface elements onto specific ANSI slots. The ansi:blue slot handles decorative elements — borders, structural highlights, things you glance at rather than read. The ansi:blueBright slot carries permission-prompt text, the phrases you actually need to parse before hitting enter. These are different legibility requirements and they can hold different colors.

So klein-blue splits the pigment across both slots: raw IKB (002FA7) in ansi:blue for decoration, and a lifted Klein-family blue (A8BEF0) in ansi:blueBright for anything that needs to be read at body size. The decorative slot gets the real IKB — chromatic fidelity where it costs nothing. The readable slot gets a tint that passes APCA Lc ≥ 90 for body text.

The strictest variation, Klein Void Prot, applies this logic across every ANSI slot Claude Code touches: per-role contrast gates at body ≥ 90, subtle ≥ 75, muted ≥ 45, accent ≥ 60. It's the only variation where every accent passes those gates without exception.

The broader problem this responds to: Claude Code is prose-heavy. Tool output, reasoning traces, permission prompts — most of what fills the screen is English paragraphs, not syntax-highlighted code. Standard terminal themes optimize for code; klein-blue optimizes for comfortable reading over long sessions, with IKB as the anchor color rather than a chromatic accident.

Ships as macOS Terminal.app .terminal profiles, installed via install.sh, rollback-able via restore.sh. Requires Claude Code's /theme picker set to dark-ansi — without that, Claude Code ignores the ANSI layer entirely and applies its hardcoded RGB palette.

Four variations total, two font options (CommitMono-Regular, IBM Plex Mono).

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

Top comments (0)