Foundation

Color

PAI Design 색상 시스템과 palette 기준을 한 문서에서 함께 살펴봐요.

PAI Design 색상은 semantic role과 palette로 나뉘어요. 컴포넌트는 역할을 기준으로 색을 사용하고, palette는 그 역할을 만들 때 참고하는 원본 색상표로 사용해요.

Overview

PAI Design 색상은 2단계로 구성돼요.

무엇을 담나요언제 쓰나요
Semantic rolecolor.bg.surface, color.accent.fill, color.border.focusRing처럼 인터페이스 안의 역할레시피와 컴포넌트 구현에서 기본으로 사용해요.
Palettecolor.neutral100, color.brand500, color.red700처럼 기준이 되는 색상 scalesemantic role을 만들 때 사용하고, 예외적인 시각 표현에서 참고해요.

Semantic Role

Semantic role은 색 자체보다 화면에서 맡는 역할을 기준으로 이름을 붙여요. 같은 브랜드 색이라도 주요 액션인지, 보조 강조인지, subtle 배경인지에 따라 다른 역할을 가질 수 있어요.

현재 PAI Design은 크게 아래 역할 묶음을 사용해요.

  • color.bg.*, color.fg.*, color.border.*: 화면의 배경, 텍스트, 경계선을 나눠요.
  • color.accent.*, color.neutral.*, color.neutral.inverse.*: 주요 액션, 중립 액션, 대비가 큰 bubble을 표현해요.
  • color.danger.*, color.success.*, color.warning.*, color.border.focusRing: 상태, 피드백, 포커스 경계를 표현해요.

컴포넌트와 레시피에서는 palette 대신 semantic role을 먼저 사용해요. 그래야 브랜드 색이나 다크 모드 대비를 바꿔도 컴포넌트 코드를 다시 손대지 않아도 돼요.

기본 사용법

인터페이스를 구현할 때는 semantic role을 먼저 선택해요.

import { tokenVars } from "@pai-design/tokens";

const primaryFill = tokenVars["color.accent.fill"];
const surface = tokenVars["color.bg.surface"];

Palette 값이 직접 필요하다면 @pai-design/tokens에서 colorPalettes를 가져와 사용할 수 있어요.

import { colorPalettes } from "@pai-design/tokens";

const primaryBrand = colorPalettes.brand[500];
const surfaceNeutral = colorPalettes.neutral[100];

버튼, 배경, 보더처럼 인터페이스 역할이 이미 정해진 영역이라면 palette보다 semantic role을 먼저 사용해요.

예를 들어 Dialog처럼 떠 있는 표면은 color.bg.surface를, HelpBubble처럼 짧은 설명 bubble은 color.neutral.inverse.fill을 사용하는 식으로 역할을 나눠요.

사용하는 기준

  • 버튼, 배경, 보더처럼 이미 역할이 정해진 UI에는 palette보다 semantic role을 먼저 사용해요.
  • 주요 액션과 브랜드 강조에는 color.accent.*를 사용해요.
  • secondary, outline, ghost처럼 중립적인 액션에는 color.neutral.*를 사용해요.
  • Dialog 같은 표면에는 color.bg.*를, HelpBubble처럼 대비가 큰 bubble에는 color.neutral.inverse.*를 사용해요.
  • 오류, 성공, 경고처럼 상태가 분명해야 하는 경우에는 color.danger.*, color.success.*, color.warning.*를 사용해요.

Color Palette

Palette는 semantic role을 만들 때 참고하는 원본 색상표예요. neutral과 chromatic scale을 단계별로 나눠두어, 각 역할이 어떤 색상군에서 왔는지 확인하기 쉽게 해요.

Brand

Brand는 PAI의 주요 액션과 브랜드 강조를 만드는 기준이에요. primary 계열 액션과 accent role이 이 scale을 바탕으로 만들어져요.

50#f1f4f7
color.brand50
100#e3e9ef
color.brand100
200#ccd5de
color.brand200
300#b0bcc8
color.brand300
400#8a9aa9
color.brand400
500#556078
color.brand500
600#495264
color.brand600
700#3d4656
color.brand700
800#303846
color.brand800
900#232833
color.brand900
토큰미리보기
color.brand50
#f1f4f7
color.brand100
#e3e9ef
color.brand200
#ccd5de
color.brand300
#b0bcc8
color.brand400
#8a9aa9
color.brand500
#556078
color.brand600
#495264
color.brand700
#3d4656
color.brand800
#303846
color.brand900
#232833

