Spent a few weeks building ANSI themes for Claude Code after noticing that every session ends with my eyes doing the work they shouldn't have to — squinting through low-contrast tool output and permission prompts that were clearly styled for decorative purposes, not reading.
The specific problem: pure IKB (hex 002FA7) fails APCA contrast as body text on a dark ground (Lc -12 — effectively invisible). Klein blue is the whole point of this theme family, so throwing it out wasn't an option. The fix was splitting it across two ANSI slots: pure IKB in ansi:blue where Claude Code uses it for decorative borders and highlights, and a lifted Klein-family ansi:blueBright value in the slot where Claude Code renders permission-prompt text that you actually need to read.
That split is where the four variations diverge, specifically around the ansi:redBright slot — which Claude Code uses for its claude-sand brand color. Each variation answers the same question differently:
- Klein Void Refined — balanced, neither color dominates
- Klein Void Sand & Sea — accepts claude-sand as a second hero alongside IKB
- Klein Void Prot — every accent passes strict APCA gates (body >= 90, subtle >= 75, muted >= 45, accent >= 60); the only variation where nothing is decorative-only
- Klein Void Gallery — neutralizes the brand color entirely, maximum void
Contrast is verified against APCA Lc rather than WCAG, which matters at body size over long sessions — WCAG's formula overestimates small-text legibility in a way that only becomes obvious when you're six hours in.
Ships as macOS Terminal.app .terminal profiles, installed via install.sh, fully rollback-able with restore.sh. One prerequisite worth noting: Claude Code's /theme picker must be set to dark-ansi, otherwise Claude Code ignores your ANSI theme entirely and falls back to its hardcoded RGB palette.
Font options are CommitMono-Regular (V1, V3) and IBM Plex Mono (V2, V4), both installed to ~/Library/Fonts/.
Top comments (0)