디자인 토큰 & 컴포넌트 명세
클로드 디자인 프로젝트 13개 화면에서 인라인 스타일을 전수 파싱해 추출한 실측값과, 피그마로 옮기기 전에 정리할 항목의 확정안입니다. 그대로 따라 쌓으면 됩니다.
이 문서의 모든 값은 고정폭으로 조판했습니다 — 그대로 복사해 피그마에 넣으면 되는 실측값이라는 뜻입니다.
회색 바탕의 견본 영역은 제품의 실제 CSS로 렌더한 살아있는 컴포넌트입니다. 스크린샷이 아니라 실물이므로 호버도 동작합니다.
색상59개 사용 → 24개 → 정규화 후 17개
추출된 59개 중 1~2회만 쓰인 일회성 값을 걷어내면 아래 24개가 실질적인 팔레트입니다. 여기서 gray 계열 7개를 slate로 합치면 17개가 최종입니다 — 정규화 확정안 3번에 대응표가 있습니다. 아래 표는 정규화 전 실측값입니다.
브랜드 · 액션
| 토큰 제안 | 값 | 빈도 | 용도 |
|---|---|---|---|
brand/500 | #2563eb | 194 | 기본 액션, 링크, 활성 상태, 포커스, 데이터 채움 |
brand/600 | #1d4ed8 | 98 | 호버, 배지 위 텍스트 |
brand/50 | #eff6ff | 39 | 선택 배경, 아바타 바탕 |
brand/100 | #dbeafe | 29 | 섹션 테두리, "이 고객 전용" 배지 |
brand/900 | #1e3a8a | 16 | 사이드바 활성 항목, 사용자 아바타 |
brand/disabled | #93b4f5 | 4 | 비활성 기본 버튼 |
중립 — 표면과 텍스트
| 토큰 제안 | 값 | 빈도 | 용도 |
|---|---|---|---|
surface/0 | #ffffff | 301 | 카드, 모달, 입력 필드 |
surface/1 | #f8fafc | 82 | 페이지 바탕, 행 호버, 보조 패널 |
surface/2 | #f1f5f9 | 98 | 막대 트랙, 옅은 구분선, 중립 배지 |
border/base | #e2e8f0 | 181 | 카드·입력 테두리 (기본) |
border/strong | #cbd5e1 | 91 | 사이드바 링크 텍스트, 비활성 체크 |
text/muted | #94a3b8 | 205 | 캡션, 라벨, 플레이스홀더급 보조 텍스트 |
text/secondary | #64748b | 162 | 본문 보조, 설명문 |
text/tertiary | #475569 | 40 | 사이드바 버전 문자열 |
text/body | #334155 | 75 | 표 셀 값, 게이지 라벨 |
text/primary | #0f172a | 195 | 제목, 강조 수치 · 사이드바 바탕 |
sidebar/raised | #1e293b | 101 | 사이드바 호버·셀렉트·크레딧 박스 |
시맨틱
| 역할 | 배경 | 전경 | 사용처 |
|---|---|---|---|
성공 / 유지 | #dcfce7 | #15803d | "유지중" 배지, 저장 완료 알림, 완료 상태 |
주의 / 보류 | #fef3c7 | #b45309 | "보류중" 배지 |
위험 / 삭제 | #fef2f2 | #dc2626 | 삭제 버튼, 오류 메시지 (테두리 #fecaca) |
안내 박스 | #fffbeb | #a16207 | "메일이 오지 않았다면" (테두리 #fde68a) |
플랫폼 브랜드 색
대시보드 언급률 막대에만 쓰입니다. 액센트와 별개로 관리하세요.
| 플랫폼 | 값 | 아이콘 에셋 |
|---|---|---|
ChatGPT | #10a37f | assets/platform-gpt.png |
Gemini | #6366f1 | assets/platform-gemini.png |
Perplexity | #0d9488 | assets/platform-perplexity.png |
Copilot | #0ea5e9 | assets/platform-copilot.png |
타이포그래피실측 22개 크기 → 확정 8개
서체는 시스템 스택 하나입니다:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans KR", "Apple SD Gothic Neo", sans-serif.
데이터·버전 문자열에만 ui-monospace, SFMono-Regular, Menlo를 씁니다.
웨이트는 600 / 700 두 개뿐이고 800은 로그인 히어로 1회입니다.
12.5 13.5 14.5
15.5 16.5 18.5가 총 518회 등장합니다.
같은 군 안에서는 내림을 택했습니다 — 반올림과 달리 레이아웃이 커지지 않아 기존 화면이 깨지지 않습니다.
아래가 확정 스케일입니다. 크기 8개 · 텍스트 스타일 10개. 실측 22개 크기가 전부 여기로 흡수됩니다.
| 확정 | 스타일명 | 흡수하는 실측값 | 역할 | 견본 |
|---|---|---|---|---|
| 34 / 800 | display | 26 · 36 · 38 · 40 | 로그인 히어로 | AI가 추천하는 병원 |
| 21 / 700 | title-lg | 21 · 22 | 페이지 제목 · 인증 화면 제목 | GEO 현황 대시보드 |
| 18 / 700 | title-md | 19 · 18 · 18.5 | 모달 제목 · 아바타 이니셜 | 병원 등록 정보 |
| 16 / 700 | title-sm | 16 · 16.5 · 17 | 카드 제목 · 인풋 텍스트 | 병원 운영 채널 |
| 15 / 600 | body-strong | 15 · 15.5 · 16.5 | 버튼 · 강조 라벨 | 리포트 생성 |
| 15 / 400 | body | 15 · 15.5 | 본문 기본 · 폼 라벨 · 메뉴 | 등록된 채널을 기준으로 산출합니다 |
| 14 / 600 | body-sm-strong | 14 · 14.5 | 표 수치 · 값 라벨 | 65% |
| 14 / 400 | body-sm | 14 · 14.5 | 보조 텍스트 · 표 셀 · 칩 | 최근 수집일 2026-08-11 |
| 13 / 600 | label | 13 · 13.5 | 배지 · 열 헤더 · 필터 | 유지중 |
| 12 / 400 | caption | 12 · 12.5 | 캡션 · 버전 문자열 | 진단 이력 없음 |
굵기는 400 · 600 · 700 세 개로 충분합니다. 800은 로그인 히어로 1곳뿐이라 display 스타일에 흡수했습니다. 실측 18px 중 14회는 텍스트가 아니라 아이콘·아바타 치수이므로 텍스트 스타일이 아닙니다 — 컴포넌트 크기로 관리하세요.
font-size: clamp(14px, 24cqw, 34px) — 도넛 폭에 비례해 커집니다.
피그마에서는 34px / 700 고정으로 두고 축소 케이스만 별도 변형으로 만드세요.
간격 · 라운드 · 선
간격 (gap 실측)
4의 배수를 기본으로 하되 홀수(5·7·9)가 상당수 섞여 있습니다. 아래 8단계로 정리하면 전체의 약 90%를 덮습니다.
| 값 | 빈도 | 대표 용도 | 시각 |
|---|---|---|---|
| 4px | 28 | 사이드바 항목 간, 아이콘-텍스트 밀착 | |
| 6px | 48 | 칩 내부, 인라인 아이콘 | |
| 8px | 89 | 칩 그룹, 폼 라벨-필드 | |
| 10px | 95 | 가장 흔함 — 버튼 그룹, 아바타-텍스트 | |
| 12px | 57 | 카드 내부 블록, 사이드바 하단 | |
| 14px | 46 | 폼 2열 그리드, 헤더 아바타 | |
| 18px | 11 | 대시보드 카드 사이 | |
| 20px | 14 | 섹션 사이 |
모서리 라운드
| 값 | 빈도 | 적용 대상 | 시각 |
|---|---|---|---|
| 6px | 81 | 사이드바 링크, 작은 버튼, 아이콘 히트영역 | |
| 8px | 176 | 기본 — 버튼, 인풋, 모달 내부 요소 | |
| 9 · 10px | 109 | 본문 버튼, 인증 화면 인풋, 보조 패널 | |
| 12px | 34 | 카드 | |
| 14px | 7 | 모달 | |
| 999px | 79 | 배지, 칩, 진행 막대 | |
| 50% | 49 | 아바타, 라디오, 도넛 |
선과 그림자
| 역할 | 값 | 비고 |
|---|---|---|
| 테두리 — 기본 | 1px solid #e2e8f0 | 카드, 인풋(본문), 표 헤더 |
| 테두리 — 폼(모달) | 1px solid #d1d5db | 모달 안 인풋만 다른 회색 ↓ |
| 구분선 — 내부 | 1px solid #f1f5f9 | 표 행, 카드 헤더 아래 |
| 포커스 링 | 0 0 0 3px rgba(37,99,235,.15) | 테두리는 #2563eb로 함께 변경 |
| 모달 그림자 | 0 24px 60px rgba(0,0,0,.35) | 배경은 rgba(15,23,42,.5) + blur(6px) |
| 인증 카드 그림자 | 0 24px 60px rgba(15,23,42,.08) | 비밀번호 찾기 · 회원가입 |
일반 카드에는 그림자가 없습니다. 1px 테두리만으로 표면을 구분합니다.
입력 필드인풋 · 셀렉트 · 텍스트에어리어
견본 — 좌: 기본, 우: 필수 강조(2px 액센트 테두리)
| 변형 | 테두리 | 패딩 | 라운드 | 글자 | 사용처 |
|---|---|---|---|---|---|
| 기본 (모달) | 1px #d1d5db | 9 12 | 8 | 15.5 | 모달 폼 전반 |
| 필수 강조 | 2px #2563eb | 10 12 | 8 | 16 | 병원명 — 유일한 필수 항목 |
| 인라인 추가 | 1px #d1d5db | 8 12 | 8 | 15 | "카테고리 추가" 입력 |
| 본문 검색 | 1px #e2e8f0 | 10 16 | 10 | 15 | 병원명 검색 (width:380px) |
| 인증 화면 | 1px #e2e8f0 | 15 16 | 10 | 16 | 로그인·회원가입 (넉넉한 높이) |
| 비밀번호 | 1px #e2e8f0 | 15 46 15 16 | 10 | 16 | 우측 46px는 눈 아이콘 자리 |
| 오류 상태 | 1px #f87171 | 동일 | 아래 #dc2626 / 14.5px 메시지 | ||
| 텍스트에어리어 | 1px #d1d5db | 10 12 | 8 | 15.5 | min-height:64px, 세로 리사이즈 |
appearance:none + 우측 패딩 확보 후
14×14 쉐브론 SVG를 position:absolute; right:10~14px로 얹습니다.
사이드바 버전은 padding:9px 34px 9px 20px, 본문 버전은 10px 40px 10px 14px.
피그마에서는 화살표를 컴포넌트 안에 포함시키세요.
인증 코드 입력 (6칸)
견본 — 채워짐 #2563eb / 빈 칸 #e2e8f0 / 오류 #f87171. 테두리 1.5px, 라운드 10px.
상태 배지4변형 · 값이 코드에 고정
병원 관리상태는 제안 · 유지 · 보류 · 종료 4개로 닫혀 있습니다. 목록에서는 원형(제안), 상세 헤더에서는 "~중"이 붙습니다(제안중).
견본 — 좌측 4개는 목록형, 이후는 헤더형 · 라벨형 · 카운트형
| 상태 | 배경 | 전경 | 헤더 라벨 |
|---|---|---|---|
| 제안 | #eff6ff | #1d4ed8 | 제안중 |
| 유지 | #dcfce7 | #15803d | 유지중 |
| 보류 | #fef3c7 | #b45309 | 보류중 |
| 종료 | #f1f5f9 | #64748b | 종료 |
목록형 13.5px / 600 · padding 3px 10px · 헤더형 13.5px / 700 · 라벨형 13px / 600 · padding 2px 8px · 전부 radius 999px
칩3용도
진료과목 선택, 카테고리·지역 관리, 필터에 각각 다른 칩이 쓰입니다. 형태는 비슷하지만 상호작용이 다르므로 별개 컴포넌트로 만드세요.
진료과목 토글 — 선택 / 미선택
선택 border #2563eb · bg #eff6ff · text #1d4ed8 / 미선택 #d1d5db · #fff · #4b5563 · padding 6px 13px · 14.5px
카테고리 · 지역 칩 — 카운트 + 편집 + 삭제
좌: 기본 · 우: 편집 중(테두리 #2563eb, 인풋 폭 72px) — 7개 화면에서 동일
플랫폼 필터
실제 화면에서는 텍스트 대신 19~20px 플랫폼 아이콘이 들어갑니다. 라운드 8px로 칩과 다릅니다.
라디오 (관리상태 선택)
링 17px / 2px, 점 9px · 선택 #2563eb / 미선택 링 #9ca3af + 투명 점
막대 · 게이지
진행 막대
트랙 h 6px · #f1f5f9 · radius 999px · 채움 #2563eb(기본) 또는 플랫폼 색 · 값 라벨 14px/600 · width 38px · 우측정렬
도넛 게이지
견본 — 채움 / 채움 / 데이터 없음
| 속성 | 값 | 비고 |
|---|---|---|
| 바깥 지름 | max-width 176px · aspect-ratio 1 | 3열 그리드에서 유동 |
| 링 구현 | conic-gradient(#2563eb 0% N%, #e2e8f0 N% 100%) | SVG 아님 — 피그마에서는 원형 진행바로 |
| 안쪽 구멍 | 74% · #fff | 링 두께 = 반지름의 13% |
| 데이터 없음 | background #e2e8f0 | 그라디언트 없이 단색, 라벨은 – |
| 중앙 숫자 | clamp(14px, 24cqw, 34px) / 700 | 색 #0f172a, line-height 1 |
| 하단 라벨 | 15px / 600 · #334155 | 캡션 12px · #94a3b8 |
카드가장 많이 쓰이는 컨테이너
견본 — 헤더 + 본문 + 푸터 3단 구조
| 영역 | 스펙 | 비고 |
|---|---|---|
| 컨테이너 | #fff · 1px #e2e8f0 · radius 12px | 그림자 없음. 스크롤 있으면 overflow:hidden |
| 헤더 | padding 14~16px 20~22px · border-bottom 1px | 구분선은 #f1f5f9 또는 #e2e8f0 ↓ |
| 헤더 제목 | 16~17px / 700 · #0f172a | 우측에 필터·버튼 배치 |
| 헤더 부제 | 14.5px · #94a3b8 · margin-top 5px | 선택 |
| 본문 | padding 18~26px 20~22px | 표를 넣을 땐 패딩 0 |
| 푸터 | padding 16px 22px · border-top 1px #f1f5f9 | 검색 + 페이지 크기 + 페이지네이션 |
| 카드 간격 | gap 18px | 대시보드 2열 그리드 |
강조 패널 (모달 내부)
border #dbeafe · bg #f8fafc · radius 10px · padding 14px 16px — 7개 화면 반복
모달컴포넌트 1개 · 변형 2개 (신규 / 수정)
7개 화면이 같은 팝업을 씁니다. 코드에서도 hospital-modal.js로 분리돼 있습니다.
컴포넌트는 하나, 최상위 변형은 신규·수정 둘입니다. 그 외 상태는 변형이 아니라
안에 든 자식 컴포넌트의 상태로 처리하세요 — 그래야 변형이 2×2×2로 폭발하지 않습니다.
변형 축 — 모드 = 신규 | 수정
| 항목 | 신규 | 수정 |
|---|---|---|
| 제목 | 병원 등록 | 병원 등록 정보 |
| 삭제 버튼 | 없음 | 있음 · 좌측 정렬(margin-right:auto) |
| 병원명 | 빈값 + 예: 서울 정형외과의원 | 저장된 이름 |
| 진료과목 | 전부 미선택 | 1개 선택됨 |
| 관리상태 | 제안 고정 | 저장된 값 |
| 진료카테고리 | 빈 목록 — 과목 선택 시 채워짐 | 목록 + 쿼리 카운트 |
| 지역카테고리 | 공통 1개만 | 저장된 목록 + 카운트 |
| 나머지 필드 | 전부 빈값 + placeholder | 저장값 |
| 진입점 | 업체등록 관리 + 병원 등록 | 7개 화면의 연필 아이콘 · 상세 › |
변형이 아닌 것 — 자식 컴포넌트의 상태
아래는 신규·수정 양쪽에서 똑같이 일어납니다. 모달 변형으로 만들지 말고 해당 자식 컴포넌트에 불리언 속성을 두세요.
| 상태 | 어디에 두나 | 속성 |
|---|---|---|
| 진료과목 선택 / 미선택 | 진료과목 칩 | 선택 = on | off |
| 카테고리 칩 편집 중 | 카테고리 칩 | 편집 = on | off |
| 지역 칩 편집 중 | 지역 칩 | 편집 = on | off |
| 관리상태 라디오 | 라디오 | 선택 = on | off |
| 카테고리 목록 비어 있음 | 칩 그룹 (인스턴스 0개) | 속성 불필요 |
| 본문 스크롤 | 본문 프레임 | 오토레이아웃 + 고정 높이 |
공통 스펙
| 영역 | 스펙 |
|---|---|
| 오버레이 | rgba(15,23,42,.5) · backdrop-filter blur(6px) · z-index 50~130 |
| 오버레이 패딩 | clamp(80px, 18vh, 220px) 20px |
| 패널 | width 560px · radius 14px · shadow 0 24px 60px rgba(0,0,0,.35) |
| 헤더 | padding 22px 28px 16px · border-bottom 1px #f1f5f9 · 제목 19px/700 |
| 닫기 ✕ | #64748b · 18px · hover #0f172a |
| 본문 | padding 20px 28px 4px · overflow-y auto |
| 푸터 | padding 14px 28px · border-top 1px #f1f5f9 · 우측 정렬 · gap 10px |
| 폼 2열 | grid-template-columns 1fr 1fr · gap 14px |
| 폼 라벨 | 15px · #374151 · margin-bottom 6px |
| 블록 간격 | margin-bottom 16 / 18 / 22px |
본문 필드 순서: 병원명* → 진료과목 칩 → 특성 설명 → 관리상태 라디오 → 진료카테고리 패널 → 지역카테고리 패널 → 위치·전화 2열 → 계약일·담당자 2열 → 메모
페이지 헤더2종
병원 컨텍스트 헤더 — 진단 화면 5개
아바타 44px · radius 10px · bg #eff6ff · 18px/700 #2563eb · 이름 21px/700 · 메타 15px #64748b · 연필 히트영역 22px · radius 6px
단순 제목 헤더 — 관리 화면 4개
21px/700 + 15px #64748b, 아래 여백 22px
푸터 · 빈 상태 · 스텝
목록 푸터 (검색 + 페이지 크기 + 페이지네이션)
화살표 26×26 · 1px #e2e8f0 · radius 8px · 카운트 13.5px #94a3b8 — 대시보드 4개 카드에서 반복
빈 상태
우측 상단 "채널 추가"를 눌러 홈페이지·블로그·SNS 주소를 등록해주세요.
padding 52px 20~22px · 15px #94a3b8 · line-height 1.7 · 2행 구조(현상 + 다음 행동)
스텝 인디케이터 — 회원가입 3단계 / 비밀번호 찾기 2단계
완료 ✓ #2563eb · 현재 점 #2563eb · 라벨 700 #0f172a · 대기 점 #cbd5e1 · 라벨 #94a3b8 · 연결선 56×2px (지난 구간 #2563eb) · 열 폭 96px(회원가입) / 106px(비밀번호)
페이지 셸
| 유형 | 스펙 | 화면 |
|---|---|---|
| 앱 셸 | flex · min-height 100vh · bg #f8fafc · 사이드바 240px + 본문 flex 1 | 9개 |
| 본문 패딩 | 28px 32px (일부 28px 36px · 하단 56px) | — |
| 인증 셸 (분할) | flex · 좌 56% #f1f5f9 + 우 46% #fff | 로그인 |
| 인증 셸 (카드) | bg #eef2f7 · 카드 max-width 1080px · radius 20px | 회원가입 · 비밀번호 찾기 |
정규화 확정안6건 · 그대로 적용하면 됩니다
13개 화면을 실측하니 6가지가 어긋나 있었습니다. 각각 아래로 확정했습니다. 판단 기준은 하나입니다 — 가장 많이 쓰인 값을 남기고, 애매하면 레이아웃이 커지지 않는 쪽을 택한다. 6건 모두 최대 1px 차이라 눈에 보이는 변화는 없습니다.
1. 0.5px 글자 크기 → 내림으로 정수화
518회 등장. 내림이면 기존 레이아웃이 절대 커지지 않아 줄바꿈이 깨지지 않습니다. 반올림하면 14.5→15처럼 커지는 값이 생겨 표 열 폭이 밀립니다.
| 실측 | 확정 | 영향 |
|---|---|---|
| 12.5 | 12 | 버전 문자열 — 변화 없음 |
| 13.5 | 13 | 배지 · 열 헤더 · 필터 |
| 14.5 | 14 | 가장 많음(188회) — 표 셀 · 칩 · 보조 텍스트 |
| 15.5 | 15 | 모달 폼 · 버튼 라벨 |
| 16.5 | 15 | 큰 버튼 — 15/600으로 흡수해 버튼 텍스트를 1개로 통일 |
| 18.5 | 18 | 인증 완료 제목 1곳 |
| 17 | 16 | 카드 제목 — 16과 역할이 같아 통합 |
| 19 | 18 | 모달 제목 — 21로 올리면 2px 커지므로 18로 내림 |
| 22 | 21 | 인증 화면 제목 — 페이지 제목과 통합 |
2. 테두리 회색 → #e2e8f0 하나로
본문은 #e2e8f0(181회), 모달 폼만 #d1d5db(70회)를 씁니다. 같은 역할에 두 값이 쓰일 근거가 코드에 없고, #d1d5db는 slate가 아니라 gray 계열이라 아래 3번과도 충돌합니다. 전부 #e2e8f0으로 통일합니다 — 모달 인풋이 아주 미세하게 밝아지지만 카드·본문 인풋과 톤이 맞습니다.
3. gray 계열 → slate 계열로 통일
Tailwind slate와 gray가 섞여 있습니다. 나란히 놓으면 gray 쪽이 살짝 누렇게 보입니다. 다수인 slate로 통일합니다.
| 현재 (gray) | 확정 (slate) | 용도 |
|---|---|---|
#111827 | #0f172a | 모달 입력 텍스트 (50회) |
#374151 | #334155 | 폼 라벨 · 보조 버튼 텍스트 (80회) |
#4b5563 | #475569 | 미선택 칩 텍스트 |
#6b7280 | #64748b | 날짜 입력 텍스트 |
#9ca3af | #94a3b8 | 플레이스홀더 · 미선택 라디오 링 |
#d1d5db | #e2e8f0 | 폼 테두리 — 2번과 동일 건 |
#f9fafb | #f8fafc | 보조 버튼 호버 |
이걸 적용하면 색상 24개가 17개로 줄고, 팔레트가 slate + blue + 시맨틱 4색으로 깔끔하게 정리됩니다.
4. 카드 헤더 패딩 → 2가지로
현재 12·13·14·16px × 20·22px 조합이 6가지입니다. 실제로는 역할이 둘뿐입니다.
| 역할 | 확정 | 흡수 |
|---|---|---|
| 카드 헤더 | 16px 22px | 14×20 · 16×20 · 16×22 · 13×20 — 최다 사용값 |
| 표 열 헤더 | 12px 22px | 12×22(8회) — 조밀해야 하므로 유지 |
5. 구분선 → 위치로 결정
같은 자리에 #e2e8f0과 #f1f5f9가 섞여 있습니다. 규칙을 이렇게 고정합니다.
| 위치 | 확정 | 근거 |
|---|---|---|
| 카드·모달 바깥 테두리 | #e2e8f0 | 표면 경계는 또렷해야 함 |
| 카드·모달 내부 구분선 | #f1f5f9 | 헤더 아래, 푸터 위, 표 행 사이 |
6. 라운드 → 6단계
| 실측 | 확정 | 적용 대상 |
|---|---|---|
| 2 · 3 · 5 · 6 · 7 | 6 | 사이드바 링크 · 작은 버튼 · 아이콘 히트영역 |
| 8 · 9 | 8 | 기본 — 버튼 · 인풋 · 셀렉트 (9는 본문 버튼, 8로 통일) |
| 10 · 11 | 10 | 인증 화면 인풋 · 강조 패널 · 코드 입력칸 |
| 12 | 12 | 카드 |
| 14 · 16 · 20 | 14 | 모달 · 인증 카드 |
| 999 · 50% | 999 / 50% | 배지 · 칩 · 막대 / 아바타 · 라디오 · 도넛 |
덤으로 발견한 것
freshCats()는 하드코딩된 숫자를 쓰고(임플란트 111),
hospital-modal.js의 freshCats()는 실제 등록 쿼리를 셉니다(강남치과병원 임플란트 2).
같은 병원을 두 경로로 열면 다른 수가 보입니다. 디자인 이슈는 아니지만 개발로 넘길 때 짚어주세요 —
실제 쿼리를 세는 쪽이 맞습니다.
진단 > 채널 설정.dc.html은 원본이 206바이트짜리 빈 껍데기(<x-dc></x-dc>)입니다.
임포트 실패가 아니라 클로드 디자인에 그 상태로 저장돼 있습니다. 피그마에서 만들 화면은 12개입니다.
구축 순서
의존 관계상 아래 순서가 되돌아가는 작업이 가장 적습니다.
- 변수(Variables) 먼저 — 색 17개. 정규화 3번을 적용한 값으로 등록합니다. #2563eb가 아니라
brand/500으로 부르기 시작해야 이후 컴포넌트가 전부 따라옵니다. 여기서 gray를 섞어 넣으면 끝까지 따라다닙니다. - 텍스트 스타일 10개. 확정 스케일 그대로 — 크기 8개, 굵기 400 / 600 / 700.
- 이펙트 스타일 3개. 포커스 링, 모달 그림자, 인증 카드 그림자. 카드에는 그림자가 없다는 점을 기억하세요.
- 프리미티브. 버튼(4변형×3크기) → 입력 필드(8변형) → 배지(4상태) → 칩(3용도, 편집 불리언 포함) → 라디오 → 진행 막대. 칩과 라디오의 on/off 속성을 여기서 제대로 만들어두면 모달 변형이 2개로 끝납니다.
- 사이드바 — 변형 8개. 활성 항목 7개 + 없음. 9개 화면에 100% 동일하므로 이걸 먼저 만들어두면 이후 모든 앱 화면이 인스턴스 하나로 시작합니다.
- 모달 — 변형 2개. 신규 / 수정. 나머지 케이스는 4번에서 만든 자식 컴포넌트의 상태로 처리합니다. 7개 화면이 이 인스턴스 하나를 공유합니다.
- 카드 · 페이지 헤더 · 목록 푸터. 슬롯을 둔 컨테이너로 만들어 내용만 교체하도록.
- 화면 12개 조립. 앱 화면 9개 → 인증 화면 3개 순서. 앱 화면은 사이드바 인스턴스 + 본문이라 빠르게 진행됩니다.
데이터 시각화(도넛·막대)는 피그마에서 정적 프레임으로 두는 편이 낫습니다.
도넛은 conic-gradient라 원형 진행바 플러그인이나 아크 도형으로 근사해야 하고, 값이 바뀔 일이 없으면 노력 대비 효용이 낮습니다.