어떤 색이 있고 각 색이 무슨 역할인지 정한다. 어떤 상태일 때 무엇을 쓰는지는 상태 문서에 있다.

색을 바꾸는 방법 두 가지

범위방법
화면 전체브랜드 프리셋 185색 에서 고른다. 명령 한 줄이 nui-theme.css 를 만든다. 라이브러리 CSS 뒤에 불러오면 끝난다
한 컴포넌트className 으로 직접 지정한다. 배경과 글자를 같은 자리에 쓰게 되므로 짝을 놓치기 어렵다
/* 1) 화면 전체 */
import "@nui-kit/react/styles/index.css";
import "./nui-theme.css";

/* 2) 한 컴포넌트 — !important 는 필요 없다 */
.my-tooltip {
  background: #222;
  color: #fff;
}
컴포넌트별 색 변수는 제공하지 않는다. 배경만 바꾸면 글자색은 라이브러리 값이 남아 대비가 조용히 깨진다. 그 사실은 화면에 드러나지 않는다. semantic 변수를 :root 에서 덮어쓰는 방법도 같은 이유로 지원하지 않는다.

역할별 색

className 으로 색을 맞출 때 아래 이름을 참조한다.

글자

글자로 쓸 수 있는 단계는 11번과 12번뿐이다. 9번과 10번은 채워진 배경 자리라 글자로 쓰면 대비가 3점대로 떨어진다. text-disabled 만 9번을 쓴다. 비활성 요소는 WCAG 대비 요구에서 빠지기 때문이다.

토큰비고
--nui-text-primaryvar(--nui-color-gray-12)별칭
--nui-text-secondaryvar(--nui-color-gray-11)별칭
--nui-text-disabledvar(--nui-color-gray-9)별칭
--nui-text-dangervar(--nui-color-danger-11)별칭
--nui-text-infovar(--nui-color-info-11)별칭
--nui-text-on-inversevar(--nui-color-white)별칭
--nui-text-on-accentvar(--nui-color-white)별칭

면은 콘텐츠를 담는 것의 배경이다. 글자나 아이콘이 아니라 화면의 층을 만든다. 층의 순서는 깊이 문서에 있다.

토큰비고
--nui-layer-basementvar(--nui-color-gray-2)별칭
--nui-layer-defaultvar(--nui-color-gray-1)별칭
--nui-layer-floatingvar(--nui-color-gray-1)별칭
--nui-layer-inversevar(--nui-color-gray-12)별칭
--nui-layer-overlayrgb(0 0 0 / 50%)
--nui-surface-neutral-softvar(--nui-color-gray-a3)별칭
--nui-surface-neutral-subtlevar(--nui-color-gray-a4)별칭
--nui-surface-toast-errorvar(--nui-color-danger-12)별칭

선 색은 굵기가 아니라 등장 빈도로 나눈다. 고르는 기준과 두께는 모양과 선 문서에 있다.

토큰비고
--nui-border-formvar(--nui-color-gray-6)별칭
--nui-border-sectionvar(--nui-color-gray-a5)별칭
--nui-border-dividervar(--nui-color-gray-a3)별칭
--nui-border-brandvar(--nui-color-brand-7)별칭
--nui-border-brand-subtlevar(--nui-color-brand-6)별칭

액션

액션은 버튼 계열이다. 색이 아니라 역할이 이름이라 이 버튼이 삭제인지만 물으면 정해진다. 각 역할의 -fg 는 그 배경 위에서 대비 4.5 대 1 을 넘는 글자색이다. -hover-active 는 같은 색조의 다음 단계다. 누르는 순간 색이 한 단계씩 진해지고, 그림자나 투명도로 표현하지 않는다. 정부 가이드라인(KRDS)의 상태 색 규칙이다.

