내가 하나의 색을 두 개의 ANSI 슬롯에 나누는 이유
Source: Dev.to
나는 몇 주 동안 Claude Code의 출력을 몇 시간씩 연속으로 읽으며 기본 테마에 지쳐갔다. 구문 강조가 틀렸기 때문은 아니다—Claude Code는 대부분 prose(문장) 형태이기 때문이다. 도구 출력, 추론 트레이스, 권한 프롬프트 등은 토큰이 아니라 단락이다. 내가 시도한 테마들은 코드에 맞게 조정돼 있었고, 긴 세션 동안 본문 크기의 영어에 맞춘 테마는 아무도 만들지 않았다.
그래서 나는 Yves Klein의 International Klein Blue를 기반으로 한 네 가지 Terminal.app 테마, klein-void를 만들었다. 대부분의 시간을 잡아먹은 설계 문제는 순수 IKB(International Klein Blue)가 눈에 보기엔 괜찮아 보이면서도 왜 읽을 수 있는 텍스트로서는 계속 실패하는지를 파악하는 것이었다.
WCAG 대비 비율은 어두운 배경에서 밝기를 인간 시각이 어떻게 인식하는지를 모델링하지 않는다. WCAG는 대칭 비율을 사용한다: 극성에 관계없이 계산 방식이 동일하다. 반면 APCA(Accessible Perceptual Contrast Algorithm)는 비대칭이다—밝은 배경에 검은 텍스트와 어두운 배경에 밝은 텍스트를 서로 다르게 점수 매긴다. 눈은 두 경우를 동일하게 처리하지 않기 때문이다. 어두운 배경 위에 순수 IKB를 두면 APCA 기준으로 Lc -12 점수를 받는다. 이는 사실상 보이지 않는다. 같은 조합을 WCAG 비율로 계산하면 그럴듯한 숫자가 나온다.
실질적인 결과: IKB는 텍스트용으로 사용할 수 없다. 해결책은 색을 두 개의 ANSI 슬롯으로 나누는 것이었다. 순수 IKB는ansi:blue에 배치했으며, Claude Code는 이를 장식용 테두리와 구조적 강조에 사용한다—본문이 아닌 역할이므로 Lc -12가 허용된다. 가독성이 필요한 부분은 Lc 검증을 통과한 밝은 Klein 계열 블루(ansi:blueBright)에 할당했으며, Claude Code는 이를 권한 프롬프트 텍스트에 사용한다.
네 가지 변형은 단일 임계값 대신 역할별 APCA 게이트를 사용한다:
- body ≥ Lc 90
- subtle ≥ Lc 75
- muted ≥ Lc 45
- accent ≥ Lc 60
**Klein Void Prot (V3)**는 모든 accent가 엄격한 게이트를 통과하는 유일한 변형이다. 다른 변형들은 명시적인 트레이드오프를 갖는다—예를 들어 Klein Void Gallery는 최대한의 공백(void)을 추구하면서 일부 장식 요소가 accent 게이트 이하에 머무르는 것을 허용한다.
또 하나 주목할 점은 Claude Code가 브랜드 색을ansi:redBright슬롯을 통해 라우팅한다는 것이다. 이 슬롯을 중화시킬지, 두 번째 메인 색으로 유지할지는 변형 간 주요 차별점이다. Klein Void Sand & Sea는 이를 유지하고, Klein Void Refined는 IKB를 유일한 색 앵커로 유지하기 위해 중화한다.
이 테마를 사용하려면 Claude Code의/theme picker를 dark-ansi로 설정해야 한다—기본값으로 두면 Claude Code가 ANSI 프로파일을 전혀 무시한다.