@iyulab/components 1.15.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +177 -0
- package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
- package/dist/_virtual/_glob-assets_raw/light.css.637cb2f8.js +1 -1
- package/dist/components/alert/UAlert.styles.js +15 -8
- package/dist/components/badge/UBadge.styles.js +5 -1
- package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +1 -1
- package/dist/components/button/UButton.styles.js +10 -8
- package/dist/components/checkbox/UCheckbox.styles.js +6 -6
- package/dist/components/copy-button/UCopyButton.styles.js +2 -2
- package/dist/components/field/UField.styles.js +2 -2
- package/dist/components/icon-button/UIconButton.styles.js +1 -1
- package/dist/components/input/UInput.styles.js +8 -8
- package/dist/components/menu-item/UMenuItem.styles.js +1 -1
- package/dist/components/option/UOption.styles.js +1 -1
- package/dist/components/progress-bar/UProgressBar.styles.js +3 -3
- package/dist/components/progress-ring/UProgressRing.styles.js +3 -3
- package/dist/components/radio/URadio.styles.js +2 -2
- package/dist/components/select/USelect.styles.js +8 -8
- package/dist/components/slider/USlider.styles.js +1 -1
- package/dist/components/spinner/USpinner.styles.js +1 -1
- package/dist/components/switch/USwitch.styles.js +5 -5
- package/dist/components/tab-panel/UTabPanel.styles.js +1 -1
- package/dist/components/tag/UTag.styles.js +1 -1
- package/dist/components/textarea/UTextarea.styles.js +6 -6
- package/dist/components/tree-item/UTreeItem.styles.js +1 -1
- package/dist/styles/dark.css +31 -11
- package/dist/styles/light.css +50 -17
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,182 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.18.0] - 2026-08-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **`--u-bg-color-raised`** — 바탕에 인접해 있으면서 한 단 구분되는 **크롬 면**
|
|
8
|
+
(툴바 · 표 헤더 · 푸터 · 페이지네이션).
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
라이트 neutral-50 (#FAFAFA) 다크 neutral-300 (#2A2A2A)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
종전에는 배경 역할 토큰이 **상호작용 상태 이름뿐**이었다(`-hover`·`-active`·
|
|
15
|
+
`-disabled`). *"바탕보다 한 단 올라온 면"* 을 뜻할 수단이 없어, 소비 패키지가
|
|
16
|
+
`:host-context([theme="dark"])` 로 다크만 손으로 보정했다 — 그리고 그 선택자는
|
|
17
|
+
**Firefox·Safari 에서 미지원**이라 그 브라우저에서는 다크가 적용된 적이 없었다.
|
|
18
|
+
|
|
19
|
+
⚠**`--u-panel-bg-color` 와 다르다.** 그쪽은 *떠 있는* 패널(카드·대화상자·메뉴)이라
|
|
20
|
+
라이트에서 페이지와 같은 흰색이고 그림자가 높이를 나른다. 크롬 면은 그림자가 없어
|
|
21
|
+
라이트에서도 틴트가 필요하다.
|
|
22
|
+
|
|
23
|
+
⚠**한 단만 정의한다.** 두 단째의 실측 수요는 라이트 한쪽뿐이었고, 다크에서는 소비 측
|
|
24
|
+
오버라이드가 두 값을 이미 같은 단으로 합치고 있었다. 상호작용 상태 축에 높이를 얹지도
|
|
25
|
+
않는다 — 의미가 어긋난다.
|
|
26
|
+
|
|
27
|
+
## [1.17.0] - 2026-08-02
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- ★**알림(`u-alert`) 아이콘이 알림 배경 위에서 보이지 않던 문제 — 라이트 4/4 미달.**
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
라이트 (기준 3.0) error 2.31 ✗ warning 1.48 ✗ info 2.63 ✗ success 2.50 ✗
|
|
35
|
+
다크 3.18 ✓ 3.80 ✓ 3.48 ✓ 3.95 ✓
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
원인은 **전경이 아니라 배경**이었다. 알림 배경이 `--u-*-color-weakest`(라이트
|
|
39
|
+
shade-200)였는데, 그 단은 **진행바 버퍼 같은 그래픽**에도 쓰인다 — 그래픽으로 보이려면
|
|
40
|
+
진해야 하고 면으로 쓰이려면 옅어야 한다. 두 요구를 한 단에 겹쳐 둔 것이 결함의 뿌리다.
|
|
41
|
+
|
|
42
|
+
⇒ 알림 배경을 **면 토큰 `--u-*-bg-color`** 로 옮겼다. 두 테마 **4/4 통과**(4.58~7.00).
|
|
43
|
+
`-weakest` 는 그래픽 단으로 남는다.
|
|
44
|
+
|
|
45
|
+
**라이트 알림 배경이 옅어진다** — error `#EF9A9A` → `#FFEBEE` · info `#90CAF9` →
|
|
46
|
+
`#E3F2FD` · success `#A5D6A7` → `#E8F5E9` (warning 은 `#FFF59D` 유지).
|
|
47
|
+
|
|
48
|
+
- **라이트 `--u-warning-color-strong` 이 어떤 배경에서도 읽히지 않던 문제.**
|
|
49
|
+
yellow-700(`#FBC02D`)은 흰 바탕 1.66 · 노란 면 위 1.61 이다. 노랑 램프는 900 까지도
|
|
50
|
+
2.65 로 미달이고 **1000(`#8A4A00`)에서 처음 6.86** 이 된다.
|
|
51
|
+
|
|
52
|
+
⇒ 라이트만 `yellow-1000` 으로 옮겼다(다크는 yellow-700 = 5.30 으로 이미 정상).
|
|
53
|
+
경고 아이콘·문구가 **밝은 노랑에서 어두운 호박색으로** 바뀐다 — 이 단의 용도는 면이
|
|
54
|
+
아니라 글자·아이콘이므로 색상보다 가독성이 앞선다.
|
|
55
|
+
|
|
56
|
+
⇒ 1.16.0 이 대비 검사에서 **제외해 두었던 라이트 warning 이 제외 없이 통과**한다.
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
|
|
60
|
+
- **`--u-warning-bg-color`** — 1.16.0 에서 유일하게 빠져 있던 유채색 면 토큰.
|
|
61
|
+
|
|
62
|
+
당시 판정은 *"라이트 황색 틴트가 Δ0.071 로 거의 보이지 않아 세기를 맞출 단 짝이 없다"*
|
|
63
|
+
였는데, 그 측정은 **shade-0 짝만** 재고 있었다. 노랑만 한 단 내려 잡으면 라이트 쪽
|
|
64
|
+
세기가 맞는다 — 바탕 대비 휘도 델타 실측:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
blue-0 0.131 · red-0 0.132 · green-0 0.117 · yellow-200 0.110 (yellow-0 은 0.027)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
라이트 `yellow-200` / 다크 `yellow-100`. ⚠단 이름이 계열마다 다른 것은 이 층의 정상
|
|
71
|
+
상태다 — 라이트 팔레트는 휘도 순이 아니라 같은 단 번호가 같은 세기를 뜻하지 않는다.
|
|
72
|
+
|
|
73
|
+
- **대비 계약 단언 2종** — `상태 아이콘이 그 상태의 면 위에서 보인다`(비텍스트 3.0)와
|
|
74
|
+
면 토큰 위의 본문(5역할 전부). 1.16.0 이 측정값으로만 기록해 둔 항목이 단언으로 승격됐다.
|
|
75
|
+
|
|
76
|
+
### Known issues
|
|
77
|
+
|
|
78
|
+
1.16.0 의 다음 둘은 그대로다 — **다크 `-weak` 의 구조적 충돌**(바탕 위 그래픽과 흰 글자를
|
|
79
|
+
받는 면이 팔레트의 반대쪽을 요구한다)과 **`--u-border-color-strong` 3.0 미달**.
|
|
80
|
+
알림 테두리(`-weaker`)도 면 위에서 3.0 에 못 미치지만(1.13~2.61), 알림은 상호작용
|
|
81
|
+
컴포넌트가 아니라 WCAG 1.4.11 적용 여부 자체가 판단을 요구하므로 이번에 손대지 않았다.
|
|
82
|
+
|
|
83
|
+
## [1.16.0] - 2026-08-02
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
|
|
87
|
+
- ★**역할 토큰의 유채색 단이 WCAG AA 를 받치지 못하던 문제 — 두 테마 모두.**
|
|
88
|
+
|
|
89
|
+
1.15.0 은 *"라이트 shade-600 위의 흰 글자가 8색 중 6색 미달, 다크는 8/8 통과"* 로
|
|
90
|
+
기록했다. 그 측정은 **한 방향만** 재고 있었다 — 같은 토큰이 **바탕 위의 글자**로도
|
|
91
|
+
쓰이는데, 그쪽은 다크가 미달이었다:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
바탕 위의 글자 (기준 4.5) 면 위의 흰 글자 (기준 4.5)
|
|
95
|
+
라이트 --u-primary-color 3.68 ✗ 라이트 3.68 ✗
|
|
96
|
+
다크 --u-primary-color 3.07 ✗ 다크 6.09 ✓
|
|
97
|
+
다크 --u-danger-color 2.74 ✗ 다크 6.83 ✓
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
실제로 깨져 있던 자리: **입력 오류 문구**(`u-field`·`u-checkbox`·`u-switch`),
|
|
101
|
+
**링크 버튼**(`variant="link"` 쉬는 상태 3.12), **복사 완료 표시**, hover/active
|
|
102
|
+
텍스트·아이콘.
|
|
103
|
+
|
|
104
|
+
⇒ **단을 대비로 다시 골랐다.** 단 번호가 아니라 측정이 기준이다:
|
|
105
|
+
|
|
106
|
+
| 토큰 | 라이트 | 다크 |
|
|
107
|
+
|---|---|---|
|
|
108
|
+
| `--u-primary-color` · `--u-info-color` | blue-600 → **blue-700** (4.60) | 변경 없음 (면, 6.09) |
|
|
109
|
+
| `--u-primary-color-strong` · `--u-info-color-strong` | blue-700 → **blue-800** (5.75) | blue-700 → **blue-800** (5.32) |
|
|
110
|
+
| `--u-danger-color` | red-600 → **red-700** (4.98) | 변경 없음 (면, 6.83) |
|
|
111
|
+
| `--u-danger-color-strong` | red-700 → **red-800** (5.62) | red-700 → **red-800** (4.87) |
|
|
112
|
+
| `--u-success-color` | green-600 → **green-800** (5.13) | 변경 없음 (면, 4.93) |
|
|
113
|
+
| `--u-success-color-strong` | green-700 → **green-900** (7.87) | 변경 없음 (5.15) |
|
|
114
|
+
|
|
115
|
+
⚠**계열마다 단이 다르고 테마마다 다르다.** Material 램프는 휘도가 아니라 색상 기준으로
|
|
116
|
+
만들어져 있어 같은 단 번호가 같은 세기를 뜻하지 않는다(green 은 700 도 4.12 로 미달이라
|
|
117
|
+
두 단을 건너뛴다). 종전에는 두 시트가 **같은 단**을 쓰도록 테스트가 강제하고 있었고,
|
|
118
|
+
그 규칙이 라이트만 미달인 결함을 세 번 반복해서 만들었다.
|
|
119
|
+
|
|
120
|
+
⚠**라이트와 다크에서 요구가 갈리는 이유**: 라이트는 바탕도 on-color 도 흰색이라 두
|
|
121
|
+
요구가 한 조건으로 합쳐지지만, 다크는 바탕 `#121212` · on-color `#FFFFFF` 로 **정반대
|
|
122
|
+
방향**이다. 한 단이 둘을 맡을 수 없다. 그래서 `-color` 는 **면**, `-strong` 은
|
|
123
|
+
**글자·아이콘**으로 용도를 확정했고, 다크에서 두 단이 벌어진다.
|
|
124
|
+
|
|
125
|
+
- **`--u-warning-txt-color` 가 노란 면 위에서 읽히지 않던 문제** — `#FFFFFF` 는 라이트
|
|
126
|
+
노랑 위에서 1.40 이다. 노랑은 **어떤 단으로 옮겨도** 흰 글자로 AA 를 못 받치므로
|
|
127
|
+
(라이트 최대 2.65 @900, 그마저 갈색) 전경을 뒤집었다: `var(--u-neutral-1000)` —
|
|
128
|
+
라이트 `#000000`(15.05 ✓) · 다크 `#FFFFFF`(4.65 ✓). 한 줄로 양 테마를 만족한다.
|
|
129
|
+
|
|
130
|
+
- **`u-badge[color="blue"]` 가 장식 축에서 역할 토큰을 읽던 문제.** 이 한 색만
|
|
131
|
+
`--u-primary-color` 를 참조해, 브랜드 색을 바꾸면 `color="blue"` 배지가 함께 움직였다
|
|
132
|
+
(`color="green"` 등 나머지 8색은 팔레트 직참조라 움직이지 않는다). `--u-blue-500` 로
|
|
133
|
+
되돌렸다 — 이 컴포넌트의 다른 장식 색과 같은 단이다. **배지 파랑이 `#1E88E5` →
|
|
134
|
+
`#2196F3` 로 바뀐다.**
|
|
135
|
+
|
|
136
|
+
- **`u-button[variant="link"]` 이 `--u-link-txt-color` 를 무시하던 문제.** 링크 색을
|
|
137
|
+
정의해 둔 토큰이 **어디에서도 쓰이지 않았고**, 링크는 대신 `--u-primary-color-weak`
|
|
138
|
+
(흰 바탕 3.12 ✗)를 썼다. 쉬는 상태를 그 토큰으로 되돌리고, hover/active 는 밑줄 +
|
|
139
|
+
`-strong` 한 단으로 합쳤다.
|
|
140
|
+
|
|
141
|
+
### Added
|
|
142
|
+
|
|
143
|
+
- **`tests/build/token-contrast.test.ts`** — 역할 토큰의 **조합 대비**를 단언하는 회귀망.
|
|
144
|
+
값 하나를 재는 것으로는 토큰이 안전한지 알 수 없다는 것이 위 결함의 교훈이므로,
|
|
145
|
+
`(전경, 배경, 기준)` 표를 두 테마에 대해 검사한다. 소비자가 `--u-primary-color` 를
|
|
146
|
+
덮어써도 살아남는 형태의 계약이다.
|
|
147
|
+
|
|
148
|
+
- **`node scripts/token-fallbacks.mjs --refresh`** — 시트 값이 바뀐 뒤 **이미 배선된**
|
|
149
|
+
폴백 리터럴을 다시 굽는다. 종전 생성기는 배선만 하고 갱신을 못 해서, 매핑을 바꿀 때마다
|
|
150
|
+
수십 곳을 손으로 고쳐야 했다(*"폴백은 손으로 쓰지 말고 생성한다"* 는 원칙에 갱신 경로가
|
|
151
|
+
없었다). 이번 변경의 49곳이 이 명령으로 처리됐다.
|
|
152
|
+
|
|
153
|
+
### Changed
|
|
154
|
+
|
|
155
|
+
- **시각 변화 요약** — 전부 *진해지는* 방향이며 레이아웃에 영향이 없다.
|
|
156
|
+
주 강조색 `#1E88E5` → `#1976D2` · 오류색 `#E53935` → `#D32F2F` ·
|
|
157
|
+
성공색 `#43A047` → `#2E7D32` · 링크/hover 텍스트가 한 단 더 · 경고 면 위 글자가
|
|
158
|
+
흰색 → 검정 · 배지 파랑 `#1E88E5` → `#2196F3`.
|
|
159
|
+
다크에서는 **글자로 쓰이는 자리만** 밝아진다(면 색은 그대로).
|
|
160
|
+
|
|
161
|
+
### Known issues
|
|
162
|
+
|
|
163
|
+
- **알림(`u-alert`) 아이콘이 알림 배경 위에서 3.0 에 미달** — 라이트 danger 2.61 ·
|
|
164
|
+
warning 1.48 (info 3.28 ✓ · success 4.79 ✓ 는 이번 재매핑으로 해소됐다). 원인은
|
|
165
|
+
전경이 아니라 **배경(`-weakest` = shade-200)이 너무 진한 것**이라 면 토큰 쪽을
|
|
166
|
+
손봐야 한다. 다크는 4/4 통과한다.
|
|
167
|
+
|
|
168
|
+
- **다크에서 `-weak`(진행바 채움·별점·포커스 링)가 바탕 위 3.0 미달** (2.31).
|
|
169
|
+
이 자리는 재매핑으로 못 고친다 — 다크에서 `-weak`(바탕 위 그래픽, 밝아야 함)와
|
|
170
|
+
`-color`(흰 글자를 받는 면, 어두워야 함)가 팔레트의 **반대쪽**을 요구하므로 강도 축
|
|
171
|
+
하나로 표현되지 않는다. 새 축 신설 여부는 설계 결정이다.
|
|
172
|
+
|
|
173
|
+
- **`--u-border-color-strong` 이 양 테마 모두 3.0 미달** (라이트 1.88 · 다크 2.40).
|
|
174
|
+
무엇이 "UI 컴포넌트 경계"인지의 판단이 선행돼야 한다.
|
|
175
|
+
|
|
176
|
+
- **장식 축(`[color=X]`)의 shade-600 위 흰 글자는 여전히 8색 중 6색 미달** — 아래
|
|
177
|
+
1.15.0 항목 참조. 역할 층과 달리 장식 축은 소비자가 고른 색이라 라이브러리가 단을
|
|
178
|
+
대신 고를 수 없다.
|
|
179
|
+
|
|
3
180
|
## [1.15.0] - 2026-08-02
|
|
4
181
|
|
|
5
182
|
### Fixed
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
//#region \0glob-assets_raw/dark.css.e8ac080d
|
|
2
|
-
var dark_css_default = ":root[theme=\"dark\"] {\n color-scheme: dark;\n\n /* Neutral Colors */\n --u-neutral-0: #000000;\n --u-neutral-50: #0A0A0A;\n --u-neutral-100: #121212;\n --u-neutral-200: #1E1E1E;\n --u-neutral-300: #2A2A2A;\n --u-neutral-400: #3D3D3D;\n --u-neutral-500: #525252;\n --u-neutral-600: #6E6E6E;\n --u-neutral-700: #8A8A8A;\n --u-neutral-800: #B0B0B0;\n --u-neutral-900: #D4D4D4;\n --u-neutral-1000: #FFFFFF;\n\n /* Blue Colors */\n --u-blue-0: #030D1A;\n --u-blue-100: #061629;\n --u-blue-200: #0A223B;\n --u-blue-300: #103150;\n --u-blue-400: #174167;\n --u-blue-500: #205281;\n --u-blue-600: #2A659D;\n --u-blue-700: #3678B8;\n --u-blue-800: #478DCE;\n --u-blue-900: #5DA2DF;\n --u-blue-1000: #79BBEA;\n\n /* Green Colors */\n --u-green-0: #06140C;\n --u-green-100: #0A2114;\n --u-green-200: #10301D;\n --u-green-300: #164228;\n --u-green-400: #1F5535;\n --u-green-500: #2A6942;\n --u-green-600: #367E50;\n --u-green-700: #4A9563;\n --u-green-800: #63AB7A;\n --u-green-900: #80BE97;\n --u-green-1000: #9BCFB1;\n\n /* Yellow Colors */\n --u-yellow-0: #1C1300;\n --u-yellow-100: #2D1E00;\n --u-yellow-200: #402B00;\n --u-yellow-300: #553900;\n --u-yellow-400: #6B4900;\n --u-yellow-500: #825A00;\n --u-yellow-600: #9A6C00;\n --u-yellow-700: #B08012;\n --u-yellow-800: #C69635;\n --u-yellow-900: #D9AD5A;\n --u-yellow-1000: #E8C57F;\n\n /* Red Colors */\n --u-red-0: #1C0707;\n --u-red-100: #2C0B0B;\n --u-red-200: #3E1111;\n --u-red-300: #541818;\n --u-red-400: #6C2020;\n --u-red-500: #852A2A;\n --u-red-600: #A13535;\n --u-red-700: #B94949;\n --u-red-800: #CB6262;\n --u-red-900: #D98383;\n --u-red-1000: #E7A2A2;\n\n /* Orange Colors */\n --u-orange-0: #1D0E00;\n --u-orange-100: #2F1700;\n --u-orange-200: #421F00;\n --u-orange-300: #582A00;\n --u-orange-400: #703600;\n --u-orange-500: #8A4500;\n --u-orange-600: #A55600;\n --u-orange-700: #BD6A18;\n --u-orange-800: #D1823C;\n --u-orange-900: #E19D67;\n --u-orange-1000: #EDB992;\n\n /* Teal Colors */\n --u-teal-0: #041411;\n --u-teal-100: #07201B;\n --u-teal-200: #0B2E28;\n --u-teal-300: #10403A;\n --u-teal-400: #16544D;\n --u-teal-500: #1E6860;\n --u-teal-600: #297D74;\n --u-teal-700: #3A9389;\n --u-teal-800: #54A89F;\n --u-teal-900: #73BBB3;\n --u-teal-1000: #93CBC5;\n\n /* Cyan Colors */\n --u-cyan-0: #041318;\n --u-cyan-100: #071F29;\n --u-cyan-200: #0B2D3A;\n --u-cyan-300: #104050;\n --u-cyan-400: #165469;\n --u-cyan-500: #1E6A82;\n --u-cyan-600: #287F9C;\n --u-cyan-700: #3995B5;\n --u-cyan-800: #53AACC;\n --u-cyan-900: #73BEDD;\n --u-cyan-1000: #95CFE8;\n\n /* Purple Colors */\n --u-purple-0: #150A22;\n --u-purple-100: #220F36;\n --u-purple-200: #31164B;\n --u-purple-300: #432064;\n --u-purple-400: #572B80;\n --u-purple-500: #6C379C;\n --u-purple-600: #8245B7;\n --u-purple-700: #975BCB;\n --u-purple-800: #AB79D9;\n --u-purple-900: #BD99E2;\n --u-purple-1000: #CEB8EA;\n\n /* Pink Colors */\n --u-pink-0: #1F0A14;\n --u-pink-100: #310F20;\n --u-pink-200: #451532;\n --u-pink-300: #5C1D45;\n --u-pink-400: #74285A;\n --u-pink-500: #8F336F;\n --u-pink-600: #AB4187;\n --u-pink-700: #C0569D;\n --u-pink-800: #D174B3;\n --u-pink-900: #E095C7;\n --u-pink-1000: #EBB5D9;\n\n /* ==========================================================================\n Role Colors — 의미 역할 층\n 컴포넌트는 팔레트 프리미티브가 아니라 이 층을 참조한다.\n 브랜드 색 교체는 아래 25개만 재정의하면 시맨틱 층까지 따라온다.\n\n 단은 '강도' 축이다 (weakest -> strong). 용도(배경/테두리/텍스트)는\n 소비처가 정한다 -- 단을 속성에 묶으면 primary 버튼의 배경이 어느\n 단인지 같은 모순이 생긴다.\n ========================================================================== */\n\n /* primary — 브랜드 · 강조 · 포커스 · 링크 */\n --u-primary-color-weakest: var(--u-blue-200);\n --u-primary-color-weaker: var(--u-blue-300);\n --u-primary-color-weak: var(--u-blue-500);\n --u-primary-color: var(--u-blue-600);\n --u-primary-color-strong: var(--u-blue-700);\n\n /* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */\n --u-info-color-weakest: var(--u-blue-200);\n --u-info-color-weaker: var(--u-blue-300);\n --u-info-color-weak: var(--u-blue-500);\n --u-info-color: var(--u-blue-600);\n --u-info-color-strong: var(--u-blue-700);\n\n /* success — 성공 · 완료 */\n --u-success-color-weakest: var(--u-green-200);\n --u-success-color-weaker: var(--u-green-300);\n --u-success-color-weak: var(--u-green-500);\n --u-success-color: var(--u-green-600);\n --u-success-color-strong: var(--u-green-700);\n\n /* warning — 주의 */\n --u-warning-color-weakest: var(--u-yellow-200);\n --u-warning-color-weaker: var(--u-yellow-300);\n --u-warning-color-weak: var(--u-yellow-500);\n --u-warning-color: var(--u-yellow-600);\n --u-warning-color-strong: var(--u-yellow-700);\n\n /* danger — 오류 · 위험 · 유효성 실패 */\n --u-danger-color-weakest: var(--u-red-200);\n --u-danger-color-weaker: var(--u-red-300);\n --u-danger-color-weak: var(--u-red-500);\n --u-danger-color: var(--u-red-600);\n --u-danger-color-strong: var(--u-red-700);\n /* ==========================================================================\n Radius Scale — 모서리 반경\n 리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).\n ========================================================================== */\n --u-radius-none: 0;\n --u-radius-sm: 3px;\n --u-radius-md: 4px;\n --u-radius-lg: 6px;\n --u-radius-xl: 8px;\n --u-radius-pill: 9999px;\n --u-radius-circle: 50%;\n\n /* ==========================================================================\n Space Scale — 컨테이너·오버레이의 절대 여백\n ⚠**여백은 하나의 축이 아니다.** 이 스케일은 컨테이너/오버레이의 **레이아웃 여백**만\n 담당한다. 폼·인라인 요소의 `em` 여백은 상속된 `font-size` 에 비례하는 것이 의도이므로\n **여기로 흡수하지 않는다.** 반경과 마찬가지로 테마와 무관하므로 두 시트가 같다.\n 축 구분과 근거는 docs/design-tokens.md 참조.\n ========================================================================== */\n --u-space-3xs: 2px;\n --u-space-2xs: 4px;\n --u-space-xs: 6px;\n --u-space-sm: 8px;\n --u-space-md: 12px;\n --u-space-lg: 16px;\n\n /* Text Colors */\n --u-txt-color: var(--u-neutral-900);\n --u-txt-color-inverse: var(--u-neutral-100);\n\n /* 유채색 배경 위의 글자 — 두 테마 모두 흰색이다(light.css 참조). */\n --u-primary-txt-color: #FFFFFF;\n --u-info-txt-color: #FFFFFF;\n --u-success-txt-color: #FFFFFF;\n --u-danger-txt-color: #FFFFFF;\n --u-warning-txt-color: #FFFFFF;\n --u-txt-color-hover: var(--u-primary-color);\n --u-txt-color-active: var(--u-primary-color);\n --u-txt-color-disabled: var(--u-neutral-500);\n --u-txt-color-weak: var(--u-neutral-700);\n --u-txt-color-strong: var(--u-neutral-1000);\n\n --u-link-txt-color: var(--u-primary-color-strong);\n --u-tooltip-txt-color: var(--u-neutral-100);\n\n /* Icon Colors */\n --u-icon-color: var(--u-neutral-800);\n --u-icon-color-inverse: var(--u-neutral-100);\n --u-icon-color-hover: var(--u-primary-color);\n --u-icon-color-active: var(--u-primary-color);\n --u-icon-color-disabled: var(--u-neutral-500);\n\n /* Border Colors */\n --u-border-color: var(--u-neutral-400);\n --u-border-color-weak: var(--u-neutral-300);\n --u-border-color-strong: var(--u-neutral-500);\n --u-border-color-hover: var(--u-neutral-500);\n\n --u-input-border-color: var(--u-neutral-400);\n --u-input-border-color-hover: var(--u-neutral-500);\n --u-input-border-color-focus: var(--u-primary-color);\n --u-input-border-color-invalid: var(--u-danger-color);\n\n /* Background Colors */\n --u-bg-color: var(--u-neutral-100);\n --u-bg-color-inverse: var(--u-neutral-0);\n --u-bg-color-hover: var(--u-neutral-300);\n --u-bg-color-active: var(--u-neutral-400);\n --u-bg-color-disabled: var(--u-neutral-100);\n \n /* 유채색 표면 — 라이트와 **같은 단이 아니라 같은 세기**로 짝지었다(light.css 참조).\n 팔레트 유채색 틴트가 다크에서 짓눌리므로 한 단 위를 쓴다. green 은 대칭이라 그대로. */\n --u-primary-bg-color: var(--u-blue-100);\n --u-info-bg-color: var(--u-blue-100);\n --u-success-bg-color: var(--u-green-0);\n --u-danger-bg-color: var(--u-red-100);\n\n --u-input-bg-color: var(--u-neutral-200);\n --u-panel-bg-color: var(--u-neutral-200);\n --u-overlay-bg-color: rgba(0, 0, 0, 0.7);\n --u-tooltip-bg-color: rgba(255, 255, 255, 0.85);\n\n /* Shadow Colors */\n --u-shadow-color-weaker: rgba(0, 0, 0, 0.15);\n --u-shadow-color-weak: rgba(0, 0, 0, 0.25);\n --u-shadow-color-normal: rgba(0, 0, 0, 0.35);\n --u-shadow-color-strong: rgba(0, 0, 0, 0.45);\n --u-shadow-color-stronger: rgba(0, 0, 0, 0.60);\n\n /* Scrollbar Colors */\n --u-scrollbar-color: var(--u-neutral-500);\n --u-scrollbar-color-hover: var(--u-neutral-600);\n --u-scrollbar-track-color: transparent;\n\n /* Font Styles */\n --u-font-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';\n --u-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --u-font-serif: 'Georgia', 'Times New Roman', Times, serif;\n --u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;\n --u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}";
|
|
2
|
+
var dark_css_default = ":root[theme=\"dark\"] {\n color-scheme: dark;\n\n /* Neutral Colors */\n --u-neutral-0: #000000;\n --u-neutral-50: #0A0A0A;\n --u-neutral-100: #121212;\n --u-neutral-200: #1E1E1E;\n --u-neutral-300: #2A2A2A;\n --u-neutral-400: #3D3D3D;\n --u-neutral-500: #525252;\n --u-neutral-600: #6E6E6E;\n --u-neutral-700: #8A8A8A;\n --u-neutral-800: #B0B0B0;\n --u-neutral-900: #D4D4D4;\n --u-neutral-1000: #FFFFFF;\n\n /* Blue Colors */\n --u-blue-0: #030D1A;\n --u-blue-100: #061629;\n --u-blue-200: #0A223B;\n --u-blue-300: #103150;\n --u-blue-400: #174167;\n --u-blue-500: #205281;\n --u-blue-600: #2A659D;\n --u-blue-700: #3678B8;\n --u-blue-800: #478DCE;\n --u-blue-900: #5DA2DF;\n --u-blue-1000: #79BBEA;\n\n /* Green Colors */\n --u-green-0: #06140C;\n --u-green-100: #0A2114;\n --u-green-200: #10301D;\n --u-green-300: #164228;\n --u-green-400: #1F5535;\n --u-green-500: #2A6942;\n --u-green-600: #367E50;\n --u-green-700: #4A9563;\n --u-green-800: #63AB7A;\n --u-green-900: #80BE97;\n --u-green-1000: #9BCFB1;\n\n /* Yellow Colors */\n --u-yellow-0: #1C1300;\n --u-yellow-100: #2D1E00;\n --u-yellow-200: #402B00;\n --u-yellow-300: #553900;\n --u-yellow-400: #6B4900;\n --u-yellow-500: #825A00;\n --u-yellow-600: #9A6C00;\n --u-yellow-700: #B08012;\n --u-yellow-800: #C69635;\n --u-yellow-900: #D9AD5A;\n --u-yellow-1000: #E8C57F;\n\n /* Red Colors */\n --u-red-0: #1C0707;\n --u-red-100: #2C0B0B;\n --u-red-200: #3E1111;\n --u-red-300: #541818;\n --u-red-400: #6C2020;\n --u-red-500: #852A2A;\n --u-red-600: #A13535;\n --u-red-700: #B94949;\n --u-red-800: #CB6262;\n --u-red-900: #D98383;\n --u-red-1000: #E7A2A2;\n\n /* Orange Colors */\n --u-orange-0: #1D0E00;\n --u-orange-100: #2F1700;\n --u-orange-200: #421F00;\n --u-orange-300: #582A00;\n --u-orange-400: #703600;\n --u-orange-500: #8A4500;\n --u-orange-600: #A55600;\n --u-orange-700: #BD6A18;\n --u-orange-800: #D1823C;\n --u-orange-900: #E19D67;\n --u-orange-1000: #EDB992;\n\n /* Teal Colors */\n --u-teal-0: #041411;\n --u-teal-100: #07201B;\n --u-teal-200: #0B2E28;\n --u-teal-300: #10403A;\n --u-teal-400: #16544D;\n --u-teal-500: #1E6860;\n --u-teal-600: #297D74;\n --u-teal-700: #3A9389;\n --u-teal-800: #54A89F;\n --u-teal-900: #73BBB3;\n --u-teal-1000: #93CBC5;\n\n /* Cyan Colors */\n --u-cyan-0: #041318;\n --u-cyan-100: #071F29;\n --u-cyan-200: #0B2D3A;\n --u-cyan-300: #104050;\n --u-cyan-400: #165469;\n --u-cyan-500: #1E6A82;\n --u-cyan-600: #287F9C;\n --u-cyan-700: #3995B5;\n --u-cyan-800: #53AACC;\n --u-cyan-900: #73BEDD;\n --u-cyan-1000: #95CFE8;\n\n /* Purple Colors */\n --u-purple-0: #150A22;\n --u-purple-100: #220F36;\n --u-purple-200: #31164B;\n --u-purple-300: #432064;\n --u-purple-400: #572B80;\n --u-purple-500: #6C379C;\n --u-purple-600: #8245B7;\n --u-purple-700: #975BCB;\n --u-purple-800: #AB79D9;\n --u-purple-900: #BD99E2;\n --u-purple-1000: #CEB8EA;\n\n /* Pink Colors */\n --u-pink-0: #1F0A14;\n --u-pink-100: #310F20;\n --u-pink-200: #451532;\n --u-pink-300: #5C1D45;\n --u-pink-400: #74285A;\n --u-pink-500: #8F336F;\n --u-pink-600: #AB4187;\n --u-pink-700: #C0569D;\n --u-pink-800: #D174B3;\n --u-pink-900: #E095C7;\n --u-pink-1000: #EBB5D9;\n\n /* ==========================================================================\n Role Colors — 의미 역할 층\n 컴포넌트는 팔레트 프리미티브가 아니라 이 층을 참조한다.\n 브랜드 색 교체는 아래 25개만 재정의하면 시맨틱 층까지 따라온다.\n\n 단은 '강도' 축이다 (weakest -> strong). 용도(배경/테두리/텍스트)는\n 소비처가 정한다 -- 단을 속성에 묶으면 primary 버튼의 배경이 어느\n 단인지 같은 모순이 생긴다.\n\n ★**다만 두 단은 용도가 확정돼 있다** — 대비 요구가 서로 다르기 때문이다.\n `-color` = **면**. `--u-*-txt-color` 가 그 위에 얹히므로 on-color 기준 4.5.\n `-strong` = **글자·아이콘**. `--u-bg-color` 위에 놓이므로 바탕 기준 4.5.\n 라이트에서는 바탕도 on-color 도 흰색이라 두 요구가 한 조건으로 합쳐지지만,\n **다크에서는 정반대 방향**이다(바탕 #121212 · on-color #FFFFFF). 바탕에서 읽히는\n 밝은 단은 흰 글자를 못 받고, 흰 글자를 받는 어두운 단은 바탕에서 안 읽힌다.\n ⇒ 다크에서 `-color` 와 `-strong` 이 두 단 벌어지는 것이 그 결과다.\n `tests/build/token-contrast.test.ts` 가 값을 지킨다.\n ========================================================================== */\n\n /* primary — 브랜드 · 강조 · 포커스 · 링크 */\n --u-primary-color-weakest: var(--u-blue-200);\n --u-primary-color-weaker: var(--u-blue-300);\n --u-primary-color-weak: var(--u-blue-500);\n --u-primary-color: var(--u-blue-600); /* 면: 흰 글자 6.09 ✓ */\n --u-primary-color-strong: var(--u-blue-800); /* 글자: 바탕 5.32 ✓ (700 은 4.05 ✗) */\n\n /* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */\n --u-info-color-weakest: var(--u-blue-200);\n --u-info-color-weaker: var(--u-blue-300);\n --u-info-color-weak: var(--u-blue-500);\n --u-info-color: var(--u-blue-600);\n --u-info-color-strong: var(--u-blue-800);\n\n /* success — 성공 · 완료 */\n --u-success-color-weakest: var(--u-green-200);\n --u-success-color-weaker: var(--u-green-300);\n --u-success-color-weak: var(--u-green-500);\n --u-success-color: var(--u-green-600);\n --u-success-color-strong: var(--u-green-700);\n\n /* warning — 주의 */\n --u-warning-color-weakest: var(--u-yellow-200);\n --u-warning-color-weaker: var(--u-yellow-300);\n --u-warning-color-weak: var(--u-yellow-500);\n --u-warning-color: var(--u-yellow-600);\n --u-warning-color-strong: var(--u-yellow-700);\n\n /* danger — 오류 · 위험 · 유효성 실패 */\n --u-danger-color-weakest: var(--u-red-200);\n --u-danger-color-weaker: var(--u-red-300);\n --u-danger-color-weak: var(--u-red-500);\n --u-danger-color: var(--u-red-600); /* 면: 흰 글자 6.83 ✓ */\n --u-danger-color-strong: var(--u-red-800); /* 글자: 바탕 4.87 ✓ (700 은 3.67 ✗) */\n /* ==========================================================================\n Radius Scale — 모서리 반경\n 리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).\n ========================================================================== */\n --u-radius-none: 0;\n --u-radius-sm: 3px;\n --u-radius-md: 4px;\n --u-radius-lg: 6px;\n --u-radius-xl: 8px;\n --u-radius-pill: 9999px;\n --u-radius-circle: 50%;\n\n /* ==========================================================================\n Space Scale — 컨테이너·오버레이의 절대 여백\n ⚠**여백은 하나의 축이 아니다.** 이 스케일은 컨테이너/오버레이의 **레이아웃 여백**만\n 담당한다. 폼·인라인 요소의 `em` 여백은 상속된 `font-size` 에 비례하는 것이 의도이므로\n **여기로 흡수하지 않는다.** 반경과 마찬가지로 테마와 무관하므로 두 시트가 같다.\n 축 구분과 근거는 docs/design-tokens.md 참조.\n ========================================================================== */\n --u-space-3xs: 2px;\n --u-space-2xs: 4px;\n --u-space-xs: 6px;\n --u-space-sm: 8px;\n --u-space-md: 12px;\n --u-space-lg: 16px;\n\n /* Text Colors */\n --u-txt-color: var(--u-neutral-900);\n --u-txt-color-inverse: var(--u-neutral-100);\n\n /* 유채색 배경 위의 글자 — warning 만 다르다(light.css 참조). */\n --u-primary-txt-color: #FFFFFF;\n --u-info-txt-color: #FFFFFF;\n --u-success-txt-color: #FFFFFF;\n --u-danger-txt-color: #FFFFFF;\n /* ★라이트 시트와 같은 이유로 중립 최상단을 쓴다 — 다크에서는 그 값이 #FFFFFF 라\n 결과가 종전과 같다(4.65 ✓). 리터럴 대신 토큰을 쓰는 이유는 라이트에서 뒤집히기\n 때문이다(#000000). 두 시트가 같은 선언이 되어 어긋날 자리가 없어진다. */\n --u-warning-txt-color: var(--u-neutral-1000);\n --u-txt-color-hover: var(--u-primary-color-strong);\n --u-txt-color-active: var(--u-primary-color-strong);\n --u-txt-color-disabled: var(--u-neutral-500);\n --u-txt-color-weak: var(--u-neutral-700);\n --u-txt-color-strong: var(--u-neutral-1000);\n\n --u-link-txt-color: var(--u-primary-color-strong);\n --u-tooltip-txt-color: var(--u-neutral-100);\n\n /* Icon Colors */\n --u-icon-color: var(--u-neutral-800);\n --u-icon-color-inverse: var(--u-neutral-100);\n --u-icon-color-hover: var(--u-primary-color-strong);\n --u-icon-color-active: var(--u-primary-color-strong);\n --u-icon-color-disabled: var(--u-neutral-500);\n\n /* Border Colors */\n --u-border-color: var(--u-neutral-400);\n --u-border-color-weak: var(--u-neutral-300);\n --u-border-color-strong: var(--u-neutral-500);\n --u-border-color-hover: var(--u-neutral-500);\n\n --u-input-border-color: var(--u-neutral-400);\n --u-input-border-color-hover: var(--u-neutral-500);\n --u-input-border-color-focus: var(--u-primary-color);\n --u-input-border-color-invalid: var(--u-danger-color);\n\n /* Background Colors */\n --u-bg-color: var(--u-neutral-100);\n --u-bg-color-inverse: var(--u-neutral-0);\n --u-bg-color-hover: var(--u-neutral-300);\n --u-bg-color-active: var(--u-neutral-400);\n --u-bg-color-disabled: var(--u-neutral-100);\n\n /* 면 높이 — 상세는 light.css 참조. 다크는 **바탕보다 밝은 쪽**이 위다.\n neutral-300(#2A2A2A)은 바탕(#121212) 대비 1.42 로, 소비 측이 오버라이드로 쓰던\n neutral-200(1.15)보다 실제로 더 잘 구분된다 — 그 오버라이드가 해결하려던 증상이\n *\"툴바·헤더가 배경에 묻힌다\"* 였다. */\n --u-bg-color-raised: var(--u-neutral-300);\n \n /* 유채색 표면 — 라이트와 **같은 단이 아니라 같은 세기**로 짝지었다(light.css 참조).\n 팔레트 유채색 틴트가 다크에서 짓눌리므로 한 단 위를 쓴다. green 은 대칭이라 그대로. */\n --u-primary-bg-color: var(--u-blue-100);\n --u-info-bg-color: var(--u-blue-100);\n --u-success-bg-color: var(--u-green-0);\n --u-danger-bg-color: var(--u-red-100);\n /* warning 합류 — 라이트는 yellow-200 이다(단 이름이 다른 이유는 light.css 참조). */\n --u-warning-bg-color: var(--u-yellow-100);\n\n --u-input-bg-color: var(--u-neutral-200);\n --u-panel-bg-color: var(--u-neutral-200);\n --u-overlay-bg-color: rgba(0, 0, 0, 0.7);\n --u-tooltip-bg-color: rgba(255, 255, 255, 0.85);\n\n /* Shadow Colors */\n --u-shadow-color-weaker: rgba(0, 0, 0, 0.15);\n --u-shadow-color-weak: rgba(0, 0, 0, 0.25);\n --u-shadow-color-normal: rgba(0, 0, 0, 0.35);\n --u-shadow-color-strong: rgba(0, 0, 0, 0.45);\n --u-shadow-color-stronger: rgba(0, 0, 0, 0.60);\n\n /* Scrollbar Colors */\n --u-scrollbar-color: var(--u-neutral-500);\n --u-scrollbar-color-hover: var(--u-neutral-600);\n --u-scrollbar-track-color: transparent;\n\n /* Font Styles */\n --u-font-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';\n --u-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --u-font-serif: 'Georgia', 'Times New Roman', Times, serif;\n --u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;\n --u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { dark_css_default as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
//#region \0glob-assets_raw/light.css.637cb2f8
|
|
2
|
-
var light_css_default = ":root {\n color-scheme: light;\n\n /* Neutral Colors */\n --u-neutral-0: #FFFFFF;\n --u-neutral-50: #FAFAFA;\n --u-neutral-100: #F5F5F5;\n --u-neutral-200: #EEEEEE;\n --u-neutral-300: #E0E0E0;\n --u-neutral-400: #BDBDBD;\n --u-neutral-500: #9E9E9E;\n --u-neutral-600: #757575;\n --u-neutral-700: #616161;\n --u-neutral-800: #424242;\n --u-neutral-900: #212121;\n --u-neutral-1000: #000000;\n\n /* Blue Colors */\n --u-blue-0: #E3F2FD;\n --u-blue-100: #BBDEFB;\n --u-blue-200: #90CAF9;\n --u-blue-300: #64B5F6;\n --u-blue-400: #42A5F5;\n --u-blue-500: #2196F3;\n --u-blue-600: #1E88E5;\n --u-blue-700: #1976D2;\n --u-blue-800: #1565C0;\n --u-blue-900: #0D47A1;\n --u-blue-1000: #062A5E;\n\n /* Green Colors */\n --u-green-0: #E8F5E9;\n --u-green-100: #C8E6C9;\n --u-green-200: #A5D6A7;\n --u-green-300: #81C784;\n --u-green-400: #66BB6A;\n --u-green-500: #4CAF50;\n --u-green-600: #43A047;\n --u-green-700: #388E3C;\n --u-green-800: #2E7D32;\n --u-green-900: #1B5E20;\n --u-green-1000: #0F3A12;\n\n /* Yellow Colors */\n --u-yellow-0: #FFFDE7;\n --u-yellow-100: #FFF9C4;\n --u-yellow-200: #FFF59D;\n --u-yellow-300: #FFF176;\n --u-yellow-400: #FFEE58;\n --u-yellow-500: #FFEB3B;\n --u-yellow-600: #FDD835;\n --u-yellow-700: #FBC02D;\n --u-yellow-800: #F9A825;\n --u-yellow-900: #F57F17;\n --u-yellow-1000: #8A4A00;\n\n /* Red Colors */\n --u-red-0: #FFEBEE;\n --u-red-100: #FFCDD2;\n --u-red-200: #EF9A9A;\n --u-red-300: #E57373;\n --u-red-400: #EF5350;\n --u-red-500: #F44336;\n --u-red-600: #E53935;\n --u-red-700: #D32F2F;\n --u-red-800: #C62828;\n --u-red-900: #B71C1C;\n --u-red-1000: #6B0F0F;\n\n /* Orange Colors */\n --u-orange-0: #FFF3E0;\n --u-orange-100: #FFE0B2;\n --u-orange-200: #FFCC80;\n --u-orange-300: #FFB74D;\n --u-orange-400: #FFA726;\n --u-orange-500: #FF9800;\n --u-orange-600: #FB8C00;\n --u-orange-700: #F57C00;\n --u-orange-800: #EF6C00;\n --u-orange-900: #E65100;\n --u-orange-1000: #8C3100;\n\n /* Teal Colors */\n --u-teal-0: #E0F2F1;\n --u-teal-100: #B2DFDB;\n --u-teal-200: #80CBC4;\n --u-teal-300: #4DB6AC;\n --u-teal-400: #26A69A;\n --u-teal-500: #009688;\n --u-teal-600: #00897B;\n --u-teal-700: #00796B;\n --u-teal-800: #00695C;\n --u-teal-900: #004D40;\n --u-teal-1000: #002E26;\n\n /* Cyan Colors */\n --u-cyan-0: #E0F7FA;\n --u-cyan-100: #B2EBF2;\n --u-cyan-200: #80DEEA;\n --u-cyan-300: #4DD0E1;\n --u-cyan-400: #26C6DA;\n --u-cyan-500: #00BCD4;\n --u-cyan-600: #00ACC1;\n --u-cyan-700: #0097A7;\n --u-cyan-800: #00838F;\n --u-cyan-900: #006064;\n --u-cyan-1000: #003A3D;\n\n /* Purple Colors */\n --u-purple-0: #F3E5F5;\n --u-purple-100: #E1BEE7;\n --u-purple-200: #CE93D8;\n --u-purple-300: #BA68C8;\n --u-purple-400: #AB47BC;\n --u-purple-500: #9C27B0;\n --u-purple-600: #8E24AA;\n --u-purple-700: #7B1FA2;\n --u-purple-800: #6A1B9A;\n --u-purple-900: #4A148C;\n --u-purple-1000: #2C0B54;\n\n /* Pink Colors */\n --u-pink-0: #FCE4EC;\n --u-pink-100: #F8BBD0;\n --u-pink-200: #F48FB1;\n --u-pink-300: #F06292;\n --u-pink-400: #EC407A;\n --u-pink-500: #E91E63;\n --u-pink-600: #D81B60;\n --u-pink-700: #C2185B;\n --u-pink-800: #AD1457;\n --u-pink-900: #880E4F;\n --u-pink-1000: #520830;\n\n /* ==========================================================================\n Role Colors — 의미 역할 층\n 컴포넌트는 팔레트 프리미티브가 아니라 이 층을 참조한다.\n 브랜드 색 교체는 아래 25개만 재정의하면 시맨틱 층까지 따라온다.\n\n 단은 '강도' 축이다 (weakest -> strong). 용도(배경/테두리/텍스트)는\n 소비처가 정한다 -- 단을 속성에 묶으면 primary 버튼의 배경이 어느\n 단인지 같은 모순이 생긴다.\n ========================================================================== */\n\n /* primary — 브랜드 · 강조 · 포커스 · 링크 */\n --u-primary-color-weakest: var(--u-blue-200);\n --u-primary-color-weaker: var(--u-blue-300);\n --u-primary-color-weak: var(--u-blue-500);\n --u-primary-color: var(--u-blue-600);\n --u-primary-color-strong: var(--u-blue-700);\n\n /* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */\n --u-info-color-weakest: var(--u-blue-200);\n --u-info-color-weaker: var(--u-blue-300);\n --u-info-color-weak: var(--u-blue-500);\n --u-info-color: var(--u-blue-600);\n --u-info-color-strong: var(--u-blue-700);\n\n /* success — 성공 · 완료 */\n --u-success-color-weakest: var(--u-green-200);\n --u-success-color-weaker: var(--u-green-300);\n --u-success-color-weak: var(--u-green-500);\n --u-success-color: var(--u-green-600);\n --u-success-color-strong: var(--u-green-700);\n\n /* warning — 주의 */\n --u-warning-color-weakest: var(--u-yellow-200);\n --u-warning-color-weaker: var(--u-yellow-300);\n --u-warning-color-weak: var(--u-yellow-500);\n --u-warning-color: var(--u-yellow-600);\n --u-warning-color-strong: var(--u-yellow-700);\n\n /* danger — 오류 · 위험 · 유효성 실패 */\n --u-danger-color-weakest: var(--u-red-200);\n --u-danger-color-weaker: var(--u-red-300);\n --u-danger-color-weak: var(--u-red-500);\n --u-danger-color: var(--u-red-600);\n --u-danger-color-strong: var(--u-red-700);\n /* ==========================================================================\n Radius Scale — 모서리 반경\n 리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).\n ========================================================================== */\n --u-radius-none: 0;\n --u-radius-sm: 3px;\n --u-radius-md: 4px;\n --u-radius-lg: 6px;\n --u-radius-xl: 8px;\n --u-radius-pill: 9999px;\n --u-radius-circle: 50%;\n\n /* ==========================================================================\n Space Scale — 컨테이너·오버레이의 절대 여백\n ⚠**여백은 하나의 축이 아니다.** 이 스케일은 컨테이너/오버레이(카드·대화상자·드로어·\n 알림·메뉴·툴팁 등)의 **레이아웃 여백**만 담당한다. 폼·인라인 요소의 `em` 여백은\n 상속된 `font-size` 에 비례하는 것이 의도이므로 **여기로 흡수하지 않는다** —\n 흡수하면 타이포를 키운 소비자의 여백이 따라 커지지 않는다.\n 축 구분과 근거는 docs/design-tokens.md 참조.\n ========================================================================== */\n --u-space-3xs: 2px;\n --u-space-2xs: 4px;\n --u-space-xs: 6px;\n --u-space-sm: 8px;\n --u-space-md: 12px;\n --u-space-lg: 16px;\n\n /* Text Colors */\n --u-txt-color: var(--u-neutral-900);\n --u-txt-color-inverse: var(--u-neutral-0);\n /* 유채색 배경 위의 글자. --u-txt-color-inverse 는 다크에서 neutral-100(#121212)이라\n 유채색 버튼 위에서 읽히지 않는다. 브랜드 색을 바꾸는 소비자가 전경색도 함께\n 조절할 수 있도록 별도 이름을 준다.\n ⚠이 토큰이 흰색이라는 것과 그 위의 배경이 AA 를 받친다는 것은 별개다 —\n 라이트 팔레트의 shade-600 은 8색 중 6색이 흰 글자로 AA 에 미달한다(미해결). */\n --u-primary-txt-color: #FFFFFF;\n --u-info-txt-color: #FFFFFF;\n --u-success-txt-color: #FFFFFF;\n --u-danger-txt-color: #FFFFFF;\n --u-warning-txt-color: #FFFFFF;\n\n --u-txt-color-hover: var(--u-primary-color);\n --u-txt-color-active: var(--u-primary-color);\n --u-txt-color-disabled: var(--u-neutral-400);\n /* neutral-500(#9E9E9E)은 흰 배경 대비 2.68 로 WCAG AA(4.5) 미달이었다.\n neutral-600(#757575) = 4.61 로 통과한다. 다크 매핑(neutral-700 = 5.43)은\n 원래 정상이라 손대지 않는다 — 라이트 한쪽만의 결함이었다. */\n --u-txt-color-weak: var(--u-neutral-600);\n --u-txt-color-strong: var(--u-neutral-1000);\n\n --u-link-txt-color: var(--u-primary-color-strong);\n --u-tooltip-txt-color: var(--u-neutral-0);\n\n /* Icon Colors */\n --u-icon-color: var(--u-neutral-700);\n --u-icon-color-inverse: var(--u-neutral-0);\n --u-icon-color-hover: var(--u-primary-color);\n --u-icon-color-active: var(--u-primary-color);\n --u-icon-color-disabled: var(--u-neutral-400);\n\n /* Border Colors */\n --u-border-color: var(--u-neutral-300);\n --u-border-color-weak: var(--u-neutral-200);\n --u-border-color-strong: var(--u-neutral-400);\n --u-border-color-hover: var(--u-neutral-400);\n\n --u-input-border-color: var(--u-neutral-300);\n --u-input-border-color-hover: var(--u-neutral-400);\n --u-input-border-color-focus: var(--u-primary-color);\n --u-input-border-color-invalid: var(--u-danger-color);\n\n /* Background Colors */\n --u-bg-color: var(--u-neutral-0);\n --u-bg-color-inverse: var(--u-neutral-900);\n --u-bg-color-hover: var(--u-neutral-100);\n --u-bg-color-active: var(--u-neutral-200);\n --u-bg-color-disabled: var(--u-neutral-50);\n \n /* 유채색 표면 — 정보/성공/위험 상태의 '면'.\n 역할 층의 유채색은 전경 5단뿐이라, 상태 배경이 필요한 컴포넌트는 팔레트를 직접\n 읽고 다크를 손으로 보정해야 했다. 팔레트의 유채색 틴트는 다크에서 짓눌리므로\n (바탕 대비 델타의 다크/라이트 비 — 청색 0.38~0.54) 두 테마가 **같은 단이 아니라\n 같은 세기**가 되도록 짝지었다. 실측 비: blue 1.09 · red 1.12 · green 0.91.\n ⚠yellow(경고)는 빠져 있다 — 라이트 황색 틴트가 Δ0.071 로 거의 보이지 않아\n 어떤 짝을 골라도 비가 2배 밑으로 내려가지 않는다. 리터럴 재설계가 선행돼야 한다. */\n --u-primary-bg-color: var(--u-blue-0);\n --u-info-bg-color: var(--u-blue-0);\n --u-success-bg-color: var(--u-green-0);\n --u-danger-bg-color: var(--u-red-0);\n\n --u-input-bg-color: var(--u-neutral-0);\n --u-panel-bg-color: var(--u-neutral-0);\n --u-overlay-bg-color: rgba(0, 0, 0, 0.5);\n --u-tooltip-bg-color: rgba(0, 0, 0, 0.75);\n\n /* Shadow Colors */\n --u-shadow-color-weaker: rgba(0, 0, 0, 0.04);\n --u-shadow-color-weak: rgba(0, 0, 0, 0.08);\n --u-shadow-color-normal: rgba(0, 0, 0, 0.12);\n --u-shadow-color-strong: rgba(0, 0, 0, 0.16);\n --u-shadow-color-stronger: rgba(0, 0, 0, 0.24);\n\n /* Scrollbar Colors */\n --u-scrollbar-color: var(--u-neutral-400);\n --u-scrollbar-color-hover: var(--u-neutral-500);\n --u-scrollbar-track-color: transparent;\n\n /* Font Styles */\n --u-font-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';\n --u-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --u-font-serif: 'Georgia', 'Times New Roman', Times, serif;\n --u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;\n --u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}";
|
|
2
|
+
var light_css_default = ":root {\n color-scheme: light;\n\n /* Neutral Colors */\n --u-neutral-0: #FFFFFF;\n --u-neutral-50: #FAFAFA;\n --u-neutral-100: #F5F5F5;\n --u-neutral-200: #EEEEEE;\n --u-neutral-300: #E0E0E0;\n --u-neutral-400: #BDBDBD;\n --u-neutral-500: #9E9E9E;\n --u-neutral-600: #757575;\n --u-neutral-700: #616161;\n --u-neutral-800: #424242;\n --u-neutral-900: #212121;\n --u-neutral-1000: #000000;\n\n /* Blue Colors */\n --u-blue-0: #E3F2FD;\n --u-blue-100: #BBDEFB;\n --u-blue-200: #90CAF9;\n --u-blue-300: #64B5F6;\n --u-blue-400: #42A5F5;\n --u-blue-500: #2196F3;\n --u-blue-600: #1E88E5;\n --u-blue-700: #1976D2;\n --u-blue-800: #1565C0;\n --u-blue-900: #0D47A1;\n --u-blue-1000: #062A5E;\n\n /* Green Colors */\n --u-green-0: #E8F5E9;\n --u-green-100: #C8E6C9;\n --u-green-200: #A5D6A7;\n --u-green-300: #81C784;\n --u-green-400: #66BB6A;\n --u-green-500: #4CAF50;\n --u-green-600: #43A047;\n --u-green-700: #388E3C;\n --u-green-800: #2E7D32;\n --u-green-900: #1B5E20;\n --u-green-1000: #0F3A12;\n\n /* Yellow Colors */\n --u-yellow-0: #FFFDE7;\n --u-yellow-100: #FFF9C4;\n --u-yellow-200: #FFF59D;\n --u-yellow-300: #FFF176;\n --u-yellow-400: #FFEE58;\n --u-yellow-500: #FFEB3B;\n --u-yellow-600: #FDD835;\n --u-yellow-700: #FBC02D;\n --u-yellow-800: #F9A825;\n --u-yellow-900: #F57F17;\n --u-yellow-1000: #8A4A00;\n\n /* Red Colors */\n --u-red-0: #FFEBEE;\n --u-red-100: #FFCDD2;\n --u-red-200: #EF9A9A;\n --u-red-300: #E57373;\n --u-red-400: #EF5350;\n --u-red-500: #F44336;\n --u-red-600: #E53935;\n --u-red-700: #D32F2F;\n --u-red-800: #C62828;\n --u-red-900: #B71C1C;\n --u-red-1000: #6B0F0F;\n\n /* Orange Colors */\n --u-orange-0: #FFF3E0;\n --u-orange-100: #FFE0B2;\n --u-orange-200: #FFCC80;\n --u-orange-300: #FFB74D;\n --u-orange-400: #FFA726;\n --u-orange-500: #FF9800;\n --u-orange-600: #FB8C00;\n --u-orange-700: #F57C00;\n --u-orange-800: #EF6C00;\n --u-orange-900: #E65100;\n --u-orange-1000: #8C3100;\n\n /* Teal Colors */\n --u-teal-0: #E0F2F1;\n --u-teal-100: #B2DFDB;\n --u-teal-200: #80CBC4;\n --u-teal-300: #4DB6AC;\n --u-teal-400: #26A69A;\n --u-teal-500: #009688;\n --u-teal-600: #00897B;\n --u-teal-700: #00796B;\n --u-teal-800: #00695C;\n --u-teal-900: #004D40;\n --u-teal-1000: #002E26;\n\n /* Cyan Colors */\n --u-cyan-0: #E0F7FA;\n --u-cyan-100: #B2EBF2;\n --u-cyan-200: #80DEEA;\n --u-cyan-300: #4DD0E1;\n --u-cyan-400: #26C6DA;\n --u-cyan-500: #00BCD4;\n --u-cyan-600: #00ACC1;\n --u-cyan-700: #0097A7;\n --u-cyan-800: #00838F;\n --u-cyan-900: #006064;\n --u-cyan-1000: #003A3D;\n\n /* Purple Colors */\n --u-purple-0: #F3E5F5;\n --u-purple-100: #E1BEE7;\n --u-purple-200: #CE93D8;\n --u-purple-300: #BA68C8;\n --u-purple-400: #AB47BC;\n --u-purple-500: #9C27B0;\n --u-purple-600: #8E24AA;\n --u-purple-700: #7B1FA2;\n --u-purple-800: #6A1B9A;\n --u-purple-900: #4A148C;\n --u-purple-1000: #2C0B54;\n\n /* Pink Colors */\n --u-pink-0: #FCE4EC;\n --u-pink-100: #F8BBD0;\n --u-pink-200: #F48FB1;\n --u-pink-300: #F06292;\n --u-pink-400: #EC407A;\n --u-pink-500: #E91E63;\n --u-pink-600: #D81B60;\n --u-pink-700: #C2185B;\n --u-pink-800: #AD1457;\n --u-pink-900: #880E4F;\n --u-pink-1000: #520830;\n\n /* ==========================================================================\n Role Colors — 의미 역할 층\n 컴포넌트는 팔레트 프리미티브가 아니라 이 층을 참조한다.\n 브랜드 색 교체는 아래 25개만 재정의하면 시맨틱 층까지 따라온다.\n\n 단은 '강도' 축이다 (weakest -> strong). 용도(배경/테두리/텍스트)는\n 소비처가 정한다 -- 단을 속성에 묶으면 primary 버튼의 배경이 어느\n 단인지 같은 모순이 생긴다.\n ========================================================================== */\n\n /* ★단이 팔레트 shade 와 1:1 이 아니다 — **대비로 고른다.**\n `-color` 는 `--u-*-txt-color` 를 받는 면이고 `-strong` 은 바탕 위의 글자다.\n 라이트에서는 바탕도 on-color 도 흰색이라 두 요구가 `contrast(shade, #FFF) ≥ 4.5`\n 하나로 합쳐지고, 그 단이 계열마다 다르다(blue 700 · red 700 · green 800).\n Material 램프는 휘도가 아니라 색상 기준으로 만들어져 있어서 단 번호가 세기를\n 보장하지 않는다 — 값은 `tests/build/token-contrast.test.ts` 가 지킨다. */\n\n /* primary — 브랜드 · 강조 · 포커스 · 링크 */\n --u-primary-color-weakest: var(--u-blue-200);\n --u-primary-color-weaker: var(--u-blue-300);\n --u-primary-color-weak: var(--u-blue-500);\n --u-primary-color: var(--u-blue-700); /* 4.60 ✓ (600 은 3.68 ✗) */\n --u-primary-color-strong: var(--u-blue-800); /* 5.75 ✓ */\n\n /* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */\n --u-info-color-weakest: var(--u-blue-200);\n --u-info-color-weaker: var(--u-blue-300);\n --u-info-color-weak: var(--u-blue-500);\n --u-info-color: var(--u-blue-700);\n --u-info-color-strong: var(--u-blue-800);\n\n /* success — 성공 · 완료\n ⚠green 은 700 도 4.12 로 미달이라 두 단을 건너뛴다. 계열마다 통과 단이 다른 것이\n 이 층의 정상 상태다(단 번호를 맞추면 대비가 어긋난다). */\n --u-success-color-weakest: var(--u-green-200);\n --u-success-color-weaker: var(--u-green-300);\n --u-success-color-weak: var(--u-green-500);\n --u-success-color: var(--u-green-800); /* 5.13 ✓ (600=3.30 · 700=4.12 ✗) */\n --u-success-color-strong: var(--u-green-900); /* 7.87 ✓ */\n\n /* warning — 주의 */\n --u-warning-color-weakest: var(--u-yellow-200);\n --u-warning-color-weaker: var(--u-yellow-300);\n --u-warning-color-weak: var(--u-yellow-500);\n --u-warning-color: var(--u-yellow-600);\n /* ★다른 계열은 -strong 이 shade-800~900 인데 warning 만 1000 이다 — 노랑 램프는\n 900 까지도 흰 바탕 2.65 로 미달이고, 1000(#8A4A00)에서 처음 6.86 이 된다.\n 그 값은 갈색에 가깝지만, 이 단의 용도는 **면이 아니라 글자·아이콘**이므로 색상보다\n 가독성이 먼저다(경고 문구를 어두운 호박색으로 쓰는 것은 보편 관행이다). */\n --u-warning-color-strong: var(--u-yellow-1000);\n\n /* danger — 오류 · 위험 · 유효성 실패 */\n --u-danger-color-weakest: var(--u-red-200);\n --u-danger-color-weaker: var(--u-red-300);\n --u-danger-color-weak: var(--u-red-500);\n --u-danger-color: var(--u-red-700); /* 4.98 ✓ (600 은 4.23 ✗ — 오류 문구가 이 단이었다) */\n --u-danger-color-strong: var(--u-red-800); /* 5.62 ✓ */\n /* ==========================================================================\n Radius Scale — 모서리 반경\n 리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).\n ========================================================================== */\n --u-radius-none: 0;\n --u-radius-sm: 3px;\n --u-radius-md: 4px;\n --u-radius-lg: 6px;\n --u-radius-xl: 8px;\n --u-radius-pill: 9999px;\n --u-radius-circle: 50%;\n\n /* ==========================================================================\n Space Scale — 컨테이너·오버레이의 절대 여백\n ⚠**여백은 하나의 축이 아니다.** 이 스케일은 컨테이너/오버레이(카드·대화상자·드로어·\n 알림·메뉴·툴팁 등)의 **레이아웃 여백**만 담당한다. 폼·인라인 요소의 `em` 여백은\n 상속된 `font-size` 에 비례하는 것이 의도이므로 **여기로 흡수하지 않는다** —\n 흡수하면 타이포를 키운 소비자의 여백이 따라 커지지 않는다.\n 축 구분과 근거는 docs/design-tokens.md 참조.\n ========================================================================== */\n --u-space-3xs: 2px;\n --u-space-2xs: 4px;\n --u-space-xs: 6px;\n --u-space-sm: 8px;\n --u-space-md: 12px;\n --u-space-lg: 16px;\n\n /* Text Colors */\n --u-txt-color: var(--u-neutral-900);\n --u-txt-color-inverse: var(--u-neutral-0);\n /* 유채색 배경 위의 글자. --u-txt-color-inverse 는 다크에서 neutral-100(#121212)이라\n 유채색 버튼 위에서 읽히지 않는다. 브랜드 색을 바꾸는 소비자가 전경색도 함께\n 조절할 수 있도록 별도 이름을 준다.\n ⚠이 토큰이 흰색이라는 것과 그 위의 배경이 AA 를 받친다는 것은 별개다 —\n 라이트 팔레트의 shade-600 은 8색 중 6색이 흰 글자로 AA 에 미달한다(미해결). */\n --u-primary-txt-color: #FFFFFF;\n --u-info-txt-color: #FFFFFF;\n --u-success-txt-color: #FFFFFF;\n --u-danger-txt-color: #FFFFFF;\n /* ★warning 만 어둡다 — 취향이 아니라 측정이다. 노랑은 **어떤 단도** 흰 글자로 AA 를\n 받치지 못한다(라이트 최대 2.65 @900, 그마저 갈색). 다른 넷처럼 단을 옮기는 수단이\n 없으므로 전경을 뒤집는다. `--u-neutral-1000` 은 라이트 #000000 / 다크 #FFFFFF 이라\n 한 줄로 양 테마를 만족한다(라이트 15.05 · 다크 4.65). */\n --u-warning-txt-color: var(--u-neutral-1000);\n\n --u-txt-color-hover: var(--u-primary-color-strong);\n --u-txt-color-active: var(--u-primary-color-strong);\n --u-txt-color-disabled: var(--u-neutral-400);\n /* neutral-500(#9E9E9E)은 흰 배경 대비 2.68 로 WCAG AA(4.5) 미달이었다.\n neutral-600(#757575) = 4.61 로 통과한다. 다크 매핑(neutral-700 = 5.43)은\n 원래 정상이라 손대지 않는다 — 라이트 한쪽만의 결함이었다. */\n --u-txt-color-weak: var(--u-neutral-600);\n --u-txt-color-strong: var(--u-neutral-1000);\n\n --u-link-txt-color: var(--u-primary-color-strong);\n --u-tooltip-txt-color: var(--u-neutral-0);\n\n /* Icon Colors */\n --u-icon-color: var(--u-neutral-700);\n --u-icon-color-inverse: var(--u-neutral-0);\n --u-icon-color-hover: var(--u-primary-color-strong);\n --u-icon-color-active: var(--u-primary-color-strong);\n --u-icon-color-disabled: var(--u-neutral-400);\n\n /* Border Colors */\n --u-border-color: var(--u-neutral-300);\n --u-border-color-weak: var(--u-neutral-200);\n --u-border-color-strong: var(--u-neutral-400);\n --u-border-color-hover: var(--u-neutral-400);\n\n --u-input-border-color: var(--u-neutral-300);\n --u-input-border-color-hover: var(--u-neutral-400);\n --u-input-border-color-focus: var(--u-primary-color);\n --u-input-border-color-invalid: var(--u-danger-color);\n\n /* Background Colors */\n --u-bg-color: var(--u-neutral-0);\n --u-bg-color-inverse: var(--u-neutral-900);\n --u-bg-color-hover: var(--u-neutral-100);\n --u-bg-color-active: var(--u-neutral-200);\n --u-bg-color-disabled: var(--u-neutral-50);\n\n /* ★면 높이 — 바탕에 인접해 있으면서 한 단 구분되는 크롬 면(툴바·표 헤더·푸터).\n 상호작용 상태(-hover/-active/-disabled)와 **다른 축**이다. 상태 이름에 높이를\n 얹으면 의미가 어긋난다(`DL-131-1`).\n `--u-panel-bg-color` 와도 다르다 — 그쪽은 **떠 있는 패널**(카드·대화상자·메뉴)이라\n 라이트에서 페이지와 같은 흰색이고 그림자가 높이를 나른다. 크롬 면은 그림자가 없어\n 라이트에서도 틴트가 필요하다.\n ⚠한 단만 정의한다. 두 단째의 실측 수요는 라이트 한쪽뿐이었다(다크에서는 소비 측\n 오버라이드가 두 값을 같은 단으로 합치고 있었다). */\n --u-bg-color-raised: var(--u-neutral-50);\n \n /* 유채색 표면 — 정보/성공/위험 상태의 '면'.\n 역할 층의 유채색은 전경 5단뿐이라, 상태 배경이 필요한 컴포넌트는 팔레트를 직접\n 읽고 다크를 손으로 보정해야 했다. 팔레트의 유채색 틴트는 다크에서 짓눌리므로\n (바탕 대비 델타의 다크/라이트 비 — 청색 0.38~0.54) 두 테마가 **같은 단이 아니라\n 같은 세기**가 되도록 짝지었다. 실측 비: blue 1.09 · red 1.12 · green 0.91.\n\n ★**warning 이 합류했다(1.16.0 → 1.17.0).** 종전에는 *\"세기를 맞출 단 짝이 없다\"* 며\n 빠져 있었는데, 그 판정은 **shade-0 짝만** 재고 있었다. 노랑만 한 단 내려 잡으면\n 라이트 쪽 세기가 맞는다 — 바탕 대비 휘도 델타 실측:\n blue-0 0.131 · red-0 0.132 · green-0 0.117 · **yellow-200 0.110** (yellow-0 은 0.027)\n ⚠단 이름이 계열마다 다른 것(yellow 만 200)은 이 층의 정상 상태다. 라이트 팔레트는\n 휘도 순이 아니므로 같은 단 번호가 같은 세기를 뜻하지 않는다. */\n --u-primary-bg-color: var(--u-blue-0);\n --u-info-bg-color: var(--u-blue-0);\n --u-success-bg-color: var(--u-green-0);\n --u-danger-bg-color: var(--u-red-0);\n --u-warning-bg-color: var(--u-yellow-200);\n\n --u-input-bg-color: var(--u-neutral-0);\n --u-panel-bg-color: var(--u-neutral-0);\n --u-overlay-bg-color: rgba(0, 0, 0, 0.5);\n --u-tooltip-bg-color: rgba(0, 0, 0, 0.75);\n\n /* Shadow Colors */\n --u-shadow-color-weaker: rgba(0, 0, 0, 0.04);\n --u-shadow-color-weak: rgba(0, 0, 0, 0.08);\n --u-shadow-color-normal: rgba(0, 0, 0, 0.12);\n --u-shadow-color-strong: rgba(0, 0, 0, 0.16);\n --u-shadow-color-stronger: rgba(0, 0, 0, 0.24);\n\n /* Scrollbar Colors */\n --u-scrollbar-color: var(--u-neutral-400);\n --u-scrollbar-color-hover: var(--u-neutral-500);\n --u-scrollbar-track-color: transparent;\n\n /* Font Styles */\n --u-font-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';\n --u-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --u-font-serif: 'Georgia', 'Times New Roman', Times, serif;\n --u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;\n --u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { light_css_default as default };
|
|
@@ -7,25 +7,32 @@ var styles = css`
|
|
|
7
7
|
--alert-border-color: var(--u-neutral-300, #E0E0E0);
|
|
8
8
|
--alert-background-color: var(--u-neutral-200, #EEEEEE);
|
|
9
9
|
}
|
|
10
|
+
/* ★배경은 -weakest 가 아니라 면 토큰(--u-*-bg-color)이다.
|
|
11
|
+
-weakest 는 라이트에서 shade-200 이라 **면으로 쓰기에 너무 진했다** — 그 위의
|
|
12
|
+
아이콘(-strong)이 라이트 4/4 미달이었다(1.48~2.63, 기준 3.0). 다크는 통과했으므로
|
|
13
|
+
라이트 한쪽만의 결함이었고, 원인은 전경이 아니라 배경이다.
|
|
14
|
+
면 토큰으로 옮기면 두 테마 4/4 통과한다(4.58~7.00).
|
|
15
|
+
-weakest 는 진행바 버퍼 같은 **그래픽** 단으로 남는다 — 같은 단에 면과 그래픽을
|
|
16
|
+
겹쳐 두었던 것이 애초의 문제다. */
|
|
10
17
|
:host([status="error"]) {
|
|
11
|
-
--alert-icon-color: var(--u-danger-color-strong, #
|
|
18
|
+
--alert-icon-color: var(--u-danger-color-strong, #C62828);
|
|
12
19
|
--alert-border-color: var(--u-danger-color-weaker, #E57373);
|
|
13
|
-
--alert-background-color: var(--u-danger-color
|
|
20
|
+
--alert-background-color: var(--u-danger-bg-color, #FFEBEE);
|
|
14
21
|
}
|
|
15
22
|
:host([status="warning"]) {
|
|
16
|
-
--alert-icon-color: var(--u-warning-color-strong, #
|
|
23
|
+
--alert-icon-color: var(--u-warning-color-strong, #8A4A00);
|
|
17
24
|
--alert-border-color: var(--u-warning-color-weaker, #FFF176);
|
|
18
|
-
--alert-background-color: var(--u-warning-color
|
|
25
|
+
--alert-background-color: var(--u-warning-bg-color, #FFF59D);
|
|
19
26
|
}
|
|
20
27
|
:host([status="info"]) {
|
|
21
|
-
--alert-icon-color: var(--u-info-color-strong, #
|
|
28
|
+
--alert-icon-color: var(--u-info-color-strong, #1565C0);
|
|
22
29
|
--alert-border-color: var(--u-info-color-weaker, #64B5F6);
|
|
23
|
-
--alert-background-color: var(--u-info-color
|
|
30
|
+
--alert-background-color: var(--u-info-bg-color, #E3F2FD);
|
|
24
31
|
}
|
|
25
32
|
:host([status="success"]) {
|
|
26
|
-
--alert-icon-color: var(--u-success-color-strong, #
|
|
33
|
+
--alert-icon-color: var(--u-success-color-strong, #1B5E20);
|
|
27
34
|
--alert-border-color: var(--u-success-color-weaker, #81C784);
|
|
28
|
-
--alert-background-color: var(--u-success-color
|
|
35
|
+
--alert-background-color: var(--u-success-bg-color, #E8F5E9);
|
|
29
36
|
}
|
|
30
37
|
:host([status="notice"]) {
|
|
31
38
|
--alert-icon-color: var(--u-neutral-700, #616161);
|
|
@@ -51,7 +51,11 @@ var styles = css`
|
|
|
51
51
|
}
|
|
52
52
|
:host([color="blue"]) {
|
|
53
53
|
color: var(--u-neutral-0, #FFFFFF);
|
|
54
|
-
|
|
54
|
+
/* ★장식 축이므로 팔레트를 직접 읽는다 — 여기만 역할 토큰(--u-primary-color)이었다.
|
|
55
|
+
그 탓에 브랜드를 바꾸면 color="blue" 배지만 함께 움직였다(color="green" 등 8색은
|
|
56
|
+
안 움직인다). u-tag 에는 이 오염을 막는 네거티브 컨트롤이 있는데 u-badge 에는
|
|
57
|
+
없어서 드러나지 않았다. 단은 이 컴포넌트의 다른 장식 색과 같은 500 으로 맞춘다. */
|
|
58
|
+
background-color: var(--u-blue-500, #2196F3);
|
|
55
59
|
}
|
|
56
60
|
:host([color="green"]) {
|
|
57
61
|
color: var(--u-neutral-0, #FFFFFF);
|
|
@@ -3,7 +3,7 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
/* --btn-color 하나만 정해지면 hover/active/surface/outline 톤이 전부 자동 파생 */
|
|
6
|
-
--btn-color: var(--u-primary-color, #
|
|
6
|
+
--btn-color: var(--u-primary-color, #1976D2);
|
|
7
7
|
--btn-color-hover: color-mix(in srgb, var(--btn-color) 85%, black);
|
|
8
8
|
--btn-color-active: color-mix(in srgb, var(--btn-color) 70%, black);
|
|
9
9
|
--btn-color-surface: color-mix(in srgb, var(--btn-color) 12%, var(--u-bg-color, #FFFFFF));
|
|
@@ -148,19 +148,21 @@ var styles = css`
|
|
|
148
148
|
background-color: var(--u-bg-color-active, #EEEEEE);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
/* link: blue 링크 스타일 (기본값, color="neutral"일 때도 유지 — 기존 동작 보존)
|
|
151
|
+
/* link: blue 링크 스타일 (기본값, color="neutral"일 때도 유지 — 기존 동작 보존)
|
|
152
|
+
★종전 3단(weak → color → strong)은 쉬는 상태가 --u-primary-color-weak (흰 바탕 3.12)라
|
|
153
|
+
링크 글자가 AA 미달이었고, 그 사이 토큰 층의 --u-link-txt-color 는 어디에서도 쓰이지
|
|
154
|
+
않았다. 링크 색을 정의해 둔 토큰을 링크가 무시하고 있었던 셈이다.
|
|
155
|
+
쉬는 상태를 그 토큰으로 되돌리고, 강조는 밑줄과 -strong 한 단으로 표현한다. */
|
|
152
156
|
:host([variant="link"]) {
|
|
153
|
-
color: var(--u-
|
|
157
|
+
color: var(--u-link-txt-color, #1565C0);
|
|
154
158
|
--btn-border-color: transparent;
|
|
155
159
|
background-color: transparent;
|
|
156
160
|
--btn-padding-inline: 0;
|
|
157
161
|
}
|
|
158
|
-
:host([variant="link"]:hover)
|
|
159
|
-
color: var(--u-primary-color, #1E88E5);
|
|
160
|
-
text-decoration: underline;
|
|
161
|
-
}
|
|
162
|
+
:host([variant="link"]:hover),
|
|
162
163
|
:host([variant="link"]:active) {
|
|
163
|
-
color: var(--u-primary-color-strong, #
|
|
164
|
+
color: var(--u-primary-color-strong, #1565C0);
|
|
165
|
+
text-decoration: underline;
|
|
164
166
|
}
|
|
165
167
|
/* link + 명시적 non-neutral color: 링크 자체 색상을 재정의 (예: 파괴적 액션 링크) */
|
|
166
168
|
:host([variant="link"][color]:not([color="neutral"])) {
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/checkbox/UCheckbox.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--checkbox-fill-color: var(--u-primary-color, #
|
|
5
|
+
--checkbox-fill-color: var(--u-primary-color, #1976D2);
|
|
6
6
|
--checkbox-color: inherit;
|
|
7
7
|
--checkbox-border-color: var(--u-input-border-color, #E0E0E0);
|
|
8
8
|
--checkbox-background-color: var(--u-input-bg-color, #FFFFFF);
|
|
@@ -27,10 +27,10 @@ var styles = css`
|
|
|
27
27
|
cursor: default;
|
|
28
28
|
}
|
|
29
29
|
:host([invalid]) {
|
|
30
|
-
--checkbox-border-color: var(--u-danger-color, #
|
|
30
|
+
--checkbox-border-color: var(--u-danger-color, #D32F2F);
|
|
31
31
|
}
|
|
32
32
|
:host([invalid]) .footer {
|
|
33
|
-
color: var(--u-danger-color, #
|
|
33
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
34
34
|
}
|
|
35
35
|
:host([checked]) .checkbox u-icon,
|
|
36
36
|
:host([indeterminate]) .checkbox u-icon {
|
|
@@ -104,7 +104,7 @@ var styles = css`
|
|
|
104
104
|
}
|
|
105
105
|
input:focus-visible ~ .checkbox {
|
|
106
106
|
box-shadow:
|
|
107
|
-
0 0 0 1px var(--u-input-border-color-focus, #
|
|
107
|
+
0 0 0 1px var(--u-input-border-color-focus, #1976D2),
|
|
108
108
|
0 0 0 3px rgba(59, 130, 246, 0.22);
|
|
109
109
|
}
|
|
110
110
|
|
|
@@ -137,7 +137,7 @@ var styles = css`
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
.required {
|
|
140
|
-
color: var(--u-danger-color, #
|
|
140
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
141
141
|
font-weight: 500;
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -149,7 +149,7 @@ var styles = css`
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
:host([invalid]) .description {
|
|
152
|
-
color: var(--u-danger-color, #
|
|
152
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
153
153
|
}
|
|
154
154
|
`;
|
|
155
155
|
//#endregion
|
|
@@ -14,12 +14,12 @@ var styles = css`
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
:host([copied]) u-icon-button {
|
|
17
|
-
color: var(--u-success-color-
|
|
17
|
+
color: var(--u-success-color-strong, #1B5E20);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/* 라벨 형태(아이콘+텍스트): 복사 완료 시 아이콘/텍스트를 성공색으로 강조 */
|
|
21
21
|
:host([copied]) u-button {
|
|
22
|
-
color: var(--u-success-color-
|
|
22
|
+
color: var(--u-success-color-strong, #1B5E20);
|
|
23
23
|
}
|
|
24
24
|
`;
|
|
25
25
|
//#endregion
|
|
@@ -12,7 +12,7 @@ var styles = css`
|
|
|
12
12
|
cursor: not-allowed;
|
|
13
13
|
}
|
|
14
14
|
:host([invalid]) .footer {
|
|
15
|
-
color: var(--u-danger-color, #
|
|
15
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.header {
|
|
@@ -32,7 +32,7 @@ var styles = css`
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
.required {
|
|
35
|
-
color: var(--u-danger-color, #
|
|
35
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
36
36
|
margin-right: 0.2em;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -38,10 +38,10 @@ var styles = css`
|
|
|
38
38
|
box-shadow: 0 0 0 1px var(--u-input-border-color-hover, #BDBDBD);
|
|
39
39
|
}
|
|
40
40
|
:host(:not([readonly]):not([disabled])) .container:focus-within {
|
|
41
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #
|
|
41
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #1976D2);
|
|
42
42
|
}
|
|
43
43
|
:host([invalid]:not([readonly]):not([disabled])) .container {
|
|
44
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #
|
|
44
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #D32F2F);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/* ===== Variant: filled ===== */
|
|
@@ -63,11 +63,11 @@ var styles = css`
|
|
|
63
63
|
}
|
|
64
64
|
:host([variant="filled"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
65
65
|
box-shadow: none;
|
|
66
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
66
|
+
border-bottom-color: var(--u-input-border-color-focus, #1976D2);
|
|
67
67
|
}
|
|
68
68
|
:host([variant="filled"][invalid]:not([readonly]):not([disabled])) .container {
|
|
69
69
|
box-shadow: none;
|
|
70
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
70
|
+
border-bottom-color: var(--u-input-border-color-invalid, #D32F2F);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/* ===== Variant: underlined ===== */
|
|
@@ -90,12 +90,12 @@ var styles = css`
|
|
|
90
90
|
}
|
|
91
91
|
:host([variant="underlined"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
92
92
|
box-shadow: none;
|
|
93
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
93
|
+
border-bottom-color: var(--u-input-border-color-focus, #1976D2);
|
|
94
94
|
border-bottom-width: 2px;
|
|
95
95
|
}
|
|
96
96
|
:host([variant="underlined"][invalid]:not([readonly]):not([disabled])) .container {
|
|
97
97
|
box-shadow: none;
|
|
98
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
98
|
+
border-bottom-color: var(--u-input-border-color-invalid, #D32F2F);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/* ===== Variant: borderless ===== */
|
|
@@ -161,10 +161,10 @@ var styles = css`
|
|
|
161
161
|
cursor: pointer;
|
|
162
162
|
}
|
|
163
163
|
.suffix-item:hover {
|
|
164
|
-
color: var(--u-icon-color-hover, #
|
|
164
|
+
color: var(--u-icon-color-hover, #1565C0);
|
|
165
165
|
}
|
|
166
166
|
.suffix-item:active {
|
|
167
|
-
color: var(--u-icon-color-active, #
|
|
167
|
+
color: var(--u-icon-color-active, #1565C0);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
u-popover {
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/option/UOption.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--option-color: var(--u-primary-color, #
|
|
5
|
+
--option-color: var(--u-primary-color, #1976D2);
|
|
6
6
|
--option-color-interactive: inherit;
|
|
7
7
|
--option-border-color-interactive: var(--u-border-color-hover, #BDBDBD);
|
|
8
8
|
--option-background-color-interactive: var(--u-bg-color-hover, #F5F5F5);
|
|
@@ -3,14 +3,14 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
--progress-bar-height: 0.5em;
|
|
6
|
-
--progress-bar-color: var(--u-primary-color, #
|
|
6
|
+
--progress-bar-color: var(--u-primary-color, #1976D2);
|
|
7
7
|
--progress-bar-buffer-color: color-mix(in srgb, var(--progress-bar-color) 35%, var(--u-bg-color, #FFFFFF));
|
|
8
8
|
--progress-bar-track-color: var(--u-neutral-200, #EEEEEE);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/* === Status Colors === */
|
|
12
12
|
:host([status="success"]) {
|
|
13
|
-
--progress-bar-color: var(--u-success-color, #
|
|
13
|
+
--progress-bar-color: var(--u-success-color, #2E7D32);
|
|
14
14
|
--progress-bar-buffer-color: var(--u-success-color-weakest, #A5D6A7);
|
|
15
15
|
}
|
|
16
16
|
:host([status="warning"]) {
|
|
@@ -18,7 +18,7 @@ var styles = css`
|
|
|
18
18
|
--progress-bar-buffer-color: var(--u-warning-color-weakest, #FFF59D);
|
|
19
19
|
}
|
|
20
20
|
:host([status="error"]) {
|
|
21
|
-
--progress-bar-color: var(--u-danger-color, #
|
|
21
|
+
--progress-bar-color: var(--u-danger-color, #D32F2F);
|
|
22
22
|
--progress-bar-buffer-color: var(--u-danger-color-weakest, #EF9A9A);
|
|
23
23
|
}
|
|
24
24
|
:host([status="info"]) {
|
|
@@ -3,7 +3,7 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
--progress-ring-size: 6em;
|
|
6
|
-
--progress-ring-color: var(--u-primary-color, #
|
|
6
|
+
--progress-ring-color: var(--u-primary-color, #1976D2);
|
|
7
7
|
--progress-ring-track-width: 6;
|
|
8
8
|
--progress-ring-track-color: var(--u-neutral-200, #EEEEEE);
|
|
9
9
|
--progress-ring-buffer-color: color-mix(in srgb, var(--progress-ring-color) 35%, var(--u-bg-color, #FFFFFF));
|
|
@@ -11,7 +11,7 @@ var styles = css`
|
|
|
11
11
|
|
|
12
12
|
/* === Status Colors === */
|
|
13
13
|
:host([status="success"]) {
|
|
14
|
-
--progress-ring-color: var(--u-success-color, #
|
|
14
|
+
--progress-ring-color: var(--u-success-color, #2E7D32);
|
|
15
15
|
--progress-ring-buffer-color: var(--u-success-color-weakest, #A5D6A7);
|
|
16
16
|
}
|
|
17
17
|
:host([status="warning"]) {
|
|
@@ -19,7 +19,7 @@ var styles = css`
|
|
|
19
19
|
--progress-ring-buffer-color: var(--u-warning-color-weakest, #FFF59D);
|
|
20
20
|
}
|
|
21
21
|
:host([status="error"]) {
|
|
22
|
-
--progress-ring-color: var(--u-danger-color, #
|
|
22
|
+
--progress-ring-color: var(--u-danger-color, #D32F2F);
|
|
23
23
|
--progress-ring-buffer-color: var(--u-danger-color-weakest, #EF9A9A);
|
|
24
24
|
}
|
|
25
25
|
:host([status="info"]) {
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/radio/URadio.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--radio-color: var(--u-primary-color, #
|
|
5
|
+
--radio-color: var(--u-primary-color, #1976D2);
|
|
6
6
|
--radio-color-active: color-mix(in srgb, var(--radio-color) 85%, black);
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -38,7 +38,7 @@ var styles = css`
|
|
|
38
38
|
border-radius: 0.35em;
|
|
39
39
|
}
|
|
40
40
|
:host([invalid]) .container {
|
|
41
|
-
border-color: var(--u-danger-color, #
|
|
41
|
+
border-color: var(--u-danger-color, #D32F2F);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/* Type: default */
|
|
@@ -44,10 +44,10 @@ var styles = css`
|
|
|
44
44
|
box-shadow: 0 0 0 1px var(--u-input-border-color-hover, #BDBDBD);
|
|
45
45
|
}
|
|
46
46
|
:host(:not([readonly]):not([disabled])) .container:focus-within {
|
|
47
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #
|
|
47
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #1976D2);
|
|
48
48
|
}
|
|
49
49
|
:host([invalid]:not([readonly]):not([disabled])) .container {
|
|
50
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #
|
|
50
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #D32F2F);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/* ===== Variant: filled ===== */
|
|
@@ -69,11 +69,11 @@ var styles = css`
|
|
|
69
69
|
}
|
|
70
70
|
:host([variant="filled"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
71
71
|
box-shadow: none;
|
|
72
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
72
|
+
border-bottom-color: var(--u-input-border-color-focus, #1976D2);
|
|
73
73
|
}
|
|
74
74
|
:host([variant="filled"][invalid]:not([readonly]):not([disabled])) .container {
|
|
75
75
|
box-shadow: none;
|
|
76
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
76
|
+
border-bottom-color: var(--u-input-border-color-invalid, #D32F2F);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
/* ===== Variant: underlined ===== */
|
|
@@ -96,12 +96,12 @@ var styles = css`
|
|
|
96
96
|
}
|
|
97
97
|
:host([variant="underlined"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
98
98
|
box-shadow: none;
|
|
99
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
99
|
+
border-bottom-color: var(--u-input-border-color-focus, #1976D2);
|
|
100
100
|
border-bottom-width: 2px;
|
|
101
101
|
}
|
|
102
102
|
:host([variant="underlined"][invalid]:not([readonly]):not([disabled])) .container {
|
|
103
103
|
box-shadow: none;
|
|
104
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
104
|
+
border-bottom-color: var(--u-input-border-color-invalid, #D32F2F);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
/* ===== Variant: borderless ===== */
|
|
@@ -157,10 +157,10 @@ var styles = css`
|
|
|
157
157
|
cursor: pointer;
|
|
158
158
|
}
|
|
159
159
|
.suffix-item:hover {
|
|
160
|
-
color: var(--u-icon-color-hover, #
|
|
160
|
+
color: var(--u-icon-color-hover, #1565C0);
|
|
161
161
|
}
|
|
162
162
|
.suffix-item:active {
|
|
163
|
-
color: var(--u-icon-color-active, #
|
|
163
|
+
color: var(--u-icon-color-active, #1565C0);
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
/* 드롭다운 패널 — 옵션 텍스트가 길어도 팝오버가 앵커보다 넓어지지 않도록 고정 너비로
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/slider/USlider.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--slider-fill-color: var(--u-primary-color, #
|
|
5
|
+
--slider-fill-color: var(--u-primary-color, #1976D2);
|
|
6
6
|
--slider-track-color: var(--u-neutral-300, #E0E0E0);
|
|
7
7
|
--slider-track-height: 6px;
|
|
8
8
|
--slider-thumb-size: 18px;
|
|
@@ -4,7 +4,7 @@ var styles = css`
|
|
|
4
4
|
:host {
|
|
5
5
|
--spinner-track-width: 0.125em;
|
|
6
6
|
--spinner-track-color: var(--u-neutral-200, #EEEEEE);
|
|
7
|
-
--spinner-indicator-color: var(--u-primary-color, #
|
|
7
|
+
--spinner-indicator-color: var(--u-primary-color, #1976D2);
|
|
8
8
|
--spinner-indicator-speed: 2s;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -5,7 +5,7 @@ var styles = css`
|
|
|
5
5
|
--switch-track-width: 2.4em;
|
|
6
6
|
--switch-track-height: 1.4em;
|
|
7
7
|
--switch-track-color: var(--u-neutral-300, #E0E0E0);
|
|
8
|
-
--switch-track-color-checked: var(--u-primary-color, #
|
|
8
|
+
--switch-track-color-checked: var(--u-primary-color, #1976D2);
|
|
9
9
|
--switch-thumb-size: 1.1em;
|
|
10
10
|
--switch-thumb-offset: 0.15em;
|
|
11
11
|
--switch-thumb-color: #fff;
|
|
@@ -34,7 +34,7 @@ var styles = css`
|
|
|
34
34
|
cursor: default;
|
|
35
35
|
}
|
|
36
36
|
:host([invalid]) .track {
|
|
37
|
-
outline: 2px solid var(--u-danger-color, #
|
|
37
|
+
outline: 2px solid var(--u-danger-color, #D32F2F);
|
|
38
38
|
outline-offset: 1px;
|
|
39
39
|
}
|
|
40
40
|
:host(:not([disabled]):not([readonly]):hover) .track {
|
|
@@ -56,7 +56,7 @@ var styles = css`
|
|
|
56
56
|
}
|
|
57
57
|
input:focus-visible ~ .track {
|
|
58
58
|
box-shadow:
|
|
59
|
-
0 0 0 1px var(--u-input-border-color-focus, #
|
|
59
|
+
0 0 0 1px var(--u-input-border-color-focus, #1976D2),
|
|
60
60
|
0 0 0 3px rgba(59, 130, 246, 0.22);
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -176,7 +176,7 @@ var styles = css`
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
.required {
|
|
179
|
-
color: var(--u-danger-color, #
|
|
179
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
180
180
|
font-weight: 500;
|
|
181
181
|
}
|
|
182
182
|
|
|
@@ -188,7 +188,7 @@ var styles = css`
|
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
:host([invalid]) .description {
|
|
191
|
-
color: var(--u-danger-color, #
|
|
191
|
+
color: var(--u-danger-color-strong, #C62828);
|
|
192
192
|
}
|
|
193
193
|
`;
|
|
194
194
|
//#endregion
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/tag/UTag.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--tag-fill-color: var(--u-primary-color, #
|
|
5
|
+
--tag-fill-color: var(--u-primary-color, #1976D2);
|
|
6
6
|
--tag-color: var(--u-neutral-800, #424242);
|
|
7
7
|
--tag-bg-color: var(--u-neutral-100, #F5F5F5);
|
|
8
8
|
--tag-border-color: transparent;
|
|
@@ -26,10 +26,10 @@ var styles = css`
|
|
|
26
26
|
box-shadow: 0 0 0 1px var(--u-input-border-color-hover, #BDBDBD);
|
|
27
27
|
}
|
|
28
28
|
:host(:not([readonly]):not([disabled])) .container:focus-within {
|
|
29
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #
|
|
29
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #1976D2);
|
|
30
30
|
}
|
|
31
31
|
:host([invalid]:not([readonly]):not([disabled])) .container {
|
|
32
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #
|
|
32
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #D32F2F);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/* ===== Variant: filled ===== */
|
|
@@ -51,11 +51,11 @@ var styles = css`
|
|
|
51
51
|
}
|
|
52
52
|
:host([variant="filled"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
53
53
|
box-shadow: none;
|
|
54
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
54
|
+
border-bottom-color: var(--u-input-border-color-focus, #1976D2);
|
|
55
55
|
}
|
|
56
56
|
:host([variant="filled"][invalid]:not([readonly]):not([disabled])) .container {
|
|
57
57
|
box-shadow: none;
|
|
58
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
58
|
+
border-bottom-color: var(--u-input-border-color-invalid, #D32F2F);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/* ===== Variant: underlined ===== */
|
|
@@ -78,12 +78,12 @@ var styles = css`
|
|
|
78
78
|
}
|
|
79
79
|
:host([variant="underlined"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
80
80
|
box-shadow: none;
|
|
81
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
81
|
+
border-bottom-color: var(--u-input-border-color-focus, #1976D2);
|
|
82
82
|
border-bottom-width: 2px;
|
|
83
83
|
}
|
|
84
84
|
:host([variant="underlined"][invalid]:not([readonly]):not([disabled])) .container {
|
|
85
85
|
box-shadow: none;
|
|
86
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
86
|
+
border-bottom-color: var(--u-input-border-color-invalid, #D32F2F);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/* ===== Variant: borderless ===== */
|
package/dist/styles/dark.css
CHANGED
|
@@ -140,21 +140,30 @@
|
|
|
140
140
|
단은 '강도' 축이다 (weakest -> strong). 용도(배경/테두리/텍스트)는
|
|
141
141
|
소비처가 정한다 -- 단을 속성에 묶으면 primary 버튼의 배경이 어느
|
|
142
142
|
단인지 같은 모순이 생긴다.
|
|
143
|
+
|
|
144
|
+
★**다만 두 단은 용도가 확정돼 있다** — 대비 요구가 서로 다르기 때문이다.
|
|
145
|
+
`-color` = **면**. `--u-*-txt-color` 가 그 위에 얹히므로 on-color 기준 4.5.
|
|
146
|
+
`-strong` = **글자·아이콘**. `--u-bg-color` 위에 놓이므로 바탕 기준 4.5.
|
|
147
|
+
라이트에서는 바탕도 on-color 도 흰색이라 두 요구가 한 조건으로 합쳐지지만,
|
|
148
|
+
**다크에서는 정반대 방향**이다(바탕 #121212 · on-color #FFFFFF). 바탕에서 읽히는
|
|
149
|
+
밝은 단은 흰 글자를 못 받고, 흰 글자를 받는 어두운 단은 바탕에서 안 읽힌다.
|
|
150
|
+
⇒ 다크에서 `-color` 와 `-strong` 이 두 단 벌어지는 것이 그 결과다.
|
|
151
|
+
`tests/build/token-contrast.test.ts` 가 값을 지킨다.
|
|
143
152
|
========================================================================== */
|
|
144
153
|
|
|
145
154
|
/* primary — 브랜드 · 강조 · 포커스 · 링크 */
|
|
146
155
|
--u-primary-color-weakest: var(--u-blue-200);
|
|
147
156
|
--u-primary-color-weaker: var(--u-blue-300);
|
|
148
157
|
--u-primary-color-weak: var(--u-blue-500);
|
|
149
|
-
--u-primary-color: var(--u-blue-600);
|
|
150
|
-
--u-primary-color-strong: var(--u-blue-700)
|
|
158
|
+
--u-primary-color: var(--u-blue-600); /* 면: 흰 글자 6.09 ✓ */
|
|
159
|
+
--u-primary-color-strong: var(--u-blue-800); /* 글자: 바탕 5.32 ✓ (700 은 4.05 ✗) */
|
|
151
160
|
|
|
152
161
|
/* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */
|
|
153
162
|
--u-info-color-weakest: var(--u-blue-200);
|
|
154
163
|
--u-info-color-weaker: var(--u-blue-300);
|
|
155
164
|
--u-info-color-weak: var(--u-blue-500);
|
|
156
165
|
--u-info-color: var(--u-blue-600);
|
|
157
|
-
--u-info-color-strong: var(--u-blue-
|
|
166
|
+
--u-info-color-strong: var(--u-blue-800);
|
|
158
167
|
|
|
159
168
|
/* success — 성공 · 완료 */
|
|
160
169
|
--u-success-color-weakest: var(--u-green-200);
|
|
@@ -174,8 +183,8 @@
|
|
|
174
183
|
--u-danger-color-weakest: var(--u-red-200);
|
|
175
184
|
--u-danger-color-weaker: var(--u-red-300);
|
|
176
185
|
--u-danger-color-weak: var(--u-red-500);
|
|
177
|
-
--u-danger-color: var(--u-red-600);
|
|
178
|
-
--u-danger-color-strong: var(--u-red-700)
|
|
186
|
+
--u-danger-color: var(--u-red-600); /* 면: 흰 글자 6.83 ✓ */
|
|
187
|
+
--u-danger-color-strong: var(--u-red-800); /* 글자: 바탕 4.87 ✓ (700 은 3.67 ✗) */
|
|
179
188
|
/* ==========================================================================
|
|
180
189
|
Radius Scale — 모서리 반경
|
|
181
190
|
리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).
|
|
@@ -206,14 +215,17 @@
|
|
|
206
215
|
--u-txt-color: var(--u-neutral-900);
|
|
207
216
|
--u-txt-color-inverse: var(--u-neutral-100);
|
|
208
217
|
|
|
209
|
-
/* 유채색 배경 위의 글자 —
|
|
218
|
+
/* 유채색 배경 위의 글자 — warning 만 다르다(light.css 참조). */
|
|
210
219
|
--u-primary-txt-color: #FFFFFF;
|
|
211
220
|
--u-info-txt-color: #FFFFFF;
|
|
212
221
|
--u-success-txt-color: #FFFFFF;
|
|
213
222
|
--u-danger-txt-color: #FFFFFF;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
223
|
+
/* ★라이트 시트와 같은 이유로 중립 최상단을 쓴다 — 다크에서는 그 값이 #FFFFFF 라
|
|
224
|
+
결과가 종전과 같다(4.65 ✓). 리터럴 대신 토큰을 쓰는 이유는 라이트에서 뒤집히기
|
|
225
|
+
때문이다(#000000). 두 시트가 같은 선언이 되어 어긋날 자리가 없어진다. */
|
|
226
|
+
--u-warning-txt-color: var(--u-neutral-1000);
|
|
227
|
+
--u-txt-color-hover: var(--u-primary-color-strong);
|
|
228
|
+
--u-txt-color-active: var(--u-primary-color-strong);
|
|
217
229
|
--u-txt-color-disabled: var(--u-neutral-500);
|
|
218
230
|
--u-txt-color-weak: var(--u-neutral-700);
|
|
219
231
|
--u-txt-color-strong: var(--u-neutral-1000);
|
|
@@ -224,8 +236,8 @@
|
|
|
224
236
|
/* Icon Colors */
|
|
225
237
|
--u-icon-color: var(--u-neutral-800);
|
|
226
238
|
--u-icon-color-inverse: var(--u-neutral-100);
|
|
227
|
-
--u-icon-color-hover: var(--u-primary-color);
|
|
228
|
-
--u-icon-color-active: var(--u-primary-color);
|
|
239
|
+
--u-icon-color-hover: var(--u-primary-color-strong);
|
|
240
|
+
--u-icon-color-active: var(--u-primary-color-strong);
|
|
229
241
|
--u-icon-color-disabled: var(--u-neutral-500);
|
|
230
242
|
|
|
231
243
|
/* Border Colors */
|
|
@@ -245,6 +257,12 @@
|
|
|
245
257
|
--u-bg-color-hover: var(--u-neutral-300);
|
|
246
258
|
--u-bg-color-active: var(--u-neutral-400);
|
|
247
259
|
--u-bg-color-disabled: var(--u-neutral-100);
|
|
260
|
+
|
|
261
|
+
/* 면 높이 — 상세는 light.css 참조. 다크는 **바탕보다 밝은 쪽**이 위다.
|
|
262
|
+
neutral-300(#2A2A2A)은 바탕(#121212) 대비 1.42 로, 소비 측이 오버라이드로 쓰던
|
|
263
|
+
neutral-200(1.15)보다 실제로 더 잘 구분된다 — 그 오버라이드가 해결하려던 증상이
|
|
264
|
+
*"툴바·헤더가 배경에 묻힌다"* 였다. */
|
|
265
|
+
--u-bg-color-raised: var(--u-neutral-300);
|
|
248
266
|
|
|
249
267
|
/* 유채색 표면 — 라이트와 **같은 단이 아니라 같은 세기**로 짝지었다(light.css 참조).
|
|
250
268
|
팔레트 유채색 틴트가 다크에서 짓눌리므로 한 단 위를 쓴다. green 은 대칭이라 그대로. */
|
|
@@ -252,6 +270,8 @@
|
|
|
252
270
|
--u-info-bg-color: var(--u-blue-100);
|
|
253
271
|
--u-success-bg-color: var(--u-green-0);
|
|
254
272
|
--u-danger-bg-color: var(--u-red-100);
|
|
273
|
+
/* warning 합류 — 라이트는 yellow-200 이다(단 이름이 다른 이유는 light.css 참조). */
|
|
274
|
+
--u-warning-bg-color: var(--u-yellow-100);
|
|
255
275
|
|
|
256
276
|
--u-input-bg-color: var(--u-neutral-200);
|
|
257
277
|
--u-panel-bg-color: var(--u-neutral-200);
|
package/dist/styles/light.css
CHANGED
|
@@ -142,40 +142,53 @@
|
|
|
142
142
|
단인지 같은 모순이 생긴다.
|
|
143
143
|
========================================================================== */
|
|
144
144
|
|
|
145
|
+
/* ★단이 팔레트 shade 와 1:1 이 아니다 — **대비로 고른다.**
|
|
146
|
+
`-color` 는 `--u-*-txt-color` 를 받는 면이고 `-strong` 은 바탕 위의 글자다.
|
|
147
|
+
라이트에서는 바탕도 on-color 도 흰색이라 두 요구가 `contrast(shade, #FFF) ≥ 4.5`
|
|
148
|
+
하나로 합쳐지고, 그 단이 계열마다 다르다(blue 700 · red 700 · green 800).
|
|
149
|
+
Material 램프는 휘도가 아니라 색상 기준으로 만들어져 있어서 단 번호가 세기를
|
|
150
|
+
보장하지 않는다 — 값은 `tests/build/token-contrast.test.ts` 가 지킨다. */
|
|
151
|
+
|
|
145
152
|
/* primary — 브랜드 · 강조 · 포커스 · 링크 */
|
|
146
153
|
--u-primary-color-weakest: var(--u-blue-200);
|
|
147
154
|
--u-primary-color-weaker: var(--u-blue-300);
|
|
148
155
|
--u-primary-color-weak: var(--u-blue-500);
|
|
149
|
-
--u-primary-color: var(--u-blue-600)
|
|
150
|
-
--u-primary-color-strong: var(--u-blue-
|
|
156
|
+
--u-primary-color: var(--u-blue-700); /* 4.60 ✓ (600 은 3.68 ✗) */
|
|
157
|
+
--u-primary-color-strong: var(--u-blue-800); /* 5.75 ✓ */
|
|
151
158
|
|
|
152
159
|
/* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */
|
|
153
160
|
--u-info-color-weakest: var(--u-blue-200);
|
|
154
161
|
--u-info-color-weaker: var(--u-blue-300);
|
|
155
162
|
--u-info-color-weak: var(--u-blue-500);
|
|
156
|
-
--u-info-color: var(--u-blue-
|
|
157
|
-
--u-info-color-strong: var(--u-blue-
|
|
163
|
+
--u-info-color: var(--u-blue-700);
|
|
164
|
+
--u-info-color-strong: var(--u-blue-800);
|
|
158
165
|
|
|
159
|
-
/* success — 성공 · 완료
|
|
166
|
+
/* success — 성공 · 완료
|
|
167
|
+
⚠green 은 700 도 4.12 로 미달이라 두 단을 건너뛴다. 계열마다 통과 단이 다른 것이
|
|
168
|
+
이 층의 정상 상태다(단 번호를 맞추면 대비가 어긋난다). */
|
|
160
169
|
--u-success-color-weakest: var(--u-green-200);
|
|
161
170
|
--u-success-color-weaker: var(--u-green-300);
|
|
162
171
|
--u-success-color-weak: var(--u-green-500);
|
|
163
|
-
--u-success-color: var(--u-green-600)
|
|
164
|
-
--u-success-color-strong: var(--u-green-
|
|
172
|
+
--u-success-color: var(--u-green-800); /* 5.13 ✓ (600=3.30 · 700=4.12 ✗) */
|
|
173
|
+
--u-success-color-strong: var(--u-green-900); /* 7.87 ✓ */
|
|
165
174
|
|
|
166
175
|
/* warning — 주의 */
|
|
167
176
|
--u-warning-color-weakest: var(--u-yellow-200);
|
|
168
177
|
--u-warning-color-weaker: var(--u-yellow-300);
|
|
169
178
|
--u-warning-color-weak: var(--u-yellow-500);
|
|
170
179
|
--u-warning-color: var(--u-yellow-600);
|
|
171
|
-
|
|
180
|
+
/* ★다른 계열은 -strong 이 shade-800~900 인데 warning 만 1000 이다 — 노랑 램프는
|
|
181
|
+
900 까지도 흰 바탕 2.65 로 미달이고, 1000(#8A4A00)에서 처음 6.86 이 된다.
|
|
182
|
+
그 값은 갈색에 가깝지만, 이 단의 용도는 **면이 아니라 글자·아이콘**이므로 색상보다
|
|
183
|
+
가독성이 먼저다(경고 문구를 어두운 호박색으로 쓰는 것은 보편 관행이다). */
|
|
184
|
+
--u-warning-color-strong: var(--u-yellow-1000);
|
|
172
185
|
|
|
173
186
|
/* danger — 오류 · 위험 · 유효성 실패 */
|
|
174
187
|
--u-danger-color-weakest: var(--u-red-200);
|
|
175
188
|
--u-danger-color-weaker: var(--u-red-300);
|
|
176
189
|
--u-danger-color-weak: var(--u-red-500);
|
|
177
|
-
--u-danger-color: var(--u-red-600)
|
|
178
|
-
--u-danger-color-strong: var(--u-red-
|
|
190
|
+
--u-danger-color: var(--u-red-700); /* 4.98 ✓ (600 은 4.23 ✗ — 오류 문구가 이 단이었다) */
|
|
191
|
+
--u-danger-color-strong: var(--u-red-800); /* 5.62 ✓ */
|
|
179
192
|
/* ==========================================================================
|
|
180
193
|
Radius Scale — 모서리 반경
|
|
181
194
|
리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).
|
|
@@ -215,10 +228,14 @@
|
|
|
215
228
|
--u-info-txt-color: #FFFFFF;
|
|
216
229
|
--u-success-txt-color: #FFFFFF;
|
|
217
230
|
--u-danger-txt-color: #FFFFFF;
|
|
218
|
-
|
|
231
|
+
/* ★warning 만 어둡다 — 취향이 아니라 측정이다. 노랑은 **어떤 단도** 흰 글자로 AA 를
|
|
232
|
+
받치지 못한다(라이트 최대 2.65 @900, 그마저 갈색). 다른 넷처럼 단을 옮기는 수단이
|
|
233
|
+
없으므로 전경을 뒤집는다. `--u-neutral-1000` 은 라이트 #000000 / 다크 #FFFFFF 이라
|
|
234
|
+
한 줄로 양 테마를 만족한다(라이트 15.05 · 다크 4.65). */
|
|
235
|
+
--u-warning-txt-color: var(--u-neutral-1000);
|
|
219
236
|
|
|
220
|
-
--u-txt-color-hover: var(--u-primary-color);
|
|
221
|
-
--u-txt-color-active: var(--u-primary-color);
|
|
237
|
+
--u-txt-color-hover: var(--u-primary-color-strong);
|
|
238
|
+
--u-txt-color-active: var(--u-primary-color-strong);
|
|
222
239
|
--u-txt-color-disabled: var(--u-neutral-400);
|
|
223
240
|
/* neutral-500(#9E9E9E)은 흰 배경 대비 2.68 로 WCAG AA(4.5) 미달이었다.
|
|
224
241
|
neutral-600(#757575) = 4.61 로 통과한다. 다크 매핑(neutral-700 = 5.43)은
|
|
@@ -232,8 +249,8 @@
|
|
|
232
249
|
/* Icon Colors */
|
|
233
250
|
--u-icon-color: var(--u-neutral-700);
|
|
234
251
|
--u-icon-color-inverse: var(--u-neutral-0);
|
|
235
|
-
--u-icon-color-hover: var(--u-primary-color);
|
|
236
|
-
--u-icon-color-active: var(--u-primary-color);
|
|
252
|
+
--u-icon-color-hover: var(--u-primary-color-strong);
|
|
253
|
+
--u-icon-color-active: var(--u-primary-color-strong);
|
|
237
254
|
--u-icon-color-disabled: var(--u-neutral-400);
|
|
238
255
|
|
|
239
256
|
/* Border Colors */
|
|
@@ -253,18 +270,34 @@
|
|
|
253
270
|
--u-bg-color-hover: var(--u-neutral-100);
|
|
254
271
|
--u-bg-color-active: var(--u-neutral-200);
|
|
255
272
|
--u-bg-color-disabled: var(--u-neutral-50);
|
|
273
|
+
|
|
274
|
+
/* ★면 높이 — 바탕에 인접해 있으면서 한 단 구분되는 크롬 면(툴바·표 헤더·푸터).
|
|
275
|
+
상호작용 상태(-hover/-active/-disabled)와 **다른 축**이다. 상태 이름에 높이를
|
|
276
|
+
얹으면 의미가 어긋난다(`DL-131-1`).
|
|
277
|
+
`--u-panel-bg-color` 와도 다르다 — 그쪽은 **떠 있는 패널**(카드·대화상자·메뉴)이라
|
|
278
|
+
라이트에서 페이지와 같은 흰색이고 그림자가 높이를 나른다. 크롬 면은 그림자가 없어
|
|
279
|
+
라이트에서도 틴트가 필요하다.
|
|
280
|
+
⚠한 단만 정의한다. 두 단째의 실측 수요는 라이트 한쪽뿐이었다(다크에서는 소비 측
|
|
281
|
+
오버라이드가 두 값을 같은 단으로 합치고 있었다). */
|
|
282
|
+
--u-bg-color-raised: var(--u-neutral-50);
|
|
256
283
|
|
|
257
284
|
/* 유채색 표면 — 정보/성공/위험 상태의 '면'.
|
|
258
285
|
역할 층의 유채색은 전경 5단뿐이라, 상태 배경이 필요한 컴포넌트는 팔레트를 직접
|
|
259
286
|
읽고 다크를 손으로 보정해야 했다. 팔레트의 유채색 틴트는 다크에서 짓눌리므로
|
|
260
287
|
(바탕 대비 델타의 다크/라이트 비 — 청색 0.38~0.54) 두 테마가 **같은 단이 아니라
|
|
261
288
|
같은 세기**가 되도록 짝지었다. 실측 비: blue 1.09 · red 1.12 · green 0.91.
|
|
262
|
-
|
|
263
|
-
|
|
289
|
+
|
|
290
|
+
★**warning 이 합류했다(1.16.0 → 1.17.0).** 종전에는 *"세기를 맞출 단 짝이 없다"* 며
|
|
291
|
+
빠져 있었는데, 그 판정은 **shade-0 짝만** 재고 있었다. 노랑만 한 단 내려 잡으면
|
|
292
|
+
라이트 쪽 세기가 맞는다 — 바탕 대비 휘도 델타 실측:
|
|
293
|
+
blue-0 0.131 · red-0 0.132 · green-0 0.117 · **yellow-200 0.110** (yellow-0 은 0.027)
|
|
294
|
+
⚠단 이름이 계열마다 다른 것(yellow 만 200)은 이 층의 정상 상태다. 라이트 팔레트는
|
|
295
|
+
휘도 순이 아니므로 같은 단 번호가 같은 세기를 뜻하지 않는다. */
|
|
264
296
|
--u-primary-bg-color: var(--u-blue-0);
|
|
265
297
|
--u-info-bg-color: var(--u-blue-0);
|
|
266
298
|
--u-success-bg-color: var(--u-green-0);
|
|
267
299
|
--u-danger-bg-color: var(--u-red-0);
|
|
300
|
+
--u-warning-bg-color: var(--u-yellow-200);
|
|
268
301
|
|
|
269
302
|
--u-input-bg-color: var(--u-neutral-0);
|
|
270
303
|
--u-panel-bg-color: var(--u-neutral-0);
|