Foundations

Color

사용 예시

토큰 이름

해당하지 않는 부분은 생략하고, 클래스는 Tailwind 접두사 뒤에 붙여요.

--color-속성-역할-변형-상태

속성
-fg글자
-bg배경
-line선
역할
-neutral기본
-brand주된 동작
-info안내
-success완료
-warning주의
-danger오류, 위험
변형
-solid채운 배경
-weak옅은 배경과 그 테두리
-contrast배경 위 글자
-strong더 진한 선
-muted-subtle-placeholder-well-panel-overlay-knob-focus-ring
상태
-hover
-disabled
-checked
-selected
--color-bg-brand-solidbg-bg-brand-solid--color-fg-dangertext-fg-danger--color-bg-wellbg-bg-well--color-bg-brand-solid-hoverhover:bg-bg-brand-solid-hover

팔레트

단계가 클수록 두 모드 모두 배경에서 멀어요.

라이트
50 ~ 900
gray
brand
blue
green
orange
red
다크
50 ~ 900
gray
brand
blue
green
orange
red

배경색

안으로 들어간 곳은 well, 카드와 플로팅 요소는 panel, Dialog 뒤는 overlay를 써요.

라이트
bg
bg-well
bg-panel
bg-overlay
다크
bg
bg-well
bg-panel
bg-overlay
tsx
<div className="bg-bg" /><div className="bg-bg-well" /><div className="bg-bg-panel" /><div className="bg-bg-overlay" />

글자색

라이트

제목, 본문, 값

설명과 부제

표 헤더와 단위

Input의 placeholder

비활성 컨트롤

다크

제목, 본문, 값

설명과 부제

표 헤더와 단위

Input의 placeholder

비활성 컨트롤

tsx
<p className="text-fg">제목, 본문, 값</p><p className="text-fg-muted">설명과 부제</p><p className="text-fg-subtle">표 헤더와 단위</p><p className="text-fg-placeholder">Input의 placeholder</p><p className="text-fg-disabled">비활성 컨트롤</p>

선색

라이트
line
line-strong
line-focus-ring
다크
line
line-strong
line-focus-ring
tsx
<hr className="border-line" /><input className="border-line-strong border" /><button className="focus-visible:outline-2 focus-visible:outline-line-focus-ring" />

색 역할

뜻에 맞는 역할을 골라요. 이름에서 역할만 바뀌어요.

solidweak
brand
새 기능이 추가됐어요
info
업데이트가 있어요
success
저장했어요
warning
저장 공간이 거의 찼어요
danger
지울 수 없어요
tsx
<span className="bg-bg-info-solid size-6" /><div className="bg-bg-info-weak border-line-info-weak text-fg-info-contrast border">  <Info className="text-fg-info size-4" />  업데이트가 있어요</div>

투명도

/숫자는 불투명도예요. 토큰으로 두지 않는 hover, 비활성, 옅은 배경에 붙여요.

배경

기준
/20 비활성
/10 hover

글자

저장하기기준
저장하기/40 비활성
tsx
<button className="bg-bg-brand-solid disabled:bg-bg-brand-solid/20">저장하기</button><button className="bg-bg-brand-weak hover:bg-bg-brand-solid/10 disabled:text-fg-brand-contrast/40">지우기</button>

다크 모드

className="text-fg"

라이트

주문 3건을 보냈어요

다크

주문 3건을 보냈어요

style={{ color: '#191f28' }}

라이트

주문 3건을 보냈어요

다크

주문 3건을 보냈어요

주된 동작

색과 아이콘

성공실패

추가 가이드

값 바꾸기

전역 CSS에 라이트와 다크 값을 둘 다 적어요. 변수 이름은 --color- 대신 --pds-로 시작해요. 한 곳만 바꿀 때는 className을 써요.

