Color
색상 시스템은 접근성을 고려하며 제품의 계층, 상태, 브랜드를 표현할 수 있도록 도와요.
성수동 · 3분 전
950,000원
Overview
Clay의 색상 시스템은 역할 기반 색상과 팔레트 색상으로 구성돼 있으며, 모두를 위한 접근성 충족을 목표로 설계됐어요. 이를 통해 인터페이스 안에서 충분한 명도 대비를 보장하고, 명확성과 가시성을 확보할 수 있어요.
Role Based Color
역할 기반 색상 시스템은 디자이너와 개발자 모두를 위한 구조화된 색상 구현 방식을 제공해요. 색상 역할은 인터페이스의 시각적 요소와 기능 사이의 관계를 명확히 해서, 사용자에게 더 직관적이고 예측 가능한 UI를 제공해요. 임의의 색상값 대신 각 색상이 인터페이스 안에서 특정한 목적과 의미를 가져요.
- 접근성 — 모든 역할 기반 색상은 의도된 전경/배경 조합에서 충분한 대비를 갖도록 설계돼요. 자세한 기준은 Inclusive Design 을 참고해요.
- 빈틈없는 업데이트 — 색상을 바꿀 때 값이 아닌 의미를 기준으로 업데이트할 수 있어요. 같은 값을 가져도 의미가 다르면 따로 바꿀 수 있어요.
- 테마 적응성 — 특정 색상 대신 역할을 정의하기 때문에, 라이트·다크 모드와 여러 브랜드에 자동으로 적응해요.
이름 체계
역할 기반 색상은 Property(속성) · Role(역할) · Variant(변형) · State(상태) 순서로 이름을 지어요.
| 구성 | 예시 | 설명 |
|---|---|---|
| Property | fg, bg, stroke | 전경(텍스트·아이콘), 배경, 경계선 |
| Role | brand, neutral, positive, warning, critical, informative | 색상의 기능적·의미적 역할 |
| Variant | solid, weak, muted, subtle, contrast | 같은 역할 안에서의 강조 정도 |
| State | pressed, selected | 상호작용에 따른 변화 |
예를 들어 $color.bg.positive-solid-pressed 는 배경 · 긍정 · 강한 강조 · 눌림 을 뜻해요.
Property
- Background — 전체 화면 또는 UI의 배경에 사용하는 색상이에요.
- Foreground — 텍스트, 아이콘 등 UI의 전경 요소에 사용하는 색상이에요.
- Stroke — 경계를 구분하는 선 또는 UI 요소의 윤곽선에 사용하는 색상이에요.
Role
- Brand — 브랜드와 관련된 요소가 즉각적으로 인식될 수 있도록 도와요. 화면에서 가장 중요한 액션을 강조하는 데 사용할 수 있어요.
- Neutral — 일반적인 콘텐츠에 사용하는 기본 색상이에요. 주목도가 가장 높지는 않지만 여전히 가시성이 필요한 요소에 사용해요.
- Positive — 성공적인 작업, 확인, 긍정적인 상태를 나타내요.
- Warning — 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달해요.
- Critical — 오류나 중요한 문제를 나타내요. 부정적인 상태를 명확히 전달해 즉각적인 주의를 끌어요.
- Informative — 유용한 정보를 제공하거나 상태를 설명할 때 사용해요.
Layer
레이어 색상은 인터페이스의 깊이와 계층 구조를 나타내요. layer-basement → layer-default → layer-floating 순서로 쌓이며, 다크 모드에서는 높이 올라갈수록 더 밝아져요. 자세한 내용은 Elevation 을 참고해요.
Variant
같은 역할이라도 의도에 따라 여러 변형이 필요해요. Positive 배경은 낮은 강조의 $color.bg.positive-weak 와 높은 강조의 $color.bg.positive-solid 를 가져요. solid 배경 위의 전경은 fg.on-*-solid 를, weak 배경 위의 전경은 fg.*-contrast 를 짝으로 사용해요.
State
UI 요소의 상태에 따라 색상이 바뀔 수 있어요. 버튼을 누르면 -pressed 토큰으로 배경이 바뀌어 상호작용이 일어났음을 표현해요.
Semantic Tokens
모든 값은 현재 브랜드 기준이에요. 이름이나 값을 누르면 복사돼요.
Foreground
| 토큰 | Light | Dark | 참조 | 설명 |
|---|---|---|---|---|
| Brand | ||||
light $color.palette.orange-600dark $color.palette.orange-700 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. | |||
$color.palette.orange-700 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. (contrast) | |||
| Neutral | ||||
$color.palette.gray-1000 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. | |||
light $color.palette.gray-00dark $color.palette.gray-100 | @deprecated `$color.fg.on-neutral-solid`을 사용하세요. 이 토큰은 @seed-design/css@4.0.0과 이에 대응하는 @seed-design/lynx-css 버전에서 제거될 예정입니다. 일반적인 콘텐츠에 사용되는 반전 전경색입니다. | |||
$color.palette.gray-800 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (muted) | |||
$color.palette.gray-700 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (subtle) | |||
| Positive | ||||
$color.palette.green-700 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. | |||
$color.palette.green-900 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (contrast) | |||
| Warning | ||||
$color.palette.yellow-700 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. | |||
$color.palette.yellow-900 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (contrast) | |||
| Critical | ||||
$color.palette.red-700 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. | |||
$color.palette.red-900 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (contrast) | |||
| Informative | ||||
$color.palette.blue-700 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. | |||
$color.palette.blue-900 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (contrast) | |||
| On (solid 배경 위 전경) | ||||
$color.palette.static-white | 브랜드 Solid 배경 위의 전경 요소에 사용됩니다. | |||
$color.palette.static-white | Critical Solid 배경 위의 전경 요소에 사용됩니다. | |||
$color.palette.static-white | Informative Solid 배경 위의 전경 요소에 사용됩니다. | |||
light $color.palette.gray-00dark $color.palette.gray-100 | Neutral Solid 배경 위의 전경 요소에 사용됩니다. | |||
$color.palette.static-white | Positive Solid 배경 위의 전경 요소에 사용됩니다. | |||
$color.palette.static-black-alpha-900 | Warning Solid 배경 위의 전경 요소에 사용됩니다. | |||
| 기타 | ||||
$color.palette.gray-500 | — | |||
$color.palette.gray-600 | — | |||
Background
| 토큰 | Light | Dark | 참조 | 설명 |
|---|---|---|---|---|
| Brand | ||||
light $color.palette.orange-600dark $color.palette.orange-700 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. 화면에서 가장 중요한 액션을 강조하는데 사용할 수 있습니다. (solid) | |||
light $color.palette.orange-700dark $color.palette.orange-800 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. 화면에서 가장 중요한 액션을 강조하는데 사용할 수 있습니다. (solid-pressed) | |||
$color.palette.orange-100 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. 화면에서 가장 중요한 액션을 강조하는데 사용할 수 있습니다. (weak) | |||
$color.palette.orange-200 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. 화면에서 가장 중요한 액션을 강조하는데 사용할 수 있습니다. (weak-pressed) | |||
| Neutral | ||||
light $color.palette.gray-900dark $color.palette.gray-1000 | @deprecated `$color.bg.neutral-solid`을 사용하세요. 이 토큰은 @seed-design/css@4.0.0과 이에 대응하는 @seed-design/lynx-css 버전에서 제거될 예정입니다. 일반적인 콘텐츠에 사용되는 반전 배경색입니다. | |||
$color.palette.gray-800 | @deprecated `$color.bg.neutral-solid-pressed`을 사용하세요. 이 토큰은 @seed-design/css@4.0.0과 이에 대응하는 @seed-design/lynx-css 버전에서 제거될 예정입니다. 일반적인 콘텐츠에 사용되는 기본 색상입니다. (inverted-pressed) | |||
light $color.palette.gray-100dark $color.palette.gray-200 | `$color.bg.layer-default` 위에서 영역이나 섹션을 구분하는 표면 색상입니다. (muted) | |||
light $color.palette.gray-900dark $color.palette.gray-1000 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (solid) | |||
$color.palette.gray-800 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (solid-pressed) | |||
light $color.palette.gray-800dark $color.palette.gray-400 | @deprecated 이 토큰은 @seed-design/css@4.0.0과 이에 대응하는 @seed-design/lynx-css 버전에서 제거될 예정입니다. 일반적인 콘텐츠에 사용되는 기본 색상입니다. (solid-muted) | |||
light $color.palette.gray-900dark $color.palette.gray-500 | @deprecated 이 토큰은 @seed-design/css@4.0.0과 이에 대응하는 @seed-design/lynx-css 버전에서 제거될 예정입니다. 일반적인 콘텐츠에 사용되는 기본 색상입니다. (solid-muted-pressed) | |||
light $color.palette.gray-00dark $color.palette.gray-100 | 표면과 같은 색상입니다. 회색 표면 위에서 주변과 구분되는 영역에 사용됩니다. (subtle) | |||
light $color.palette.gray-200dark $color.palette.gray-300 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (weak) | |||
light $color.palette.static-black-alpha-200dark $color.palette.static-white-alpha-200 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (weak-alpha) `$color.layer.basement` 위에서 컴포넌트의 가시성을 보장하기 위해 사용됩니다. | |||
light $color.palette.static-black-alpha-300dark $color.palette.static-white-alpha-300 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (weak-alpha-pressed) `$color.layer.basement` 위에서 컴포넌트의 가시성을 보장하기 위해 사용됩니다. | |||
light $color.palette.gray-300dark $color.palette.gray-400 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (weak-pressed) | |||
| Positive | ||||
light $color.palette.green-700dark $color.palette.green-500 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (solid) | |||
light $color.palette.green-800dark $color.palette.green-600 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (solid-pressed) | |||
$color.palette.green-100 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (weak) | |||
$color.palette.green-200 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (weak-pressed) | |||
| Warning | ||||
light $color.palette.yellow-300dark $color.palette.yellow-800 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (solid) | |||
light $color.palette.yellow-400dark $color.palette.yellow-900 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (solid-pressed) | |||
$color.palette.yellow-100 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (weak) | |||
$color.palette.yellow-200 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (weak-pressed) | |||
| Critical | ||||
light $color.palette.red-700dark $color.palette.red-600 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (solid) | |||
light $color.palette.red-800dark $color.palette.red-700 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (solid-pressed) | |||
$color.palette.red-100 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (weak) | |||
$color.palette.red-200 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (weak-pressed) | |||
| Informative | ||||
light $color.palette.blue-700dark $color.palette.blue-600 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (solid) | |||
light $color.palette.blue-800dark $color.palette.blue-700 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (solid-pressed) | |||
$color.palette.blue-100 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (weak) | |||
$color.palette.blue-200 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (weak-pressed) | |||
| Layer | ||||
light $color.palette.gray-200dark $color.palette.gray-00 | 가장 낮은 0단계의 '대지'입니다. 화면 가장 깊은 곳에 위치하는 전체 배경색입니다. | |||
light $color.palette.gray-00dark $color.palette.gray-100 | basement 바로 위에 놓이는 기본 표면입니다. 대부분의 스크린 콘텐츠(List, TextField 등)가 이 레이어 위에서 표현됩니다. | |||
light $color.palette.gray-100dark $color.palette.gray-300 | basement 바로 위에 놓이는 기본 표면입니다. 대부분의 스크린 콘텐츠(List, TextField 등)가 이 레이어 위에서 표현됩니다. (pressed) | |||
light $color.palette.gray-00dark $color.palette.gray-200 | 화면의 모든 콘텐츠 위를 덮으며(floating) 나타나는 임시 레이어입니다. 사용자의 상호작용을 필요로 하는 모달(Modal)성 요소들이 여기에 속합니다. | |||
light $color.palette.gray-100dark $color.palette.gray-300 | 화면의 모든 콘텐츠 위를 덮으며(floating) 나타나는 임시 레이어입니다. 사용자의 상호작용을 필요로 하는 모달(Modal)성 요소들이 여기에 속합니다. (pressed) | |||
| 기타 | ||||
light $color.palette.gray-200dark $color.palette.gray-300 | — | |||
light #f9f2eedark #201f1f | — | |||
$color.palette.static-black-alpha-700 | — | |||
$color.palette.static-black-alpha-500 | — | |||
light #00000000dark #ffffff00 | — | |||
light $color.palette.static-black-alpha-100dark $color.palette.static-white-alpha-50 | — | |||
light $color.palette.static-black-alpha-200dark $color.palette.static-white-alpha-100 | — | |||
light $color.palette.static-black-alpha-300dark $color.palette.static-white-alpha-200 | — | |||
Stroke
| 토큰 | Light | Dark | 참조 | 설명 |
|---|---|---|---|---|
| Brand | ||||
$color.palette.orange-700 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. 화면에서 가장 중요한 액션을 강조하는데 사용할 수 있습니다. (solid) | |||
$color.palette.orange-300 | 브랜드와 관련된 요소들이 즉각적으로 인식될 수 있도록 돕습니다. 화면에서 가장 중요한 액션을 강조하는데 사용할 수 있습니다. (weak) | |||
| Neutral | ||||
$color.palette.gray-1000 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (contrast) | |||
light $color.palette.static-black-alpha-300dark $color.palette.static-white-alpha-100 | 의미 단위가 바뀌는 경계를 나누는 선입니다. 섹션과 섹션 사이, 콘텐츠와 액션 영역 사이, 헤더와 본문 경계처럼 한 화면에 한두 번만 등장하는 구분에 사용됩니다. (muted) | |||
$color.palette.gray-800 | 일반적인 콘텐츠에 사용되는 기본 색상입니다. (solid) | |||
light $color.palette.static-black-alpha-200dark $color.palette.static-white-alpha-50 | 반복되는 동일한 성격의 항목 사이를 나누는 선입니다. 리스트 아이템, 테이블 row, 설정 메뉴 항목처럼 한 화면에 여러 번 등장하는 구분에 사용됩니다. (subtle) | |||
$color.palette.gray-400 | 요소의 외곽을 그려 형태를 만드는 선입니다. 카드, 인풋 필드, 아웃라인 버튼처럼 선 자체가 요소의 경계를 정의할 때 사용됩니다. (weak) | |||
| Positive | ||||
$color.palette.green-700 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (solid) | |||
$color.palette.green-300 | 성공적인 작업, 확인, 또는 긍정적인 상태를 나타내는 데 사용됩니다. (weak) | |||
| Warning | ||||
$color.palette.yellow-700 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (solid) | |||
$color.palette.yellow-300 | 사용자의 주의가 필요한 경고 메시지나 안내 사항을 전달하는 데 사용됩니다. (weak) | |||
| Critical | ||||
$color.palette.red-700 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (solid) | |||
$color.palette.red-300 | 오류, 경고 또는 중요한 문제를 나타내는 데 사용됩니다. (weak) | |||
| Informative | ||||
$color.palette.blue-700 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (solid) | |||
$color.palette.blue-300 | 사용자에게 유용한 정보를 제공하거나 상태를 설명할 때 사용됩니다. (weak) | |||
| 기타 | ||||
$color.palette.blue-600 | — | |||
Palette Color
팔레트 색상은 역할 기반 색상으로 표현하기 어려운 예외적인 경우에 사용해요. 팔레트는 적응형이라서 화면 모드(라이트/다크)에 따라 알맞은 명도의 색상이 배정돼요. 특정 화면 모드를 기준으로 디자인해도 다른 모드에서 충분히 알아보기 쉬운 색상을 보장해요.
스와치를 누르면 Light/Dark 값, CSS 변수, Tailwind 유틸을 확인하고 복사할 수 있어요.
Gray
Chromatic
Static
static-* 색상은 화면 모드와 관계없이 항상 같은 값을 가져요. 이미지 위 오버레이처럼 배경이 고정된 경우에 사용해요.
Banner
배너·일러스트 배경처럼 장식적인 영역에 쓰는 색상이에요.
| 토큰 | Light | Dark | 참조 | 설명 |
|---|---|---|---|---|
light #e1f7ffdark #0d2a3a | — | |||
light #ebf1f5dark #242c33 | — | |||
light #f0fbe5dark #1e361c | — | |||
light #fff2e1dark #42230a | — | |||
light #ffebf1dark #3b172c | — | |||
light #f5ecffdark #2e1e45 | — | |||
light #ffeceedark #3a0f15 | — | |||
light #e6faf6dark #143633 | — | |||
light #f2f0eedark #2f2b27 | — | |||
light #fffae1dark #3e2b00 | — |
Contrast
주요 전경/배경 조합의 WCAG 명도 대비예요. 토큰을 빌드할 때 자동으로 계산돼요. 본문 텍스트는 AA(4.5:1) 이상, 큰 텍스트와 굵은 라벨은 AA-large(3:1) 이상을 목표로 해요.
| 미리보기 | 전경 / 배경 | 모드 | 대비 | 등급 |
|---|---|---|---|---|
| 가나다 Aa | Light | 2.94 : 1 | fail | |
| 가나다 Aa | Dark | 2.94 : 1 | fail | |
| 가나다 Aa | Light | 3.76 : 1 | AA-large | |
| 가나다 Aa | Dark | 3.82 : 1 | AA-large | |
| 가나다 Aa | Light | 3.95 : 1 | AA-large | |
| 가나다 Aa | Dark | 3.85 : 1 | AA-large | |
| 가나다 Aa | Light | 13.31 : 1 | AAA | |
| 가나다 Aa | Dark | 16.26 : 1 | AAA | |
| 가나다 Aa | Light | 3.96 : 1 | AA-large | |
| 가나다 Aa | Dark | 5.39 : 1 | AA | |
| 가나다 Aa | Light | 10.80 : 1 | AAA | |
| 가나다 Aa | Dark | 7.93 : 1 | AAA | |
| 가나다 Aa | Light | 17.06 : 1 | AAA | |
| 가나다 Aa | Dark | 16.26 : 1 | AAA | |
| 가나다 Aa | Light | 6.62 : 1 | AA | |
| 가나다 Aa | Dark | 13.31 : 1 | AAA | |
| 가나다 Aa | Light | 3.42 : 1 | AA-large | |
| 가나다 Aa | Dark | 8.53 : 1 | AAA | |
| 가나다 Aa | Light | 2.10 : 1 | fail | |
| 가나다 Aa | Dark | 5.23 : 1 | AA | |
| 가나다 Aa | Light | 2.94 : 1 | fail | |
| 가나다 Aa | Dark | 6.10 : 1 | AA | |
| 가나다 Aa | Light | 3.76 : 1 | AA-large | |
| 가나다 Aa | Dark | 6.53 : 1 | AA | |
| 가나다 Aa | Light | 3.96 : 1 | AA-large | |
| 가나다 Aa | Dark | 6.60 : 1 | AA | |
| 가나다 Aa | Light | 4.12 : 1 | AA-large | |
| 가나다 Aa | Dark | 6.41 : 1 | AA | |
| 가나다 Aa | Light | 3.95 : 1 | AA-large | |
| 가나다 Aa | Dark | 6.62 : 1 | AA | |
| 가나다 Aa | Light | 3.64 : 1 | AA-large | |
| 가나다 Aa | Dark | 5.10 : 1 | AA | |
| 가나다 Aa | Light | 8.05 : 1 | AAA | |
| 가나다 Aa | Dark | 9.83 : 1 | AAA | |
| 가나다 Aa | Light | 8.30 : 1 | AAA | |
| 가나다 Aa | Dark | 10.10 : 1 | AAA | |
| 가나다 Aa | Light | 9.61 : 1 | AAA | |
| 가나다 Aa | Dark | 9.85 : 1 | AAA | |
| 가나다 Aa | Light | 8.37 : 1 | AAA | |
| 가나다 Aa | Dark | 9.91 : 1 | AAA |
대비가 부족한 조합
등급이 fail 인 조합은 작은 텍스트에 쓰지 않아요. 브랜드 색상이 밝아 대비가 부족하면 텍스트를 굵고 크게(text-t5 이상, font-bold) 쓰거나, 브랜드 토큰 값을 조정해요.
사용 예
<div className="rounded-r3 bg-bg-critical-weak p-x3 text-t4 text-fg-critical-contrast">
결제에 실패했어요.
</div>
<button className="rounded-r2 bg-bg-brand-solid px-x4 py-x2_5 text-t4 font-bold text-fg-on-brand-solid active:bg-bg-brand-solid-pressed">
채팅하기
</button>의미에 맞는 역할 색상(bg-critical-solid)을 사용해요.
역할 색상이 있는데 팔레트(palette-red-600)를 직접 쓰면 테마·브랜드 변경을 따라가지 못해요.