design-foundation 디자인 시스템

생성 파일입니다. 값을 바꾸려면 design-system/foundation/tokens.json(공통) 또는 design-system/design-foundation/tokens.json(서비스)을 고치고 npm run ds:build를 실행하세요. 이 페이지와 앱이 함께 바뀝니다.

토큰 108개design-foundation 값·전용 0개테마 0종공통 규칙 foundation/RULES.md서비스 규칙 design-foundation/RULES.md

팔레트

원시 색. UI 코드에서 직접 참조하지 않는다. 역할 토큰이 이 값을 참조한다.

--palette-white#ffffff
foundation
--palette-black#000000
foundation
--palette-neutral-50#f7f7f8
foundation
--palette-neutral-100#f4f4f5
foundation
--palette-neutral-150#ececef
foundation
--palette-neutral-500#aeb0b6
foundation
--palette-neutral-650#70737c
foundation
--palette-neutral-800#37383c
foundation
--palette-neutral-950#171719
foundation

역할 색

UI 코드가 참조하는 유일한 층. 이름은 모든 서비스 공통, 값은 서비스가 정한다. 표식 design-foundation 값은 서비스가 덮어쓴 토큰, design-foundation 전용은 서비스만 가진 토큰이다.

배경 --color-bg-*

--color-bg-page#f7f7f8

페이지 배경

foundation
--color-bg-soft#f4f4f5

인풋·타일·호버 필

foundation
--color-bg-card#ffffff

카드·시트·바 표면

foundation
--color-bg-skeleton#ececef

스켈레톤 로딩 블록

foundation
--color-bg-glassrgb(255 255 255 / 96%)

blur 와 함께 쓰는 반투명 고정 바

foundation
--color-bg-overlayrgb(0 0 0 / 55%)

시트·다이얼로그 뒤 딤

foundation
--color-bg-skeleton-shinergb(255 255 255 / 55%)

스켈레톤 위를 지나가는 반짝임 하이라이트

foundation

글자·아이콘 --color-fg-*

가
--color-fg-default#171719

본문·제목·Primary 버튼 배경

foundation
가
--color-fg-secondary#37383c

보조 텍스트·아이콘

foundation
가
--color-fg-muted#70737c

메타·플레이스홀더

foundation
가
--color-fg-faint#aeb0b6

비활성·희미한 요소

foundation
가
--color-fg-inverse#ffffff

어두운 배경·액센트 배경 위 텍스트

foundation
가
--color-fg-inverse-mutedrgb(255 255 255 / 70%)

어두운 배경 위 보조 텍스트

foundation

선 --color-border-*

--color-border-defaultrgb(112 115 124 / 22%)

구분선

foundation
--color-border-subtlergb(112 115 124 / 16%)

카드·버튼 헤어라인. 카드는 그림자 대신 이것

foundation

액센트 --color-accent-*

--color-accent-default#171719

브랜드 액센트. CTA·활성 상태에만 쓴다. 서비스가 값을 지정한다

foundation
--color-accent-soft#f4f4f5

액센트 연한 배경(배지·프로모·공유 배너)

foundation
가
--color-accent-fg#171719

soft 배경 위 액센트 텍스트. 대비 4.5:1 이상

foundation
--color-accent-borderrgb(23 23 25 / 25%)

액센트 틴트 헤어라인(추천·광고 카드)

foundation
--color-accent-border-strongrgb(23 23 25 / 38%)

액센트 틴트 헤어라인 hover

foundation

긍정 --color-positive-*

--color-positive-default#009c32

성공·영업 중·새로 등록

foundation
--color-positive-soft#e5fbec
foundation

위험 --color-danger-*

--color-danger-default#ff4242

신고·삭제·오류 강조

foundation
--color-danger-soft#feebeb
foundation
가
--color-danger-fg#c21f1f

soft 배경 위 오류 텍스트

foundation

정보 --color-info-*

--color-info-default#0066ff

링크·정보

foundation
--color-info-soft#eaf2fe
foundation
가
--color-info-fg#0040a9

soft 배경 위 정보 텍스트(면책·안내)

foundation
--color-info-border#d6e6fd
foundation

주의 --color-warning-*

--color-warning-default#b07a00

주의. 텍스트용 어두운 앰버

foundation
--color-warning-soft#fff4e5
foundation
가
--color-warning-fg#9a5700
foundation

타이포 롤

컴포넌트는 롤 단위로만 쓴다. 각 롤은 size·weight·tracking·leading 네 값이다.

