v3 → v4 가 Tailwind 가 출하한 가장 큰 변화야. 대부분 프로젝트에서 JS config 파일이 사라졌어. design token 이 원래 살아야 할 자리 — CSS 안 — 으로 돌아왔어.
뭐가 바뀐 거
v3 에선 테마가 tailwind.config.js 안 JavaScript object 였어. Tailwind 가 읽어서 내부적으로 CSS 변수 생성하고 유틸리티 emit. 본인 CSS 에서 테마 토큰 참조하기가 어려웠어.
v4 에선 테마가 CSS 안 @theme 선언으로 존재. Tailwind 가 평범한 CSS 변수로 읽어. 유틸리티 동작 방식은 같음 (bg-brand 가 --color-brand 읽음). 차이점: 본인 CSS 도 그 변수 읽을 수 있음. 브리지 레이어 없음.
@theme 블록
@theme 안에 CSS custom property 선언. Tailwind 가 유틸리티 패밀리에 매핑되는 prefix 몇 개 예약:
--color-*→bg-*,text-*,border-*,ring-*--font-*→font-*--spacing-*→p-*,m-*,gap-*등--radius-*→rounded-*--shadow-*→shadow-*--breakpoint-*→sm:,md:등
토큰 선언하면 유틸리티 등장. 재시작 없음, 챙겨야 할 컴파일 단계 없음.
cwkPippa 패턴
cwkPippa 의 frontend/src/index.css 가 v4 모델 써. Dark mode 가 [data-theme='light'] selector 로 키 (기본 다크, attribute 스위치로 밝아짐). Font 토큰은 sans 에 Inter, code 에 JetBrains Mono. accent 컬러는 당연히 Pippa-pink.
Eject 안 하고 커스터마이즈
JS 플러그인 (예: custom variant) 필요하면 여전히 config 파일로 탈출 가능. 하지만 design token — 색, 폰트, 간격, breakpoint — 은 순수 CSS 가 길.
--color-brand 를 @theme + 별도 :root 블록 + 다른 곳의 SCSS 변수에 동시에 정의하지 마. 하나의 집을 골라. v4 의 요점이 @theme 가 그 집 — 모두 거기서 흐른다.v3 사용자를 위한 마이그레이션 노트
기존 v3 프로젝트가 즉시 갈아탈 필요 없어. v3 문법 (@tailwind base; 등) 이 호환성 위해 v4 에서도 동작. 다만 새 프로젝트, 새 레슨, 새 예제는 v4-네이티브여야 해. 이 퀘스트는 처음부터 끝까지 v4-네이티브.