@kenlo/kdls-design-system 2.7.0 → 2.9.1

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.
@@ -1,8 +1,1063 @@
1
+ /* Manrope — the default typeface, self-hosted inside the package.
2
+ GENERATED by scripts/gen-font.mjs — do not hand-edit. Run `npm run gen:font`.
3
+
4
+ Google's unicode-range lines are kept untouched, so a page downloads only the subset
5
+ it actually needs rather than every one.
6
+
7
+ @font-face and not @import: @import only counts before every other rule and is
8
+ dropped anywhere else, which is how the font used to disappear under Tailwind v4.
9
+
10
+ Local URLs, and these .woff2 ship in the npm package: the default must not
11
+ depend on any network beyond the app itself.
12
+
13
+ Licences: fonts/OFL.txt */
14
+
15
+ /* manrope · cyrillic-ext — 2.5KB */
16
+ @font-face {
17
+ font-family: 'Manrope';
18
+ font-style: normal;
19
+ font-weight: 200 800;
20
+ font-display: swap;
21
+ src: url('./fonts/manrope-cyrillic-ext.woff2') format('woff2');
22
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
23
+ }
24
+
25
+ /* manrope · cyrillic — 14.2KB */
26
+ @font-face {
27
+ font-family: 'Manrope';
28
+ font-style: normal;
29
+ font-weight: 200 800;
30
+ font-display: swap;
31
+ src: url('./fonts/manrope-cyrillic.woff2') format('woff2');
32
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
33
+ }
34
+
35
+ /* manrope · greek — 9.1KB */
36
+ @font-face {
37
+ font-family: 'Manrope';
38
+ font-style: normal;
39
+ font-weight: 200 800;
40
+ font-display: swap;
41
+ src: url('./fonts/manrope-greek.woff2') format('woff2');
42
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
43
+ }
44
+
45
+ /* manrope · vietnamese — 8.3KB */
46
+ @font-face {
47
+ font-family: 'Manrope';
48
+ font-style: normal;
49
+ font-weight: 200 800;
50
+ font-display: swap;
51
+ src: url('./fonts/manrope-vietnamese.woff2') format('woff2');
52
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
53
+ }
54
+
55
+ /* manrope · latin-ext — 14.9KB */
56
+ @font-face {
57
+ font-family: 'Manrope';
58
+ font-style: normal;
59
+ font-weight: 200 800;
60
+ font-display: swap;
61
+ src: url('./fonts/manrope-latin-ext.woff2') format('woff2');
62
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
63
+ }
64
+
65
+ /* manrope · latin — 24.0KB */
66
+ @font-face {
67
+ font-family: 'Manrope';
68
+ font-style: normal;
69
+ font-weight: 200 800;
70
+ font-display: swap;
71
+ src: url('./fonts/manrope-latin.woff2') format('woff2');
72
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
73
+ }
74
+
75
+ /* Optional data-font families, served from Kenlo infrastructure.
76
+ GENERATED by scripts/gen-font.mjs — do not hand-edit. Run `npm run gen:font`.
77
+
78
+ Google's unicode-range lines are kept untouched, so a page downloads only the subset
79
+ it actually needs rather than every one.
80
+
81
+ @font-face and not @import: @import only counts before every other rule and is
82
+ dropped anywhere else, which is how the font used to disappear under Tailwind v4.
83
+
84
+ These .woff2 are NOT in the npm package — they are published to Kenlo's bucket
85
+ by CI and shared with the SDS. Opt-in families should not weigh on consumers
86
+ that never select one.
87
+
88
+ Licences: fonts/OFL.txt */
89
+
90
+ /* inter · cyrillic-ext — 25.2KB */
91
+ @font-face {
92
+ font-family: 'Inter';
93
+ font-style: normal;
94
+ font-weight: 400;
95
+ font-display: swap;
96
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic-ext.woff2') format('woff2');
97
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
98
+ }
99
+
100
+ /* inter · cyrillic — 18.3KB */
101
+ @font-face {
102
+ font-family: 'Inter';
103
+ font-style: normal;
104
+ font-weight: 400;
105
+ font-display: swap;
106
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic.woff2') format('woff2');
107
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
108
+ }
109
+
110
+ /* inter · greek-ext — 11.0KB */
111
+ @font-face {
112
+ font-family: 'Inter';
113
+ font-style: normal;
114
+ font-weight: 400;
115
+ font-display: swap;
116
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek-ext.woff2') format('woff2');
117
+ unicode-range: U+1F00-1FFF;
118
+ }
119
+
120
+ /* inter · greek — 18.6KB */
121
+ @font-face {
122
+ font-family: 'Inter';
123
+ font-style: normal;
124
+ font-weight: 400;
125
+ font-display: swap;
126
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek.woff2') format('woff2');
127
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
128
+ }
129
+
130
+ /* inter · vietnamese — 10.0KB */
131
+ @font-face {
132
+ font-family: 'Inter';
133
+ font-style: normal;
134
+ font-weight: 400;
135
+ font-display: swap;
136
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-vietnamese.woff2') format('woff2');
137
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
138
+ }
139
+
140
+ /* inter · latin-ext — 83.3KB */
141
+ @font-face {
142
+ font-family: 'Inter';
143
+ font-style: normal;
144
+ font-weight: 400;
145
+ font-display: swap;
146
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin-ext.woff2') format('woff2');
147
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
148
+ }
149
+
150
+ /* inter · latin — 47.3KB */
151
+ @font-face {
152
+ font-family: 'Inter';
153
+ font-style: normal;
154
+ font-weight: 400;
155
+ font-display: swap;
156
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin.woff2') format('woff2');
157
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
158
+ }
159
+
160
+ /* inter · cyrillic-ext — 25.2KB */
161
+ @font-face {
162
+ font-family: 'Inter';
163
+ font-style: normal;
164
+ font-weight: 500;
165
+ font-display: swap;
166
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic-ext.woff2') format('woff2');
167
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
168
+ }
169
+
170
+ /* inter · cyrillic — 18.3KB */
171
+ @font-face {
172
+ font-family: 'Inter';
173
+ font-style: normal;
174
+ font-weight: 500;
175
+ font-display: swap;
176
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic.woff2') format('woff2');
177
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
178
+ }
179
+
180
+ /* inter · greek-ext — 11.0KB */
181
+ @font-face {
182
+ font-family: 'Inter';
183
+ font-style: normal;
184
+ font-weight: 500;
185
+ font-display: swap;
186
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek-ext.woff2') format('woff2');
187
+ unicode-range: U+1F00-1FFF;
188
+ }
189
+
190
+ /* inter · greek — 18.6KB */
191
+ @font-face {
192
+ font-family: 'Inter';
193
+ font-style: normal;
194
+ font-weight: 500;
195
+ font-display: swap;
196
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek.woff2') format('woff2');
197
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
198
+ }
199
+
200
+ /* inter · vietnamese — 10.0KB */
201
+ @font-face {
202
+ font-family: 'Inter';
203
+ font-style: normal;
204
+ font-weight: 500;
205
+ font-display: swap;
206
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-vietnamese.woff2') format('woff2');
207
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
208
+ }
209
+
210
+ /* inter · latin-ext — 83.3KB */
211
+ @font-face {
212
+ font-family: 'Inter';
213
+ font-style: normal;
214
+ font-weight: 500;
215
+ font-display: swap;
216
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin-ext.woff2') format('woff2');
217
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
218
+ }
219
+
220
+ /* inter · latin — 47.3KB */
221
+ @font-face {
222
+ font-family: 'Inter';
223
+ font-style: normal;
224
+ font-weight: 500;
225
+ font-display: swap;
226
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin.woff2') format('woff2');
227
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
228
+ }
229
+
230
+ /* inter · cyrillic-ext — 25.2KB */
231
+ @font-face {
232
+ font-family: 'Inter';
233
+ font-style: normal;
234
+ font-weight: 600;
235
+ font-display: swap;
236
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic-ext.woff2') format('woff2');
237
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
238
+ }
239
+
240
+ /* inter · cyrillic — 18.3KB */
241
+ @font-face {
242
+ font-family: 'Inter';
243
+ font-style: normal;
244
+ font-weight: 600;
245
+ font-display: swap;
246
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic.woff2') format('woff2');
247
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
248
+ }
249
+
250
+ /* inter · greek-ext — 11.0KB */
251
+ @font-face {
252
+ font-family: 'Inter';
253
+ font-style: normal;
254
+ font-weight: 600;
255
+ font-display: swap;
256
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek-ext.woff2') format('woff2');
257
+ unicode-range: U+1F00-1FFF;
258
+ }
259
+
260
+ /* inter · greek — 18.6KB */
261
+ @font-face {
262
+ font-family: 'Inter';
263
+ font-style: normal;
264
+ font-weight: 600;
265
+ font-display: swap;
266
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek.woff2') format('woff2');
267
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
268
+ }
269
+
270
+ /* inter · vietnamese — 10.0KB */
271
+ @font-face {
272
+ font-family: 'Inter';
273
+ font-style: normal;
274
+ font-weight: 600;
275
+ font-display: swap;
276
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-vietnamese.woff2') format('woff2');
277
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
278
+ }
279
+
280
+ /* inter · latin-ext — 83.3KB */
281
+ @font-face {
282
+ font-family: 'Inter';
283
+ font-style: normal;
284
+ font-weight: 600;
285
+ font-display: swap;
286
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin-ext.woff2') format('woff2');
287
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
288
+ }
289
+
290
+ /* inter · latin — 47.3KB */
291
+ @font-face {
292
+ font-family: 'Inter';
293
+ font-style: normal;
294
+ font-weight: 600;
295
+ font-display: swap;
296
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin.woff2') format('woff2');
297
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
298
+ }
299
+
300
+ /* inter · cyrillic-ext — 25.2KB */
301
+ @font-face {
302
+ font-family: 'Inter';
303
+ font-style: normal;
304
+ font-weight: 700;
305
+ font-display: swap;
306
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic-ext.woff2') format('woff2');
307
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
308
+ }
309
+
310
+ /* inter · cyrillic — 18.3KB */
311
+ @font-face {
312
+ font-family: 'Inter';
313
+ font-style: normal;
314
+ font-weight: 700;
315
+ font-display: swap;
316
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-cyrillic.woff2') format('woff2');
317
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
318
+ }
319
+
320
+ /* inter · greek-ext — 11.0KB */
321
+ @font-face {
322
+ font-family: 'Inter';
323
+ font-style: normal;
324
+ font-weight: 700;
325
+ font-display: swap;
326
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek-ext.woff2') format('woff2');
327
+ unicode-range: U+1F00-1FFF;
328
+ }
329
+
330
+ /* inter · greek — 18.6KB */
331
+ @font-face {
332
+ font-family: 'Inter';
333
+ font-style: normal;
334
+ font-weight: 700;
335
+ font-display: swap;
336
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-greek.woff2') format('woff2');
337
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
338
+ }
339
+
340
+ /* inter · vietnamese — 10.0KB */
341
+ @font-face {
342
+ font-family: 'Inter';
343
+ font-style: normal;
344
+ font-weight: 700;
345
+ font-display: swap;
346
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-vietnamese.woff2') format('woff2');
347
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
348
+ }
349
+
350
+ /* inter · latin-ext — 83.3KB */
351
+ @font-face {
352
+ font-family: 'Inter';
353
+ font-style: normal;
354
+ font-weight: 700;
355
+ font-display: swap;
356
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin-ext.woff2') format('woff2');
357
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
358
+ }
359
+
360
+ /* inter · latin — 47.3KB */
361
+ @font-face {
362
+ font-family: 'Inter';
363
+ font-style: normal;
364
+ font-weight: 700;
365
+ font-display: swap;
366
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/inter-latin.woff2') format('woff2');
367
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
368
+ }
369
+
370
+ /* montserrat · cyrillic-ext — 23.5KB */
371
+ @font-face {
372
+ font-family: 'Montserrat';
373
+ font-style: normal;
374
+ font-weight: 400;
375
+ font-display: swap;
376
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic-ext.woff2') format('woff2');
377
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
378
+ }
379
+
380
+ /* montserrat · cyrillic — 21.0KB */
381
+ @font-face {
382
+ font-family: 'Montserrat';
383
+ font-style: normal;
384
+ font-weight: 400;
385
+ font-display: swap;
386
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic.woff2') format('woff2');
387
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
388
+ }
389
+
390
+ /* montserrat · vietnamese — 10.4KB */
391
+ @font-face {
392
+ font-family: 'Montserrat';
393
+ font-style: normal;
394
+ font-weight: 400;
395
+ font-display: swap;
396
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-vietnamese.woff2') format('woff2');
397
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
398
+ }
399
+
400
+ /* montserrat · latin-ext — 66.6KB */
401
+ @font-face {
402
+ font-family: 'Montserrat';
403
+ font-style: normal;
404
+ font-weight: 400;
405
+ font-display: swap;
406
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin-ext.woff2') format('woff2');
407
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
408
+ }
409
+
410
+ /* montserrat · latin — 34.7KB */
411
+ @font-face {
412
+ font-family: 'Montserrat';
413
+ font-style: normal;
414
+ font-weight: 400;
415
+ font-display: swap;
416
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin.woff2') format('woff2');
417
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
418
+ }
419
+
420
+ /* montserrat · cyrillic-ext — 23.5KB */
421
+ @font-face {
422
+ font-family: 'Montserrat';
423
+ font-style: normal;
424
+ font-weight: 500;
425
+ font-display: swap;
426
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic-ext.woff2') format('woff2');
427
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
428
+ }
429
+
430
+ /* montserrat · cyrillic — 21.0KB */
431
+ @font-face {
432
+ font-family: 'Montserrat';
433
+ font-style: normal;
434
+ font-weight: 500;
435
+ font-display: swap;
436
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic.woff2') format('woff2');
437
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
438
+ }
439
+
440
+ /* montserrat · vietnamese — 10.4KB */
441
+ @font-face {
442
+ font-family: 'Montserrat';
443
+ font-style: normal;
444
+ font-weight: 500;
445
+ font-display: swap;
446
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-vietnamese.woff2') format('woff2');
447
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
448
+ }
449
+
450
+ /* montserrat · latin-ext — 66.6KB */
451
+ @font-face {
452
+ font-family: 'Montserrat';
453
+ font-style: normal;
454
+ font-weight: 500;
455
+ font-display: swap;
456
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin-ext.woff2') format('woff2');
457
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
458
+ }
459
+
460
+ /* montserrat · latin — 34.7KB */
461
+ @font-face {
462
+ font-family: 'Montserrat';
463
+ font-style: normal;
464
+ font-weight: 500;
465
+ font-display: swap;
466
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin.woff2') format('woff2');
467
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
468
+ }
469
+
470
+ /* montserrat · cyrillic-ext — 23.5KB */
471
+ @font-face {
472
+ font-family: 'Montserrat';
473
+ font-style: normal;
474
+ font-weight: 600;
475
+ font-display: swap;
476
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic-ext.woff2') format('woff2');
477
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
478
+ }
479
+
480
+ /* montserrat · cyrillic — 21.0KB */
481
+ @font-face {
482
+ font-family: 'Montserrat';
483
+ font-style: normal;
484
+ font-weight: 600;
485
+ font-display: swap;
486
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic.woff2') format('woff2');
487
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
488
+ }
489
+
490
+ /* montserrat · vietnamese — 10.4KB */
491
+ @font-face {
492
+ font-family: 'Montserrat';
493
+ font-style: normal;
494
+ font-weight: 600;
495
+ font-display: swap;
496
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-vietnamese.woff2') format('woff2');
497
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
498
+ }
499
+
500
+ /* montserrat · latin-ext — 66.6KB */
501
+ @font-face {
502
+ font-family: 'Montserrat';
503
+ font-style: normal;
504
+ font-weight: 600;
505
+ font-display: swap;
506
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin-ext.woff2') format('woff2');
507
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
508
+ }
509
+
510
+ /* montserrat · latin — 34.7KB */
511
+ @font-face {
512
+ font-family: 'Montserrat';
513
+ font-style: normal;
514
+ font-weight: 600;
515
+ font-display: swap;
516
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin.woff2') format('woff2');
517
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
518
+ }
519
+
520
+ /* montserrat · cyrillic-ext — 23.5KB */
521
+ @font-face {
522
+ font-family: 'Montserrat';
523
+ font-style: normal;
524
+ font-weight: 700;
525
+ font-display: swap;
526
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic-ext.woff2') format('woff2');
527
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
528
+ }
529
+
530
+ /* montserrat · cyrillic — 21.0KB */
531
+ @font-face {
532
+ font-family: 'Montserrat';
533
+ font-style: normal;
534
+ font-weight: 700;
535
+ font-display: swap;
536
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-cyrillic.woff2') format('woff2');
537
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
538
+ }
539
+
540
+ /* montserrat · vietnamese — 10.4KB */
541
+ @font-face {
542
+ font-family: 'Montserrat';
543
+ font-style: normal;
544
+ font-weight: 700;
545
+ font-display: swap;
546
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-vietnamese.woff2') format('woff2');
547
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
548
+ }
549
+
550
+ /* montserrat · latin-ext — 66.6KB */
551
+ @font-face {
552
+ font-family: 'Montserrat';
553
+ font-style: normal;
554
+ font-weight: 700;
555
+ font-display: swap;
556
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin-ext.woff2') format('woff2');
557
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
558
+ }
559
+
560
+ /* montserrat · latin — 34.7KB */
561
+ @font-face {
562
+ font-family: 'Montserrat';
563
+ font-style: normal;
564
+ font-weight: 700;
565
+ font-display: swap;
566
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/montserrat-latin.woff2') format('woff2');
567
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
568
+ }
569
+
570
+ /* nunito · cyrillic-ext — 28.2KB */
571
+ @font-face {
572
+ font-family: 'Nunito';
573
+ font-style: normal;
574
+ font-weight: 400;
575
+ font-display: swap;
576
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic-ext.woff2') format('woff2');
577
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
578
+ }
579
+
580
+ /* nunito · cyrillic — 20.3KB */
581
+ @font-face {
582
+ font-family: 'Nunito';
583
+ font-style: normal;
584
+ font-weight: 400;
585
+ font-display: swap;
586
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic.woff2') format('woff2');
587
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
588
+ }
589
+
590
+ /* nunito · vietnamese — 12.7KB */
591
+ @font-face {
592
+ font-family: 'Nunito';
593
+ font-style: normal;
594
+ font-weight: 400;
595
+ font-display: swap;
596
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-vietnamese.woff2') format('woff2');
597
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
598
+ }
599
+
600
+ /* nunito · latin-ext — 34.6KB */
601
+ @font-face {
602
+ font-family: 'Nunito';
603
+ font-style: normal;
604
+ font-weight: 400;
605
+ font-display: swap;
606
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin-ext.woff2') format('woff2');
607
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
608
+ }
609
+
610
+ /* nunito · latin — 38.2KB */
611
+ @font-face {
612
+ font-family: 'Nunito';
613
+ font-style: normal;
614
+ font-weight: 400;
615
+ font-display: swap;
616
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin.woff2') format('woff2');
617
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
618
+ }
619
+
620
+ /* nunito · cyrillic-ext — 28.2KB */
621
+ @font-face {
622
+ font-family: 'Nunito';
623
+ font-style: normal;
624
+ font-weight: 500;
625
+ font-display: swap;
626
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic-ext.woff2') format('woff2');
627
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
628
+ }
629
+
630
+ /* nunito · cyrillic — 20.3KB */
631
+ @font-face {
632
+ font-family: 'Nunito';
633
+ font-style: normal;
634
+ font-weight: 500;
635
+ font-display: swap;
636
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic.woff2') format('woff2');
637
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
638
+ }
639
+
640
+ /* nunito · vietnamese — 12.7KB */
641
+ @font-face {
642
+ font-family: 'Nunito';
643
+ font-style: normal;
644
+ font-weight: 500;
645
+ font-display: swap;
646
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-vietnamese.woff2') format('woff2');
647
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
648
+ }
649
+
650
+ /* nunito · latin-ext — 34.6KB */
651
+ @font-face {
652
+ font-family: 'Nunito';
653
+ font-style: normal;
654
+ font-weight: 500;
655
+ font-display: swap;
656
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin-ext.woff2') format('woff2');
657
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
658
+ }
659
+
660
+ /* nunito · latin — 38.2KB */
661
+ @font-face {
662
+ font-family: 'Nunito';
663
+ font-style: normal;
664
+ font-weight: 500;
665
+ font-display: swap;
666
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin.woff2') format('woff2');
667
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
668
+ }
669
+
670
+ /* nunito · cyrillic-ext — 28.2KB */
671
+ @font-face {
672
+ font-family: 'Nunito';
673
+ font-style: normal;
674
+ font-weight: 600;
675
+ font-display: swap;
676
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic-ext.woff2') format('woff2');
677
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
678
+ }
679
+
680
+ /* nunito · cyrillic — 20.3KB */
681
+ @font-face {
682
+ font-family: 'Nunito';
683
+ font-style: normal;
684
+ font-weight: 600;
685
+ font-display: swap;
686
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic.woff2') format('woff2');
687
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
688
+ }
689
+
690
+ /* nunito · vietnamese — 12.7KB */
691
+ @font-face {
692
+ font-family: 'Nunito';
693
+ font-style: normal;
694
+ font-weight: 600;
695
+ font-display: swap;
696
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-vietnamese.woff2') format('woff2');
697
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
698
+ }
699
+
700
+ /* nunito · latin-ext — 34.6KB */
701
+ @font-face {
702
+ font-family: 'Nunito';
703
+ font-style: normal;
704
+ font-weight: 600;
705
+ font-display: swap;
706
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin-ext.woff2') format('woff2');
707
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
708
+ }
709
+
710
+ /* nunito · latin — 38.2KB */
711
+ @font-face {
712
+ font-family: 'Nunito';
713
+ font-style: normal;
714
+ font-weight: 600;
715
+ font-display: swap;
716
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin.woff2') format('woff2');
717
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
718
+ }
719
+
720
+ /* nunito · cyrillic-ext — 28.2KB */
721
+ @font-face {
722
+ font-family: 'Nunito';
723
+ font-style: normal;
724
+ font-weight: 700;
725
+ font-display: swap;
726
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic-ext.woff2') format('woff2');
727
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
728
+ }
729
+
730
+ /* nunito · cyrillic — 20.3KB */
731
+ @font-face {
732
+ font-family: 'Nunito';
733
+ font-style: normal;
734
+ font-weight: 700;
735
+ font-display: swap;
736
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-cyrillic.woff2') format('woff2');
737
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
738
+ }
739
+
740
+ /* nunito · vietnamese — 12.7KB */
741
+ @font-face {
742
+ font-family: 'Nunito';
743
+ font-style: normal;
744
+ font-weight: 700;
745
+ font-display: swap;
746
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-vietnamese.woff2') format('woff2');
747
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
748
+ }
749
+
750
+ /* nunito · latin-ext — 34.6KB */
751
+ @font-face {
752
+ font-family: 'Nunito';
753
+ font-style: normal;
754
+ font-weight: 700;
755
+ font-display: swap;
756
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin-ext.woff2') format('woff2');
757
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
758
+ }
759
+
760
+ /* nunito · latin — 38.2KB */
761
+ @font-face {
762
+ font-family: 'Nunito';
763
+ font-style: normal;
764
+ font-weight: 700;
765
+ font-display: swap;
766
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/nunito-latin.woff2') format('woff2');
767
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
768
+ }
769
+
770
+ /* source-sans-3 · cyrillic-ext — 10.4KB */
771
+ @font-face {
772
+ font-family: 'Source Sans 3';
773
+ font-style: normal;
774
+ font-weight: 400;
775
+ font-display: swap;
776
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic-ext.woff2') format('woff2');
777
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
778
+ }
779
+
780
+ /* source-sans-3 · cyrillic — 18.0KB */
781
+ @font-face {
782
+ font-family: 'Source Sans 3';
783
+ font-style: normal;
784
+ font-weight: 400;
785
+ font-display: swap;
786
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic.woff2') format('woff2');
787
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
788
+ }
789
+
790
+ /* source-sans-3 · greek-ext — 9.6KB */
791
+ @font-face {
792
+ font-family: 'Source Sans 3';
793
+ font-style: normal;
794
+ font-weight: 400;
795
+ font-display: swap;
796
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek-ext.woff2') format('woff2');
797
+ unicode-range: U+1F00-1FFF;
798
+ }
799
+
800
+ /* source-sans-3 · greek — 14.2KB */
801
+ @font-face {
802
+ font-family: 'Source Sans 3';
803
+ font-style: normal;
804
+ font-weight: 400;
805
+ font-display: swap;
806
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek.woff2') format('woff2');
807
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
808
+ }
809
+
810
+ /* source-sans-3 · vietnamese — 10.1KB */
811
+ @font-face {
812
+ font-family: 'Source Sans 3';
813
+ font-style: normal;
814
+ font-weight: 400;
815
+ font-display: swap;
816
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-vietnamese.woff2') format('woff2');
817
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
818
+ }
819
+
820
+ /* source-sans-3 · latin-ext — 58.6KB */
821
+ @font-face {
822
+ font-family: 'Source Sans 3';
823
+ font-style: normal;
824
+ font-weight: 400;
825
+ font-display: swap;
826
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin-ext.woff2') format('woff2');
827
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
828
+ }
829
+
830
+ /* source-sans-3 · latin — 28.1KB */
831
+ @font-face {
832
+ font-family: 'Source Sans 3';
833
+ font-style: normal;
834
+ font-weight: 400;
835
+ font-display: swap;
836
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin.woff2') format('woff2');
837
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
838
+ }
839
+
840
+ /* source-sans-3 · cyrillic-ext — 10.4KB */
841
+ @font-face {
842
+ font-family: 'Source Sans 3';
843
+ font-style: normal;
844
+ font-weight: 500;
845
+ font-display: swap;
846
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic-ext.woff2') format('woff2');
847
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
848
+ }
849
+
850
+ /* source-sans-3 · cyrillic — 18.0KB */
851
+ @font-face {
852
+ font-family: 'Source Sans 3';
853
+ font-style: normal;
854
+ font-weight: 500;
855
+ font-display: swap;
856
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic.woff2') format('woff2');
857
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
858
+ }
859
+
860
+ /* source-sans-3 · greek-ext — 9.6KB */
861
+ @font-face {
862
+ font-family: 'Source Sans 3';
863
+ font-style: normal;
864
+ font-weight: 500;
865
+ font-display: swap;
866
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek-ext.woff2') format('woff2');
867
+ unicode-range: U+1F00-1FFF;
868
+ }
869
+
870
+ /* source-sans-3 · greek — 14.2KB */
871
+ @font-face {
872
+ font-family: 'Source Sans 3';
873
+ font-style: normal;
874
+ font-weight: 500;
875
+ font-display: swap;
876
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek.woff2') format('woff2');
877
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
878
+ }
879
+
880
+ /* source-sans-3 · vietnamese — 10.1KB */
881
+ @font-face {
882
+ font-family: 'Source Sans 3';
883
+ font-style: normal;
884
+ font-weight: 500;
885
+ font-display: swap;
886
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-vietnamese.woff2') format('woff2');
887
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
888
+ }
889
+
890
+ /* source-sans-3 · latin-ext — 58.6KB */
891
+ @font-face {
892
+ font-family: 'Source Sans 3';
893
+ font-style: normal;
894
+ font-weight: 500;
895
+ font-display: swap;
896
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin-ext.woff2') format('woff2');
897
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
898
+ }
899
+
900
+ /* source-sans-3 · latin — 28.1KB */
901
+ @font-face {
902
+ font-family: 'Source Sans 3';
903
+ font-style: normal;
904
+ font-weight: 500;
905
+ font-display: swap;
906
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin.woff2') format('woff2');
907
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
908
+ }
909
+
910
+ /* source-sans-3 · cyrillic-ext — 10.4KB */
911
+ @font-face {
912
+ font-family: 'Source Sans 3';
913
+ font-style: normal;
914
+ font-weight: 600;
915
+ font-display: swap;
916
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic-ext.woff2') format('woff2');
917
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
918
+ }
919
+
920
+ /* source-sans-3 · cyrillic — 18.0KB */
921
+ @font-face {
922
+ font-family: 'Source Sans 3';
923
+ font-style: normal;
924
+ font-weight: 600;
925
+ font-display: swap;
926
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic.woff2') format('woff2');
927
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
928
+ }
929
+
930
+ /* source-sans-3 · greek-ext — 9.6KB */
931
+ @font-face {
932
+ font-family: 'Source Sans 3';
933
+ font-style: normal;
934
+ font-weight: 600;
935
+ font-display: swap;
936
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek-ext.woff2') format('woff2');
937
+ unicode-range: U+1F00-1FFF;
938
+ }
939
+
940
+ /* source-sans-3 · greek — 14.2KB */
941
+ @font-face {
942
+ font-family: 'Source Sans 3';
943
+ font-style: normal;
944
+ font-weight: 600;
945
+ font-display: swap;
946
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek.woff2') format('woff2');
947
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
948
+ }
949
+
950
+ /* source-sans-3 · vietnamese — 10.1KB */
951
+ @font-face {
952
+ font-family: 'Source Sans 3';
953
+ font-style: normal;
954
+ font-weight: 600;
955
+ font-display: swap;
956
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-vietnamese.woff2') format('woff2');
957
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
958
+ }
959
+
960
+ /* source-sans-3 · latin-ext — 58.6KB */
961
+ @font-face {
962
+ font-family: 'Source Sans 3';
963
+ font-style: normal;
964
+ font-weight: 600;
965
+ font-display: swap;
966
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin-ext.woff2') format('woff2');
967
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
968
+ }
969
+
970
+ /* source-sans-3 · latin — 28.1KB */
971
+ @font-face {
972
+ font-family: 'Source Sans 3';
973
+ font-style: normal;
974
+ font-weight: 600;
975
+ font-display: swap;
976
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin.woff2') format('woff2');
977
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
978
+ }
979
+
980
+ /* source-sans-3 · cyrillic-ext — 10.4KB */
981
+ @font-face {
982
+ font-family: 'Source Sans 3';
983
+ font-style: normal;
984
+ font-weight: 700;
985
+ font-display: swap;
986
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic-ext.woff2') format('woff2');
987
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
988
+ }
989
+
990
+ /* source-sans-3 · cyrillic — 18.0KB */
991
+ @font-face {
992
+ font-family: 'Source Sans 3';
993
+ font-style: normal;
994
+ font-weight: 700;
995
+ font-display: swap;
996
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-cyrillic.woff2') format('woff2');
997
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
998
+ }
999
+
1000
+ /* source-sans-3 · greek-ext — 9.6KB */
1001
+ @font-face {
1002
+ font-family: 'Source Sans 3';
1003
+ font-style: normal;
1004
+ font-weight: 700;
1005
+ font-display: swap;
1006
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek-ext.woff2') format('woff2');
1007
+ unicode-range: U+1F00-1FFF;
1008
+ }
1009
+
1010
+ /* source-sans-3 · greek — 14.2KB */
1011
+ @font-face {
1012
+ font-family: 'Source Sans 3';
1013
+ font-style: normal;
1014
+ font-weight: 700;
1015
+ font-display: swap;
1016
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-greek.woff2') format('woff2');
1017
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
1018
+ }
1019
+
1020
+ /* source-sans-3 · vietnamese — 10.1KB */
1021
+ @font-face {
1022
+ font-family: 'Source Sans 3';
1023
+ font-style: normal;
1024
+ font-weight: 700;
1025
+ font-display: swap;
1026
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-vietnamese.woff2') format('woff2');
1027
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
1028
+ }
1029
+
1030
+ /* source-sans-3 · latin-ext — 58.6KB */
1031
+ @font-face {
1032
+ font-family: 'Source Sans 3';
1033
+ font-style: normal;
1034
+ font-weight: 700;
1035
+ font-display: swap;
1036
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin-ext.woff2') format('woff2');
1037
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
1038
+ }
1039
+
1040
+ /* source-sans-3 · latin — 28.1KB */
1041
+ @font-face {
1042
+ font-family: 'Source Sans 3';
1043
+ font-style: normal;
1044
+ font-weight: 700;
1045
+ font-display: swap;
1046
+ src: url('https://storage.googleapis.com/kenlo-open-docs/kdls-design-system/assets/fonts/source-sans-3-latin.woff2') format('woff2');
1047
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
1048
+ }
1049
+
1
1050
  /* Source for foundations/tokens.css — run `npm run gen:tokens` after editing.
2
1051
  No usage-rule comments here — token usage rules live in
3
1052
  .claude/tokens-reference.md. General component rules: .claude/component-rules.md. */