한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-title-md-*size 22px · weight 790 · tracking -0.024em · leading 1.3
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-title-sm-*size 20px · weight 700 · tracking -0.018em · leading 1.4
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-heading-*size 16px · weight 700 · tracking -0.01em · leading 1.4
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-body-sm-*size 15px · weight 500 · tracking 0.01em · leading 1.5
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-body-xs-*size 14px · weight 500 · tracking 0 · leading 1.5
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-label-sm-*size 13px · weight 600 · tracking 0.02em · leading 1.4
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-label-xs-*size 12px · weight 600 · tracking 0.03em · leading 1.4
한인 업소를 더 쉽게 찾으세요 Localboard 0123456789
--text-caption-*size 11px · weight 700 · tracking 0.04em · leading 1.4

간격

4pt 그리드.

--space-14px
--space-28px
--space-312px
--space-416px
--space-520px
--space-624px
--space-728px
--space-832px
--space-1040px

라운드

7종만 쓴다.

--radius-xs6px · 배지
--radius-sm8px · 작은 필드·특징 칩
--radius-md10px · 버튼·인풋
--radius-lg12px · 썸네일·타일
--radius-xl16px · 카드
--radius-2xl20px · 시트
--radius-pill999px · 칩·필

그림자

카드는 그림자 대신 헤어라인. 시트·팝오버·다이얼로그에만 쓴다.

--shadow-sm0 1px 3px rgb(23 23 25 / 8%)
--shadow-popover0 14px 40px rgb(23 23 25 / 12%)
--shadow-dialog0 24px 80px rgb(23 23 25 / 18%)

모션

색·투명도·transform만 움직인다. 아래 버튼에 마우스를 올리면 --duration-base로 불투명도만 바뀐다.

토큰값용도
--duration-fast120mstransform
--duration-base160ms색·투명도·보더
--duration-sheet240ms시트 슬라이드
--ease-outease-out

hover 데모

컨트롤 치수

버튼·인풋 높이와 터치 타깃 최소 크기.

--control-height-s32px
--control-height-m36px
--control-height-l40px
--control-height-xl48px
--control-touch-min44px · 터치 타깃 최소

레이아웃·브레이크포인트·뷰포트

브레이크포인트는 공통 토큰, 지원 뷰포트는 서비스가 선언한다.

토큰값설명층
--layout-page-width1120pxfoundation
--layout-content-width720pxfoundation
--breakpoint-sm600px큰 폰·작은 태블릿 세로foundation
--breakpoint-md768px태블릿 세로. 모바일 탭바 ↔ 상단 바 전환foundation
--breakpoint-lg1024px태블릿 가로·작은 PCfoundation
--breakpoint-xl1280pxPCfoundation
sm 600md 768lg 1024xl 1280phone 390tablet 768desktop 1280

위 눈금: 공통 브레이크포인트. 아래 강조 눈금: design-foundation가 검수하는 뷰포트 폭. 눈금 전체는 0~1440px.

design-foundation 뷰포트 선언

범위책임지는 뷰포트
publicphone 390 · tablet 768 · desktop 1280

테마 프리셋 0종

같은 마크업에 역할 토큰 값만 바꾼 결과. 원본 design-system/design-foundation/themes/*.json. 앱에서는 html[data-design]으로 적용된다.

공통 규칙 (foundation)

모든 서비스가 필수로 지킨다. 원본 design-system/foundation/RULES.md.

모든 서비스가 필수로 지키는 규칙이다. 새 서비스의 첫 화면을 그리기 전에 이 문서와 tokens.json을 읽는다. 서비스별 규칙은 design-system/<service>/RULES.md에 둔다. 규칙을 바꾸려면 이 문서를 고치고 영향받는 서비스를 모두 점검한다.

각 규칙은 [MUST]이며 "검사" 열은 어떻게 확인하는지 적는다. 2026-11-08 오너 확정.

프리미티브

공통 프리미티브 7종: Button·Card·Badge·Chip·Input(Textarea·Field 포함)·EmptyState·Skeleton. 서비스 코드는 @ds/foundation/primitives에서 import 한다. <Link>·<label>에 같은 모양이 필요하면 buttonClass·cardClass·badgeClass·chipClass 헬퍼를 쓴다. 스타일은 foundation/primitives/primitives.css 한 파일(ds- 접두사)이며 토큰만 참조한다. 세 뷰포트 전시는 /design-system.

A. 토큰과 값

#규칙검사
A1UI 코드(CSS·TSX)에서 hex·rgb 색을 직접 쓰지 않는다. --color-* 역할 토큰만 참조한다. 제3자 브랜드 가이드 고정값(예: Google 로그인 버튼)만 주석을 달고 예외로 둔다grep -E '#[0-9a-f]{3,8}' src/**/*.css 결과가 예외 주석 블록뿐이어야 한다
A2팔레트(--palette-*)를 직접 참조하지 않는다. 역할 토큰이 팔레트를 참조한다같은 grep
A3라운드는 --radius-xs/sm/md/lg/xl/2xl/pill 7종만 쓴다border-radius: 값이 토큰이 아니면 위반
A4간격은 4pt 그리드(--space-*)를 따른다리뷰
A5모션은 --duration-fast/base/sheet + --ease-out만. 색·투명도·transform만 움직인다. prefers-reduced-motion을 존중한다transition 선언 점검
A6브레이크포인트는 --breakpoint-sm/md/lg/xl 4개만. 미디어쿼리는 theme(--breakpoint-*)로 참조한다@media 선언에 숫자 px가 없어야 한다

B. 형태

#규칙검사
B1카드는 그림자 대신 헤어라인(--color-border-subtle). 그림자는 시트·팝오버·다이얼로그(--shadow-*)만카드류 셀렉터에 box-shadow 없음
B2액센트 컬러는 구두점이다. CTA·활성 상태·강조 배지에만 쓰고 배경·장식에 쓰지 않는다. 화면당 Primary 액션은 1개리뷰
B3hover는 색상 전환 없이 불투명도(0.72) 또는 뉴트럴 한 단계. press는 한 단계 더primitives.css .ds-button:hover·.ds-chip:hover opacity 0.72 — grep
B4포커스 링 2px + 오프셋 2px를 모든 상호작용 요소에 표시한다. outline: none으로 지우지 않는다globals.css 전역 :focus-visible 2px/offset 2px; 프리미티브는 outline을 지우지 않는다 — grep -n 'outline: *none' primitives.css 결과 0
B5터치 타깃 최소 44×44(--control-touch-min). 목록 행은 손가락으로 누를 만큼 넉넉하게.ds-button·.ds-input min-height가 --control-*; (pointer: coarse)에서 44px — /design-system 390 프레임 검수
B6제품 UI에 이모지를 쓰지 않는다. 아이콘 세트로 대체하고, 썸네일 결손은 첫 글자 타일TSX 문자열 이모지 lint
B7숫자는 tabular-nums. 본문 글꼴은 --font-sans(Pretendard 셀프호스팅)토큰

C. 상태와 카피

#규칙검사
C1결손이 기본 상태다. 모든 목록·상세는 빈 상태(EmptyState)를 설계하고, 로딩은 스켈레톤(Skeleton)으로 표현한다. 스피너 금지EmptyState·Skeleton 프리미티브 사용 — grep -rn 'spinner' src 0
C2미확인 정보를 부정으로 추정해 표기하지 않는다. 확인된 것만 노출한다리뷰
C3카피는 존댓말(-해요/-합니다). 제품 크롬에 느낌표 금지. 버튼은 짧은 동사형. 빈 상태는 "명사구 + 보조 문장"리뷰
C4상태색(positive·danger·info·warning)은 의미로만 쓴다. 장식·브랜드 용도로 쓰지 않는다리뷰

D. 반응형과 검증

#규칙검사
D1모든 프리미티브는 폰(390)·태블릿(768)·PC(1280) 세 구간에서 깨지지 않아야 한다. 서비스 컴포넌트는 서비스가 선언한 뷰포트(<service>/tokens.json $meta.viewports)만 책임진다showcase 3뷰포트
D2가로 스크롤이 생기면 결함이다(의도한 칩·카드 캐러셀 제외)스크린샷 검수
D3한국어 서비스는 카카오톡 인앱 브라우저 렌더 확인을 완료 기준에 넣는다QA 체크리스트
D4화면을 만들거나 고치면 사용자에게 보여주기 전에 브라우저로 열어 스크린샷과 핵심 상호작용을 직접 검수한다작업 절차

규칙이 들어오는 길

ui-feedback 서비스에 채택된 오너 디자인 원칙(fb style)은 이 문서의 후보 큐다. 분기마다 수동으로 검토해 승격한다. 자동 동기화하지 않는다.

서비스층 RULES.md에서 두 번째 서비스에도 반복되는 규칙이 나오면 여기로 올린다.

서비스 규칙 (design-foundation)

공통 규칙 위에 더해지는 서비스 전용 규칙. 원본 design-system/design-foundation/RULES.md.

이 전시는 공통 기본값만 보여 준다. 서비스별 규칙·값·테마는 각 서비스 저장소의 design-system/<service>/에 있다(예: localboard — 액센트 바이올렛, 광고 라벨, 결손 표현 규칙, 운영자 테마 7종).