css
@import "tailwindcss";@import "@pantoia/ui/tailwind.css";/* 토큰 하나. 그 토큰을 쓰는 곳이 전부 바뀌어요 */:root, .light { --pds-bg-brand-solid: #9c63e4; }.dark         { --pds-bg-brand-solid: #9c63e4; }/* 팔레트 단계. 그 단계를 참조하는 토큰이 전부 바뀌어요 */:root, .light { --pds-brand-500: #9c63e4; }.dark         { --pds-brand-500: #9c63e4; }

새 값 더하기

새 역할이 필요할 때 써요. 있는 팔레트를 참조하면 팔레트는 건너뛰어요.

css
/* 팔레트. 라이트와 다크에 10단계씩 */:root, .light { --pds-purple-50: #faf5ff; /* 100 ~ 800 */ --pds-purple-900: #581c87; }.dark         { --pds-purple-50: #2e1065; /* 100 ~ 800 */ --pds-purple-900: #f3e8ff; }/* 토큰. 필요한 것만 */:root, .light, .dark {  --pds-bg-purple-solid:    var(--pds-purple-500);  --pds-bg-purple-weak:     var(--pds-purple-50);  --pds-fg-purple:          var(--pds-purple-500);  --pds-fg-purple-contrast: var(--pds-purple-700);  --pds-line-purple-weak:   var(--pds-purple-200);}/* Tailwind에 알려요. bg-bg-purple-solid, text-fg-purple처럼 써요 */@theme inline {  --color-bg-purple-solid:    var(--pds-bg-purple-solid);  --color-bg-purple-weak:     var(--pds-bg-purple-weak);  --color-fg-purple:          var(--pds-fg-purple);  --color-fg-purple-contrast: var(--pds-fg-purple-contrast);  --color-line-purple-weak:   var(--pds-line-purple-weak);  --color-pds-purple-500:     var(--pds-purple-500); /* 팔레트 클래스가 필요할 때 */}

명세

팔레트

토큰이 참조하는 값이에요. bg-pds-brand-500처럼 클래스로도 써요.

팔레트
이름값설명
--pds-gray-*50 ~ 900neutral, 글자, 선
--pds-brand-*50 ~ 900brand
--pds-blue-*50 ~ 900info, focus-ring
--pds-green-*50 ~ 900success
--pds-orange-*50 ~ 900warning
--pds-red-*50 ~ 900danger

색 토큰

값이 2개면 라이트, 다크 순이에요.

색 토큰
이름값설명
배경
bg-bg#ffffff, #17171c페이지
bg-bg-well#f2f4f6, #2c2c35Input, 표 헤더
bg-bg-panel#ffffff, #202027카드, 플로팅 요소
bg-bg-overlayrgba(0,0,0,.2), rgba(0,0,0,.56)Dialog 뒤
글자
text-fggray-900제목, 본문
text-fg-mutedgray-700설명
text-fg-subtlegray-500표 헤더, 단위
text-fg-placeholdergray-400
text-fg-disabledgray-600
선
border-linegray-200구분선
border-line-stronggray-300컨트롤 테두리
outline-line-focus-ringblue-500키보드 포커스
brand
bg-bg-brand-solidbrand-500주된 동작 버튼
bg-bg-brand-solid-hoverbrand-600
text-fg-brand-solid-contrast#ffffff
bg-bg-brand-weakbrand-50
text-fg-brand-contrastbrand-700brand 글자
border-line-brand-weakbrand-200
neutral
bg-bg-neutral-solidgray-900체크된 컨트롤, Toast
bg-bg-neutral-solid-hovergray-800
bg-bg-neutral-solid-checked-disabledgray-600
text-fg-neutral-solid-contrastgray-50
border-line-neutral-solidgray-900체크된 컨트롤
bg-bg-neutral-disabledgray-200비활성 Input
bg-bg-neutral-hoverrgba(0,23,51,.02), rgba(209,209,253,.05)메뉴 항목, 표 행
bg-bg-neutral-selectedrgba(2,32,71,.05), rgba(217,217,255,.11)
bg-bg-neutral-selected-hoverrgba(0,27,55,.1), rgba(222,222,255,.19)
bg-bg-neutral-trackgray-300꺼진 Switch의 트랙
bg-bg-neutral-knob#ffffff, #2c2c35켜진 Switch의 손잡이
bg-bg-neutral-knob-off#ffffff, gray-800꺼진 Switch의 손잡이
info
bg-bg-info-solidblue-500
bg-bg-info-weakblue-50
text-fg-info-contrastblue-700
border-line-info-weakblue-200
text-fg-infoblue-500아이콘
border-line-infoblue-500체크된 컨트롤
success
bg-bg-success-solidgreen-500
bg-bg-success-weakgreen-50
text-fg-success-contrastgreen-700
border-line-success-weakgreen-200
text-fg-successgreen-500아이콘
border-line-successgreen-500체크된 컨트롤
warning
bg-bg-warning-solidorange-500
bg-bg-warning-weakorange-50
text-fg-warning-contrastorange-700
border-line-warning-weakorange-200
text-fg-warningorange-500아이콘
border-line-warningorange-500체크된 컨트롤
danger
bg-bg-danger-solidred-500
bg-bg-danger-solid-hoverred-600
bg-bg-danger-weakred-50
text-fg-danger-contrastred-700
border-line-danger-weakred-200
text-fg-dangerred-500아이콘
border-line-dangerred-500체크된 컨트롤
그 밖
bg-white#ffffff
bg-black#000000