DEV Community

J Now
J Now

Posted on

The Color I Built This Theme Around Is Invisible as Text

Yves Klein's International Klein Blue sits at hex 002FA7. On a dark terminal background, that scores Lc -12 on the APCA contrast scale — not borderline readable, actually invisible. I found this out while building a Claude Code theme anchored to it.

The APCA Lc metric is worth understanding here. WCAG's 4.5:1 ratio compares luminance without accounting for polarity — dark text on light vs. light text on dark behave differently for perception. APCA measures that directionally. IKB is a dark color. On dark ground, the eye gets almost no signal. Pure IKB fails as text anywhere in the theme.

The fix was structural: split the blue work across two ANSI slots that Claude Code uses differently. The ansi:blue slot carries decorative elements — borders, bullets, visual chrome — where the color reads as accent and legibility is secondary. The ansi:blueBright slot carries permission-prompt text that actually needs to be read. Pure IKB goes in the decorative slot. A lifted Klein-family hex A8BEF0 goes in the readable slot. Same pigment family, different luminance, different job.

That split is the structural logic the whole theme set rests on. Four variations ship:

  • Klein Void Refined — balanced daily driver
  • Klein Void Sand & Sea — accepts Claude's ansi:redBright brand-sand color as a second hero
  • Klein Void Prot — every slot APCA-verified, per-role gates enforced (body >= 90, subtle >= 75, muted >= 45, accent >= 60)
  • Klein Void Gallery — one blue, maximum void, nothing competes

The context that made this worth building: Claude Code output is mostly prose. Tool output, reasoning traces, permission prompts — hours of English at terminal font size. Most themes optimize for syntax highlighting across code tokens. That's the wrong problem when 80% of what's on screen is paragraph text. Klein Void Prot is the variation I use for long sessions where a four-paragraph reasoning trace shows up at the end of a chain.

One constraint worth flagging: Claude Code must have /theme set to dark-ansi, or it ignores the ANSI profile entirely and falls back to its hardcoded RGB palette. The theme is a no-op without that.

Ships as .terminal profile files for macOS Terminal.app, with CommitMono-Regular or IBM Plex Mono depending on variation. Install and rollback scripts included.

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

Top comments (0)