Neutral

Neutral은 화면의 배경, 텍스트, 보더, 중립 액션 계층을 만들 때 기준이 되는 scale이에요. 0은 가장 밝은 표면, 950은 가장 깊은 배경에 가까운 색이에요.

0#ffffff
color.neutral0
50#fafafb
color.neutral50
100#f3f4f5
color.neutral100
200#e8e9eb
color.neutral200
300#d8dade
color.neutral300
400#bbbcc0
color.neutral400
500#9a9ba0
color.neutral500
600#7c7d82
color.neutral600
700#606166
color.neutral700
800#212121
color.neutral800
900#1a1a1a
color.neutral900
950#171717
color.neutral950
토큰미리보기
color.neutral0
#ffffff
color.neutral50
#fafafb
color.neutral100
#f3f4f5
color.neutral200
#e8e9eb
color.neutral300
#d8dade
color.neutral400
#bbbcc0
color.neutral500
#9a9ba0
color.neutral600
#7c7d82
color.neutral700
#606166
color.neutral800
#212121
color.neutral900
#1a1a1a
color.neutral950
#171717

Blue

Blue는 브랜드와 별도로, 실제 파란색이 필요한 표현에 사용하는 scale이에요. 현재는 focus ring처럼 blue 계열 대비가 필요한 역할을 만들 때 참고해요.

50#eff4ff
color.blue50
100#dfe9ff
color.blue100
200#c7d8ff
color.blue200
300#a8c0ff
color.blue300
400#83a2ff
color.blue400
500#4c76ef
color.blue500
600#4368d3
color.blue600
700#3b5cb8
color.blue700
800#314a93
color.blue800
900#27396f
color.blue900
토큰미리보기
color.blue50
#eff4ff
color.blue100
#dfe9ff
color.blue200
#c7d8ff
color.blue300
#a8c0ff
color.blue400
#83a2ff
color.blue500
#4c76ef
color.blue600
#4368d3
color.blue700
#3b5cb8
color.blue800
#314a93
color.blue900
#27396f

Red

Red는 오류, 삭제, 되돌리기 어려운 액션처럼 위험도를 분명하게 보여줘야 할 때 기준이 되는 scale이에요.

50#fff1f2
color.red50
100#ffe1e4
color.red100
200#ffc9cf
color.red200
300#ffa5af
color.red300
400#ff7a88
color.red400
500#f04452
color.red500
600#e42939
color.red600
700#c81f30
color.red700
800#9f1c2a
color.red800
900#771923
color.red900
토큰미리보기
color.red50
#fff1f2
color.red100
#ffe1e4
color.red200
#ffc9cf
color.red300
#ffa5af
color.red400
#ff7a88
color.red500
#f04452
color.red600
#e42939
color.red700
#c81f30
color.red800
#9f1c2a
color.red900
#771923

Green

Green은 성공 상태와 완료 피드백을 표현할 때 기준이 되는 scale이에요.

50#ecfcf5
color.green50
100#d5f8e8
color.green100
200#acefd0
color.green200
300#72e1ad
color.green300
400#2fd089
color.green400
500#03b26c
color.green500
600#02945b
color.green600
700#02774a
color.green700
800#035d3c
color.green800
900#034b31
color.green900
토큰미리보기
color.green50
#ecfcf5
color.green100
#d5f8e8
color.green200
#acefd0
color.green300
#72e1ad
color.green400
#2fd089
color.green500
#03b26c
color.green600
#02945b
color.green700
#02774a
color.green800
#035d3c
color.green900
#034b31

Amber

Amber는 주의 상태나 경고 메시지처럼 시선을 모아야 하지만 위험으로 읽히면 안 되는 상황의 기준이에요.

50#fff8e8
color.amber50
100#ffefc2
color.amber100
200#ffe08a
color.amber200
300#ffd158
color.amber300
400#ffc342
color.amber400
500#ffb000
color.amber500
600#e39100
color.amber600
700#b97200
color.amber700
800#8f5700
color.amber800
900#6c4200
color.amber900
토큰미리보기
color.amber50
#fff8e8
color.amber100
#ffefc2
color.amber200
#ffe08a
color.amber300
#ffd158
color.amber400
#ffc342
color.amber500
#ffb000
color.amber600
#e39100
color.amber700
#b97200
color.amber800
#8f5700
color.amber900
#6c4200

On this page