division-ds 0.0.0-stage → 0.1.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/AGENTS.md +190 -0
- package/LICENSE +21 -0
- package/README.md +18 -2
- package/package.json +20 -4
- package/public/manifest/components.json +10550 -0
- package/public/manifest/tokens.json +932 -0
- package/scripts/division-ds.mjs +188 -0
- package/scripts/lib/agent-docs.mjs +510 -0
- package/scripts/lib/button-spacing.mjs +416 -0
- package/scripts/lib/component-props.mjs +181 -0
- package/scripts/lib/props-validator.mjs +320 -0
- package/scripts/lib/rules-installer.mjs +132 -0
- package/scripts/lib/token-discipline.mjs +125 -0
|
@@ -0,0 +1,932 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generatedBy": "scripts/build-tokens.mjs",
|
|
3
|
+
"rule": "Components and screens use semantic and component tokens only, as var(--name). Primitive colour ramps (--color-<ramp>-<stop>) are the raw material the semantic layer is built from, not a palette to pick from.",
|
|
4
|
+
"tokens": [
|
|
5
|
+
{
|
|
6
|
+
"name": "--color-signal-50",
|
|
7
|
+
"layer": "primitive",
|
|
8
|
+
"value": "#fef5f0"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "--color-signal-100",
|
|
12
|
+
"layer": "primitive",
|
|
13
|
+
"value": "#fcd5c3"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "--color-signal-200",
|
|
17
|
+
"layer": "primitive",
|
|
18
|
+
"value": "#f9b596"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "--color-signal-300",
|
|
22
|
+
"layer": "primitive",
|
|
23
|
+
"value": "#f79569"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "--color-signal-400",
|
|
27
|
+
"layer": "primitive",
|
|
28
|
+
"value": "#f4753c"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "--color-signal-500",
|
|
32
|
+
"layer": "primitive",
|
|
33
|
+
"value": "#f2550f"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "--color-signal-600",
|
|
37
|
+
"layer": "primitive",
|
|
38
|
+
"value": "#c6440b"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "--color-signal-700",
|
|
42
|
+
"layer": "primitive",
|
|
43
|
+
"value": "#983508"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "--color-signal-800",
|
|
47
|
+
"layer": "primitive",
|
|
48
|
+
"value": "#6a2506"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "--color-signal-900",
|
|
52
|
+
"layer": "primitive",
|
|
53
|
+
"value": "#3c1503"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "--color-signal-950",
|
|
57
|
+
"layer": "primitive",
|
|
58
|
+
"value": "#0f0501"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "--color-hostile-50",
|
|
62
|
+
"layer": "primitive",
|
|
63
|
+
"value": "#fef1f1"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "--color-hostile-100",
|
|
67
|
+
"layer": "primitive",
|
|
68
|
+
"value": "#fccbcb"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "--color-hostile-200",
|
|
72
|
+
"layer": "primitive",
|
|
73
|
+
"value": "#faa6a6"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "--color-hostile-300",
|
|
77
|
+
"layer": "primitive",
|
|
78
|
+
"value": "#f78181"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "--color-hostile-400",
|
|
82
|
+
"layer": "primitive",
|
|
83
|
+
"value": "#f55b5b"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "--color-hostile-500",
|
|
87
|
+
"layer": "primitive",
|
|
88
|
+
"value": "#f33636"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "--color-hostile-600",
|
|
92
|
+
"layer": "primitive",
|
|
93
|
+
"value": "#e30e0e"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "--color-hostile-700",
|
|
97
|
+
"layer": "primitive",
|
|
98
|
+
"value": "#ae0a0a"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"name": "--color-hostile-800",
|
|
102
|
+
"layer": "primitive",
|
|
103
|
+
"value": "#790707"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "--color-hostile-900",
|
|
107
|
+
"layer": "primitive",
|
|
108
|
+
"value": "#440404"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "--color-hostile-950",
|
|
112
|
+
"layer": "primitive",
|
|
113
|
+
"value": "#0e0101"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "--color-ok-50",
|
|
117
|
+
"layer": "primitive",
|
|
118
|
+
"value": "#f3fcf8"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "--color-ok-100",
|
|
122
|
+
"layer": "primitive",
|
|
123
|
+
"value": "#c9f1de"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"name": "--color-ok-200",
|
|
127
|
+
"layer": "primitive",
|
|
128
|
+
"value": "#9ee6c5"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"name": "--color-ok-300",
|
|
132
|
+
"layer": "primitive",
|
|
133
|
+
"value": "#74dbab"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "--color-ok-400",
|
|
137
|
+
"layer": "primitive",
|
|
138
|
+
"value": "#49d092"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "--color-ok-500",
|
|
142
|
+
"layer": "primitive",
|
|
143
|
+
"value": "#2fb577"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"name": "--color-ok-600",
|
|
147
|
+
"layer": "primitive",
|
|
148
|
+
"value": "#269361"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "--color-ok-700",
|
|
152
|
+
"layer": "primitive",
|
|
153
|
+
"value": "#1d714b"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "--color-ok-800",
|
|
157
|
+
"layer": "primitive",
|
|
158
|
+
"value": "#155034"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "--color-ok-900",
|
|
162
|
+
"layer": "primitive",
|
|
163
|
+
"value": "#0c2e1e"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"name": "--color-ok-950",
|
|
167
|
+
"layer": "primitive",
|
|
168
|
+
"value": "#030c08"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "--color-info-50",
|
|
172
|
+
"layer": "primitive",
|
|
173
|
+
"value": "#f0f7ff"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "--color-info-100",
|
|
177
|
+
"layer": "primitive",
|
|
178
|
+
"value": "#d2e7ff"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"name": "--color-info-200",
|
|
182
|
+
"layer": "primitive",
|
|
183
|
+
"value": "#b4d7ff"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"name": "--color-info-300",
|
|
187
|
+
"layer": "primitive",
|
|
188
|
+
"value": "#96c7ff"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "--color-info-400",
|
|
192
|
+
"layer": "primitive",
|
|
193
|
+
"value": "#78b7ff"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"name": "--color-info-500",
|
|
197
|
+
"layer": "primitive",
|
|
198
|
+
"value": "#5aa7ff"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"name": "--color-info-600",
|
|
202
|
+
"layer": "primitive",
|
|
203
|
+
"value": "#1884ff"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "--color-info-700",
|
|
207
|
+
"layer": "primitive",
|
|
208
|
+
"value": "#0063d5"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "--color-info-800",
|
|
212
|
+
"layer": "primitive",
|
|
213
|
+
"value": "#004593"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "--color-info-900",
|
|
217
|
+
"layer": "primitive",
|
|
218
|
+
"value": "#002651"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"name": "--color-info-950",
|
|
222
|
+
"layer": "primitive",
|
|
223
|
+
"value": "#00070f"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "--color-warning-50",
|
|
227
|
+
"layer": "primitive",
|
|
228
|
+
"value": "#fff9f0"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "--color-warning-100",
|
|
232
|
+
"layer": "primitive",
|
|
233
|
+
"value": "#ffeac8"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "--color-warning-200",
|
|
237
|
+
"layer": "primitive",
|
|
238
|
+
"value": "#ffdaa1"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"name": "--color-warning-300",
|
|
242
|
+
"layer": "primitive",
|
|
243
|
+
"value": "#ffcb79"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"name": "--color-warning-400",
|
|
247
|
+
"layer": "primitive",
|
|
248
|
+
"value": "#ffbb52"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"name": "--color-warning-500",
|
|
252
|
+
"layer": "primitive",
|
|
253
|
+
"value": "#ffac2a"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"name": "--color-warning-600",
|
|
257
|
+
"layer": "primitive",
|
|
258
|
+
"value": "#f19300"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"name": "--color-warning-700",
|
|
262
|
+
"layer": "primitive",
|
|
263
|
+
"value": "#b87000"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"name": "--color-warning-800",
|
|
267
|
+
"layer": "primitive",
|
|
268
|
+
"value": "#804e00"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "--color-warning-900",
|
|
272
|
+
"layer": "primitive",
|
|
273
|
+
"value": "#482c00"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "--color-warning-950",
|
|
277
|
+
"layer": "primitive",
|
|
278
|
+
"value": "#0f0900"
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"name": "--color-neutral-50",
|
|
282
|
+
"layer": "primitive",
|
|
283
|
+
"value": "#f2f4f8"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"name": "--color-neutral-100",
|
|
287
|
+
"layer": "primitive",
|
|
288
|
+
"value": "#c2cddc"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "--color-neutral-200",
|
|
292
|
+
"layer": "primitive",
|
|
293
|
+
"value": "#92a5c0"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"name": "--color-neutral-300",
|
|
297
|
+
"layer": "primitive",
|
|
298
|
+
"value": "#627da4"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"name": "--color-neutral-400",
|
|
302
|
+
"layer": "primitive",
|
|
303
|
+
"value": "#445875"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"name": "--color-neutral-500",
|
|
307
|
+
"layer": "primitive",
|
|
308
|
+
"value": "#283445"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"name": "--color-neutral-600",
|
|
312
|
+
"layer": "primitive",
|
|
313
|
+
"value": "#212b38"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"name": "--color-neutral-700",
|
|
317
|
+
"layer": "primitive",
|
|
318
|
+
"value": "#19212c"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"name": "--color-neutral-800",
|
|
322
|
+
"layer": "primitive",
|
|
323
|
+
"value": "#12181f"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"name": "--color-neutral-900",
|
|
327
|
+
"layer": "primitive",
|
|
328
|
+
"value": "#0b0e13"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"name": "--color-neutral-950",
|
|
332
|
+
"layer": "primitive",
|
|
333
|
+
"value": "#040506"
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"name": "--spacing-1",
|
|
337
|
+
"layer": "spacing",
|
|
338
|
+
"value": "4px",
|
|
339
|
+
"use": "4px. The gap between an icon and its label, or two tightly bound marks."
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"name": "--spacing-2",
|
|
343
|
+
"layer": "spacing",
|
|
344
|
+
"value": "8px",
|
|
345
|
+
"use": "8px. The gap between related items in a row: chips, a label and its value."
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"name": "--spacing-3",
|
|
349
|
+
"layer": "spacing",
|
|
350
|
+
"value": "12px",
|
|
351
|
+
"use": "12px. The gap between sibling controls, such as two buttons."
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"name": "--spacing-4",
|
|
355
|
+
"layer": "spacing",
|
|
356
|
+
"value": "16px",
|
|
357
|
+
"use": "16px. Default padding inside a control or a compact panel; the gap between fields."
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"name": "--spacing-6",
|
|
361
|
+
"layer": "spacing",
|
|
362
|
+
"value": "24px",
|
|
363
|
+
"use": "24px. Padding inside a Card; the gap between groups in a form."
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"name": "--spacing-8",
|
|
367
|
+
"layer": "spacing",
|
|
368
|
+
"value": "32px",
|
|
369
|
+
"use": "32px. The gap between blocks within a section."
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"name": "--spacing-12",
|
|
373
|
+
"layer": "spacing",
|
|
374
|
+
"value": "48px",
|
|
375
|
+
"use": "48px. The gap between sections of a page."
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"name": "--spacing-16",
|
|
379
|
+
"layer": "spacing",
|
|
380
|
+
"value": "64px",
|
|
381
|
+
"use": "64px. The page gutter from the large breakpoint, and the gap around a hero block."
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"name": "--duration-fast",
|
|
385
|
+
"layer": "motion",
|
|
386
|
+
"value": "120ms",
|
|
387
|
+
"use": "120ms. Hover and press feedback: colour and border changes on a control."
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"name": "--duration-base",
|
|
391
|
+
"layer": "motion",
|
|
392
|
+
"value": "180ms",
|
|
393
|
+
"use": "180ms. The default for anything that is not hover feedback: a menu or tooltip entering, a collapse."
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"name": "--duration-slow",
|
|
397
|
+
"layer": "motion",
|
|
398
|
+
"value": "320ms",
|
|
399
|
+
"use": "320ms. A larger change: a section expanding, a progress bar filling, the Switch thumb settling into shape after it arrives."
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"name": "--duration-stepped",
|
|
403
|
+
"layer": "motion",
|
|
404
|
+
"value": "180ms",
|
|
405
|
+
"use": "180ms, run in steps. The Button's stepped hover arrival. Used by .transition-stepped only."
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"name": "--ease-snap",
|
|
409
|
+
"layer": "motion",
|
|
410
|
+
"value": "cubic-bezier(0.2, 0.8, 0.2, 1)",
|
|
411
|
+
"use": "The default easing curve: quick out, soft landing. Use it for every transition that is not a physical object changing shape."
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"name": "--ease-accelerate",
|
|
415
|
+
"layer": "motion",
|
|
416
|
+
"value": "cubic-bezier(0.4, 0, 1, 1)",
|
|
417
|
+
"use": "Starts slow, gathers speed and stops at the end. For a small object that travels into a boundary and gives slightly against it (the Switch thumb). Not for anything that should land softly: that is --ease-snap."
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"name": "--color-surface-base",
|
|
421
|
+
"layer": "semantic",
|
|
422
|
+
"value": {
|
|
423
|
+
"dark": "#07080b",
|
|
424
|
+
"light": "#f2f4f8"
|
|
425
|
+
},
|
|
426
|
+
"use": "The page background, and the opaque fill of every form and overlay. Start here: text and control colours are measured against it."
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"name": "--color-surface-sunken",
|
|
430
|
+
"layer": "semantic",
|
|
431
|
+
"value": {
|
|
432
|
+
"dark": "#0d1016",
|
|
433
|
+
"light": "#c2cddc"
|
|
434
|
+
},
|
|
435
|
+
"use": "The opaque fill of a control you type or pick in (Input, Textarea, Select), and of small opaque surfaces: Kbd, Tag, Tooltip, menus, toasts. Not a card."
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"name": "--color-surface-raised",
|
|
439
|
+
"layer": "semantic",
|
|
440
|
+
"value": {
|
|
441
|
+
"dark": "rgba(40, 52, 69, 0.42)",
|
|
442
|
+
"light": "rgba(255, 255, 255, 0.6)"
|
|
443
|
+
},
|
|
444
|
+
"use": "The translucent fill of a Card or panel sitting on the page. Use the Card component; do not paint it by hand, and avoid nesting raised inside raised."
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"name": "--color-surface-scrim",
|
|
448
|
+
"layer": "semantic",
|
|
449
|
+
"value": {
|
|
450
|
+
"dark": "rgba(0, 0, 0, 0.6)",
|
|
451
|
+
"light": "rgba(11, 14, 19, 0.48)"
|
|
452
|
+
},
|
|
453
|
+
"use": "The dimming layer behind a Dialog, Sheet or CommandPalette. Those components paint it; nothing else should.",
|
|
454
|
+
"measured": {
|
|
455
|
+
"dark": "Dims the page behind a dialog, sheet or the command palette. The dimmed page is inert and hidden from assistive tech and carries no contrast obligation of its own. Toasts render inside the innermost open overlay's own outlet: one raised while it is open, and every one already showing when it opens, which moves in and is announced again. They stay inside the focus trap and visible to assistive tech; the next Escape closes the overlay unless focus is inside the toast.",
|
|
456
|
+
"light": "Dims the page behind a dialog, sheet or the command palette. The dimmed page is inert and hidden from assistive tech and carries no contrast obligation of its own. Toasts render inside the innermost open overlay's own outlet: one raised while it is open, and every one already showing when it opens, which moves in and is announced again. They stay inside the focus trap and visible to assistive tech; the next Escape closes the overlay unless focus is inside the toast."
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"name": "--color-border-hairline",
|
|
461
|
+
"layer": "semantic",
|
|
462
|
+
"value": {
|
|
463
|
+
"dark": "rgba(214, 226, 240, 0.16)",
|
|
464
|
+
"light": "rgba(11, 14, 19, 0.12)"
|
|
465
|
+
},
|
|
466
|
+
"use": "A quiet divider or panel edge that carries no information: row separators, card outlines."
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"name": "--color-border-hairline-strong",
|
|
470
|
+
"layer": "semantic",
|
|
471
|
+
"value": {
|
|
472
|
+
"dark": "rgba(214, 226, 240, 0.32)",
|
|
473
|
+
"light": "rgba(11, 14, 19, 0.22)"
|
|
474
|
+
},
|
|
475
|
+
"use": "A stronger decorative rule: table header underlines, section rules. Still decorative, never the only sign of a control.",
|
|
476
|
+
"measured": {
|
|
477
|
+
"dark": "Decorative only — panel edges and the corner-crosshair chrome. Deliberately subtle; composited over surface.base it reaches 2.39:1, which carries no SC 1.4.11 obligation. Never use it for a form control's boundary; that is border.control.",
|
|
478
|
+
"light": "Decorative only — panel edges and the corner-crosshair chrome. Deliberately subtle; composited over surface.base it reaches 1.64:1, which carries no SC 1.4.11 obligation. Never use it for a form control's boundary; that is border.control."
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"name": "--color-border-control",
|
|
483
|
+
"layer": "semantic",
|
|
484
|
+
"value": {
|
|
485
|
+
"dark": "#646b72",
|
|
486
|
+
"light": "#616874"
|
|
487
|
+
},
|
|
488
|
+
"use": "The boundary of an interactive control at rest (Input, Select, secondary Button). The one border that has to be seen to find the control.",
|
|
489
|
+
"measured": {
|
|
490
|
+
"dark": "3.53:1 on surface.sunken (the control fill it is painted on) and 3.71:1 on surface.base — the INFORMATIONAL hairline, the one SC 1.4.11 governs. Opaque rather than alpha so the boundary holds whatever surface it lands on.",
|
|
491
|
+
"light": "3.49:1 on surface.sunken (the control fill it is painted on) and 5.10:1 on surface.base — the INFORMATIONAL hairline, the one SC 1.4.11 governs. Opaque rather than alpha so the boundary holds whatever surface it lands on."
|
|
492
|
+
}
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"name": "--color-border-selection",
|
|
496
|
+
"layer": "semantic",
|
|
497
|
+
"value": {
|
|
498
|
+
"dark": "#8a939e",
|
|
499
|
+
"light": "#616874"
|
|
500
|
+
},
|
|
501
|
+
"use": "The boundary of the small selection controls at rest: Checkbox, Radio, Switch track.",
|
|
502
|
+
"measured": {
|
|
503
|
+
"dark": "The boundary of the small selection controls (Checkbox, Radio, Switch track) at rest. 6.12:1 on surface.sunken. Brighter than border.control (3.53:1) on purpose: a 20px box drawn with the same hairline as a 320px input carries a fraction of the edge length, and at 3.53:1 an unchecked checkbox all but vanished on the dark page. border.control stays the hairline for the large fields.",
|
|
504
|
+
"light": "The boundary of the small selection controls (Checkbox, Radio, Switch track) at rest. Same value as border.control in this theme (3.49:1 on surface.sunken), which reads clearly on a light page; the token exists in both themes because dark needed its own brighter step."
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"name": "--color-text-primary",
|
|
509
|
+
"layer": "semantic",
|
|
510
|
+
"value": {
|
|
511
|
+
"dark": "#e9eef4",
|
|
512
|
+
"light": "#0b0e13"
|
|
513
|
+
},
|
|
514
|
+
"use": "Body text, headings, values. The default text colour."
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"name": "--color-text-secondary",
|
|
518
|
+
"layer": "semantic",
|
|
519
|
+
"value": {
|
|
520
|
+
"dark": "#a3adba",
|
|
521
|
+
"light": "#19212c"
|
|
522
|
+
},
|
|
523
|
+
"use": "Supporting text beside primary text: descriptions, help text, metadata. Keep it at 14px or larger."
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
"name": "--color-text-muted",
|
|
527
|
+
"layer": "semantic",
|
|
528
|
+
"value": {
|
|
529
|
+
"dark": "#7b8592",
|
|
530
|
+
"light": "#283445"
|
|
531
|
+
},
|
|
532
|
+
"use": "The quietest readable text: captions, timestamps, disabled-looking labels. Not for anything the user must read to act.",
|
|
533
|
+
"measured": {
|
|
534
|
+
"dark": "Raised 2026-09-21 from #6f7a88 (4.59:1 on surface.base, but only 4.00:1 on surface.raised composited over surface.base — a real SC 1.4.11 failure once that pair was actually gated). Now 5.35:1 on surface.base and 4.66:1 on surface.raised."
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"name": "--color-text-placeholder",
|
|
539
|
+
"layer": "semantic",
|
|
540
|
+
"value": {
|
|
541
|
+
"dark": "#747f8d",
|
|
542
|
+
"light": "#283445"
|
|
543
|
+
},
|
|
544
|
+
"use": "Placeholder text inside a control, on surface.sunken. Only there.",
|
|
545
|
+
"measured": {
|
|
546
|
+
"dark": "4.68:1 on surface.sunken, which is the control fill placeholder text is actually painted on. text.muted is gated against surface.base and passes there at 4.59:1, but reaches only 4.37:1 on the sunken fill — so placeholder needs its own step.",
|
|
547
|
+
"light": "7.83:1 on surface.sunken, the control fill it is painted on. Light theme needs no separate step from text.muted — unlike dark, where muted reaches only 4.37:1 there — but the name exists in both themes so the component layer has one alias to point at."
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"name": "--color-text-label",
|
|
552
|
+
"layer": "semantic",
|
|
553
|
+
"value": {
|
|
554
|
+
"dark": "#6f7a88",
|
|
555
|
+
"light": "#445875"
|
|
556
|
+
},
|
|
557
|
+
"use": "Group labels that head a list of items (the command palette's group titles). Uppercase mono, never body text.",
|
|
558
|
+
"measured": {
|
|
559
|
+
"dark": "Group and section labels that must read as a heading over a list, not as another item in it (the sidebar's GUIDELINES / ATOMS). 4.59:1 on surface.base against text.secondary's 8.82:1 for the items beneath: the gap in luminance is the point. Sits just above the AA floor on purpose; gated.",
|
|
560
|
+
"light": "Group and section labels that must read as a heading over a list, not as another item in it (the sidebar's GUIDELINES / ATOMS). 6.58:1 on surface.base against text.secondary's 14.72:1. Exists because light text.muted (11.44:1) sits too close to text.secondary to separate a label from the links under it. Gated."
|
|
561
|
+
}
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
"name": "--color-accent-signal-fill",
|
|
565
|
+
"layer": "semantic",
|
|
566
|
+
"value": "#f2550f",
|
|
567
|
+
"use": "A solid block in the brand orange: the primary Button, a solid signal Badge. Put accent.signal.ink on it, never text.primary."
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"name": "--color-accent-signal-text",
|
|
571
|
+
"layer": "semantic",
|
|
572
|
+
"value": {
|
|
573
|
+
"dark": "#f2550f",
|
|
574
|
+
"light": "#983508"
|
|
575
|
+
},
|
|
576
|
+
"use": "Orange text or icon on a surface: a current nav item, an emphasised figure, a link accent.",
|
|
577
|
+
"measured": {
|
|
578
|
+
"dark": "5.80:1 on surface.base",
|
|
579
|
+
"light": "6.70:1 on surface.base -- promoted a step from dark theme's 500, because 500 only reaches 3.14:1 on the light base"
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"name": "--color-accent-signal-ink",
|
|
584
|
+
"layer": "semantic",
|
|
585
|
+
"value": "#0a0602",
|
|
586
|
+
"use": "Text and icons on accent.signal.fill.",
|
|
587
|
+
"measured": {
|
|
588
|
+
"dark": "5.85:1 on accent.signal.fill"
|
|
589
|
+
}
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
"name": "--color-accent-signal-wash",
|
|
593
|
+
"layer": "semantic",
|
|
594
|
+
"value": "rgba(242, 85, 15, 0.12)",
|
|
595
|
+
"use": "The faint orange hover wash under a nav item or an inactive tab.",
|
|
596
|
+
"measured": {
|
|
597
|
+
"dark": "Hover wash under a nav item or an inactive tab. Text on it is text.primary and gated. The focus ring and a checked control's fill drop under 3:1 on it in light theme, so neither is ever drawn on it.",
|
|
598
|
+
"light": "Hover wash under a nav item or an inactive tab. Text on it is text.primary and gated. The focus ring and a checked control's fill drop under 3:1 on it in light theme, so neither is ever drawn on it."
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"name": "--color-accent-signal-glow",
|
|
603
|
+
"layer": "semantic",
|
|
604
|
+
"value": {
|
|
605
|
+
"dark": "rgba(242, 85, 15, 0.38)",
|
|
606
|
+
"light": "rgba(242, 85, 15, 0.3)"
|
|
607
|
+
},
|
|
608
|
+
"use": "The faint shadow of an interactive Card on hover and focus. Used by the Card component only.",
|
|
609
|
+
"measured": {
|
|
610
|
+
"dark": "The colour of the faint shadow an interactive Card casts on hover and on keyboard focus inside it (.card-interactive, src/styles/elevation.css): signal.500 at part strength, on the near-black page a shadow this strong reads as a soft halo. A shadow, never a fill, a border or text: it bounds nothing and carries no state on its own (the border beside it does, in accent.signal.fill), so it owes no ratio and has no pair in the gate.",
|
|
611
|
+
"light": "The colour of the faint shadow an interactive Card casts on hover and on keyboard focus inside it (.card-interactive, src/styles/elevation.css): signal.500 at part strength, a little weaker than dark: on the pale page the same alpha reads as a stain. A shadow, never a fill, a border or text: it bounds nothing and carries no state on its own (the border beside it does, in accent.signal.fill), so it owes no ratio and has no pair in the gate."
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"name": "--color-accent-hostile-fill",
|
|
616
|
+
"layer": "semantic",
|
|
617
|
+
"value": "#f33636",
|
|
618
|
+
"use": "A solid block for danger or failure: the danger Button, a solid hostile Badge. Put accent.hostile.ink on it."
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"name": "--color-accent-hostile-text",
|
|
622
|
+
"layer": "semantic",
|
|
623
|
+
"value": {
|
|
624
|
+
"dark": "#f55b5b",
|
|
625
|
+
"light": "#ae0a0a"
|
|
626
|
+
},
|
|
627
|
+
"use": "Error and destructive text or icon on a surface: field errors, an invalid border, a failed status.",
|
|
628
|
+
"measured": {
|
|
629
|
+
"dark": "6.23:1 on surface.base, 5.42:1 on surface.raised, 4.80:1 on raised nested in raised, 5.92:1 on surface.sunken. hostile.500 measured 4.48:1 on surface.raised, under 4.5:1.",
|
|
630
|
+
"light": "6.70:1 on surface.base"
|
|
631
|
+
}
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
"name": "--color-accent-hostile-ink",
|
|
635
|
+
"layer": "semantic",
|
|
636
|
+
"value": "#0a0602",
|
|
637
|
+
"use": "Text and icons on accent.hostile.fill.",
|
|
638
|
+
"measured": {
|
|
639
|
+
"dark": "5.19:1 on accent.hostile.fill",
|
|
640
|
+
"light": "5.19:1 on accent.hostile.fill"
|
|
641
|
+
}
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"name": "--color-accent-ok-fill",
|
|
645
|
+
"layer": "semantic",
|
|
646
|
+
"value": "#2fb577",
|
|
647
|
+
"use": "A solid block for success or a healthy state. Put accent.ok.ink on it."
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
"name": "--color-accent-ok-text",
|
|
651
|
+
"layer": "semantic",
|
|
652
|
+
"value": {
|
|
653
|
+
"dark": "#2fb577",
|
|
654
|
+
"light": "#1d714b"
|
|
655
|
+
},
|
|
656
|
+
"use": "Success text or icon on a surface: a positive delta, an in-stock status.",
|
|
657
|
+
"measured": {
|
|
658
|
+
"dark": "7.63:1 on surface.base",
|
|
659
|
+
"light": "5.42:1 on surface.base"
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"name": "--color-accent-ok-ink",
|
|
664
|
+
"layer": "semantic",
|
|
665
|
+
"value": "#0a0602",
|
|
666
|
+
"use": "Text and icons on accent.ok.fill.",
|
|
667
|
+
"measured": {
|
|
668
|
+
"dark": "7.69:1 on accent.ok.fill",
|
|
669
|
+
"light": "7.69:1 on accent.ok.fill"
|
|
670
|
+
}
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"name": "--color-accent-info-fill",
|
|
674
|
+
"layer": "semantic",
|
|
675
|
+
"value": "#5aa7ff",
|
|
676
|
+
"use": "A solid block for neutral information. Put accent.info.ink on it."
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"name": "--color-accent-info-text",
|
|
680
|
+
"layer": "semantic",
|
|
681
|
+
"value": {
|
|
682
|
+
"dark": "#5aa7ff",
|
|
683
|
+
"light": "#0063d5"
|
|
684
|
+
},
|
|
685
|
+
"use": "Informational text or icon on a surface: an in-progress status, a note.",
|
|
686
|
+
"measured": {
|
|
687
|
+
"dark": "8.02:1 on surface.base",
|
|
688
|
+
"light": "5.09:1 on surface.base"
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
"name": "--color-accent-info-ink",
|
|
693
|
+
"layer": "semantic",
|
|
694
|
+
"value": "#0a0602",
|
|
695
|
+
"use": "Text and icons on accent.info.fill.",
|
|
696
|
+
"measured": {
|
|
697
|
+
"dark": "8.08:1 on accent.info.fill",
|
|
698
|
+
"light": "8.08:1 on accent.info.fill"
|
|
699
|
+
}
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
"name": "--color-accent-warning-fill",
|
|
703
|
+
"layer": "semantic",
|
|
704
|
+
"value": "#ffac2a",
|
|
705
|
+
"use": "A solid block for a warning or a degraded state. Put accent.warning.ink on it."
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"name": "--color-accent-warning-text",
|
|
709
|
+
"layer": "semantic",
|
|
710
|
+
"value": {
|
|
711
|
+
"dark": "#ffac2a",
|
|
712
|
+
"light": "#804e00"
|
|
713
|
+
},
|
|
714
|
+
"use": "Warning text or icon on a surface: a pending or degraded status.",
|
|
715
|
+
"measured": {
|
|
716
|
+
"dark": "10.67:1 on surface.base",
|
|
717
|
+
"light": "6.34:1 on surface.base -- needs two steps, not one; 700 only reaches 3.56:1"
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"name": "--color-accent-warning-ink",
|
|
722
|
+
"layer": "semantic",
|
|
723
|
+
"value": "#0a0602",
|
|
724
|
+
"use": "Text and icons on accent.warning.fill.",
|
|
725
|
+
"measured": {
|
|
726
|
+
"dark": "10.76:1 on accent.warning.fill",
|
|
727
|
+
"light": "10.76:1 on accent.warning.fill"
|
|
728
|
+
}
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
"name": "--color-numeral-pad",
|
|
732
|
+
"layer": "semantic",
|
|
733
|
+
"value": {
|
|
734
|
+
"dark": "#7b8592",
|
|
735
|
+
"light": "#627da4"
|
|
736
|
+
},
|
|
737
|
+
"use": "The dimmed leading zeros of a hero numeral. Decorative; never text that has to be read.",
|
|
738
|
+
"measured": {
|
|
739
|
+
"dark": "The dimmed leading-zero pad on a hero numeral (Overview, Progress readout, docs section index). Decorative and aria-hidden: it is a column width, never a value, so no SC 1.4.3 obligation attaches to it. 5.35:1 on surface.base, which is 31% of text.primary's 17.17:1 there -- that share, not the absolute ratio, is what makes it read as padding rather than as a digit. Holds the same value text.muted holds in this theme and is deliberately NOT an alias of it: text.muted is real secondary text with an AA floor, and the two move for different reasons.",
|
|
740
|
+
"light": "The dimmed leading-zero pad. 3.82:1 on surface.base, 22% of text.primary's 17.55:1 there, against the dark theme's 31%. Light theme needs a LIGHTER step than text.muted for the same role: muted aliases neutral.500 and measures 11.44:1 here, 65% of ink, which does not read as dimmed and out-shouts the signal.fill numeral it is padding (3.14:1 on this surface). neutral.400 would land at 6.58:1 and 38% of ink, closer to dark's share but more than twice the contrast of the digits beside it, so neutral.300 is the step that keeps the pad quieter than what it pads."
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
"name": "--color-focus-ring",
|
|
745
|
+
"layer": "semantic",
|
|
746
|
+
"value": "#f2550f",
|
|
747
|
+
"use": "The keyboard focus outline. Use it only in focus-visible:outline-[var(--color-focus-ring)], with a 2px outline and a 2px offset."
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
"name": "--color-chart-series-1",
|
|
751
|
+
"layer": "semantic",
|
|
752
|
+
"value": {
|
|
753
|
+
"dark": "#f2550f",
|
|
754
|
+
"light": "#c6440b"
|
|
755
|
+
},
|
|
756
|
+
"use": "The first data series in a chart. A graphic colour, never text. ChartPanel applies it.",
|
|
757
|
+
"measured": {
|
|
758
|
+
"dark": "First chart series: a line, a bar, a legend swatch. A graphic, 3:1: 5.80:1 on surface.base, 5.05:1 on surface.raised, 4.47:1 nested. Never text.",
|
|
759
|
+
"light": "First chart series: a line, a bar, a legend swatch. A graphic, 3:1: 4.51:1 on surface.base, 4.79:1 on surface.raised, 4.88:1 nested. Never text."
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
"name": "--color-chart-series-2",
|
|
764
|
+
"layer": "semantic",
|
|
765
|
+
"value": {
|
|
766
|
+
"dark": "#1884ff",
|
|
767
|
+
"light": "#0063d5"
|
|
768
|
+
},
|
|
769
|
+
"use": "The second data series in a chart. A graphic colour, never text. There is no third: split the chart.",
|
|
770
|
+
"measured": {
|
|
771
|
+
"dark": "Second chart series. 5.52:1 on surface.base, 4.80:1 on surface.raised, 4.25:1 nested. Never text. There is no third: the other hues are status colours.",
|
|
772
|
+
"light": "Second chart series. 5.09:1 on surface.base, 5.41:1 on surface.raised, 5.52:1 nested. Never text. There is no third: the other hues are status colours."
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
"name": "--component-control-height-sm",
|
|
777
|
+
"layer": "component",
|
|
778
|
+
"value": "32px",
|
|
779
|
+
"use": "Height of a small control (32px): a compact Button, an Input in a dense row."
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"name": "--component-control-height-md",
|
|
783
|
+
"layer": "component",
|
|
784
|
+
"value": "40px",
|
|
785
|
+
"use": "Height of a default control (40px). What Button, Input and Select use unless told otherwise."
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"name": "--component-control-height-lg",
|
|
789
|
+
"layer": "component",
|
|
790
|
+
"value": "48px",
|
|
791
|
+
"use": "Height of a large control (48px): the main action of a page or a touch-first form."
|
|
792
|
+
},
|
|
793
|
+
{
|
|
794
|
+
"name": "--component-control-border-rest",
|
|
795
|
+
"layer": "component",
|
|
796
|
+
"value": "var(--color-border-control)",
|
|
797
|
+
"use": "A text control's border at rest. Set by Input, Textarea and Select."
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"name": "--component-control-border-hover",
|
|
801
|
+
"layer": "component",
|
|
802
|
+
"value": "var(--color-text-muted)",
|
|
803
|
+
"use": "A text control's border under the pointer."
|
|
804
|
+
},
|
|
805
|
+
{
|
|
806
|
+
"name": "--component-control-border-invalid",
|
|
807
|
+
"layer": "component",
|
|
808
|
+
"value": "var(--color-accent-hostile-text)",
|
|
809
|
+
"use": "A control's border when its field has an error. Set through the invalid prop, which FormField passes."
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
"name": "--component-control-border-selection",
|
|
813
|
+
"layer": "component",
|
|
814
|
+
"value": "var(--color-border-selection)",
|
|
815
|
+
"use": "The border of Checkbox, Radio and Switch at rest."
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
"name": "--component-control-border-selection-hover",
|
|
819
|
+
"layer": "component",
|
|
820
|
+
"value": "var(--color-text-secondary)",
|
|
821
|
+
"use": "The border of Checkbox, Radio and Switch under the pointer."
|
|
822
|
+
},
|
|
823
|
+
{
|
|
824
|
+
"name": "--component-control-border-disabled",
|
|
825
|
+
"layer": "component",
|
|
826
|
+
"value": "var(--color-border-control)",
|
|
827
|
+
"use": "A disabled control's border."
|
|
828
|
+
},
|
|
829
|
+
{
|
|
830
|
+
"name": "--component-control-indicator-checked",
|
|
831
|
+
"layer": "component",
|
|
832
|
+
"value": "var(--color-accent-signal-text)",
|
|
833
|
+
"use": "The colour of a selection control in its chosen state: a checked Checkbox, a selected Radio, an on Switch."
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"name": "--component-control-progress-fill-ok",
|
|
837
|
+
"layer": "component",
|
|
838
|
+
"value": "var(--color-accent-ok-text)",
|
|
839
|
+
"use": "A Progress bar's fill at tone ok."
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
"name": "--component-control-progress-fill-warning",
|
|
843
|
+
"layer": "component",
|
|
844
|
+
"value": "var(--color-accent-warning-text)",
|
|
845
|
+
"use": "A Progress bar's fill at tone warning."
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"name": "--component-control-progress-fill-hostile",
|
|
849
|
+
"layer": "component",
|
|
850
|
+
"value": "var(--color-accent-hostile-text)",
|
|
851
|
+
"use": "A Progress bar's fill at tone hostile."
|
|
852
|
+
},
|
|
853
|
+
{
|
|
854
|
+
"name": "--component-control-fill-rest",
|
|
855
|
+
"layer": "component",
|
|
856
|
+
"value": "var(--color-surface-sunken)",
|
|
857
|
+
"use": "A text control's fill."
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
"name": "--component-control-fill-disabled",
|
|
861
|
+
"layer": "component",
|
|
862
|
+
"value": "var(--color-surface-raised)",
|
|
863
|
+
"use": "A disabled control's fill."
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
"name": "--component-control-text-rest",
|
|
867
|
+
"layer": "component",
|
|
868
|
+
"value": "var(--color-text-primary)",
|
|
869
|
+
"use": "The text typed into a control."
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
"name": "--component-control-text-placeholder",
|
|
873
|
+
"layer": "component",
|
|
874
|
+
"value": "var(--color-text-placeholder)",
|
|
875
|
+
"use": "A control's placeholder text."
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
"name": "--component-control-text-disabled",
|
|
879
|
+
"layer": "component",
|
|
880
|
+
"value": "var(--color-text-muted)",
|
|
881
|
+
"use": "A disabled control's text."
|
|
882
|
+
},
|
|
883
|
+
{
|
|
884
|
+
"name": "--component-button-primary-fill",
|
|
885
|
+
"layer": "component",
|
|
886
|
+
"value": "var(--color-accent-signal-fill)",
|
|
887
|
+
"use": "The primary Button's fill. Use the Button; do not rebuild it."
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
"name": "--component-button-primary-text",
|
|
891
|
+
"layer": "component",
|
|
892
|
+
"value": "var(--color-accent-signal-ink)",
|
|
893
|
+
"use": "The primary Button's label."
|
|
894
|
+
},
|
|
895
|
+
{
|
|
896
|
+
"name": "--component-button-danger-fill",
|
|
897
|
+
"layer": "component",
|
|
898
|
+
"value": "var(--color-accent-hostile-fill)",
|
|
899
|
+
"use": "The danger Button's fill."
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
"name": "--component-button-danger-text",
|
|
903
|
+
"layer": "component",
|
|
904
|
+
"value": "var(--color-accent-hostile-ink)",
|
|
905
|
+
"use": "The danger Button's label."
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"name": "--component-button-secondary-border",
|
|
909
|
+
"layer": "component",
|
|
910
|
+
"value": "var(--color-border-control)",
|
|
911
|
+
"use": "The secondary Button's border."
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
"name": "--component-button-secondary-text",
|
|
915
|
+
"layer": "component",
|
|
916
|
+
"value": "var(--color-text-primary)",
|
|
917
|
+
"use": "The secondary Button's label."
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
"name": "--component-button-ghost-text",
|
|
921
|
+
"layer": "component",
|
|
922
|
+
"value": "var(--color-text-secondary)",
|
|
923
|
+
"use": "The ghost Button's label at rest."
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
"name": "--component-button-ghost-text-hover",
|
|
927
|
+
"layer": "component",
|
|
928
|
+
"value": "var(--color-text-primary)",
|
|
929
|
+
"use": "The ghost Button's label under the pointer."
|
|
930
|
+
}
|
|
931
|
+
]
|
|
932
|
+
}
|