diff --git a/apps/blog/src/app/(main)/main-client-layout.tsx b/apps/blog/src/app/(main)/main-client-layout.tsx index 8f5051a..38e0f42 100644 --- a/apps/blog/src/app/(main)/main-client-layout.tsx +++ b/apps/blog/src/app/(main)/main-client-layout.tsx @@ -52,7 +52,7 @@ export default function MainClientLayout({ 평소엔 sr-only로 숨기고 포커스되면 좌상단에 노출한다. */} 본문으로 건너뛰기 diff --git a/apps/blog/src/app/global.css b/apps/blog/src/app/global.css index 20bfb68..cd70226 100644 --- a/apps/blog/src/app/global.css +++ b/apps/blog/src/app/global.css @@ -1,10 +1,11 @@ @import 'tailwindcss'; -/* === 디자인 토큰 (#94) === - 의미 기반 색 토큰의 단일 출처. 컴포넌트는 bg-[var(--color-brand)] 형태의 - arbitrary 유틸리티로 참조한다(이 프로젝트의 Turbopack+v4 빌드에서 @theme는 - 유틸리티를 생성하지 않아, 코드베이스가 이미 쓰는 arbitrary value 방식으로 통일). */ -:root { +/* === 디자인 토큰 (#94, #120) === + Tailwind v4 @theme로 의미 기반 색 토큰을 정의한다. 각 토큰은 bg-brand/text-ink/ + border-border 등 깔끔한 유틸리티로 생성되며, :root에 CSS 변수로도 노출된다. + (#94에서 @theme가 안 된다고 본 것은 빌드 산출물의 minify된 값(#00ff00→#0f0)을 + minify 전 문자열로 grep한 오진이었음 — #120에서 정정하고 arbitrary value를 제거함) */ +@theme { /* 브랜드 액센트(인디고) 스케일. */ --color-brand: #6366f1; /* 비텍스트 액센트(포커스 링 등) */ --color-brand-strong: #4f46e5; /* 브랜드 위 흰 텍스트용 — 대비 AA(6.3:1) 확보 */ diff --git a/apps/blog/src/components/badge.tsx b/apps/blog/src/components/badge.tsx index 424cb98..5dc2fbf 100644 --- a/apps/blog/src/components/badge.tsx +++ b/apps/blog/src/components/badge.tsx @@ -29,7 +29,7 @@ export function Badge({ href, children, onClick, color = 'secondary', active }: 'md:px-[12px] md:py-[6px]', 'whitespace-nowrap', color === 'primary' - ? 'bg-[var(--color-brand-strong)] text-white' + ? 'bg-brand-strong text-white' : 'bg-gray-100 text-gray-700', 'hover:brightness-95 active:brightness-90', )} diff --git a/apps/blog/src/components/dropdown-menu.tsx b/apps/blog/src/components/dropdown-menu.tsx index 8177042..0ae6915 100644 --- a/apps/blog/src/components/dropdown-menu.tsx +++ b/apps/blog/src/components/dropdown-menu.tsx @@ -151,7 +151,7 @@ export function DropdownMenu({ title, items, leftOffset = 0, ...option }: Dropdo id={listId} ref={dropdownBodyRef} className={classNames( - 'absolute top-6 bg-[var(--color-ink)] z-50 px-2 py-4 flex-col transition-all duration-300', + 'absolute top-6 bg-ink z-50 px-2 py-4 flex-col transition-all duration-300', 'rounded-b-lg drop-shadow-2xl', visible ? 'block' : 'hidden' )} diff --git a/apps/blog/src/components/introduce-card.tsx b/apps/blog/src/components/introduce-card.tsx index 1bbeaef..aa06fb3 100644 --- a/apps/blog/src/components/introduce-card.tsx +++ b/apps/blog/src/components/introduce-card.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames'; export function IntroduceCard() { // 데스크톱 첫 화면 밀도 확보를 위해 상단 마진을 md:mt-30(120px)에서 절반 수준(60px)으로 축소한다. 모바일(mt-7.5)은 유지. return ( -