4
- @import url("https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap");
5
- @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Montserrat:wght@400;500;600;700&family=Nunito:wght@400;500;600;700&family=Source+Sans+3:wght@400;500;600;700&display=swap");
1053
+ /* Relative luminance + contrast ratio per WCAG 2.1 (§ relative luminance,
1054
+ § contrast minimum). `on-color()` returns whichever of white/black scores
1055
+ higher against the given background — the auto-contrast primitive behind
1056
+ every `--color-on-*-*` token below. */
1057
+ /* Worst-case-safe pick across one or more backgrounds (a gradient passes all
1058
+ of its stops, so the winner is the one that survives the hardest stop). */
1059
+ /* Populated by the `color-family` mixin so late-declared derivations (Lya,
1060
+ which is a gradient over Sea/Dusk/Tertiary) can read the raw values back. */
6
1061
  /* -------------------------------SEMANTIC ALIASES------------------------------- */
7
1062
  :root {
8
1063
  --color-white: #ffffff;
@@ -13,171 +1068,49 @@
13
1068
  --border-static-color: var(--color-neutral-20);
14
1069
  --placeholder-color: var(--color-neutral-50);
15
1070
  --focus-stroke-color: var(--color-neutral-90-00);
1071
+ /* The whole focus ring, not just its colour: two layers, a gap in the surface
1072
+ colour so the stroke never touches the element. Written once here instead of
1073
+ being retyped per component — retyping is what let the ring drift apart
1074
+ (outward in one nav control, inset in the one beside it). Composable, so a
1075
+ component that already carries a shadow appends it:
1076
+ `box-shadow: inset 0 0 0 5px var(--color-primary-50), var(--focus-ring);` */
1077
+ --focus-ring: 0 0 0 2px var(--component-bg-color), 0 0 0 4px var(--focus-stroke-color);
1078
+ --focus-ring-inset: inset 0 0 0 2px var(--component-bg-color),
1079
+ inset 0 0 0 4px var(--focus-stroke-color);
16
1080
  }
17
1081
 
18
1082
  /* ------------------------------------------------------------------------------ */
19
- /* --------------------------------COLOR SCHEMES--------------------------------- */
20
- [data-color-scheme="neutral"] {
21
- --color-primary-10: var(--color-neutral-10);
22
- --color-primary-20: var(--color-neutral-20);
23
- --color-primary-30: var(--color-neutral-30);
24
- --color-primary-40: var(--color-neutral-50);
25
- --color-primary-50: var(--color-neutral-80);
26
- --color-primary-60: var(--color-neutral-90);
27
- --color-primary-70: var(--color-neutral-90);
28
- --color-primary-80: var(--color-neutral-90);
29
- --color-primary-90: var(--color-neutral-90);
30
- }
31
-
32
- /* Map key = attribute value; tuple = (source family, force --color-on-primary: black?) */
33
- [data-color-scheme="secondary"] {
34
- --color-primary-10: var(--color-secondary-10);
35
- --color-primary-20: var(--color-secondary-20);
36
- --color-primary-30: var(--color-secondary-30);
37
- --color-primary-40: var(--color-secondary-40);
38
- --color-primary-50: var(--color-secondary-50);
39
- --color-primary-60: var(--color-secondary-60);
40
- --color-primary-70: var(--color-secondary-70);
41
- --color-primary-80: var(--color-secondary-80);
42
- --color-primary-90: var(--color-secondary-90);
43
- }
44
-
45
- [data-color-scheme="tertiary"] {
46
- --color-primary-10: var(--color-tertiary-10);
47
- --color-primary-20: var(--color-tertiary-20);
48
- --color-primary-30: var(--color-tertiary-30);
49
- --color-primary-40: var(--color-tertiary-40);
50
- --color-primary-50: var(--color-tertiary-50);
51
- --color-primary-60: var(--color-tertiary-60);
52
- --color-primary-70: var(--color-tertiary-70);
53
- --color-primary-80: var(--color-tertiary-80);
54
- --color-primary-90: var(--color-tertiary-90);
55
- }
56
-
57
- [data-color-scheme="lya"] {
58
- --color-primary-10: var(--color-lya-10);
59
- --color-primary-20: var(--color-lya-20);
60
- --color-primary-30: var(--color-lya-30);
61
- --color-primary-40: var(--color-lya-40);
62
- --color-primary-50: var(--color-lya-50);
63
- --color-primary-60: var(--color-lya-60);
64
- --color-primary-70: var(--color-lya-70);
65
- --color-primary-80: var(--color-lya-80);
66
- --color-primary-90: var(--color-lya-90);
67
- }
68
-
69
- [data-color-scheme="leaf"] {
70
- --color-primary-10: var(--color-leaf-10);
71
- --color-primary-20: var(--color-leaf-20);
72
- --color-primary-30: var(--color-leaf-30);
73
- --color-primary-40: var(--color-leaf-40);
74
- --color-primary-50: var(--color-leaf-50);
75
- --color-primary-60: var(--color-leaf-60);
76
- --color-primary-70: var(--color-leaf-70);
77
- --color-primary-80: var(--color-leaf-80);
78
- --color-primary-90: var(--color-leaf-90);
79
- --color-on-primary: var(--color-black);
80
- }
81
-
82
- [data-color-scheme="sand"] {
83
- --color-primary-10: var(--color-sand-10);
84
- --color-primary-20: var(--color-sand-20);
85
- --color-primary-30: var(--color-sand-30);
86
- --color-primary-40: var(--color-sand-40);
87
- --color-primary-50: var(--color-sand-50);
88
- --color-primary-60: var(--color-sand-60);
89
- --color-primary-70: var(--color-sand-70);
90
- --color-primary-80: var(--color-sand-80);
91
- --color-primary-90: var(--color-sand-90);
92
- --color-on-primary: var(--color-black);
93
- }
94
-
95
- [data-color-scheme="wood"] {
96
- --color-primary-10: var(--color-wood-10);
97
- --color-primary-20: var(--color-wood-20);
98
- --color-primary-30: var(--color-wood-30);
99
- --color-primary-40: var(--color-wood-40);
100
- --color-primary-50: var(--color-wood-50);
101
- --color-primary-60: var(--color-wood-60);
102
- --color-primary-70: var(--color-wood-70);
103
- --color-primary-80: var(--color-wood-80);
104
- --color-primary-90: var(--color-wood-90);
105
- }
106
-
107
- [data-color-scheme="clay"] {
108
- --color-primary-10: var(--color-clay-10);
109
- --color-primary-20: var(--color-clay-20);
110
- --color-primary-30: var(--color-clay-30);
111
- --color-primary-40: var(--color-clay-40);
112
- --color-primary-50: var(--color-clay-50);
113
- --color-primary-60: var(--color-clay-60);
114
- --color-primary-70: var(--color-clay-70);
115
- --color-primary-80: var(--color-clay-80);
116
- --color-primary-90: var(--color-clay-90);
117
- }
118
-
119
- [data-color-scheme="flower"] {
120
- --color-primary-10: var(--color-flower-10);
121
- --color-primary-20: var(--color-flower-20);
122
- --color-primary-30: var(--color-flower-30);
123
- --color-primary-40: var(--color-flower-40);
124
- --color-primary-50: var(--color-flower-50);
125
- --color-primary-60: var(--color-flower-60);
126
- --color-primary-70: var(--color-flower-70);
127
- --color-primary-80: var(--color-flower-80);
128
- --color-primary-90: var(--color-flower-90);
129
- }
130
-
131
- [data-color-scheme="dusk"] {
132
- --color-primary-10: var(--color-dusk-10);
133
- --color-primary-20: var(--color-dusk-20);
134
- --color-primary-30: var(--color-dusk-30);
135
- --color-primary-40: var(--color-dusk-40);
136
- --color-primary-50: var(--color-dusk-50);
137
- --color-primary-60: var(--color-dusk-60);
138
- --color-primary-70: var(--color-dusk-70);
139
- --color-primary-80: var(--color-dusk-80);
140
- --color-primary-90: var(--color-dusk-90);
141
- }
142
-
143
- [data-color-scheme="sky"] {
144
- --color-primary-10: var(--color-sky-10);
145
- --color-primary-20: var(--color-sky-20);
146
- --color-primary-30: var(--color-sky-30);
147
- --color-primary-40: var(--color-sky-40);
148
- --color-primary-50: var(--color-sky-50);
149
- --color-primary-60: var(--color-sky-60);
150
- --color-primary-70: var(--color-sky-70);
151
- --color-primary-80: var(--color-sky-80);
152
- --color-primary-90: var(--color-sky-90);
153
- }
154
-
155
- [data-color-scheme="sea"] {
156
- --color-primary-10: var(--color-sea-10);
157
- --color-primary-20: var(--color-sea-20);
158
- --color-primary-30: var(--color-sea-30);
159
- --color-primary-40: var(--color-sea-40);
160
- --color-primary-50: var(--color-sea-50);
161
- --color-primary-60: var(--color-sea-60);
162
- --color-primary-70: var(--color-sea-70);
163
- --color-primary-80: var(--color-sea-80);
164
- --color-primary-90: var(--color-sea-90);
1083
+ /* -----------------------------------NEUTRAL------------------------------------ */
1084
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1085
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1086
+ math as the background it answers to — in dark the background resolves to
1087
+ the complementary step, so the on-color is computed from that same step. */
1088
+ :root {
1089
+ --color-on-neutral-00: var(--color-black);
1090
+ --color-on-neutral-10: var(--color-black);
1091
+ --color-on-neutral-20: var(--color-black);
1092
+ --color-on-neutral-30: var(--color-black);
1093
+ --color-on-neutral-40: var(--color-black);
1094
+ --color-on-neutral-50: var(--color-black);
1095
+ --color-on-neutral-60: var(--color-white);
1096
+ --color-on-neutral-70: var(--color-white);
1097
+ --color-on-neutral-80: var(--color-white);
1098
+ --color-on-neutral-90: var(--color-white);
165
1099
  }
166
1100
 
167
- [data-color-scheme="lake"] {
168
- --color-primary-10: var(--color-lake-10);
169
- --color-primary-20: var(--color-lake-20);
170
- --color-primary-30: var(--color-lake-30);
171
- --color-primary-40: var(--color-lake-40);
172
- --color-primary-50: var(--color-lake-50);
173
- --color-primary-60: var(--color-lake-60);
174
- --color-primary-70: var(--color-lake-70);
175
- --color-primary-80: var(--color-lake-80);
176
- --color-primary-90: var(--color-lake-90);
1101
+ [data-theme="dark"] {
1102
+ --color-on-neutral-00: var(--color-white);
1103
+ --color-on-neutral-10: var(--color-white);
1104
+ --color-on-neutral-20: var(--color-white);
1105
+ --color-on-neutral-30: var(--color-white);
1106
+ --color-on-neutral-40: var(--color-black);
1107
+ --color-on-neutral-50: var(--color-black);
1108
+ --color-on-neutral-60: var(--color-black);
1109
+ --color-on-neutral-70: var(--color-black);
1110
+ --color-on-neutral-80: var(--color-black);
1111
+ --color-on-neutral-90: var(--color-black);
177
1112
  }
178
1113
 
179
- /* ------------------------------------------------------------------------------ */
180
- /* -----------------------------------NEUTRAL------------------------------------ */
181
1114
  :root {
182
1115
  --color-neutral-00-90: #ffffff;
183
1116
  --color-neutral-10-80: #f2f2f2;
@@ -239,6 +1172,34 @@
239
1172
 
240
1173
  /* ------------------------------------------------------------------------------ */
241
1174
  /* -----------------------------------PRIMARY------------------------------------ */
1175
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1176
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1177
+ math as the background it answers to — in dark the background resolves to
1178
+ the complementary step, so the on-color is computed from that same step. */
1179
+ :root {
1180
+ --color-on-primary-10: var(--color-black);
1181
+ --color-on-primary-20: var(--color-black);
1182
+ --color-on-primary-30: var(--color-black);
1183
+ --color-on-primary-40: var(--color-black);
1184
+ --color-on-primary-50: var(--color-black);
1185
+ --color-on-primary-60: var(--color-white);
1186
+ --color-on-primary-70: var(--color-white);
1187
+ --color-on-primary-80: var(--color-white);
1188
+ --color-on-primary-90: var(--color-white);
1189
+ }
1190
+
1191
+ [data-theme="dark"] {
1192
+ --color-on-primary-10: var(--color-white);
1193
+ --color-on-primary-20: var(--color-white);
1194
+ --color-on-primary-30: var(--color-white);
1195
+ --color-on-primary-40: var(--color-white);
1196
+ --color-on-primary-50: var(--color-black);
1197
+ --color-on-primary-60: var(--color-black);
1198
+ --color-on-primary-70: var(--color-black);
1199
+ --color-on-primary-80: var(--color-black);
1200
+ --color-on-primary-90: var(--color-black);
1201
+ }
1202
+
242
1203
  :root {
243
1204
  --color-primary-10-90: #d1e7fa;
244
1205
  --color-primary-20-80: #a3cff5;
@@ -294,6 +1255,34 @@
294
1255
  }
295
1256
 
296
1257
  /* ------------------------------------------------------------------------------ */
1258
+ /* Kenlo Blue is Primary made immune to `data-color-scheme` — it still mirrors
1259
+ across the theme boundary like any other family, so its on-color is derived
1260
+ per theme from the same step the background resolves to. It cannot simply
1261
+ alias `--color-on-primary-*`: that one IS remapped by the active scheme. */
1262
+ :root {
1263
+ --color-on-kenlo-blue-10: var(--color-black);
1264
+ --color-on-kenlo-blue-20: var(--color-black);
1265
+ --color-on-kenlo-blue-30: var(--color-black);
1266
+ --color-on-kenlo-blue-40: var(--color-black);
1267
+ --color-on-kenlo-blue-50: var(--color-black);
1268
+ --color-on-kenlo-blue-60: var(--color-white);
1269
+ --color-on-kenlo-blue-70: var(--color-white);
1270
+ --color-on-kenlo-blue-80: var(--color-white);
1271
+ --color-on-kenlo-blue-90: var(--color-white);
1272
+ }
1273
+
1274
+ [data-theme="dark"] {
1275
+ --color-on-kenlo-blue-10: var(--color-white);
1276
+ --color-on-kenlo-blue-20: var(--color-white);
1277
+ --color-on-kenlo-blue-30: var(--color-white);
1278
+ --color-on-kenlo-blue-40: var(--color-white);
1279
+ --color-on-kenlo-blue-50: var(--color-black);
1280
+ --color-on-kenlo-blue-60: var(--color-black);
1281
+ --color-on-kenlo-blue-70: var(--color-black);
1282
+ --color-on-kenlo-blue-80: var(--color-black);
1283
+ --color-on-kenlo-blue-90: var(--color-black);
1284
+ }
1285
+
297
1286
  :root {
298
1287
  --color-kenlo-blue-10: var(--color-primary-10-90);
299
1288
  --color-kenlo-blue-20: var(--color-primary-20-80);
@@ -307,6 +1296,34 @@
307
1296
  }
308
1297
 
309
1298
  /* ----------------------------------SECONDARY----------------------------------- */
1299
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1300
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1301
+ math as the background it answers to — in dark the background resolves to
1302
+ the complementary step, so the on-color is computed from that same step. */
1303
+ :root {
1304
+ --color-on-secondary-10: var(--color-black);
1305
+ --color-on-secondary-20: var(--color-black);
1306
+ --color-on-secondary-30: var(--color-black);
1307
+ --color-on-secondary-40: var(--color-black);
1308
+ --color-on-secondary-50: var(--color-black);
1309
+ --color-on-secondary-60: var(--color-white);
1310
+ --color-on-secondary-70: var(--color-white);
1311
+ --color-on-secondary-80: var(--color-white);
1312
+ --color-on-secondary-90: var(--color-white);
1313
+ }
1314
+
1315
+ [data-theme="dark"] {
1316
+ --color-on-secondary-10: var(--color-white);
1317
+ --color-on-secondary-20: var(--color-white);
1318
+ --color-on-secondary-30: var(--color-white);
1319
+ --color-on-secondary-40: var(--color-white);
1320
+ --color-on-secondary-50: var(--color-black);
1321
+ --color-on-secondary-60: var(--color-black);
1322
+ --color-on-secondary-70: var(--color-black);
1323
+ --color-on-secondary-80: var(--color-black);
1324
+ --color-on-secondary-90: var(--color-black);
1325
+ }
1326
+
310
1327
  :root {
311
1328
  --color-secondary-10-90: #fccfde;
312
1329
  --color-secondary-20-80: #fa9ebd;
@@ -363,6 +1380,34 @@
363
1380
 
364
1381
  /* ------------------------------------------------------------------------------ */
365
1382
  /* -----------------------------------TERTIARY----------------------------------- */
1383
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1384
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1385
+ math as the background it answers to — in dark the background resolves to
1386
+ the complementary step, so the on-color is computed from that same step. */
1387
+ :root {
1388
+ --color-on-tertiary-10: var(--color-black);
1389
+ --color-on-tertiary-20: var(--color-black);
1390
+ --color-on-tertiary-30: var(--color-black);
1391
+ --color-on-tertiary-40: var(--color-black);
1392
+ --color-on-tertiary-50: var(--color-white);
1393
+ --color-on-tertiary-60: var(--color-white);
1394
+ --color-on-tertiary-70: var(--color-white);
1395
+ --color-on-tertiary-80: var(--color-white);
1396
+ --color-on-tertiary-90: var(--color-white);
1397
+ }
1398
+
1399
+ [data-theme="dark"] {
1400
+ --color-on-tertiary-10: var(--color-white);
1401
+ --color-on-tertiary-20: var(--color-white);
1402
+ --color-on-tertiary-30: var(--color-white);
1403
+ --color-on-tertiary-40: var(--color-white);
1404
+ --color-on-tertiary-50: var(--color-white);
1405
+ --color-on-tertiary-60: var(--color-black);
1406
+ --color-on-tertiary-70: var(--color-black);
1407
+ --color-on-tertiary-80: var(--color-black);
1408
+ --color-on-tertiary-90: var(--color-black);
1409
+ }
1410
+
366
1411
  :root {
367
1412
  --color-tertiary-10-90: #ebdbf0;
368
1413
  --color-tertiary-20-80: #d6b8e0;
@@ -476,8 +1521,42 @@
476
1521
  );
477
1522
  }
478
1523
 
1524
+ /* ------------------------------------------------------------------------------ */
1525
+ /* ---------------------------------LYA ON-COLOR--------------------------------- */
1526
+ /* Lya has no solid background of its own, so its on-color is the one that still
1527
+ passes against the HARDEST of the three gradient stops, not against an average.
1528
+ Emitted here rather than in the block above because it reads Sea, Dusk and
1529
+ Tertiary back out of `$family-values` — all three are declared further down. */
479
1530
  /* ------------------------------------------------------------------------------ */
480
1531
  /* ------------------------------FEEDBACK - SUCCESS------------------------------ */
1532
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1533
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1534
+ math as the background it answers to — in dark the background resolves to
1535
+ the complementary step, so the on-color is computed from that same step. */
1536
+ :root {
1537
+ --color-on-success-10: var(--color-black);
1538
+ --color-on-success-20: var(--color-black);
1539
+ --color-on-success-30: var(--color-black);
1540
+ --color-on-success-40: var(--color-black);
1541
+ --color-on-success-50: var(--color-black);
1542
+ --color-on-success-60: var(--color-black);
1543
+ --color-on-success-70: var(--color-white);
1544
+ --color-on-success-80: var(--color-white);
1545
+ --color-on-success-90: var(--color-white);
1546
+ }
1547
+
1548
+ [data-theme="dark"] {
1549
+ --color-on-success-10: var(--color-white);
1550
+ --color-on-success-20: var(--color-white);
1551
+ --color-on-success-30: var(--color-white);
1552
+ --color-on-success-40: var(--color-black);
1553
+ --color-on-success-50: var(--color-black);
1554
+ --color-on-success-60: var(--color-black);
1555
+ --color-on-success-70: var(--color-black);
1556
+ --color-on-success-80: var(--color-black);
1557
+ --color-on-success-90: var(--color-black);
1558
+ }
1559
+
481
1560
  :root {
482
1561
  --color-success-10-90: #d1fad8;
483
1562
  --color-success-20-80: #a3f5b1;
@@ -534,6 +1613,34 @@
534
1613
 
535
1614
  /* ------------------------------------------------------------------------------ */
536
1615
  /* -------------------------------FEEDBACK - ALERT------------------------------- */
1616
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1617
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1618
+ math as the background it answers to — in dark the background resolves to
1619
+ the complementary step, so the on-color is computed from that same step. */
1620
+ :root {
1621
+ --color-on-alert-10: var(--color-black);
1622
+ --color-on-alert-20: var(--color-black);
1623
+ --color-on-alert-30: var(--color-black);
1624
+ --color-on-alert-40: var(--color-black);
1625
+ --color-on-alert-50: var(--color-black);
1626
+ --color-on-alert-60: var(--color-black);
1627
+ --color-on-alert-70: var(--color-white);
1628
+ --color-on-alert-80: var(--color-white);
1629
+ --color-on-alert-90: var(--color-white);
1630
+ }
1631
+
1632
+ [data-theme="dark"] {
1633
+ --color-on-alert-10: var(--color-white);
1634
+ --color-on-alert-20: var(--color-white);
1635
+ --color-on-alert-30: var(--color-white);
1636
+ --color-on-alert-40: var(--color-black);
1637
+ --color-on-alert-50: var(--color-black);
1638
+ --color-on-alert-60: var(--color-black);
1639
+ --color-on-alert-70: var(--color-black);
1640
+ --color-on-alert-80: var(--color-black);
1641
+ --color-on-alert-90: var(--color-black);
1642
+ }
1643
+
537
1644
  :root {
538
1645
  --color-alert-10-90: #faecd1;
539
1646
  --color-alert-20-80: #f5daa3;
@@ -590,6 +1697,34 @@
590
1697
 
591
1698
  /* ------------------------------------------------------------------------------ */
592
1699
  /* -------------------------------FEEDBACK - ERROR------------------------------- */
1700
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1701
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1702
+ math as the background it answers to — in dark the background resolves to
1703
+ the complementary step, so the on-color is computed from that same step. */
1704
+ :root {
1705
+ --color-on-error-10: var(--color-black);
1706
+ --color-on-error-20: var(--color-black);
1707
+ --color-on-error-30: var(--color-black);
1708
+ --color-on-error-40: var(--color-black);
1709
+ --color-on-error-50: var(--color-black);
1710
+ --color-on-error-60: var(--color-white);
1711
+ --color-on-error-70: var(--color-white);
1712
+ --color-on-error-80: var(--color-white);
1713
+ --color-on-error-90: var(--color-white);
1714
+ }
1715
+
1716
+ [data-theme="dark"] {
1717
+ --color-on-error-10: var(--color-white);
1718
+ --color-on-error-20: var(--color-white);
1719
+ --color-on-error-30: var(--color-white);
1720
+ --color-on-error-40: var(--color-white);
1721
+ --color-on-error-50: var(--color-black);
1722
+ --color-on-error-60: var(--color-black);
1723
+ --color-on-error-70: var(--color-black);
1724
+ --color-on-error-80: var(--color-black);
1725
+ --color-on-error-90: var(--color-black);
1726
+ }
1727
+
593
1728
  :root {
594
1729
  --color-error-10-90: #fad5d1;
595
1730
  --color-error-20-80: #f5aaa3;
@@ -646,6 +1781,34 @@
646
1781
 
647
1782
  /* ------------------------------------------------------------------------------ */
648
1783
  /* --------------------------------SUPPORT - LEAF-------------------------------- */
1784
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1785
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1786
+ math as the background it answers to — in dark the background resolves to
1787
+ the complementary step, so the on-color is computed from that same step. */
1788
+ :root {
1789
+ --color-on-leaf-10: var(--color-black);
1790
+ --color-on-leaf-20: var(--color-black);
1791
+ --color-on-leaf-30: var(--color-black);
1792
+ --color-on-leaf-40: var(--color-black);
1793
+ --color-on-leaf-50: var(--color-black);
1794
+ --color-on-leaf-60: var(--color-black);
1795
+ --color-on-leaf-70: var(--color-white);
1796
+ --color-on-leaf-80: var(--color-white);
1797
+ --color-on-leaf-90: var(--color-white);
1798
+ }
1799
+
1800
+ [data-theme="dark"] {
1801
+ --color-on-leaf-10: var(--color-white);
1802
+ --color-on-leaf-20: var(--color-white);
1803
+ --color-on-leaf-30: var(--color-white);
1804
+ --color-on-leaf-40: var(--color-black);
1805
+ --color-on-leaf-50: var(--color-black);
1806
+ --color-on-leaf-60: var(--color-black);
1807
+ --color-on-leaf-70: var(--color-black);
1808
+ --color-on-leaf-80: var(--color-black);
1809
+ --color-on-leaf-90: var(--color-black);
1810
+ }
1811
+
649
1812
  :root {
650
1813
  --color-leaf-10-90: #ecf2d9;
651
1814
  --color-leaf-20-80: #d9e5b3;
@@ -702,6 +1865,34 @@
702
1865
 
703
1866
  /* ------------------------------------------------------------------------------ */
704
1867
  /* --------------------------------SUPPORT - SAND-------------------------------- */
1868
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1869
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1870
+ math as the background it answers to — in dark the background resolves to
1871
+ the complementary step, so the on-color is computed from that same step. */
1872
+ :root {
1873
+ --color-on-sand-10: var(--color-black);
1874
+ --color-on-sand-20: var(--color-black);
1875
+ --color-on-sand-30: var(--color-black);
1876
+ --color-on-sand-40: var(--color-black);
1877
+ --color-on-sand-50: var(--color-black);
1878
+ --color-on-sand-60: var(--color-black);
1879
+ --color-on-sand-70: var(--color-white);
1880
+ --color-on-sand-80: var(--color-white);
1881
+ --color-on-sand-90: var(--color-white);
1882
+ }
1883
+
1884
+ [data-theme="dark"] {
1885
+ --color-on-sand-10: var(--color-white);
1886
+ --color-on-sand-20: var(--color-white);
1887
+ --color-on-sand-30: var(--color-white);
1888
+ --color-on-sand-40: var(--color-black);
1889
+ --color-on-sand-50: var(--color-black);
1890
+ --color-on-sand-60: var(--color-black);
1891
+ --color-on-sand-70: var(--color-black);
1892
+ --color-on-sand-80: var(--color-black);
1893
+ --color-on-sand-90: var(--color-black);
1894
+ }
1895
+
705
1896
  :root {
706
1897
  --color-sand-10-90: #f2eed9;
707
1898
  --color-sand-20-80: #e5ddb3;
@@ -758,6 +1949,34 @@
758
1949
 
759
1950
  /* ------------------------------------------------------------------------------ */
760
1951
  /* --------------------------------SUPPORT - WOOD-------------------------------- */
1952
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
1953
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
1954
+ math as the background it answers to — in dark the background resolves to
1955
+ the complementary step, so the on-color is computed from that same step. */
1956
+ :root {
1957
+ --color-on-wood-10: var(--color-black);
1958
+ --color-on-wood-20: var(--color-black);
1959
+ --color-on-wood-30: var(--color-black);
1960
+ --color-on-wood-40: var(--color-black);
1961
+ --color-on-wood-50: var(--color-black);
1962
+ --color-on-wood-60: var(--color-white);
1963
+ --color-on-wood-70: var(--color-white);
1964
+ --color-on-wood-80: var(--color-white);
1965
+ --color-on-wood-90: var(--color-white);
1966
+ }
1967
+
1968
+ [data-theme="dark"] {
1969
+ --color-on-wood-10: var(--color-white);
1970
+ --color-on-wood-20: var(--color-white);
1971
+ --color-on-wood-30: var(--color-white);
1972
+ --color-on-wood-40: var(--color-white);
1973
+ --color-on-wood-50: var(--color-black);
1974
+ --color-on-wood-60: var(--color-black);
1975
+ --color-on-wood-70: var(--color-black);
1976
+ --color-on-wood-80: var(--color-black);
1977
+ --color-on-wood-90: var(--color-black);
1978
+ }
1979
+
761
1980
  :root {
762
1981
  --color-wood-10-90: #f2e1d9;
763
1982
  --color-wood-20-80: #e5c3b3;
@@ -814,6 +2033,34 @@
814
2033
 
815
2034
  /* ------------------------------------------------------------------------------ */
816
2035
  /* --------------------------------SUPPORT - CLAY-------------------------------- */
2036
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
2037
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
2038
+ math as the background it answers to — in dark the background resolves to
2039
+ the complementary step, so the on-color is computed from that same step. */
2040
+ :root {
2041
+ --color-on-clay-10: var(--color-black);
2042
+ --color-on-clay-20: var(--color-black);
2043
+ --color-on-clay-30: var(--color-black);
2044
+ --color-on-clay-40: var(--color-black);
2045
+ --color-on-clay-50: var(--color-white);
2046
+ --color-on-clay-60: var(--color-white);
2047
+ --color-on-clay-70: var(--color-white);
2048
+ --color-on-clay-80: var(--color-white);
2049
+ --color-on-clay-90: var(--color-white);
2050
+ }
2051
+
2052
+ [data-theme="dark"] {
2053
+ --color-on-clay-10: var(--color-white);
2054
+ --color-on-clay-20: var(--color-white);
2055
+ --color-on-clay-30: var(--color-white);
2056
+ --color-on-clay-40: var(--color-white);
2057
+ --color-on-clay-50: var(--color-white);
2058
+ --color-on-clay-60: var(--color-black);
2059
+ --color-on-clay-70: var(--color-black);
2060
+ --color-on-clay-80: var(--color-black);
2061
+ --color-on-clay-90: var(--color-black);
2062
+ }
2063
+
817
2064
  :root {
818
2065
  --color-clay-10-90: #f2d9df;
819
2066
  --color-clay-20-80: #e5b3bf;
@@ -870,6 +2117,34 @@
870
2117
 
871
2118
  /* ------------------------------------------------------------------------------ */
872
2119
  /* -------------------------------SUPPORT - FLOWER------------------------------- */
2120
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
2121
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
2122
+ math as the background it answers to — in dark the background resolves to
2123
+ the complementary step, so the on-color is computed from that same step. */
2124
+ :root {
2125
+ --color-on-flower-10: var(--color-black);
2126
+ --color-on-flower-20: var(--color-black);
2127
+ --color-on-flower-30: var(--color-black);
2128
+ --color-on-flower-40: var(--color-black);
2129
+ --color-on-flower-50: var(--color-black);
2130
+ --color-on-flower-60: var(--color-white);
2131
+ --color-on-flower-70: var(--color-white);
2132
+ --color-on-flower-80: var(--color-white);
2133
+ --color-on-flower-90: var(--color-white);
2134
+ }
2135
+
2136
+ [data-theme="dark"] {
2137
+ --color-on-flower-10: var(--color-white);
2138
+ --color-on-flower-20: var(--color-white);
2139
+ --color-on-flower-30: var(--color-white);
2140
+ --color-on-flower-40: var(--color-white);
2141
+ --color-on-flower-50: var(--color-black);
2142
+ --color-on-flower-60: var(--color-black);
2143
+ --color-on-flower-70: var(--color-black);
2144
+ --color-on-flower-80: var(--color-black);
2145
+ --color-on-flower-90: var(--color-black);
2146
+ }
2147
+
873
2148
  :root {
874
2149
  --color-flower-10-90: #f2d9f2;
875
2150
  --color-flower-20-80: #e5b3e5;
@@ -926,6 +2201,34 @@
926
2201
 
927
2202
  /* ------------------------------------------------------------------------------ */
928
2203
  /* --------------------------------SUPPORT - DUSK-------------------------------- */
2204
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
2205
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
2206
+ math as the background it answers to — in dark the background resolves to
2207
+ the complementary step, so the on-color is computed from that same step. */
2208
+ :root {
2209
+ --color-on-dusk-10: var(--color-black);
2210
+ --color-on-dusk-20: var(--color-black);
2211
+ --color-on-dusk-30: var(--color-black);
2212
+ --color-on-dusk-40: var(--color-black);
2213
+ --color-on-dusk-50: var(--color-white);
2214
+ --color-on-dusk-60: var(--color-white);
2215
+ --color-on-dusk-70: var(--color-white);
2216
+ --color-on-dusk-80: var(--color-white);
2217
+ --color-on-dusk-90: var(--color-white);
2218
+ }
2219
+
2220
+ [data-theme="dark"] {
2221
+ --color-on-dusk-10: var(--color-white);
2222
+ --color-on-dusk-20: var(--color-white);
2223
+ --color-on-dusk-30: var(--color-white);
2224
+ --color-on-dusk-40: var(--color-white);
2225
+ --color-on-dusk-50: var(--color-white);
2226
+ --color-on-dusk-60: var(--color-black);
2227
+ --color-on-dusk-70: var(--color-black);
2228
+ --color-on-dusk-80: var(--color-black);
2229
+ --color-on-dusk-90: var(--color-black);
2230
+ }
2231
+
929
2232
  :root {
930
2233
  --color-dusk-10-90: #e1d9f2;
931
2234
  --color-dusk-20-80: #c3b3e5;
@@ -982,6 +2285,34 @@
982
2285
 
983
2286
  /* ------------------------------------------------------------------------------ */
984
2287
  /* --------------------------------SUPPORT - SKY--------------------------------- */
2288
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
2289
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
2290
+ math as the background it answers to — in dark the background resolves to
2291
+ the complementary step, so the on-color is computed from that same step. */
2292
+ :root {
2293
+ --color-on-sky-10: var(--color-black);
2294
+ --color-on-sky-20: var(--color-black);
2295
+ --color-on-sky-30: var(--color-black);
2296
+ --color-on-sky-40: var(--color-black);
2297
+ --color-on-sky-50: var(--color-white);
2298
+ --color-on-sky-60: var(--color-white);
2299
+ --color-on-sky-70: var(--color-white);
2300
+ --color-on-sky-80: var(--color-white);
2301
+ --color-on-sky-90: var(--color-white);
2302
+ }
2303
+
2304
+ [data-theme="dark"] {
2305
+ --color-on-sky-10: var(--color-white);
2306
+ --color-on-sky-20: var(--color-white);
2307
+ --color-on-sky-30: var(--color-white);
2308
+ --color-on-sky-40: var(--color-white);
2309
+ --color-on-sky-50: var(--color-white);
2310
+ --color-on-sky-60: var(--color-black);
2311
+ --color-on-sky-70: var(--color-black);
2312
+ --color-on-sky-80: var(--color-black);
2313
+ --color-on-sky-90: var(--color-black);
2314
+ }
2315
+
985
2316
  :root {
986
2317
  --color-sky-10-90: #d9e1f2;
987
2318
  --color-sky-20-80: #b3c3e5;
@@ -1038,6 +2369,34 @@
1038
2369
 
1039
2370
  /* ------------------------------------------------------------------------------ */
1040
2371
  /* --------------------------------SUPPORT - SEA--------------------------------- */
2372
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
2373
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
2374
+ math as the background it answers to — in dark the background resolves to
2375
+ the complementary step, so the on-color is computed from that same step. */
2376
+ :root {
2377
+ --color-on-sea-10: var(--color-black);
2378
+ --color-on-sea-20: var(--color-black);
2379
+ --color-on-sea-30: var(--color-black);
2380
+ --color-on-sea-40: var(--color-black);
2381
+ --color-on-sea-50: var(--color-black);
2382
+ --color-on-sea-60: var(--color-white);
2383
+ --color-on-sea-70: var(--color-white);
2384
+ --color-on-sea-80: var(--color-white);
2385
+ --color-on-sea-90: var(--color-white);
2386
+ }
2387
+
2388
+ [data-theme="dark"] {
2389
+ --color-on-sea-10: var(--color-white);
2390
+ --color-on-sea-20: var(--color-white);
2391
+ --color-on-sea-30: var(--color-white);
2392
+ --color-on-sea-40: var(--color-white);
2393
+ --color-on-sea-50: var(--color-black);
2394
+ --color-on-sea-60: var(--color-black);
2395
+ --color-on-sea-70: var(--color-black);
2396
+ --color-on-sea-80: var(--color-black);
2397
+ --color-on-sea-90: var(--color-black);
2398
+ }
2399
+
1041
2400
  :root {
1042
2401
  --color-sea-10-90: #d9eaf2;
1043
2402
  --color-sea-20-80: #b3d5e5;
@@ -1094,6 +2453,34 @@
1094
2453
 
1095
2454
  /* ------------------------------------------------------------------------------ */
1096
2455
  /* --------------------------------SUPPORT - LAKE-------------------------------- */
2456
+ /* Auto-contrast pair: `--color-on-{name}-{step}` is the label/icon color for
2457
+ anything painted on `--color-{name}-{step}`. It follows the same mirror
2458
+ math as the background it answers to — in dark the background resolves to
2459
+ the complementary step, so the on-color is computed from that same step. */
2460
+ :root {
2461
+ --color-on-lake-10: var(--color-black);
2462
+ --color-on-lake-20: var(--color-black);
2463
+ --color-on-lake-30: var(--color-black);
2464
+ --color-on-lake-40: var(--color-black);
2465
+ --color-on-lake-50: var(--color-black);
2466
+ --color-on-lake-60: var(--color-black);
2467
+ --color-on-lake-70: var(--color-white);
2468
+ --color-on-lake-80: var(--color-white);
2469
+ --color-on-lake-90: var(--color-white);
2470
+ }
2471
+
2472
+ [data-theme="dark"] {
2473
+ --color-on-lake-10: var(--color-white);
2474
+ --color-on-lake-20: var(--color-white);
2475
+ --color-on-lake-30: var(--color-white);
2476
+ --color-on-lake-40: var(--color-black);
2477
+ --color-on-lake-50: var(--color-black);
2478
+ --color-on-lake-60: var(--color-black);
2479
+ --color-on-lake-70: var(--color-black);
2480
+ --color-on-lake-80: var(--color-black);
2481
+ --color-on-lake-90: var(--color-black);
2482
+ }
2483
+
1097
2484
  :root {
1098
2485
  --color-lake-10-90: #d9f2ee;
1099
2486
  --color-lake-20-80: #b3e5dd;
@@ -1148,6 +2535,763 @@
1148
2535
  );
1149
2536
  }
1150
2537
 
2538
+ /* ------------------------------------------------------------------------------ */
2539
+ /* --------------------------------COLOR SCHEMES--------------------------------- */
2540
+ /* Emitted AFTER every family on purpose. These selectors and the `:root` blocks the
2541
+ `color-family` mixin writes have identical specificity (0,1,0), so the later one
2542
+ wins — and `:root` matches <html> too. Declared earlier, a scheme set on <html>
2543
+ itself lost to the family defaults and silently did nothing, which is how every
2544
+ panel portaled to document.body (Select, Menu, DatePicker, ColorPicker, …) ended
2545
+ up ignoring the active scheme: outside the app tree, <html> is the only carrier
2546
+ left. Keep this section last. */
2547
+ [data-color-scheme="neutral"] {
2548
+ --color-primary-10: var(--color-neutral-10);
2549
+ --color-primary-20: var(--color-neutral-20);
2550
+ --color-primary-30: var(--color-neutral-30);
2551
+ --color-primary-40: var(--color-neutral-50);
2552
+ --color-primary-50: var(--color-neutral-80);
2553
+ --color-primary-60: var(--color-neutral-90);
2554
+ --color-primary-70: var(--color-neutral-90);
2555
+ --color-primary-80: var(--color-neutral-90);
2556
+ --color-primary-90: var(--color-neutral-90);
2557
+ /* Neutral is the one scheme that isn't a straight family remap (step 40 → 50,
2558
+ 50 → 80, 60+ → 90), so its on-colors are mapped by hand to the step actually
2559
+ used above instead of by the generated loop. */
2560
+ --color-on-primary-10: var(--color-on-neutral-10);
2561
+ --color-on-primary-20: var(--color-on-neutral-20);
2562
+ --color-on-primary-30: var(--color-on-neutral-30);
2563
+ --color-on-primary-40: var(--color-on-neutral-50);
2564
+ --color-on-primary-50: var(--color-on-neutral-80);
2565
+ --color-on-primary-60: var(--color-on-neutral-90);
2566
+ --color-on-primary-70: var(--color-on-neutral-90);
2567
+ --color-on-primary-80: var(--color-on-neutral-90);
2568
+ --color-on-primary-90: var(--color-on-neutral-90);
2569
+ }
2570
+
2571
+ /* Map key = attribute value; tuple = (source family, force --color-on-primary: black?) */
2572
+ [data-color-scheme="secondary"] {
2573
+ --color-primary-10: var(--color-secondary-10);
2574
+ /* Remapped in lockstep with the background above — an on-color resolved
2575
+ from a different family than the background it sits on would defeat the
2576
+ whole point, so these two lines must never drift apart (same block,
2577
+ same cascade position). */
2578
+ --color-on-primary-10: var(--color-on-secondary-10);
2579
+ --color-primary-20: var(--color-secondary-20);
2580
+ /* Remapped in lockstep with the background above — an on-color resolved
2581
+ from a different family than the background it sits on would defeat the
2582
+ whole point, so these two lines must never drift apart (same block,
2583
+ same cascade position). */
2584
+ --color-on-primary-20: var(--color-on-secondary-20);
2585
+ --color-primary-30: var(--color-secondary-30);
2586
+ /* Remapped in lockstep with the background above — an on-color resolved
2587
+ from a different family than the background it sits on would defeat the
2588
+ whole point, so these two lines must never drift apart (same block,
2589
+ same cascade position). */
2590
+ --color-on-primary-30: var(--color-on-secondary-30);
2591
+ --color-primary-40: var(--color-secondary-40);
2592
+ /* Remapped in lockstep with the background above — an on-color resolved
2593
+ from a different family than the background it sits on would defeat the
2594
+ whole point, so these two lines must never drift apart (same block,
2595
+ same cascade position). */
2596
+ --color-on-primary-40: var(--color-on-secondary-40);
2597
+ --color-primary-50: var(--color-secondary-50);
2598
+ /* Remapped in lockstep with the background above — an on-color resolved
2599
+ from a different family than the background it sits on would defeat the
2600
+ whole point, so these two lines must never drift apart (same block,
2601
+ same cascade position). */
2602
+ --color-on-primary-50: var(--color-on-secondary-50);
2603
+ --color-primary-60: var(--color-secondary-60);
2604
+ /* Remapped in lockstep with the background above — an on-color resolved
2605
+ from a different family than the background it sits on would defeat the
2606
+ whole point, so these two lines must never drift apart (same block,
2607
+ same cascade position). */
2608
+ --color-on-primary-60: var(--color-on-secondary-60);
2609
+ --color-primary-70: var(--color-secondary-70);
2610
+ /* Remapped in lockstep with the background above — an on-color resolved
2611
+ from a different family than the background it sits on would defeat the
2612
+ whole point, so these two lines must never drift apart (same block,
2613
+ same cascade position). */
2614
+ --color-on-primary-70: var(--color-on-secondary-70);
2615
+ --color-primary-80: var(--color-secondary-80);
2616
+ /* Remapped in lockstep with the background above — an on-color resolved
2617
+ from a different family than the background it sits on would defeat the
2618
+ whole point, so these two lines must never drift apart (same block,
2619
+ same cascade position). */
2620
+ --color-on-primary-80: var(--color-on-secondary-80);
2621
+ --color-primary-90: var(--color-secondary-90);
2622
+ /* Remapped in lockstep with the background above — an on-color resolved
2623
+ from a different family than the background it sits on would defeat the
2624
+ whole point, so these two lines must never drift apart (same block,
2625
+ same cascade position). */
2626
+ --color-on-primary-90: var(--color-on-secondary-90);
2627
+ }
2628
+
2629
+ [data-color-scheme="tertiary"] {
2630
+ --color-primary-10: var(--color-tertiary-10);
2631
+ /* Remapped in lockstep with the background above — an on-color resolved
2632
+ from a different family than the background it sits on would defeat the
2633
+ whole point, so these two lines must never drift apart (same block,
2634
+ same cascade position). */
2635
+ --color-on-primary-10: var(--color-on-tertiary-10);
2636
+ --color-primary-20: var(--color-tertiary-20);
2637
+ /* Remapped in lockstep with the background above — an on-color resolved
2638
+ from a different family than the background it sits on would defeat the
2639
+ whole point, so these two lines must never drift apart (same block,
2640
+ same cascade position). */
2641
+ --color-on-primary-20: var(--color-on-tertiary-20);
2642
+ --color-primary-30: var(--color-tertiary-30);
2643
+ /* Remapped in lockstep with the background above — an on-color resolved
2644
+ from a different family than the background it sits on would defeat the
2645
+ whole point, so these two lines must never drift apart (same block,
2646
+ same cascade position). */
2647
+ --color-on-primary-30: var(--color-on-tertiary-30);
2648
+ --color-primary-40: var(--color-tertiary-40);
2649
+ /* Remapped in lockstep with the background above — an on-color resolved
2650
+ from a different family than the background it sits on would defeat the
2651
+ whole point, so these two lines must never drift apart (same block,
2652
+ same cascade position). */
2653
+ --color-on-primary-40: var(--color-on-tertiary-40);
2654
+ --color-primary-50: var(--color-tertiary-50);
2655
+ /* Remapped in lockstep with the background above — an on-color resolved
2656
+ from a different family than the background it sits on would defeat the
2657
+ whole point, so these two lines must never drift apart (same block,
2658
+ same cascade position). */
2659
+ --color-on-primary-50: var(--color-on-tertiary-50);
2660
+ --color-primary-60: var(--color-tertiary-60);
2661
+ /* Remapped in lockstep with the background above — an on-color resolved
2662
+ from a different family than the background it sits on would defeat the
2663
+ whole point, so these two lines must never drift apart (same block,
2664
+ same cascade position). */
2665
+ --color-on-primary-60: var(--color-on-tertiary-60);
2666
+ --color-primary-70: var(--color-tertiary-70);
2667
+ /* Remapped in lockstep with the background above — an on-color resolved
2668
+ from a different family than the background it sits on would defeat the
2669
+ whole point, so these two lines must never drift apart (same block,
2670
+ same cascade position). */
2671
+ --color-on-primary-70: var(--color-on-tertiary-70);
2672
+ --color-primary-80: var(--color-tertiary-80);
2673
+ /* Remapped in lockstep with the background above — an on-color resolved
2674
+ from a different family than the background it sits on would defeat the
2675
+ whole point, so these two lines must never drift apart (same block,
2676
+ same cascade position). */
2677
+ --color-on-primary-80: var(--color-on-tertiary-80);
2678
+ --color-primary-90: var(--color-tertiary-90);
2679
+ /* Remapped in lockstep with the background above — an on-color resolved
2680
+ from a different family than the background it sits on would defeat the
2681
+ whole point, so these two lines must never drift apart (same block,
2682
+ same cascade position). */
2683
+ --color-on-primary-90: var(--color-on-tertiary-90);
2684
+ }
2685
+
2686
+ [data-color-scheme="lya"] {
2687
+ --color-primary-10: var(--color-lya-10);
2688
+ /* Remapped in lockstep with the background above — an on-color resolved
2689
+ from a different family than the background it sits on would defeat the
2690
+ whole point, so these two lines must never drift apart (same block,
2691
+ same cascade position). */
2692
+ --color-on-primary-10: var(--color-on-lya-10);
2693
+ --color-primary-20: var(--color-lya-20);
2694
+ /* Remapped in lockstep with the background above — an on-color resolved
2695
+ from a different family than the background it sits on would defeat the
2696
+ whole point, so these two lines must never drift apart (same block,
2697
+ same cascade position). */
2698
+ --color-on-primary-20: var(--color-on-lya-20);
2699
+ --color-primary-30: var(--color-lya-30);
2700
+ /* Remapped in lockstep with the background above — an on-color resolved
2701
+ from a different family than the background it sits on would defeat the
2702
+ whole point, so these two lines must never drift apart (same block,
2703
+ same cascade position). */
2704
+ --color-on-primary-30: var(--color-on-lya-30);
2705
+ --color-primary-40: var(--color-lya-40);
2706
+ /* Remapped in lockstep with the background above — an on-color resolved
2707
+ from a different family than the background it sits on would defeat the
2708
+ whole point, so these two lines must never drift apart (same block,
2709
+ same cascade position). */
2710
+ --color-on-primary-40: var(--color-on-lya-40);
2711
+ --color-primary-50: var(--color-lya-50);
2712
+ /* Remapped in lockstep with the background above — an on-color resolved
2713
+ from a different family than the background it sits on would defeat the
2714
+ whole point, so these two lines must never drift apart (same block,
2715
+ same cascade position). */
2716
+ --color-on-primary-50: var(--color-on-lya-50);
2717
+ --color-primary-60: var(--color-lya-60);
2718
+ /* Remapped in lockstep with the background above — an on-color resolved
2719
+ from a different family than the background it sits on would defeat the
2720
+ whole point, so these two lines must never drift apart (same block,
2721
+ same cascade position). */
2722
+ --color-on-primary-60: var(--color-on-lya-60);
2723
+ --color-primary-70: var(--color-lya-70);
2724
+ /* Remapped in lockstep with the background above — an on-color resolved
2725
+ from a different family than the background it sits on would defeat the
2726
+ whole point, so these two lines must never drift apart (same block,
2727
+ same cascade position). */
2728
+ --color-on-primary-70: var(--color-on-lya-70);
2729
+ --color-primary-80: var(--color-lya-80);
2730
+ /* Remapped in lockstep with the background above — an on-color resolved
2731
+ from a different family than the background it sits on would defeat the
2732
+ whole point, so these two lines must never drift apart (same block,
2733
+ same cascade position). */
2734
+ --color-on-primary-80: var(--color-on-lya-80);
2735
+ --color-primary-90: var(--color-lya-90);
2736
+ /* Remapped in lockstep with the background above — an on-color resolved
2737
+ from a different family than the background it sits on would defeat the
2738
+ whole point, so these two lines must never drift apart (same block,
2739
+ same cascade position). */
2740
+ --color-on-primary-90: var(--color-on-lya-90);
2741
+ }
2742
+
2743
+ [data-color-scheme="leaf"] {
2744
+ --color-primary-10: var(--color-leaf-10);
2745
+ /* Remapped in lockstep with the background above — an on-color resolved
2746
+ from a different family than the background it sits on would defeat the
2747
+ whole point, so these two lines must never drift apart (same block,
2748
+ same cascade position). */
2749
+ --color-on-primary-10: var(--color-on-leaf-10);
2750
+ --color-primary-20: var(--color-leaf-20);
2751
+ /* Remapped in lockstep with the background above — an on-color resolved
2752
+ from a different family than the background it sits on would defeat the
2753
+ whole point, so these two lines must never drift apart (same block,
2754
+ same cascade position). */
2755
+ --color-on-primary-20: var(--color-on-leaf-20);
2756
+ --color-primary-30: var(--color-leaf-30);
2757
+ /* Remapped in lockstep with the background above — an on-color resolved
2758
+ from a different family than the background it sits on would defeat the
2759
+ whole point, so these two lines must never drift apart (same block,
2760
+ same cascade position). */
2761
+ --color-on-primary-30: var(--color-on-leaf-30);
2762
+ --color-primary-40: var(--color-leaf-40);
2763
+ /* Remapped in lockstep with the background above — an on-color resolved
2764
+ from a different family than the background it sits on would defeat the
2765
+ whole point, so these two lines must never drift apart (same block,
2766
+ same cascade position). */
2767
+ --color-on-primary-40: var(--color-on-leaf-40);
2768
+ --color-primary-50: var(--color-leaf-50);
2769
+ /* Remapped in lockstep with the background above — an on-color resolved
2770
+ from a different family than the background it sits on would defeat the
2771
+ whole point, so these two lines must never drift apart (same block,
2772
+ same cascade position). */
2773
+ --color-on-primary-50: var(--color-on-leaf-50);
2774
+ --color-primary-60: var(--color-leaf-60);
2775
+ /* Remapped in lockstep with the background above — an on-color resolved
2776
+ from a different family than the background it sits on would defeat the
2777
+ whole point, so these two lines must never drift apart (same block,
2778
+ same cascade position). */
2779
+ --color-on-primary-60: var(--color-on-leaf-60);
2780
+ --color-primary-70: var(--color-leaf-70);
2781
+ /* Remapped in lockstep with the background above — an on-color resolved
2782
+ from a different family than the background it sits on would defeat the
2783
+ whole point, so these two lines must never drift apart (same block,
2784
+ same cascade position). */
2785
+ --color-on-primary-70: var(--color-on-leaf-70);
2786
+ --color-primary-80: var(--color-leaf-80);
2787
+ /* Remapped in lockstep with the background above — an on-color resolved
2788
+ from a different family than the background it sits on would defeat the
2789
+ whole point, so these two lines must never drift apart (same block,
2790
+ same cascade position). */
2791
+ --color-on-primary-80: var(--color-on-leaf-80);
2792
+ --color-primary-90: var(--color-leaf-90);
2793
+ /* Remapped in lockstep with the background above — an on-color resolved
2794
+ from a different family than the background it sits on would defeat the
2795
+ whole point, so these two lines must never drift apart (same block,
2796
+ same cascade position). */
2797
+ --color-on-primary-90: var(--color-on-leaf-90);
2798
+ --color-on-primary: var(--color-black);
2799
+ }
2800
+
2801
+ [data-color-scheme="sand"] {
2802
+ --color-primary-10: var(--color-sand-10);
2803
+ /* Remapped in lockstep with the background above — an on-color resolved
2804
+ from a different family than the background it sits on would defeat the
2805
+ whole point, so these two lines must never drift apart (same block,
2806
+ same cascade position). */
2807
+ --color-on-primary-10: var(--color-on-sand-10);
2808
+ --color-primary-20: var(--color-sand-20);
2809
+ /* Remapped in lockstep with the background above — an on-color resolved
2810
+ from a different family than the background it sits on would defeat the
2811
+ whole point, so these two lines must never drift apart (same block,
2812
+ same cascade position). */
2813
+ --color-on-primary-20: var(--color-on-sand-20);
2814
+ --color-primary-30: var(--color-sand-30);
2815
+ /* Remapped in lockstep with the background above — an on-color resolved
2816
+ from a different family than the background it sits on would defeat the
2817
+ whole point, so these two lines must never drift apart (same block,
2818
+ same cascade position). */
2819
+ --color-on-primary-30: var(--color-on-sand-30);
2820
+ --color-primary-40: var(--color-sand-40);
2821
+ /* Remapped in lockstep with the background above — an on-color resolved
2822
+ from a different family than the background it sits on would defeat the
2823
+ whole point, so these two lines must never drift apart (same block,
2824
+ same cascade position). */
2825
+ --color-on-primary-40: var(--color-on-sand-40);
2826
+ --color-primary-50: var(--color-sand-50);
2827
+ /* Remapped in lockstep with the background above — an on-color resolved
2828
+ from a different family than the background it sits on would defeat the
2829
+ whole point, so these two lines must never drift apart (same block,
2830
+ same cascade position). */
2831
+ --color-on-primary-50: var(--color-on-sand-50);
2832
+ --color-primary-60: var(--color-sand-60);
2833
+ /* Remapped in lockstep with the background above — an on-color resolved
2834
+ from a different family than the background it sits on would defeat the
2835
+ whole point, so these two lines must never drift apart (same block,
2836
+ same cascade position). */
2837
+ --color-on-primary-60: var(--color-on-sand-60);
2838
+ --color-primary-70: var(--color-sand-70);
2839
+ /* Remapped in lockstep with the background above — an on-color resolved
2840
+ from a different family than the background it sits on would defeat the
2841
+ whole point, so these two lines must never drift apart (same block,
2842
+ same cascade position). */
2843
+ --color-on-primary-70: var(--color-on-sand-70);
2844
+ --color-primary-80: var(--color-sand-80);
2845
+ /* Remapped in lockstep with the background above — an on-color resolved
2846
+ from a different family than the background it sits on would defeat the
2847
+ whole point, so these two lines must never drift apart (same block,
2848
+ same cascade position). */
2849
+ --color-on-primary-80: var(--color-on-sand-80);
2850
+ --color-primary-90: var(--color-sand-90);
2851
+ /* Remapped in lockstep with the background above — an on-color resolved
2852
+ from a different family than the background it sits on would defeat the
2853
+ whole point, so these two lines must never drift apart (same block,
2854
+ same cascade position). */
2855
+ --color-on-primary-90: var(--color-on-sand-90);
2856
+ --color-on-primary: var(--color-black);
2857
+ }
2858
+
2859
+ [data-color-scheme="wood"] {
2860
+ --color-primary-10: var(--color-wood-10);
2861
+ /* Remapped in lockstep with the background above — an on-color resolved
2862
+ from a different family than the background it sits on would defeat the
2863
+ whole point, so these two lines must never drift apart (same block,
2864
+ same cascade position). */
2865
+ --color-on-primary-10: var(--color-on-wood-10);
2866
+ --color-primary-20: var(--color-wood-20);
2867
+ /* Remapped in lockstep with the background above — an on-color resolved
2868
+ from a different family than the background it sits on would defeat the
2869
+ whole point, so these two lines must never drift apart (same block,
2870
+ same cascade position). */
2871
+ --color-on-primary-20: var(--color-on-wood-20);
2872
+ --color-primary-30: var(--color-wood-30);
2873
+ /* Remapped in lockstep with the background above — an on-color resolved
2874
+ from a different family than the background it sits on would defeat the
2875
+ whole point, so these two lines must never drift apart (same block,
2876
+ same cascade position). */
2877
+ --color-on-primary-30: var(--color-on-wood-30);
2878
+ --color-primary-40: var(--color-wood-40);
2879
+ /* Remapped in lockstep with the background above — an on-color resolved
2880
+ from a different family than the background it sits on would defeat the
2881
+ whole point, so these two lines must never drift apart (same block,
2882
+ same cascade position). */
2883
+ --color-on-primary-40: var(--color-on-wood-40);
2884
+ --color-primary-50: var(--color-wood-50);
2885
+ /* Remapped in lockstep with the background above — an on-color resolved
2886
+ from a different family than the background it sits on would defeat the
2887
+ whole point, so these two lines must never drift apart (same block,
2888
+ same cascade position). */
2889
+ --color-on-primary-50: var(--color-on-wood-50);
2890
+ --color-primary-60: var(--color-wood-60);
2891
+ /* Remapped in lockstep with the background above — an on-color resolved
2892
+ from a different family than the background it sits on would defeat the
2893
+ whole point, so these two lines must never drift apart (same block,
2894
+ same cascade position). */
2895
+ --color-on-primary-60: var(--color-on-wood-60);
2896
+ --color-primary-70: var(--color-wood-70);
2897
+ /* Remapped in lockstep with the background above — an on-color resolved
2898
+ from a different family than the background it sits on would defeat the
2899
+ whole point, so these two lines must never drift apart (same block,
2900
+ same cascade position). */
2901
+ --color-on-primary-70: var(--color-on-wood-70);
2902
+ --color-primary-80: var(--color-wood-80);
2903
+ /* Remapped in lockstep with the background above — an on-color resolved
2904
+ from a different family than the background it sits on would defeat the
2905
+ whole point, so these two lines must never drift apart (same block,
2906
+ same cascade position). */
2907
+ --color-on-primary-80: var(--color-on-wood-80);
2908
+ --color-primary-90: var(--color-wood-90);
2909
+ /* Remapped in lockstep with the background above — an on-color resolved
2910
+ from a different family than the background it sits on would defeat the
2911
+ whole point, so these two lines must never drift apart (same block,
2912
+ same cascade position). */
2913
+ --color-on-primary-90: var(--color-on-wood-90);
2914
+ }
2915
+
2916
+ [data-color-scheme="clay"] {
2917
+ --color-primary-10: var(--color-clay-10);
2918
+ /* Remapped in lockstep with the background above — an on-color resolved
2919
+ from a different family than the background it sits on would defeat the
2920
+ whole point, so these two lines must never drift apart (same block,
2921
+ same cascade position). */
2922
+ --color-on-primary-10: var(--color-on-clay-10);
2923
+ --color-primary-20: var(--color-clay-20);
2924
+ /* Remapped in lockstep with the background above — an on-color resolved
2925
+ from a different family than the background it sits on would defeat the
2926
+ whole point, so these two lines must never drift apart (same block,
2927
+ same cascade position). */
2928
+ --color-on-primary-20: var(--color-on-clay-20);
2929
+ --color-primary-30: var(--color-clay-30);
2930
+ /* Remapped in lockstep with the background above — an on-color resolved
2931
+ from a different family than the background it sits on would defeat the
2932
+ whole point, so these two lines must never drift apart (same block,
2933
+ same cascade position). */
2934
+ --color-on-primary-30: var(--color-on-clay-30);
2935
+ --color-primary-40: var(--color-clay-40);
2936
+ /* Remapped in lockstep with the background above — an on-color resolved
2937
+ from a different family than the background it sits on would defeat the
2938
+ whole point, so these two lines must never drift apart (same block,
2939
+ same cascade position). */
2940
+ --color-on-primary-40: var(--color-on-clay-40);
2941
+ --color-primary-50: var(--color-clay-50);
2942
+ /* Remapped in lockstep with the background above — an on-color resolved
2943
+ from a different family than the background it sits on would defeat the
2944
+ whole point, so these two lines must never drift apart (same block,
2945
+ same cascade position). */
2946
+ --color-on-primary-50: var(--color-on-clay-50);
2947
+ --color-primary-60: var(--color-clay-60);
2948
+ /* Remapped in lockstep with the background above — an on-color resolved
2949
+ from a different family than the background it sits on would defeat the
2950
+ whole point, so these two lines must never drift apart (same block,
2951
+ same cascade position). */
2952
+ --color-on-primary-60: var(--color-on-clay-60);
2953
+ --color-primary-70: var(--color-clay-70);
2954
+ /* Remapped in lockstep with the background above — an on-color resolved
2955
+ from a different family than the background it sits on would defeat the
2956
+ whole point, so these two lines must never drift apart (same block,
2957
+ same cascade position). */
2958
+ --color-on-primary-70: var(--color-on-clay-70);
2959
+ --color-primary-80: var(--color-clay-80);
2960
+ /* Remapped in lockstep with the background above — an on-color resolved
2961
+ from a different family than the background it sits on would defeat the
2962
+ whole point, so these two lines must never drift apart (same block,
2963
+ same cascade position). */
2964
+ --color-on-primary-80: var(--color-on-clay-80);
2965
+ --color-primary-90: var(--color-clay-90);
2966
+ /* Remapped in lockstep with the background above — an on-color resolved
2967
+ from a different family than the background it sits on would defeat the
2968
+ whole point, so these two lines must never drift apart (same block,
2969
+ same cascade position). */
2970
+ --color-on-primary-90: var(--color-on-clay-90);
2971
+ }
2972
+
2973
+ [data-color-scheme="flower"] {
2974
+ --color-primary-10: var(--color-flower-10);
2975
+ /* Remapped in lockstep with the background above — an on-color resolved
2976
+ from a different family than the background it sits on would defeat the
2977
+ whole point, so these two lines must never drift apart (same block,
2978
+ same cascade position). */
2979
+ --color-on-primary-10: var(--color-on-flower-10);
2980
+ --color-primary-20: var(--color-flower-20);
2981
+ /* Remapped in lockstep with the background above — an on-color resolved
2982
+ from a different family than the background it sits on would defeat the
2983
+ whole point, so these two lines must never drift apart (same block,
2984
+ same cascade position). */
2985
+ --color-on-primary-20: var(--color-on-flower-20);
2986
+ --color-primary-30: var(--color-flower-30);
2987
+ /* Remapped in lockstep with the background above — an on-color resolved
2988
+ from a different family than the background it sits on would defeat the
2989
+ whole point, so these two lines must never drift apart (same block,
2990
+ same cascade position). */
2991
+ --color-on-primary-30: var(--color-on-flower-30);
2992
+ --color-primary-40: var(--color-flower-40);
2993
+ /* Remapped in lockstep with the background above — an on-color resolved
2994
+ from a different family than the background it sits on would defeat the
2995
+ whole point, so these two lines must never drift apart (same block,
2996
+ same cascade position). */
2997
+ --color-on-primary-40: var(--color-on-flower-40);
2998
+ --color-primary-50: var(--color-flower-50);
2999
+ /* Remapped in lockstep with the background above — an on-color resolved
3000
+ from a different family than the background it sits on would defeat the
3001
+ whole point, so these two lines must never drift apart (same block,
3002
+ same cascade position). */
3003
+ --color-on-primary-50: var(--color-on-flower-50);
3004
+ --color-primary-60: var(--color-flower-60);
3005
+ /* Remapped in lockstep with the background above — an on-color resolved
3006
+ from a different family than the background it sits on would defeat the
3007
+ whole point, so these two lines must never drift apart (same block,
3008
+ same cascade position). */
3009
+ --color-on-primary-60: var(--color-on-flower-60);
3010
+ --color-primary-70: var(--color-flower-70);
3011
+ /* Remapped in lockstep with the background above — an on-color resolved
3012
+ from a different family than the background it sits on would defeat the
3013
+ whole point, so these two lines must never drift apart (same block,
3014
+ same cascade position). */
3015
+ --color-on-primary-70: var(--color-on-flower-70);
3016
+ --color-primary-80: var(--color-flower-80);
3017
+ /* Remapped in lockstep with the background above — an on-color resolved
3018
+ from a different family than the background it sits on would defeat the
3019
+ whole point, so these two lines must never drift apart (same block,
3020
+ same cascade position). */
3021
+ --color-on-primary-80: var(--color-on-flower-80);
3022
+ --color-primary-90: var(--color-flower-90);
3023
+ /* Remapped in lockstep with the background above — an on-color resolved
3024
+ from a different family than the background it sits on would defeat the
3025
+ whole point, so these two lines must never drift apart (same block,
3026
+ same cascade position). */
3027
+ --color-on-primary-90: var(--color-on-flower-90);
3028
+ }
3029
+
3030
+ [data-color-scheme="dusk"] {
3031
+ --color-primary-10: var(--color-dusk-10);
3032
+ /* Remapped in lockstep with the background above — an on-color resolved
3033
+ from a different family than the background it sits on would defeat the
3034
+ whole point, so these two lines must never drift apart (same block,
3035
+ same cascade position). */
3036
+ --color-on-primary-10: var(--color-on-dusk-10);
3037
+ --color-primary-20: var(--color-dusk-20);
3038
+ /* Remapped in lockstep with the background above — an on-color resolved
3039
+ from a different family than the background it sits on would defeat the
3040
+ whole point, so these two lines must never drift apart (same block,
3041
+ same cascade position). */
3042
+ --color-on-primary-20: var(--color-on-dusk-20);
3043
+ --color-primary-30: var(--color-dusk-30);
3044
+ /* Remapped in lockstep with the background above — an on-color resolved
3045
+ from a different family than the background it sits on would defeat the
3046
+ whole point, so these two lines must never drift apart (same block,
3047
+ same cascade position). */
3048
+ --color-on-primary-30: var(--color-on-dusk-30);
3049
+ --color-primary-40: var(--color-dusk-40);
3050
+ /* Remapped in lockstep with the background above — an on-color resolved
3051
+ from a different family than the background it sits on would defeat the
3052
+ whole point, so these two lines must never drift apart (same block,
3053
+ same cascade position). */
3054
+ --color-on-primary-40: var(--color-on-dusk-40);
3055
+ --color-primary-50: var(--color-dusk-50);
3056
+ /* Remapped in lockstep with the background above — an on-color resolved
3057
+ from a different family than the background it sits on would defeat the
3058
+ whole point, so these two lines must never drift apart (same block,
3059
+ same cascade position). */
3060
+ --color-on-primary-50: var(--color-on-dusk-50);
3061
+ --color-primary-60: var(--color-dusk-60);
3062
+ /* Remapped in lockstep with the background above — an on-color resolved
3063
+ from a different family than the background it sits on would defeat the
3064
+ whole point, so these two lines must never drift apart (same block,
3065
+ same cascade position). */
3066
+ --color-on-primary-60: var(--color-on-dusk-60);
3067
+ --color-primary-70: var(--color-dusk-70);
3068
+ /* Remapped in lockstep with the background above — an on-color resolved
3069
+ from a different family than the background it sits on would defeat the
3070
+ whole point, so these two lines must never drift apart (same block,
3071
+ same cascade position). */
3072
+ --color-on-primary-70: var(--color-on-dusk-70);
3073
+ --color-primary-80: var(--color-dusk-80);
3074
+ /* Remapped in lockstep with the background above — an on-color resolved
3075
+ from a different family than the background it sits on would defeat the
3076
+ whole point, so these two lines must never drift apart (same block,
3077
+ same cascade position). */
3078
+ --color-on-primary-80: var(--color-on-dusk-80);
3079
+ --color-primary-90: var(--color-dusk-90);
3080
+ /* Remapped in lockstep with the background above — an on-color resolved
3081
+ from a different family than the background it sits on would defeat the
3082
+ whole point, so these two lines must never drift apart (same block,
3083
+ same cascade position). */
3084
+ --color-on-primary-90: var(--color-on-dusk-90);
3085
+ }
3086
+
3087
+ [data-color-scheme="sky"] {
3088
+ --color-primary-10: var(--color-sky-10);
3089
+ /* Remapped in lockstep with the background above — an on-color resolved
3090
+ from a different family than the background it sits on would defeat the
3091
+ whole point, so these two lines must never drift apart (same block,
3092
+ same cascade position). */
3093
+ --color-on-primary-10: var(--color-on-sky-10);
3094
+ --color-primary-20: var(--color-sky-20);
3095
+ /* Remapped in lockstep with the background above — an on-color resolved
3096
+ from a different family than the background it sits on would defeat the
3097
+ whole point, so these two lines must never drift apart (same block,
3098
+ same cascade position). */
3099
+ --color-on-primary-20: var(--color-on-sky-20);
3100
+ --color-primary-30: var(--color-sky-30);
3101
+ /* Remapped in lockstep with the background above — an on-color resolved
3102
+ from a different family than the background it sits on would defeat the
3103
+ whole point, so these two lines must never drift apart (same block,
3104
+ same cascade position). */
3105
+ --color-on-primary-30: var(--color-on-sky-30);
3106
+ --color-primary-40: var(--color-sky-40);
3107
+ /* Remapped in lockstep with the background above — an on-color resolved
3108
+ from a different family than the background it sits on would defeat the
3109
+ whole point, so these two lines must never drift apart (same block,
3110
+ same cascade position). */
3111
+ --color-on-primary-40: var(--color-on-sky-40);
3112
+ --color-primary-50: var(--color-sky-50);
3113
+ /* Remapped in lockstep with the background above — an on-color resolved
3114
+ from a different family than the background it sits on would defeat the
3115
+ whole point, so these two lines must never drift apart (same block,
3116
+ same cascade position). */
3117
+ --color-on-primary-50: var(--color-on-sky-50);
3118
+ --color-primary-60: var(--color-sky-60);
3119
+ /* Remapped in lockstep with the background above — an on-color resolved
3120
+ from a different family than the background it sits on would defeat the
3121
+ whole point, so these two lines must never drift apart (same block,
3122
+ same cascade position). */
3123
+ --color-on-primary-60: var(--color-on-sky-60);
3124
+ --color-primary-70: var(--color-sky-70);
3125
+ /* Remapped in lockstep with the background above — an on-color resolved
3126
+ from a different family than the background it sits on would defeat the
3127
+ whole point, so these two lines must never drift apart (same block,
3128
+ same cascade position). */
3129
+ --color-on-primary-70: var(--color-on-sky-70);
3130
+ --color-primary-80: var(--color-sky-80);
3131
+ /* Remapped in lockstep with the background above — an on-color resolved
3132
+ from a different family than the background it sits on would defeat the
3133
+ whole point, so these two lines must never drift apart (same block,
3134
+ same cascade position). */
3135
+ --color-on-primary-80: var(--color-on-sky-80);
3136
+ --color-primary-90: var(--color-sky-90);
3137
+ /* Remapped in lockstep with the background above — an on-color resolved
3138
+ from a different family than the background it sits on would defeat the
3139
+ whole point, so these two lines must never drift apart (same block,
3140
+ same cascade position). */
3141
+ --color-on-primary-90: var(--color-on-sky-90);
3142
+ }
3143
+
3144
+ [data-color-scheme="sea"] {
3145
+ --color-primary-10: var(--color-sea-10);
3146
+ /* Remapped in lockstep with the background above — an on-color resolved
3147
+ from a different family than the background it sits on would defeat the
3148
+ whole point, so these two lines must never drift apart (same block,
3149
+ same cascade position). */
3150
+ --color-on-primary-10: var(--color-on-sea-10);
3151
+ --color-primary-20: var(--color-sea-20);
3152
+ /* Remapped in lockstep with the background above — an on-color resolved
3153
+ from a different family than the background it sits on would defeat the
3154
+ whole point, so these two lines must never drift apart (same block,
3155
+ same cascade position). */
3156
+ --color-on-primary-20: var(--color-on-sea-20);
3157
+ --color-primary-30: var(--color-sea-30);
3158
+ /* Remapped in lockstep with the background above — an on-color resolved
3159
+ from a different family than the background it sits on would defeat the
3160
+ whole point, so these two lines must never drift apart (same block,
3161
+ same cascade position). */
3162
+ --color-on-primary-30: var(--color-on-sea-30);
3163
+ --color-primary-40: var(--color-sea-40);
3164
+ /* Remapped in lockstep with the background above — an on-color resolved
3165
+ from a different family than the background it sits on would defeat the
3166
+ whole point, so these two lines must never drift apart (same block,
3167
+ same cascade position). */
3168
+ --color-on-primary-40: var(--color-on-sea-40);
3169
+ --color-primary-50: var(--color-sea-50);
3170
+ /* Remapped in lockstep with the background above — an on-color resolved
3171
+ from a different family than the background it sits on would defeat the
3172
+ whole point, so these two lines must never drift apart (same block,
3173
+ same cascade position). */
3174
+ --color-on-primary-50: var(--color-on-sea-50);
3175
+ --color-primary-60: var(--color-sea-60);
3176
+ /* Remapped in lockstep with the background above — an on-color resolved
3177
+ from a different family than the background it sits on would defeat the
3178
+ whole point, so these two lines must never drift apart (same block,
3179
+ same cascade position). */
3180
+ --color-on-primary-60: var(--color-on-sea-60);
3181
+ --color-primary-70: var(--color-sea-70);
3182
+ /* Remapped in lockstep with the background above — an on-color resolved
3183
+ from a different family than the background it sits on would defeat the
3184
+ whole point, so these two lines must never drift apart (same block,
3185
+ same cascade position). */
3186
+ --color-on-primary-70: var(--color-on-sea-70);
3187
+ --color-primary-80: var(--color-sea-80);
3188
+ /* Remapped in lockstep with the background above — an on-color resolved
3189
+ from a different family than the background it sits on would defeat the
3190
+ whole point, so these two lines must never drift apart (same block,
3191
+ same cascade position). */
3192
+ --color-on-primary-80: var(--color-on-sea-80);
3193
+ --color-primary-90: var(--color-sea-90);
3194
+ /* Remapped in lockstep with the background above — an on-color resolved
3195
+ from a different family than the background it sits on would defeat the
3196
+ whole point, so these two lines must never drift apart (same block,
3197
+ same cascade position). */
3198
+ --color-on-primary-90: var(--color-on-sea-90);
3199
+ }
3200
+
3201
+ [data-color-scheme="lake"] {
3202
+ --color-primary-10: var(--color-lake-10);
3203
+ /* Remapped in lockstep with the background above — an on-color resolved
3204
+ from a different family than the background it sits on would defeat the
3205
+ whole point, so these two lines must never drift apart (same block,
3206
+ same cascade position). */
3207
+ --color-on-primary-10: var(--color-on-lake-10);
3208
+ --color-primary-20: var(--color-lake-20);
3209
+ /* Remapped in lockstep with the background above — an on-color resolved
3210
+ from a different family than the background it sits on would defeat the
3211
+ whole point, so these two lines must never drift apart (same block,
3212
+ same cascade position). */
3213
+ --color-on-primary-20: var(--color-on-lake-20);
3214
+ --color-primary-30: var(--color-lake-30);
3215
+ /* Remapped in lockstep with the background above — an on-color resolved
3216
+ from a different family than the background it sits on would defeat the
3217
+ whole point, so these two lines must never drift apart (same block,
3218
+ same cascade position). */
3219
+ --color-on-primary-30: var(--color-on-lake-30);
3220
+ --color-primary-40: var(--color-lake-40);
3221
+ /* Remapped in lockstep with the background above — an on-color resolved
3222
+ from a different family than the background it sits on would defeat the
3223
+ whole point, so these two lines must never drift apart (same block,
3224
+ same cascade position). */
3225
+ --color-on-primary-40: var(--color-on-lake-40);
3226
+ --color-primary-50: var(--color-lake-50);
3227
+ /* Remapped in lockstep with the background above — an on-color resolved
3228
+ from a different family than the background it sits on would defeat the
3229
+ whole point, so these two lines must never drift apart (same block,
3230
+ same cascade position). */
3231
+ --color-on-primary-50: var(--color-on-lake-50);
3232
+ --color-primary-60: var(--color-lake-60);
3233
+ /* Remapped in lockstep with the background above — an on-color resolved
3234
+ from a different family than the background it sits on would defeat the
3235
+ whole point, so these two lines must never drift apart (same block,
3236
+ same cascade position). */
3237
+ --color-on-primary-60: var(--color-on-lake-60);
3238
+ --color-primary-70: var(--color-lake-70);
3239
+ /* Remapped in lockstep with the background above — an on-color resolved
3240
+ from a different family than the background it sits on would defeat the
3241
+ whole point, so these two lines must never drift apart (same block,
3242
+ same cascade position). */
3243
+ --color-on-primary-70: var(--color-on-lake-70);
3244
+ --color-primary-80: var(--color-lake-80);
3245
+ /* Remapped in lockstep with the background above — an on-color resolved
3246
+ from a different family than the background it sits on would defeat the
3247
+ whole point, so these two lines must never drift apart (same block,
3248
+ same cascade position). */
3249
+ --color-on-primary-80: var(--color-on-lake-80);
3250
+ --color-primary-90: var(--color-lake-90);
3251
+ /* Remapped in lockstep with the background above — an on-color resolved
3252
+ from a different family than the background it sits on would defeat the
3253
+ whole point, so these two lines must never drift apart (same block,
3254
+ same cascade position). */
3255
+ --color-on-primary-90: var(--color-on-lake-90);
3256
+ }
3257
+
3258
+ /* ------------------------------------------------------------------------------ */
3259
+ /* Deferred from the Lya block above — every source family now exists. */
3260
+ :root {
3261
+ --color-on-lya-10: var(--color-black);
3262
+ --color-on-lya-20: var(--color-black);
3263
+ --color-on-lya-30: var(--color-black);
3264
+ --color-on-lya-40: var(--color-black);
3265
+ --color-on-lya-50: var(--color-white);
3266
+ --color-on-lya-60: var(--color-white);
3267
+ --color-on-lya-70: var(--color-white);
3268
+ --color-on-lya-80: var(--color-white);
3269
+ --color-on-lya-90: var(--color-white);
3270
+ }
3271
+
3272
+ [data-theme="dark"] {
3273
+ --color-on-lya-10: var(--color-white);
3274
+ --color-on-lya-20: var(--color-white);
3275
+ --color-on-lya-30: var(--color-white);
3276
+ --color-on-lya-40: var(--color-white);
3277
+ --color-on-lya-50: var(--color-white);
3278
+ --color-on-lya-60: var(--color-black);
3279
+ --color-on-lya-70: var(--color-black);
3280
+ --color-on-lya-80: var(--color-black);
3281
+ --color-on-lya-90: var(--color-black);
3282
+ }
3283
+
3284
+ /* ------------------------------------------------------------------------------ */
3285
+ /* ---------------------------------MENU SIZING---------------------------------- */
3286
+ :root {
3287
+ --menu-item-height: 40px;
3288
+ /* The scrollable list of any menu / select / dropdown stops here. Measured in ITEMS,
3289
+ so a half item stays visible and the list reads as scrollable. It caps the LIST,
3290
+ never the panel — a search field or footer sits outside this box, so the same
3291
+ 7.5 items are reachable with or without one. */
3292
+ --menu-max-height: calc(var(--menu-item-height) * 7.5);
3293
+ }
3294
+
1151
3295
  /* ------------------------------------------------------------------------------ */
1152
3296
  /* -----------------------------------OPACITY------------------------------------ */
1153
3297
  :root {