Skip to content

feat(blog): 디자인 토큰 + 브랜드 액센트(인디고) 도입 (#94)#117

Merged
Malloc72P merged 2 commits into
mainfrom
claude/issue-94-design-tokens
Jun 29, 2026
Merged

feat(blog): 디자인 토큰 + 브랜드 액센트(인디고) 도입 (#94)#117
Malloc72P merged 2 commits into
mainfrom
claude/issue-94-design-tokens

Conversation

@Malloc72P

Copy link
Copy Markdown
Owner

색·검정 계열이 컴포넌트마다 하드코딩돼 일관성이 깨지고 액센트가 없던 문제(#94)를 해결합니다.

변경 사항

토큰 단일 출처

  • global.css :root에 시맨틱 토큰 정의: --color-brand(인디고 #6366f1), --color-ink(#0a0a0a)
  • 컴포넌트는 bg-[var(--color-brand)], bg-[var(--color-ink)], ring-[var(--color-brand)]로 참조

검정 계열 통일 (→ ink)

혼용되던 bg-black / bg-gray-900 / bg-gray-950를 단일 토큰으로:

  • 헤더, 모바일 사이드바 헤더, 드롭다운 메뉴, 검색 결과 시리즈 뱃지, skip 링크

액센트 적용 (절제 있게 — 활성/포커스만)

  • 활성 시리즈 필터 칩 & 시리즈 상세의 현재 시리즈 → 인디고
  • 코드 복사 / 글 공유 버튼 포커스 링 → 인디고

구현 노트 — 왜 @theme가 아니라 :root + arbitrary value인가

이슈는 Tailwind v4 @theme를 제안했으나, 이 프로젝트의 Turbopack + v4 빌드에서 @theme가 유틸리티/변수를 전혀 생성하지 않음을 빌드 산출 CSS로 확인했습니다(기본 --color-gray-*는 나오지만 커스텀 토큰은 누락). 그래서 항상 동작하는 :root CSS 변수 + arbitrary value(bg-[var(--…)])로 구현했습니다 — 이 방식은 코드베이스가 이미 text-[16px] 등으로 광범위하게 쓰는 패턴입니다. 효과(단일 출처·시맨틱 네이밍·액센트)는 동일합니다.

검증

  • 빌드 CSS에 --color-brand:#6366f1 정의 + var(--color-brand)/var(--color-ink) 참조 유틸리티 생성 확인
  • 스크린샷 육안 확인: 다크 헤더 + 현재 시리즈 칩 인디고(나머지 회색 유지)
  • 단위 81개 / E2E 7개(로컬 dev + CI=true 프로덕션 빌드) 통과, lint 0 / tsc clean
  • 색 토큰은 시각 속성이라 별도 단위 테스트는 추가하지 않음(jsdom은 Tailwind 미적용·computed color 단언은 취약). 기존 E2E가 렌더 회귀를 가드.

범위 외(후속)

  • 수십 개 text-gray-*/border-gray-*의 전면 시맨틱 치환은 시각 회귀 위험이 커 이번 PR에서 제외(토큰 레이어가 생겼으니 점진 적용 가능).

🤖 Generated with Claude Code

- global.css: 의미 기반 색 토큰 단일 출처(:root) — --color-brand(#6366f1), --color-ink(#0a0a0a)
  (Turbopack+v4에서 @theme가 유틸리티를 생성하지 않아, 코드베이스가 이미 쓰는
   arbitrary value 방식 bg-[var(--color-*)]으로 통일)
- 검정 계열 통일: 헤더·모바일 사이드바·드롭다운·검색 뱃지·skip 링크의
  bg-black/gray-900/gray-950 → bg-[var(--color-ink)]
- 액센트 적용(절제): 활성 시리즈 필터 칩·현재 시리즈 강조 → bg-[var(--color-brand)],
  copy/share 포커스 링 → ring-[var(--color-brand)]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
blog Ignored Ignored Preview Jun 29, 2026 8:44am

@Malloc72P

Copy link
Copy Markdown
Owner Author

🔍 코드 리뷰 (self-review)

토큰 적용·검정 통일·액센트 모두 동작하고(빌드 CSS·스크린샷·E2E 확인) 회귀가 없습니다. 점검 결과입니다.

1. (낮음/actionable) 검정 통일 누락 — 검색 스크림

search-modal의 오버레이가 bg-black/50로 남아 있습니다(서피스가 아닌 반투명 스크림이라 보류했던 것). 검정 통일을 완성하려면 bg-[var(--color-ink)]/50로 바꿀 수 있는데, arbitrary value + 투명도 모디파이어 조합이 v4에서 생성되는지 확인 후 반영하겠습니다(안 되면 스크림 예외로 명시).

2. (수용) @theme 대신 :root + arbitrary value

이슈가 제안한 v4 @theme가 이 Turbopack 빌드에서 유틸리티를 생성하지 않아(빌드 CSS로 확인) 우회했습니다. 효과는 동일(단일 출처·시맨틱 네이밍). 후속으로 @theme 미동작 원인(Turbopack CSS 파이프라인)을 따로 조사해 두면 좋겠습니다.

3. (수용/후속) 부분 마이그레이션

검정 통일 + 액센트만 적용했고, 광범위한 text-gray-*/border-gray-* 시맨틱 치환은 시각 회귀 위험이 커 제외했습니다. 토큰 레이어가 생겼으니 점진 적용 가능.


1번 확인 후 별도 코멘트로 정리하겠습니다.

- search-modal 오버레이 bg-black/50 → bg-[var(--color-ink)]/50
  (v4가 arbitrary value + 투명도 모디파이어를 color-mix로 정상 생성함을 빌드로 확인)
- 이로써 raw 검정(bg-black/gray-900/gray-950) 잔존 0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Malloc72P

Copy link
Copy Markdown
Owner Author

✅ 리뷰 반영 완료 (fbea5e5)

리뷰 1번(검정 통일 누락) 반영:

  • 검색 스크림 bg-black/50bg-[var(--color-ink)]/50
  • v4가 arbitrary value + 투명도 모디파이어color-mix(… var(--color-ink) 50%, transparent)로 정상 생성함을 빌드 CSS로 확인
  • 이제 raw 검정(bg-black/gray-900/gray-950) 잔존 0

2·3번(@theme 우회 / 점진 마이그레이션)은 수용·후속 항목으로 유지합니다.

검증

  • 단위 81개 / E2E 7개(로컬 dev + 빌드 검증) 통과 · lint 0 · tsc clean

@Malloc72P Malloc72P merged commit 0a4d0f7 into main Jun 29, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant