-
Notifications
You must be signed in to change notification settings - Fork 0
Design System
Sonne edited this page Jan 16, 2026
·
4 revisions
세모(Delta-front)의 디자인 시스템은 Vanilla Extract 기반 토큰 → 유틸 클래스(color/typo) → 컴포넌트 순서로 확장됩니다.
목적은 “픽셀 단위 일관성”을 강제하고, 스타일을 재사용/유지보수 가능한 구조로 만드는 것입니다.
shared/styles/theme.css.ts- 색상/타이포/라운드/섀도우/스페이싱을 토큰으로 정의
-
createThemeContract로 타입 안정성을 확보하고,createTheme로 실제 값을 주입합니다.
-
shared/styles/color.css.ts→color,bgColor,*Gradient -
shared/styles/typography.css.ts→typo - 컴포넌트는 “원시 hex/px” 대신 유틸 클래스를 조합하는 방식으로 작성합니다.
-
shared/styles/css.ts(또는 global.css 계열) - html/body 기본 설정, 앱 컨테이너(rootStyle) 폭/높이/배경/그림자 등 앱 전체 레이아웃을 통제합니다.
-
vars.color.main[500]처럼 토큰 경로가 고정 - 잘못된 토큰 접근을 컴파일 타임에 잡을 수 있어요.
현재 contract는 아래 그룹을 포함합니다.
-
Color
-
main(50~900),grayscale(0~1000),overDim(40) - success/warning/error
- login(kakao/bgGradient)
- etc(crown/myGradient/wrongCardGradient)
-
-
Space:
0 / 2 / 3 / 4 / 6 -
Radius:
sm/md/lg+r4~r64+full -
Shadow:
e100~e500 - Typography: h1/h2/h3/subtitle/body/button/caption 계열
원칙: 새 색상/크기 값이 필요하면 “컴포넌트에 바로 쓰지 말고” theme 토큰에 먼저 추가합니다.
color.css.ts는 theme 토큰을 “실제로 쓸 수 있는 클래스”로 변환합니다.
color["main-500"]color["grayscale-700"]-
color["error-500"]등
bgColor["main-50"]bgColor["grayscale-0"]-
bgColor["overDim-40"]등
myGradient["my-bg"]bgGradient["login-bg"]wrongCardGradient["wrong-card-gradient"]
원칙: 그라데이션은 클래스(style)로 만들기보다,
vars.color...값을 그대로 export해서 컴포넌트에서background: myGradient["my-bg"]처럼 사용하는 패턴을 유지합니다.
typo는 디자인 시스템의 텍스트 규격을 “클래스”로 제공합니다.
- 헤딩:
typo.h1,typo.h2,typo.h3 - 본문:
typo.body2.medium,typo.body3.semibold - 버튼:
typo.button1,typo.button2 - 캡션:
typo.caption.regular,typo.captionXs
원칙: 컴포넌트에서
fontSize: "14px"같은 직접 정의는 금지.
반드시typo.*를 사용합니다.
전역 레이아웃은 “웹앱 컨테이너”를 고정 폭으로 가운데 배치하는 구조입니다.
-
html, body: height 100%, margin 0, 폰트 패밀리 통일 -
body: 앱 외부 배경은#eeeeee
- 폭:
maxWidth: 430px,minWidth: 370px,width: 100% - 높이:
minHeight: 100dvh - 배경:
#ffffff - 데스크탑에서만 그림자:
(min-width: 431px)에boxShadow
참고: 모바일/웹뷰 환경에 따라
100dvh는 “툴바 변화”로 레이아웃 흔들림이 생길 수 있어
케이스에 따라svh기반으로 조정합니다(이미 경험한 것처럼).
- 원시 값 금지: hex/px를 컴포넌트에서 바로 쓰지 않기
-
토큰 우선: 색/타이포/라운드/섀도우는
vars기반 -
유틸 조합 우선:
color,bgColor,typo조합 - 상태 표현은 recipe/variant: hover/active/disabled/size 등
- 중복 제거: 같은 패턴이 3번 이상 반복되면 shared 유틸/상수로 승격
export const title = style([typo.h3, color["grayscale-900"]]);export const card = style([
bgColor["grayscale-0"],
{ borderRadius: vars.radius.r16, boxShadow: vars.shadow.e300 },
]);- 🏠 Home
- 🔐 Environment
- 🧰 Tech Stack