토큰비고
--nui-action-neutralvar(--nui-color-gray-12)별칭
--nui-action-primaryvar(--nui-color-brand-9)별칭
--nui-action-secondaryvar(--nui-color-secondary-9)별칭
--nui-action-dangervar(--nui-color-danger-9)별칭
--nui-action-warningvar(--nui-color-warning-9)별칭
--nui-action-neutral-fgvar(--nui-color-gray-1)별칭
--nui-action-primary-fgvar(--nui-color-brand-contrast)별칭
--nui-action-secondary-fgvar(--nui-color-secondary-contrast)별칭
--nui-action-danger-fgvar(--nui-color-danger-contrast)별칭
--nui-action-warning-fgvar(--nui-color-warning-contrast)별칭
--nui-action-neutral-hovercolor-mix( in oklab, var(--nui-color-gray-12), var(--nui-color-white) 14% )
--nui-action-neutral-activecolor-mix( in oklab, var(--nui-color-gray-12), var(--nui-color-white) 26% )
--nui-action-primary-hovervar(--nui-color-brand-10)별칭
--nui-action-primary-activecolor-mix( in oklab, var(--nui-color-brand-10), #000 12% )
--nui-action-secondary-hovervar(--nui-color-secondary-10)별칭
--nui-action-secondary-activecolor-mix( in oklab, var(--nui-color-secondary-10), #000 12% )
--nui-action-danger-hovervar(--nui-color-danger-10)별칭
--nui-action-danger-activecolor-mix( in oklab, var(--nui-color-danger-10), #000 12% )
--nui-action-warning-hovervar(--nui-color-warning-10)별칭
--nui-action-warning-activecolor-mix( in oklab, var(--nui-color-warning-10), #000 12% )
--nui-action-bg-hovervar(--nui-color-gray-a4)별칭
--nui-action-bg-activevar(--nui-color-gray-a5)별칭
--nui-action-bg-disabledvar(--nui-color-gray-3)별칭
--nui-action-fg-disabledvar(--nui-color-gray-9)별칭
--nui-action-border-disabledvar(--nui-color-gray-6)별칭
--nui-action-fg-line-disabledvar(--nui-color-gray-9)별칭
action-warning 만 글자가 어둡다. 노랑 배경에 흰 글자는 대비가 크게 미달한다. 노랑을 어둡게 하면 갈색이 되어 주의의 의미를 잃으므로 배경을 밝게 두고 글자를 어둡게 했다.

입력 컨트롤

입력 컨트롤 색은 TextfieldSelect, Checkbox 처럼 값을 받는 것들이 공유한다.

토큰비고
--nui-control-textvar(--nui-color-gray-12)별칭
--nui-control-text-mutedvar(--nui-color-gray-11)별칭
--nui-control-text-placeholdervar(--nui-color-gray-10)별칭
--nui-control-text-disabledvar(--nui-text-disabled)별칭
--nui-control-text-errorvar(--nui-color-danger-11)별칭
--nui-control-iconvar(--nui-color-gray-10)별칭
--nui-control-icon-disabledvar(--nui-color-gray-9)별칭
--nui-control-icon-strongvar(--nui-color-gray-12)별칭
--nui-control-bgvar(--nui-layer-default)별칭
--nui-control-bg-disabledvar(--nui-color-gray-3)별칭
--nui-control-bg-readonlyvar(--nui-color-gray-2)별칭
--nui-control-bg-subtlevar(--nui-color-gray-3)별칭
--nui-control-bg-hovervar(--nui-color-gray-a4)별칭
--nui-control-bg-activevar(--nui-color-gray-a5)별칭
--nui-control-bordervar(--nui-color-gray-9)별칭
--nui-control-border-hovervar(--nui-color-gray-10)별칭
--nui-control-border-disabledvar(--nui-color-gray-8)별칭
--nui-control-border-errorvar(--nui-color-danger-8)별칭
--nui-control-accentvar(--nui-color-brand-9)별칭
--nui-control-accent-softvar(--nui-color-brand-3)별칭
--nui-control-accent-errorvar(--nui-color-danger-9)별칭
--nui-control-selection-disabledvar(--nui-color-gray-8)별칭
--nui-control-trackvar(--nui-color-gray-9)별칭
--nui-control-thumbvar(--nui-color-white)별칭
--nui-control-selection-textvar(--nui-color-brand-11)별칭
--nui-focus-colorvar(--nui-color-brand-9)별칭

상태 표시

상태 표시는 알림이나 배지처럼 은은한 면으로 알릴 때 쓴다.

토큰비고
--nui-status-error-softvar(--nui-color-danger-3)별칭
--nui-status-success-softvar(--nui-color-success-3)별칭
--nui-status-warning-softvar(--nui-color-warning-3)별칭
--nui-status-info-softvar(--nui-color-info-3)별칭

12단계 팔레트

모든 색이 12단계를 갖고 단계마다 쓸 자리가 정해져 있다. 어느 색을 쓰든 입력 테두리는 9번, 채워진 배경도 9번, hover 는 10번이다. 테두리를 9번에 두는 이유는 배경과 3 대 1 이 넘어야 저시력 사용자에게도 보이기 때문이다.

단계역할쓰는 곳
1 · 2배경화면 바닥 · 은은한 표면
3 · 4 · 5컴포넌트 배경기본 · hover · 눌림
6 · 7 · 8테두리구분선 · 컨트롤 테두리 · 강조와 포커스
9 · 10solid 배경브랜드 색이 가장 선명한 단계 · 그 hover
11 · 12글자보조 텍스트 · 본문 텍스트
brand브랜드 색 — #01796f 를 9단계에 놓고 생성했다
1
2
3
4
5
6
7
8
9
10
11
12
secondary보조 색 — 브랜드와 같은 색조, 채도 절반. 덜 중요한 액션과 구분용 면
1
2
3
4
5
6
7
8
9
10
11
12
gray무채색 — 브랜드에 맞춰 살짝 초록빛이다
1
2
3
4
5
6
7
8
9
10
11
12
danger되돌릴 수 없는 액션 · 오류
1
2
3
4
5
6
7
8
9
10
11
12
warning주의가 필요한 액션
1
2
3
4
5
6
7
8
9
10
11
12
success완료 · 확인
1
2
3
4
5
6
7
8
9
10
11
12
info정보 전달 · 도움말
1
2
3
4
5
6
7
8
9
10
11
12
라이트에서 1번부터 7번까지는 어두운 글자를, 8번부터 12번까지는 밝은 글자를 얹도록 만들었다. 다크에서는 스케일 전체가 뒤집혀 같은 번호가 반대 밝기가 된다. 그래서 같은 번호를 쓰면 어느 테마에서든 대비가 자동으로 확보된다.

다크 테마

OS 가 다크면 아무 설정 없이 다크로 그려진다. 순서는 셋이다. data-theme="dark" 를 주면 그것이 이기고, 없으면 OS 설정을 따르고, data-theme="light" 를 주면 OS 가 다크여도 라이트를 유지한다.

바뀌는 것은 12단계 값뿐이다. action-primary 같은 역할 이름은 그대로라 컴포넌트 CSS 는 고칠 것이 없다. 예외는 셋 — 층(layer-*)은 "위가 밝다"를 지키려고 순서를 바꾸고, 토스트·툴팁 위 글자(text-on-inverse)는 표면이 밝아지므로 어두워지고, 에러 토스트 배경이 진해진다.

다크는 옵션이 아니라 두 번째 정본이다. 라이트에서 통과한 대비는 다크에서도 통과해야 한다. verify:a11y 가 두 테마를 다 잰다.

팔레트 전량

컴포넌트는 팔레트를 직접 참조하지 않는다. 참조하면 브랜드 색을 바꿔도 그 컴포넌트만 옛 색으로 남는다.

토큰비고
--nui-color-white#fff
--nui-color-brand-1#f9fefd
--nui-color-brand-2#f2fbfa
--nui-color-brand-3#def8f4
--nui-color-brand-4#c9f3ed
--nui-color-brand-5#b3ebe3
--nui-color-brand-6#9cdfd5
--nui-color-brand-7#7ecec4
--nui-color-brand-8#4dbaad
--nui-color-brand-9#01796f
--nui-color-brand-10#006b61
--nui-color-brand-11#00776d
--nui-color-brand-12#18423d
--nui-color-brand-a4#00c7aa36
--nui-color-brand-a5#00bca24c
--nui-color-brand-a6#00ad9363
--nui-color-brand-a7#009f8b81
--nui-color-secondary-1#fafdfd
--nui-color-secondary-2#f4fbfa
--nui-color-secondary-3#e6f5f2
--nui-color-secondary-4#d8eeeb
--nui-color-secondary-5#cae7e2
--nui-color-secondary-6#bcded9
--nui-color-secondary-7#a9d1cb
--nui-color-secondary-8#8cbfb7
--nui-color-secondary-9#33615b
--nui-color-secondary-10#24524c
--nui-color-secondary-11#406e68
--nui-color-secondary-12#172e2b
--nui-color-secondary-a4#00907d27
--nui-color-secondary-a5#008c7435
--nui-color-secondary-a6#00826f43
--nui-color-secondary-a7#00776556
--nui-color-gray-1#fcfdfc
--nui-color-gray-2#f8f9f8
--nui-color-gray-3#eff1ef
--nui-color-gray-4#e7e9e7
--nui-color-gray-5#e0e1e0
--nui-color-gray-6#d8dad8
--nui-color-gray-7#cdcfcd
--nui-color-gray-8#b9bcba
--nui-color-gray-9#898d8a
--nui-color-gray-10#7f8380
--nui-color-gray-11#616462
--nui-color-gray-12#1c201d
--nui-color-gray-a3#00200010
--nui-color-gray-a4#00160018
--nui-color-gray-a5#0009001f
--nui-color-gray-a6#000e0027
--nui-color-gray-a7#000b0032
--nui-color-danger-1#fffcfc
--nui-color-danger-2#fff7f7
--nui-color-danger-3#feebe9
--nui-color-danger-4#ffdcd7
--nui-color-danger-5#ffcec8
--nui-color-danger-6#fdbeb7
--nui-color-danger-7#f5aaa3
--nui-color-danger-8#eb8f88
--nui-color-danger-9#ce2c31
--nui-color-danger-10#be1523
--nui-color-danger-11#ce2c31
--nui-color-danger-12#641818
--nui-color-danger-a4#ff200028
--nui-color-danger-a5#ff1c0037
--nui-color-danger-a6#f8190048
--nui-color-danger-a7#e414005c
--nui-color-warning-1#fefdfb
--nui-color-warning-2#fffaea
--nui-color-warning-3#fff2c3
--nui-color-warning-4#ffe9a0
--nui-color-warning-5#ffde7f
--nui-color-warning-6#fcd27a
--nui-color-warning-7#e9c16e
--nui-color-warning-8#d7a944
--nui-color-warning-9#ffca2f
--nui-color-warning-10#fac137
--nui-color-warning-11#9b6f00
--nui-color-warning-12#463a20
--nui-color-warning-a5#ffbe0080
--nui-color-warning-a6#faa90085
--nui-color-warning-a7#d9920091
--nui-color-success-1#fbfefc
--nui-color-success-2#f5fbf7
--nui-color-success-3#e7f6ed
--nui-color-success-4#d9f0e2
--nui-color-success-5#c8e7d5
--nui-color-success-6#b3dcc4
--nui-color-success-7#97ccae
--nui-color-success-8#6eb68f
--nui-color-success-9#218358
--nui-color-success-10#06754b
--nui-color-success-11#1a7f54
--nui-color-success-12#223a2d
--nui-color-success-a5#00903d37
--nui-color-success-a6#008a3a4c
--nui-color-success-a7#00823968
--nui-color-info-1#fbfdff
--nui-color-info-2#f5f9fe
--nui-color-info-3#eaf3fd
--nui-color-info-4#dcecff
--nui-color-info-5#cbe3fe
--nui-color-info-6#b7d5f9
--nui-color-info-7#9dc4f1
--nui-color-info-8#78ade9
--nui-color-info-9#0d74ce
--nui-color-info-10#0066bf
--nui-color-info-11#0e75cf
--nui-color-info-12#0d355c
--nui-color-info-a5#0076fb34
--nui-color-info-a6#006bea48
--nui-color-info-a7#0066db62
--nui-color-brand-contrast#ffffff
--nui-color-secondary-contrast#ffffff
--nui-color-danger-contrast#ffffff
--nui-color-warning-contrast#2b2009
--nui-color-success-contrast#ffffff
--nui-color-info-contrast#ffffff