토큰 쓰는 자리 — 면 · 선 · 글자 · 강조 · 상태색
이 문서는 CoUI 로 그리는 모든 서비스 화면에서 **어느 CoUI 색 토큰을 어느 자리에 쓰는지**를 정합니다. 아래는 CoUI 기본 매핑 예시이며, 제품은 브랜드 테마에서 모드별 값과 역할 매핑을 조정할 수 있습니다. 전체 테마와 특정 컴포넌트 스타일의 절차는 `brand-theme-workflow.md`를 따릅니다. 간격 · 모서리 · 그림자 ...
이 문서는 CoUI 로 그리는 모든 서비스 화면에서 어느 CoUI 색 토큰을 어느 자리에 쓰는지를 정합니다. 아래는 CoUI 기본 매핑 예시이며, 제품은 브랜드 테마에서 모드별 값과 역할 매핑을 조정할 수 있습니다. 전체 테마와 특정 컴포넌트 스타일의 절차는
brand-theme-workflow.md를 따릅니다. 간격 · 모서리 · 그림자 · 글자 크기는 layout.md, 알림 · 상태 화면은
patterns.md, 피그마에서 Dark 로 바꿔 확인하는 절차는 figma-file.md 가 맡습니다. 토큰의 정의와 값의 정본은
cc-designer:design-system 이고, 앱 테마를 잇는 코드는 cc-coui:coui-theme 입니다.
0. 읽는 법#
-
표기 — 피그마 변수 이름을 먼저, 괄호 안에 Dart 이름을 적습니다. 예:
color/surface-container(CoreColors.surfaceContainer). 피그마 변수는Semantic/ Color · CoUI컬렉션(또는 서비스가 고른 브랜드 컬렉션 — 이름은 같습니다)에 있고, 모드는Light·Dark·HCLight·HCDark입니다. - 브랜드는 모든 속성을 설계합니다 — 색·타이포·치수·곡률·선·효과·재질·모션·컴포넌트 내부 스타일을 테마와 override로 제어합니다. 아래 자리도 제품의 의미 역할에 맞게 재정의할 수 있습니다.
- hex 를 쓰지 않습니다 — 이 문서에도, 화면에도. 「현재값 참고」로 적은 것은 원시 단계 이름이나 대비 비율뿐이고, 판단은 그 값이 아니라 역할 이름으로 합니다.
- 한 단계 — 면의 층 사이에 눈에 보이는 밝기 차이 하나를 말합니다. 원시 사다리의 칸 수가 아닙니다. 패널 안 행은 Light 에서 패널보다 어둡게, Dark 에서 패널보다 밝게 보이도록 고른 짝입니다(사다리 칸 수는 2절).
- CoUI 에 없는 것 — 「CoUI 에 없음 → 지금 가능한 대체 → CoUI 후보」 세 칸으로 적습니다. 대체는 늘 CoUI 에 있는 토큰이고, 새 색을 만들지 않습니다(8절).
- 라이트가 기본입니다. 모든 자리는 변수 모드를
Dark로 바꿔도 그대로 성립해야 합니다. 다크에서 채도나 밝기를 손으로 고치지 않습니다.
1. 한눈에 — 자리와 토큰#
「Light 에서 · Dark 에서」 칸은 값이 아니라 지금 CoUI 브랜드에서 보이는 관계입니다. 브랜드 컬렉션을 바꾸면 색은 달라져도 관계는 같아야 합니다.
| 자리 | 피그마 변수 (Dart) | Light 에서 | Dark 에서 | 절 |
|---|---|---|---|---|
| 페이지 바탕 | color/surface (CoreColors.surface) — Scaffold 기본값 |
흰 바탕 | 어두운 바탕 | 2 |
| 카드 · 패널(표를 담는 면 포함) |
color/surface-container
(
CoreColors.surfaceContainer
) —
Card
·
Stat
기본값(filled, 선 없음)
|
흰 바탕 위 옅은 회색 면 | 바탕보다 밝은 면 | 2 |
| 카드 안 선택 행 · 입력 칸 |
부품 기본값 —
Table
선택 행
color/surface-container-high
, 입력 칸
TextField
의
color/surface
|
회색 면 안의 진한 선택 행 · 흰 입력 칸 | 카드보다 밝은 선택 행 · 카드보다 어두운 입력 칸 | 2 |
| 표 행 구분 · 사이드바 경계 |
color/outline-variant
(
CoreColors.outlineVariant
) —
Table
·
NavigationBar
기본값
|
옅은 회색 선 | 조금 밝은 선 | 3 |
| 입력 칸 경계 | color/outline (CoreColors.outline) — TextField 기본값 |
중간 회색 선 | 중간 밝기 회색 선 | 3 |
| 본문 글자 | color/on-surface (CoreColors.onSurface) |
가장 진한 글자 | 가장 밝은 글자 | 4 |
| 보조 글자 | color/on-surface-variant (CoreColors.onSurfaceVariant) |
한 단계 흐린 진회색 | 한 단계 흐린 밝은 회색 | 4 |
| 메타 글자 |
color/on-surface-subtle
(
CoreColors.onSurfaceSubtle
) +
Body/Small
|
보조보다 한 단계 흐린 회색 | 보조보다 한 단계 흐린 밝은 회색 | 4 |
| 선택 · 진행 · 포커스 |
color/primary
(
CoreColors.primary
) 계열 — 부품 기본값. 포커스 링은
color/focus-ring
(
CoreColors.focusRing
)
|
진한 강조색 | 밝은 중립 — CoUI 브랜드의 Dark 는 이 자리를 무채로 그립니다(5절) | 5 |
| 문장 안 링크 | color/link (CoreColors.link) — CoUI Link 기본값 |
진한 정보색 계열 글자 | 밝은 정보색 계열 글자 | 5 |
| 강조 글자 | color/primary-text (CoreColors.primaryText) |
진한 강조색 글자 | 밝은 강조색 글자(Dark 에서도 강조색으로 남는 자리) | 5 |
| 옅은 강조 면 | color/primary-container + color/on-primary-container |
옅은 강조색 면 + 진한 글자 | 짙은 강조색 면 + 밝은 글자 | 5 |
| 주 행동 버튼 | Button primary 변형 |
진한 채움 + 밝은 글자 | 밝은 채움 + 어두운 글자 | 6 |
| 상태 점 · 아이콘 · 상태 글자 |
color/success
·
color/warning
·
color/info
·
color/error
|
진한 상태색 | 밝아진 상태색 | 7 |
| 알림의 옅은 상태 면 | color/success-container 등 — CoUI Alert 기본값 |
흰 패널 위 아주 옅게 물든 면 + 진한 상태 글자 | 패널보다 조금 밝고 상태색으로 짙게 물든 면 + 밝은 글자 | 7 |
| 분류(진료과 · 과목 · 카테고리) | color/category-<색> 계열 — 코드와 피그마 라이브러리 모두에 있습니다. 상태색과 섞지 않습니다 |
분류색마다 옅은 면 + 진한 글자 | 분류색마다 짙은 면 + 밝은 글자 | 7 |
2. 면의 층 — CoUI 부품 기본값이 정한다#
면은 화면이 칠하지 않습니다. 페이지 · 크롬 · 카드 · 떠 있는 판의 면은 CoUI 부품의 기본값이 정하고, 피그마 라이브러리 인스턴스도 같은 값을 그립니다 — CoUI 색상 가이드 「surface 계층」(카드 · 팝오버의 표면은 각 컴포넌트 기본값이 정한다). 이 절이 면 규칙의 정본이고, 다른 스킬 · 규칙은 이 절을 인용합니다. 구분은 선이 아니라 면의 밝기로 합니다 — 카드는 페이지 위에서 자기 면의 톤으로 드러나고, 선으로 두르는 것은 그 톤이 바탕과 같아지는 자리뿐입니다.
| 층 | 부품 | 토큰 (현재값 참고 — coui_flutter 0.163 기본값) | Light 에서 | Dark 에서 |
|---|---|---|---|---|
| 페이지 바탕 | Scaffold |
color/surface |
흰 바탕 | 어두운 바탕 |
| 상단 바 | AppBar |
color/surface + 아래 선 color/outline-variant |
페이지와 같은 면, 선이 경계 | 같음 |
| 사이드바 | NavigationBar |
color/surface-container-low + 본문 쪽 1px color/outline-variant |
페이지보다 아주 옅게 어두운 면 | 페이지보다 한 칸 밝은 면 |
| 카드 · 패널 · KPI | Card · Stat 기본(filled) |
color/surface-container, 선 없음 |
흰 바탕 위 옅은 회색 면 | 바탕보다 밝은 면 |
| 선으로 두르는 카드 | Card(variant: CoreCardVariant.outlined) · OutlinedContainer |
color/surface
+
color/outline-variant
1 (
Stat
outlined 는
color/outline
)
|
바탕과 같은 면 + 옅은 선 | 같음 |
| 카드 안 표 | Table |
머리 투명 · 행 구분
color/outline-variant
· 선택 행
color/surface-container-high
· 바닥 줄
color/surface-container
|
회색 면 안의 한 단계 진한 선택 행 | 카드보다 밝은 선택 행 |
| 입력 칸 | TextField |
color/surface + color/outline |
회색 카드 위 흰 칸 | 카드보다 어두운 칸 |
| 떠 있는 판 — 메뉴 · 팝오버 · 선택 패널 · 대화상자 · 드로어 | Popup · Dialog · Drawer |
color/surface-bright
+
color/outline-subtle
1 + 그림자(Popup · Drawer
shadow/lg
, Dialog
shadow/xl
)
|
흰 판 + 옅은 선 + 그림자 | 카드와 같은 면 — 선 · 그림자로 뜬다 |
| 토스트 | Toast |
color/surface-container-highest
+
shadow/md
. coui_flutter 0.165 부터 어두운 반전 판(
color/inverse-surface
) +
CoreShadow.sm
|
가장 진한 회색 판(0.165 부터 어두운 말풍선) | 가장 밝은 판 |
| 툴팁 | Tooltip |
color/on-surface 채움 + color/surface 글자 |
반전 판 | 반전 판 |
-
제품이 다른 면을 고르면 앱 테마 한 곳에서. 제품 시안의 화면 프레임 채움이
color/surface가 아닌 변수(예:color/surface-dim)에 묶여 있거나 제품의 디자인 결정 기록이 다른 층을 정했으면, 코드는 앱 테마(CoreScaffoldTheme·CoreCardTheme류) 한 곳에서 바꾸고 화면 · 위젯은 면을 칠하지 않습니다. 그 결정은 디자이너의 것이고 결정 기록에 남습니다. -
카드 안에서 면이 달라지는 것은 부품의 상태뿐입니다 — 표의 선택 · 호버 행, 메뉴 항목의 선택처럼 그 상태를 그리는 부품(
Table·MenuItem·NavigationBarItem)에 맡깁니다. 선택 · 호버 면을 그리지 않는 부품(Listing의 행)만 그 행에 표의 선택 행과 같은color/surface-container-high를 깝니다(layout.md2-3). 평상시 목록 행은 카드 면 그대로 두고 여백으로 나눕니다. 카드 안에 또 경계 있는 면(카드 안 카드)을 두지 않습니다(cc-blueprint/rules/figma-slop-tells.md§S1). -
선으로 두르는 카드(
outlined)는 카드 면의 톤이 바탕과 같아지는 자리뿐입니다 — 제품이 바탕을 회색으로 고른 화면(Light 에서color/surface-dim과 카드 면은 같은 값입니다, 10절), 회색 면 위에 놓이는 묶음. 이미지가 카드 폭을 채우는 카드도filled입니다 — 이미지가 위쪽 경계이고 본문은 카드 면의 톤이 묶습니다. 그 밖의 카드에 선을 더하지 않습니다(3절). - 표의 토큰 이름은 지금 CoUI 판의 기본값을 적은 참고입니다. CoUI 가 기본값을 바꾸면 부품이 따라가고, 화면은 바뀔 것이 없습니다 — 화면이 고르는 것은 토큰이 아니라 부품이기 때문입니다.
2-1. 화면이 직접 깔지 않는 면 토큰#
아래는 부품이 자기 몫으로 쓰는 토큰입니다. 화면 쪽 면으로 직접 깔지 않습니다.
| 토큰 | 쓰지 않는 이유 |
|---|---|
color/surface-container-lowest |
Light 에서는 페이지와 같은 흰색이고, Dark 에서는
color/surface-dim
과 같은 값입니다(현재값 참고, 10절). 카드로 쓰면 Light 에서 카드가 사라집니다
|
color/surface-container-low | 사이드바(NavigationBar)의 몫입니다 |
color/surface-container-high · color/surface-container-highest |
선택 행 · 트랙 · 눌린 컨트롤 · 토스트 같은 부품 안쪽 면입니다 |
color/surface-bright | 떠 있는 판의 몫입니다 |
color/surface-dim | 기본 층에 없습니다. 제품이 페이지 바탕으로 고른 경우에만 앱 테마가 씁니다(위) |
color/surface-tint · color/surface-highlight | 부품 내부용입니다 |
color/secondary-container | 무채 옅은 면이지만 층 사다리 밖에 있습니다. 면의 층에 섞지 않습니다 |
2-2. 셸과 떠 있는 층 — 화면이 하는 일#
화면은 위 표의 부품 면을 다시 칠하지 않습니다.
| 자리 | 화면이 하는 일 |
|---|---|
상단 바 AppBar |
그대로. 페이지와 같은 면이라 아래 선(
showDivider
기본 켜짐)이 경계입니다. 페이지 머리로는 쓰지 않습니다(
layout.md
2-1)
|
사이드바 NavigationBar |
그대로. 면과 본문 쪽 경계선을 부품이 함께 그리므로 따로 긋지 않습니다 — 면과 선을 함께 두는 예외이고, self-check 에 표시되면 이 줄을 사유로 씁니다 |
| 메뉴 · 팝오버 · 대화상자 · 드로어 | 그대로. 면 · 선 · 그림자를 부품이 그립니다 |
| 토스트 | 그대로. 위 버튼 글자색은 CoUI 가 넣습니다(patterns.md 1절) |
| 툴팁 | 그대로 |
3. 선#
면 대비로 충분하면 선을 긋지 않습니다. 선이 남는 자리는 셋입니다.
| 자리 | 토큰 | 메모 |
|---|---|---|
| 표 행 구분 | color/outline-variant (CoreColors.outlineVariant) |
Table 기본값 그대로입니다(바깥선은 기본 0). 다시 묶지 않습니다 |
| 사이드바 경계 | color/outline-variant |
NavigationBar 기본값(본문 쪽 가장자리 1px)입니다. 따로 긋지 않습니다 |
| 입력 칸 경계 | color/outline (CoreColors.outline) |
TextField
기본값 그대로입니다. 눌러서 입력하는 컨트롤이라는 단서입니다(
cc-blueprint/rules/figma-composition-patterns.md
§C9 ② — 컨트롤 경계는 라이브러리 기본 토큰 그대로). 컨트롤 경계는 비텍스트 대비 3:1 이 필요한 자리라
color/outline-variant
로 낮추지 않습니다
|
-
패널 · Card · Stat 같은 정적 컨테이너에는 선을 두지 않습니다 — 기본값(
filled)이 이미 면의 톤으로 드러납니다. 선으로 두르는 카드(outlined)는 2절의 자리뿐입니다. 선과 면 대비를 한 자리에 겹쳐 쓰지 않습니다(사이드바는 부품 기본값을 그대로 두는 예외, 2-2). - 패널 안 묶음 사이는 간격(
space/*)으로 나눕니다.Divider는 간격으로 안 될 때만 기본값으로 둡니다. color/outline-variant는 장식 선 대비(현재값 참고 Light 흰 면 위 약 1.5:1)라서 컨트롤의 경계로 쓰지 않습니다.color/outline-subtle은 부품 안쪽(키캡) 몫입니다. 화면 쪽 선으로 쓰지 않습니다.- 포커스 링은
color/focus-ring이고 부품이 그립니다. - 상태색 테두리(
success-outline같은 이름)는 CoUI 에 없음 입니다(7절).
4. 글자 — 세 단계#
| 단계 | 토큰 | 쓰는 곳 |
|---|---|---|
| 본문 | color/on-surface (CoreColors.onSurface) |
제목 · 본문 · 표 셀 · 행 제목 · KPI 숫자 |
| 보조 | color/on-surface-variant (CoreColors.onSurfaceVariant) |
설명 · 라벨 · 맥락 한 줄 · 빈 상태 설명 |
| 메타 |
color/on-surface-subtle
(
CoreColors.onSurfaceSubtle
), 메타 크기(
Body/Small
,
layout.md
9절)
|
시각 · 행 메타 · 캡션 · 도움말 |
- 한 화면에 글자 색은 이 셋을 넘기지 않습니다.
-
메타 단계의 대비 — Light 에서
color/on-surface-subtle은 흰 면(color/surface) 위 4.5:1 을 넘지만, 카드 기본 면(color/surface-container) 위에서는 약 4.3:1 입니다(현재값 참고). CoUI 가 「세 번째 단계는 두 번째보다 흐리다」는 위계를 지키려고 기록한 예외이고, 부품 기본값(카드 부제 · Stat 설명 · 표 머리 행)도 그 자리에 씁니다. 화면은 그 결정을 따르되, 읽지 않으면 일이 막히는 정보(금액 · 마감 · 오류 사유)는 메타 단계에 두지 않고 본문 · 보조 단계로 올립니다. -
코드에서 메타 글자 —
Text체인에.onSurfaceSubtlegetter 가 없어 두 플랫폼이 다르게 씁니다. FlutterText('12분 전').bodySmall.color(const CoreColor.token(CoreColors.onSurfaceSubtle)), WebText('12분 전', style: const TextStyle(color: 'on-surface-subtle')).bodySmall. 강조 글자(color/primary-text)도 같은 꼴입니다..onSurfaceVariant로 대신하지 않습니다 — CoUI 이슈 — Text 체인으로 세 번째 글자 단계를 고를 수 없다. -
화면이 글자로 고르지 않는 토큰:
color/placeholder는 입력 칸의 미입력 안내 전용이라 부품이 씁니다(Light 회색 면 위에서는 대비 4.5:1 에 모자랍니다).color/disabled-content는 꺼진 상태를 그리는 부품의 몫입니다 — 꺼진 라벨 · 체크 표시는 부품이 그리므로 화면에서 손대지 않습니다.color/outline은 선 토큰입니다. -
면과 글자는 짝으로 씁니다.
color/surface·color/surface-dim·color/surface-container위는color/on-surface·color/on-surface-variant,color/primary위는color/on-primary,color/primary-container위는color/on-primary-container,color/success-container위는color/on-success-container,color/inverse-surface위는color/inverse-on-surface입니다. 짝이 아닌 조합은 한 모드에서만 읽힙니다.
5. 강조색 — color/primary 계열#
강조색은 선택 상태 · 링크 · 진행 · 정보 표시에만 씁니다. 넓은 면에 칠하지 않습니다.
| 자리 | 토큰 | 메모 |
|---|---|---|
| 선택 상태 — 지금 메뉴 · 선택된 탭 · 체크 · 라디오 · 선택 행 표시 | color/primary 계열 |
부품이 그립니다. 화면에서 다시 칠하지 않습니다 |
진행 — Progress · Steps |
color/primary |
부품 기본값 |
| 포커스 | color/focus-ring (CoreColors.focusRing) |
부품 기본값 |
| 링크 | color/link (CoreColors.link) |
문장 안 링크 — CoUI
Link
가 그립니다. 「전체 보기」 같은 글자만 있는 이동은
Link(variant: CoreLinkVariant.muted)
이고 글자색(
color/on-surface-variant
)은 부품이 정하므로 다시 칠하지 않습니다(6절)
|
| 정보 표시 — 새 항목 수 · 지금 단계 번호 · 선택한 개수처럼 읽기만 하는 강조 글자 |
color/primary-text
(
CoreColors.primaryText
), 큰 글자는
color/primary-text-large
|
한 화면에 한두 곳. 코드는 4절 「코드에서 메타 글자」와 같은 꼴 |
| 옅은 강조 면 — 오늘 날짜 칸 · 선택된 카드 하나처럼 하나를 가리키는 좁은 면 | color/primary-container + 글자 color/on-primary-container |
행 전체 · 패널 바탕 · 배너에는 깔지 않습니다 |
- 상단 바 · 사이드바 · 패널 바탕 · 표 머리를 강조색으로 칠하지 않습니다.
-
「옅은 강조 면」을
primarySubtle, 「진한 강조」를primaryStrong이라는 이름으로 찾는 경우가 있습니다. 둘 다 CoUI 에 없음 입니다(ThemeExtension 도 없습니다). 옅은 면은color/primary-container로 대체하고, 이름만 다른 같은 역할이라 CoUI 후보는 두지 않습니다. 진한 강조는 필요하지 않습니다 — 가장 높은 대비는 주 행동 버튼(color/primary채움)이 이미 가집니다. 더 진한 단계가 필요해 보이면 그 화면이 강조색을 너무 많은 자리에 쓰고 있다는 신호입니다. -
화면에서 고르지 않는 강조 토큰:
color/primary-hover·color/primary-pressed(상태 전용, 부품 몫),color/primary-fixed계열,color/tertiary·color/accent(CoUI 에서는color/primary를 그대로 따라갑니다 — 두 번째 강조색으로 쓰지 않습니다),color/inverse-primary. -
강조색이 무슨 색인지는 CoUI 가 정합니다. 「파란 버튼」처럼 값에 기대는 판단을 적지 않습니다. CoUI 브랜드의 Dark 는 주 행동 · 선택 · 진행 · 포커스(
color/primary계열 ·color/focus-ring)를 밝은 중립으로 그리고, 강조 글자(color/primary-text) · 링크만 강조색으로 남깁니다 — 피그마 라이브러리와 코드가 같은 값입니다. 강조색도 두 모드의 스크린샷으로 판단합니다(figma-file.md7절).
6. 버튼 — 주 행동과 나머지#
버튼의 채움 · 글자 · 테두리 색은 CoUI Button 변형이 정합니다. 화면은 변형만 고릅니다.
| 행동 | 변형 | 메모 |
|---|---|---|
| 주 행동 — 한 화면에 하나 | Button(variant: CoreButtonVariant.primary) |
가장 높은 대비. 페이지 머리 맨 오른쪽(layout.md 2-1) |
| 보조 행동 — 흰 면 위(페이지 · 선으로 두른 카드 · 대화상자) | secondary |
옅은 무채 면(CoreColors.secondaryContainer). 주 행동보다 한 단계 조용합니다 |
보조 행동 — 회색 카드(Card · Stat 기본 filled) 위 |
outline |
흰 면 + 경계. Light 에서
secondary
의 면은 카드 면(
color/surface-container
)과 같은 값이라 사라집니다(현재값 참고 둘 다 neutral 100)
|
| 덜 중요한 행동 · 취소 | ghost | 면 없음, 올리면 옅은 상태층 |
| 글자만 있는 이동 — 「전체 보기」 | Link(variant: CoreLinkVariant.muted) |
Button 이 아니라 링크입니다(Button 의 link 변형은 v2 에서 없어졌습니다). 「text 버튼」에 해당합니다 |
| 닫기 · 복사 아이콘 | plain | 부품이 씁니다 |
| 되돌리기 어려운 행동 | destructive |
확인 대화상자의 확인 버튼(patterns.md 5절)과 그 대화상자를 여는 설정 맨 아래 패널의 버튼(layout.md 4절) |
| 알림 안 버튼 | Alert 는 outline · ghost sm, Toast 는 ghost |
patterns.md 1절 |
-
secondary는 옅은 면입니다(coui_core 0.160 부터). 예전secondary는 진한 무채 채움이라primary와 밝기가 거의 같아(채움끼리 약 1.02:1) 보조 행동에 쓰지 않았습니다. 지금은color/secondary-container를 채우고, 올리거나 눌러도 채움은 그대로 두고 글자색 상태층만 얹습니다. 「취소」 「수정하기」 같은 보조 행동에 쓰되 놓이는 면으로 고릅니다 — 흰 면이면secondary, 회색 카드면outline. -
한 줄에 보조 행동이 여럿이고 그중 하나가 「이 카드에서 가장 먼저 누를 행동」이면 피그마 라이브러리의 Button
tonal(옅은 강조 면)이 그 자리입니다. 다만tonal은 코드에 아직 없습니다 — 코드에 들어오기 전까지는 다른 보조 행동과 같은 변형으로 두고 구현 gap 으로 기록합니다. -
중립 고대비 주 버튼 — 브랜드 색 없이 무채 고대비 주 버튼이 필요한 서비스가 있습니다. 반전(inverse) 변형은 CoUI 에 없음
입니다. 예전에는 진한
secondary를 주 행동으로 빌려 썼지만secondary가 옅은 면이 되어 그 대체는 사라졌습니다. 지금은 브랜드 테마에서color/primary를 무채로 두는 것이 가장 가까운 방법입니다. CoUI 후보: Buttoninverse변형(color/inverse-surface채움). 이 선택은 서비스 전체에서 하나로 정하고 DDR 에 남깁니다. -
반투명 버튼 변형은 CoUI 에 없음 입니다. 알림 안에서는
ghost로 대체하고,ghost가 같은 역할을 하므로 CoUI 후보는 두지 않습니다.
7. 상태색 — 성공 · 경고 · 정보 · 오류#
CoUI 에 네 상태가 모두 있고, 상태마다 네 칸입니다.
| 상태 | 점 · 아이콘 · 상태 글자 | 옅은 면 | 옅은 면 위 글자 |
|---|---|---|---|
| 성공 | color/success (CoreColors.success) |
color/success-container |
color/on-success-container |
| 경고 | color/warning (CoreColors.warning) |
color/warning-container |
color/on-warning-container |
| 정보 | color/info (CoreColors.info) |
color/info-container |
color/on-info-container |
| 오류 | color/error (CoreColors.error) |
color/error-container |
color/on-error-container |
-
진한 채움 위 글자 짝(
color/on-success등)은 부품(진한 Banner 등)이 씁니다.color/error-strong·color/error-pressed는 파괴 버튼의 상태 전용입니다.
상태색을 쓰는 자리
| 자리 | 쓰는 법 |
|---|---|
| 점 | Status 의 color(success · warning · info · error) |
| 아이콘 | 상태 아이콘 하나에 상태색 |
| 상태 글자 — 「실패」 「승인 대기」 같은 짧은 상태 낱말 · 상태 제목 |
상태색.
흰 면(color/surface — 페이지 · 선으로 두른 카드 · 입력 칸) 위에서만
씁니다. Light 의 회색 면(
Card
기본 면 · 선택 행) 위에서는 대비가 4.5:1 에 모자랍니다(현재값 참고 약 4.3:1). 그 자리에서는 점 · 아이콘 · 상태 칩이 상태를 말하고 글자는
color/on-surface
입니다
|
| 상태 칩 |
Badge(tone: CoreBadgeTone.success)
·
warning
·
info
·
destructive
— 칩이 자기 면과 글자색을 짝으로 그리므로 회색 카드 위에서도 읽힙니다
|
| 알림 표면 |
CoUI
Alert
의 기본 변형이 옅은 면(
-container
)을 씁니다. 화면에서 칠하지 않습니다(
patterns.md
1절)
|
- 면적 대부분을 상태색으로 칠하지 않습니다. 행 · 패널 · 표 전체를
-container로 깔지 않고, 한 행에서 상태색 자리는 하나(점 또는 칩)입니다. -
분류는 상태가 아닙니다. 진료과 · 과목 · 상품 카테고리 · 역할처럼 뜻 없이 구분만 하는 색은 분류색
color/category-<색>계열(CoreColors.categoryBlue·categoryBlueContainer·onCategoryBlueContainer·categoryBlueOutline꼴, 9색)에서 고릅니다. 코드와 피그마 라이브러리(Semantic/ Color · <브랜드>)에 같은 이름으로 있습니다. 상태색을 빌려 쓰지 않습니다. -
CoUI 에 없음: 상태색 테두리(
success-outline같은 이름 — 테두리 칸은 분류색에만 있습니다), 진한 상태 단계(success-strong같은 이름 —color/error-strong하나뿐입니다), 알림 표면의 사선 그라디언트 세기. 대체는-container+on-…-container짝입니다. 알림 표면 후보는patterns.md1절에 있습니다.
8. CoUI 에 없는 색이 필요할 때#
- 이 문서의 표에서 가장 가까운 CoUI 토큰으로 대체합니다.
- 대체로 부족한 이유를 DDR 에 적습니다(
cc-designer:design-decision). -
여러 서비스에 필요하면 DDR 로 확정한 뒤 CoUI 토큰 후보로 제안합니다(
cc-blueprint/rules/coui-library-consumption.md§2. 올리는 절차와 draft 모드는 같은 문서 §6).
하지 않는 것
- hex 를 화면에 직접 넣지 않습니다(L0 리터럴 색). 예외는 cc-blueprint 표준 표지
Cover의 고정값 하나입니다. - 서비스 확장 토큰은 실제 로컬 변수·컬렉션으로 정의합니다. alias·mode·코드 대응을 기록하고 재바인딩을 확인합니다.
- 불투명도와 합성색도 제어할 수 있습니다. 배경과 모드별 최종 대비, exporter의 composed color 지원을 확인합니다.
- 코드 확장은 실제 CoUI theme/style 통로부터 확인합니다. 없는 속성은 제품 adapter 또는 API 확장으로 구현하고 렌더까지 연결합니다.
9. 색 밖의 토큰 — 어디에 있나#
| 토큰 | 이 스킬이 정하는 곳 |
|---|---|
간격 space/* (CoreSpace.spaceN) |
layout.md
6절 — 사다리 값만, 4의 배수. 피그마는
Primitives
의
space/*
, 밀도는
standard
하나
|
모서리 radius/* (CoreRadiusRole) |
layout.md 7절 — 부품 기본값, 화면이 묶는 곳은 패널 컨테이너뿐 |
그림자 shadow/* (CoreShadow) |
layout.md 8절 — 떠 있는 부품만 |
| 글자 크기 · 고정폭 | layout.md 9절 — 텍스트 스타일 4단계, 고정폭은 Code/* 스타일(Geist Mono) |
| 재질 모드 | Semantic/ Surface 의 defaultStyle 하나 |
10. 이름이 달라도 값이 같은 슬롯#
CoUI 브랜드의 지금 값에서는 이름이 다른데 값이 같은 슬롯이 많습니다. 자리는 늘 이름으로 고르고, 지금 같아 보인다고 바꿔 쓰지 않습니다. 값은 브랜드와 CoUI 판마다 달라집니다.
-
Light:
color/surface·color/surface-bright·color/surface-container-lowest가 같은 흰색이고,color/surface-dim·color/surface-container가 같은 회색입니다. -
Dark:
color/surface-dim·color/surface-container-lowest가 같고,color/surface-bright·color/surface-container가 같습니다. color/placeholder와color/outline이 두 모드에서 같은 값입니다. 하나는 글자, 하나는 선입니다.-
Light 의
color/primary와color/secondary가 같은 밝기입니다. Buttonsecondary는 이 슬롯이 아니라color/secondary-container를 채우므로 버튼끼리는 구분됩니다(6절). 대신color/secondary-container는 Light 에서color/surface-container와 같은 값입니다. -
Dark 그림자는 코드가 세기를 키워 그리고(색은 두 모드 모두 검정) 피그마는 라이트 세기로 그립니다. CoUI 몫이므로 화면 쪽에서 손대지 않습니다(
layout.md8절).
11. 이 문서의 CoUI 후보#
| 후보 | 지금 대체 | 메모 |
|---|---|---|
Button inverse 변형 | 브랜드 테마에서 color/primary 를 무채로 | 6절 |
Button tonal 을 코드에 |
피그마에만 있음. 화면은 다른 보조 행동과 같은 변형 + 구현 gap 기록 | 6절 |
상태색 테두리
success-outline
·
warning-outline
·
info-outline
·
error-outline
|
-container + on-…-container 짝 |
분류색 category-<색>-outline 이름 규칙을 따름 |
12. 다른 스킬과의 관계#
-
cc-flutter:card-surface-tokens— 코드 쪽에서 카드 · 컨테이너를 고르는 법(Card기본 ·outlined·OutlinedContainer), 테두리가 자식을 잠식하는 문제, 테마 토큰 값 자체를 바꾸지 않는 규칙, 검출 명령. 면의 층은 그 스킬이 이 문서 2절을 인용합니다. -
cc-blueprint/rules/figma-composition-patterns.md§C9 — ①(정적 컨테이너의 선)과 ③(화면 바탕과 구분 신호)은 이 문서 2절을 인용합니다 — 정적 컨테이너는 부품 기본값(filled, 선 없음), 화면 바탕은Scaffold기본값입니다. ②(컨트롤 경계는 기본값)는 그대로 맞물립니다. ④(정적 컨테이너 반경은 Card 값 하나)는 Card · Stat · 패널 컨테이너에서 맞물리고, 카드 안Table은 부품 기본 반경 그대로입니다(layout.md7절). §C4 콘솔 셸의 상단 바 아래 선과 사이드바의 면 · 선도 부품 기본값 그대로입니다(2-2). ⑤ 는 cc-blueprint 브리프(cc-blueprint/rules/figma-brand-selection.md§1)의 '카드 깊이' 칸을 늘평면으로 적어 맞물리게 합니다(이유: 떠 있는 것만 그림자,mood.md2-7). 그 칸을카드까지로 두면 ⑤ 가 카드 · 표에shadow/*를 얹으라고 해서 이 문서와 부딪힙니다. -
cc-blueprint/rules/figma-slop-tells.md§S1 · §S4 — 카드 안에서 면이 달라지는 것을 부품의 상태(선택 · 호버)로 좁혀 §S1 과 함께 섭니다. §S4 강조색 과다는 5절과 같은 방향입니다. cc-designer:critique-color— 대비 · 팔레트 검사. 이 문서의 자리를 기준으로 봅니다.-
cc-designer:design-system— 토큰의 정의와 값. 이 문서는 목록을 다시 적지 않습니다. 앱 테마를 잇는 코드는cc-coui:coui-theme.