trace-css 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -3
  3. package/dist/trace.classless.conditional.css +1534 -0
  4. package/dist/trace.classless.conditional.min.css +1 -0
  5. package/dist/trace.classless.css +1532 -0
  6. package/dist/trace.classless.min.css +1 -0
  7. package/dist/trace.conditional.css +2138 -0
  8. package/dist/trace.conditional.min.css +1 -0
  9. package/dist/trace.css +2136 -0
  10. package/dist/trace.min.css +1 -0
  11. package/dist/tracecss.classless.conditional.css +1534 -0
  12. package/dist/tracecss.classless.conditional.min.css +1 -0
  13. package/dist/tracecss.classless.css +1532 -0
  14. package/dist/tracecss.classless.min.css +1 -0
  15. package/dist/tracecss.conditional.css +2138 -0
  16. package/dist/tracecss.conditional.min.css +1 -0
  17. package/dist/tracecss.css +2136 -0
  18. package/dist/tracecss.min.css +1 -0
  19. package/package.json +55 -4
  20. package/src/classless.css +16 -0
  21. package/src/content/link.css +75 -0
  22. package/src/content/table.css +108 -0
  23. package/src/content/table.extensions.css +45 -0
  24. package/src/content/typography.css +201 -0
  25. package/src/elements/button.css +168 -0
  26. package/src/elements/button.extensions.css +171 -0
  27. package/src/elements/icon.extensions.css +22 -0
  28. package/src/elements/loader.css +73 -0
  29. package/src/elements/loader.extensions.css +27 -0
  30. package/src/forms/checkbox.css +146 -0
  31. package/src/forms/checkbox.extensions.css +9 -0
  32. package/src/forms/file.css +39 -0
  33. package/src/forms/input.css +199 -0
  34. package/src/forms/input.extensions.css +171 -0
  35. package/src/forms/radio.css +112 -0
  36. package/src/forms/radio.extensions.css +9 -0
  37. package/src/forms/range.css +170 -0
  38. package/src/forms/range.extensions.css +13 -0
  39. package/src/forms/select.css +160 -0
  40. package/src/forms/select.extensions.css +107 -0
  41. package/src/forms/switch.css +156 -0
  42. package/src/forms/switch.extensions.css +122 -0
  43. package/src/forms/textarea.css +133 -0
  44. package/src/forms/textarea.extensions.css +15 -0
  45. package/src/foundation.css +35 -0
  46. package/src/index.css +14 -0
  47. package/src/variables.css +112 -0
package/dist/trace.css ADDED
@@ -0,0 +1,2136 @@
1
+ @layer trace.foundation {
2
+ :where(:root) {
3
+ --trace-bg-light: oklch(96.2441% .00418752 236.497);
4
+ --trace-bg-dark: oklch(19.7902% .0189863 235.357);
5
+ --trace-neutral: oklch(50% 0 0);
6
+ --trace-neutral-lighter: oklch(from var(--trace-neutral) calc(l + .5) c h);
7
+ --trace-neutral-light: oklch(from var(--trace-neutral) calc(l + .25) c h);
8
+ --trace-neutral-dark: oklch(from var(--trace-neutral) calc(l - .25) c h);
9
+ --trace-neutral-darker: oklch(from var(--trace-neutral) calc(l - .5) c h);
10
+ --trace-text-light: oklch(9.44872% .0654731 264.052);
11
+ --trace-text-dark: oklch(92.494% 0 0);
12
+ --trace-primary: oklch(37.662% .0682014 228.503);
13
+ --trace-secondary: oklch(87.9592% .170365 81.3235);
14
+ --trace-primary-lighter: oklch(from var(--trace-primary) calc(l + (1 - l) * .6) c h);
15
+ --trace-primary-light: oklch(from var(--trace-primary) calc(l + (1 - l) * .3) c h);
16
+ --trace-primary-dark: oklch(from var(--trace-primary) calc(l * .7) c h);
17
+ --trace-primary-darker: oklch(from var(--trace-primary) calc(l * .4) c h);
18
+ --trace-secondary-lighter: oklch(from var(--trace-secondary) calc(l + (1 - l) * .6) c h);
19
+ --trace-secondary-light: oklch(from var(--trace-secondary) calc(l + (1 - l) * .3) c h);
20
+ --trace-secondary-dark: oklch(from var(--trace-secondary) calc(l * .7) c h);
21
+ --trace-secondary-darker: oklch(from var(--trace-secondary) calc(l * .4) c h);
22
+ --trace-danger: oklch(52.3358% .198564 31.9584);
23
+ --trace-success: oklch(69.13% .14353 158.708);
24
+ --trace-font-family-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";
25
+ --trace-font-family-sans: system-ui, sans-serif, var(--trace-font-family-emoji);
26
+ --trace-font-family-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono",
27
+ monospace, var(--trace-font-family-emoji);
28
+ --trace-font-body: var(--trace-font-family-sans);
29
+ --trace-font-heading: var(--trace-font-body);
30
+ --trace-font-code: var(--trace-font-family-mono);
31
+ --trace-radius-none: 0;
32
+ --trace-radius-sm: 4px;
33
+ --trace-radius-full: 50%;
34
+ --trace-radius-control: var(--trace-radius-sm);
35
+ --trace-control-padding-block: .625rem;
36
+ --trace-control-padding-inline: 1rem;
37
+ --trace-shadow-color: light-dark(oklch(from var(--trace-neutral-darker) l c h / 25%), oklch(from var(--trace-neutral-lighter) l c h / 25%));
38
+ --trace-shadow: 5px 5px 0 0 var(--trace-shadow-color);
39
+ --trace-bg: light-dark(var(--trace-bg-light), var(--trace-bg-dark));
40
+ --trace-text: light-dark(var(--trace-text-light), var(--trace-text-dark));
41
+ --trace-control-bg: light-dark(var(--trace-neutral-lighter), var(--trace-bg-dark));
42
+ }
43
+
44
+ :where(*) {
45
+ box-sizing: border-box;
46
+ }
47
+
48
+ :where(body) {
49
+ font-family: var(--trace-font-body);
50
+ background-color: var(--trace-bg);
51
+ color: var(--trace-text);
52
+ margin: 0;
53
+ }
54
+
55
+ :where(button, input, select, textarea) {
56
+ font: inherit;
57
+ }
58
+
59
+ :where(:root) {
60
+ color-scheme: light dark;
61
+ }
62
+
63
+ :where([data-mode="light"], [data-mode="dark"]) {
64
+ background-color: var(--trace-bg);
65
+ color: var(--trace-text);
66
+ }
67
+
68
+ :where([data-mode="light"]) {
69
+ color-scheme: light;
70
+ }
71
+
72
+ :where([data-mode="dark"]) {
73
+ color-scheme: dark;
74
+ }
75
+ }
76
+
77
+ @layer trace.elements {
78
+ :where(:root) {
79
+ --trace-font-size-h1: 3rem;
80
+ --trace-font-size-h2: 2.5rem;
81
+ --trace-font-size-h3: 2rem;
82
+ --trace-font-size-h4: 1.5rem;
83
+ --trace-font-size-h5: 1.25rem;
84
+ --trace-font-size-h6: 1rem;
85
+ --trace-typography-line-height: 1.6;
86
+ --trace-heading-line-height: 1.25;
87
+ --trace-heading-margin-block-end: 1rem;
88
+ --trace-paragraph-margin-block-end: 1rem;
89
+ --trace-divider-margin-block: 2rem;
90
+ --trace-blockquote-margin-block: 1.5rem;
91
+ --trace-blockquote-padding-block: .75rem;
92
+ --trace-blockquote-padding-inline: 1.25rem;
93
+ --trace-typography-border: light-dark(var(--trace-neutral-light), var(--trace-neutral-dark));
94
+ --trace-mark-bg: var(--trace-secondary-lighter);
95
+ --trace-mark-text: var(--trace-neutral-darker);
96
+ --trace-kbd-bg: light-dark(var(--trace-neutral-dark), var(--trace-neutral-lighter));
97
+ --trace-kbd-text: light-dark(var(--trace-text-dark), var(--trace-text-light));
98
+ --trace-kbd-border: light-dark(var(--trace-neutral-darker), var(--trace-neutral-light));
99
+ --trace-kbd-shadow: 1px 1px 0 0
100
+ oklch(from var(--trace-neutral-darker) l c h / 25%);
101
+ --trace-blockquote-border: light-dark(var(--trace-primary), var(--trace-secondary));
102
+ --trace-blockquote-bg: light-dark(color-mix(in oklch,
103
+ var(--trace-bg-light),
104
+ var(--trace-neutral-darker) 5%), color-mix(in oklch, var(--trace-bg-dark), var(--trace-neutral-lighter) 8%));
105
+ }
106
+
107
+ @media (width < 48rem) {
108
+ :where(:root) {
109
+ --trace-font-size-h1: 2rem;
110
+ --trace-font-size-h2: 1.75rem;
111
+ --trace-font-size-h3: 1.5rem;
112
+ --trace-font-size-h4: 1.25rem;
113
+ --trace-font-size-h5: 1.125rem;
114
+ }
115
+ }
116
+
117
+ :where(body) {
118
+ line-height: var(--trace-typography-line-height);
119
+ overflow-wrap: anywhere;
120
+ }
121
+
122
+ :where(h1, h2, h3, h4, h5, h6) {
123
+ margin-block: 0 var(--trace-heading-margin-block-end);
124
+ font-family: var(--trace-font-heading);
125
+ font-weight: 700;
126
+ line-height: var(--trace-heading-line-height);
127
+ overflow-wrap: anywhere;
128
+ }
129
+
130
+ :where(h1) {
131
+ font-size: var(--trace-font-size-h1);
132
+ }
133
+
134
+ :where(h2) {
135
+ font-size: var(--trace-font-size-h2);
136
+ }
137
+
138
+ :where(h3) {
139
+ font-size: var(--trace-font-size-h3);
140
+ }
141
+
142
+ :where(h4) {
143
+ font-size: var(--trace-font-size-h4);
144
+ }
145
+
146
+ :where(h5) {
147
+ font-size: var(--trace-font-size-h5);
148
+ }
149
+
150
+ :where(h6) {
151
+ font-size: var(--trace-font-size-h6);
152
+ }
153
+
154
+ :where(code, pre, kbd, samp) {
155
+ font-family: var(--trace-font-code);
156
+ }
157
+
158
+ :where(pre) {
159
+ min-inline-size: 0;
160
+ max-inline-size: 100%;
161
+ overflow-x: auto;
162
+ }
163
+
164
+ :where(p) {
165
+ margin-block: 0 var(--trace-paragraph-margin-block-end);
166
+ line-height: var(--trace-typography-line-height);
167
+ }
168
+
169
+ :where(ul, ol, dl) {
170
+ line-height: var(--trace-typography-line-height);
171
+ }
172
+
173
+ :where(abbr[title]) {
174
+ text-underline-offset: .2em;
175
+ cursor: help;
176
+ -webkit-text-decoration: underline dotted;
177
+ text-decoration: underline dotted;
178
+ }
179
+
180
+ :where(strong, b) {
181
+ font-weight: 700;
182
+ }
183
+
184
+ :where(i, em, cite) {
185
+ font-style: italic;
186
+ }
187
+
188
+ :where(del, s) {
189
+ text-decoration: line-through;
190
+ }
191
+
192
+ :where(ins, u) {
193
+ text-underline-offset: .15em;
194
+ text-decoration: underline;
195
+ }
196
+
197
+ :where(kbd) {
198
+ border: 1px solid var(--trace-kbd-border);
199
+ border-radius: var(--trace-radius-sm);
200
+ background-color: var(--trace-kbd-bg);
201
+ color: var(--trace-kbd-text);
202
+ box-shadow: var(--trace-kbd-shadow);
203
+ vertical-align: baseline;
204
+ border-bottom-width: 2px;
205
+ padding: .125em .375em;
206
+ font-size: .875em;
207
+ line-height: 1.25;
208
+ display: inline-block;
209
+ }
210
+
211
+ :where(mark) {
212
+ border-radius: var(--trace-radius-sm);
213
+ background-color: var(--trace-mark-bg);
214
+ color: var(--trace-mark-text);
215
+ -webkit-box-decoration-break: clone;
216
+ box-decoration-break: clone;
217
+ padding: .125em .25em;
218
+ }
219
+
220
+ :where(small) {
221
+ font-size: .875em;
222
+ }
223
+
224
+ :where(sub, sup) {
225
+ vertical-align: baseline;
226
+ font-size: .75em;
227
+ line-height: 0;
228
+ position: relative;
229
+ }
230
+
231
+ :where(sub) {
232
+ bottom: -.25em;
233
+ }
234
+
235
+ :where(sup) {
236
+ top: -.5em;
237
+ }
238
+
239
+ :where(hr) {
240
+ height: 0;
241
+ margin-block: var(--trace-divider-margin-block);
242
+ border: 0;
243
+ border-block-start: 2px solid var(--trace-typography-border);
244
+ }
245
+
246
+ :where(blockquote) {
247
+ margin-block: var(--trace-blockquote-margin-block);
248
+ padding-block: var(--trace-blockquote-padding-block);
249
+ padding-inline: var(--trace-blockquote-padding-inline);
250
+ border-inline-start: .25rem solid var(--trace-blockquote-border);
251
+ background-color: var(--trace-blockquote-bg);
252
+ line-height: var(--trace-typography-line-height);
253
+ margin-inline: 0;
254
+ }
255
+
256
+ :where(blockquote > :last-child) {
257
+ margin-block-end: 0;
258
+ }
259
+
260
+ :where(:root) {
261
+ --trace-link-color: light-dark(var(--trace-primary), var(--trace-secondary));
262
+ --trace-link-hover: light-dark(var(--trace-primary-light), var(--trace-secondary-light));
263
+ --trace-link-active: light-dark(var(--trace-primary-dark), var(--trace-secondary-dark));
264
+ --trace-link-visited: var(--trace-link-color);
265
+ --trace-link-focus: var(--trace-link-color);
266
+ --trace-link-underline-offset: .2em;
267
+ --trace-link-underline-thickness: .08em;
268
+ }
269
+
270
+ :where(a[href]) {
271
+ color: var(--trace-link-color);
272
+ text-decoration-line: underline;
273
+ text-decoration-color: currentColor;
274
+ text-decoration-thickness: var(--trace-link-underline-thickness);
275
+ text-underline-offset: var(--trace-link-underline-offset);
276
+ -webkit-text-decoration-skip-ink: auto;
277
+ text-decoration-skip-ink: auto;
278
+ border-radius: var(--trace-radius-sm);
279
+ transition: color .15s ease-in-out;
280
+
281
+ &:visited {
282
+ color: var(--trace-link-visited);
283
+ }
284
+
285
+ &:hover {
286
+ color: var(--trace-link-hover);
287
+ text-decoration-thickness: calc(var(--trace-link-underline-thickness) * 2);
288
+ }
289
+
290
+ &:active {
291
+ color: var(--trace-link-active);
292
+ }
293
+
294
+ &:focus-visible {
295
+ outline: 2px solid var(--trace-link-focus);
296
+ outline-offset: 3px;
297
+ }
298
+ }
299
+
300
+ @media (prefers-reduced-motion: reduce) {
301
+ :where(a[href]) {
302
+ transition: none;
303
+ }
304
+ }
305
+
306
+ @media (forced-colors: active) {
307
+ :where(a[href]) {
308
+ color: linktext;
309
+
310
+ &:visited {
311
+ color: visitedtext;
312
+ }
313
+
314
+ &:active {
315
+ color: activetext;
316
+ }
317
+
318
+ &:focus-visible {
319
+ outline-color: highlight;
320
+ }
321
+ }
322
+ }
323
+
324
+ :where(:root) {
325
+ --trace-table-text: var(--trace-text);
326
+ --trace-table-accent: light-dark(var(--trace-primary), var(--trace-secondary));
327
+ --trace-table-border: color-mix(in oklch,
328
+ var(--trace-table-accent),
329
+ transparent 78%);
330
+ --trace-table-header-bg: transparent;
331
+ --trace-table-header-text: var(--trace-table-accent);
332
+ --trace-table-row-heading: var(--trace-table-text);
333
+ --trace-table-footer-bg: transparent;
334
+ --trace-table-stripe-bg: color-mix(in oklch,
335
+ var(--trace-table-accent),
336
+ transparent 97%);
337
+ --trace-table-hover-bg: light-dark(color-mix(in oklch, var(--trace-primary), transparent 93%), color-mix(in oklch, var(--trace-secondary), transparent 90%));
338
+ --trace-table-radius: 0;
339
+ --trace-table-padding-block: .75rem;
340
+ --trace-table-padding-inline: .75rem;
341
+ --trace-table-font-size: 1rem;
342
+ --trace-table-line-height: 1.5;
343
+ }
344
+
345
+ :where(table) {
346
+ border-collapse: separate;
347
+ border-spacing: 0;
348
+ inline-size: 100%;
349
+ color: var(--trace-table-text);
350
+ font-size: var(--trace-table-font-size);
351
+ line-height: var(--trace-table-line-height);
352
+ text-align: start;
353
+ }
354
+
355
+ :where(table > caption) {
356
+ caption-side: top;
357
+ text-align: start;
358
+ padding-block: 0 1rem;
359
+ padding-inline: 0;
360
+ font-size: 1em;
361
+ font-weight: 600;
362
+ line-height: 1.4;
363
+ }
364
+
365
+ :where(table > :is(thead, tbody, tfoot) > tr > :is(th, td), table > tr > :is(th, td)) {
366
+ padding: var(--trace-table-padding-block) var(--trace-table-padding-inline);
367
+ border-block-end: 1px solid var(--trace-table-border);
368
+ vertical-align: top;
369
+ text-align: inherit;
370
+ }
371
+
372
+ :where(table > :is(thead, tbody, tfoot) > tr > th, table > tr > th) {
373
+ font-weight: 600;
374
+ }
375
+
376
+ :where(table > thead > tr > :is(th, td)) {
377
+ background-color: var(--trace-table-header-bg);
378
+ color: var(--trace-table-header-text);
379
+ border-block-end: 2px solid var(--trace-table-accent);
380
+ vertical-align: middle;
381
+ letter-spacing: normal;
382
+ font-size: .875em;
383
+ }
384
+
385
+ :where(table > tbody > tr > th) {
386
+ color: var(--trace-table-row-heading);
387
+ }
388
+
389
+ :where(table > thead > tr:first-child > :first-child) {
390
+ border-start-start-radius: var(--trace-table-radius);
391
+ }
392
+
393
+ :where(table > thead > tr:first-child > :last-child) {
394
+ border-start-end-radius: var(--trace-table-radius);
395
+ }
396
+
397
+ :where(table:has( > tfoot) > tbody:last-of-type > tr:last-child > :is(th, td)) {
398
+ border-block-end: 0;
399
+ }
400
+
401
+ :where(table > tfoot > tr > :is(th, td)) {
402
+ background-color: var(--trace-table-footer-bg);
403
+ color: var(--trace-table-accent);
404
+ border-block-start: 2px solid var(--trace-table-accent);
405
+ border-block-end: 0;
406
+ font-weight: 600;
407
+ }
408
+
409
+ :where(table > tfoot > tr:last-child > :first-child) {
410
+ border-end-start-radius: var(--trace-table-radius);
411
+ }
412
+
413
+ :where(table > tfoot > tr:last-child > :last-child) {
414
+ border-end-end-radius: var(--trace-table-radius);
415
+ }
416
+
417
+ @keyframes trace-square-rotate {
418
+ 0% {
419
+ transform: rotateX(0) rotateY(0);
420
+ }
421
+
422
+ 25% {
423
+ transform: rotateX(180deg) rotateY(0);
424
+ }
425
+
426
+ 50% {
427
+ transform: rotateX(180deg) rotateY(180deg);
428
+ }
429
+
430
+ 75% {
431
+ transform: rotateX(0) rotateY(180deg);
432
+ }
433
+
434
+ 100% {
435
+ transform: rotateX(0) rotateY(0);
436
+ }
437
+ }
438
+
439
+ :where(div, section, article, main, aside, nav, header, footer, form, fieldset, figure):where([aria-busy="true"]) {
440
+ isolation: isolate;
441
+ cursor: wait;
442
+ position: relative;
443
+
444
+ &:before {
445
+ content: "";
446
+ z-index: 1;
447
+ border-radius: inherit;
448
+ background: var(--trace-loader-overlay, color-mix(in srgb, var(--trace-bg), transparent 30%));
449
+ position: absolute;
450
+ inset: 0;
451
+ }
452
+
453
+ &:after {
454
+ content: "";
455
+ z-index: 2;
456
+ inline-size: var(--trace-loader-size, 2rem);
457
+ block-size: var(--trace-loader-size, 2rem);
458
+ border-radius: var(--trace-loader-radius, 2px);
459
+ background-color: var(--trace-loader-color, light-dark(var(--trace-primary), var(--trace-secondary)));
460
+ animation: trace-square-rotate var(--trace-loader-duration, 3s)
461
+ ease-in-out infinite;
462
+ pointer-events: none;
463
+ margin: auto;
464
+ position: absolute;
465
+ inset: 0;
466
+ }
467
+
468
+ @media (prefers-reduced-motion: reduce) {
469
+ &:after {
470
+ animation: none;
471
+ }
472
+ }
473
+ }
474
+
475
+ :where(:root) {
476
+ --trace-button-color: light-dark(var(--trace-primary-darker), var(--trace-secondary));
477
+ --trace-button-contrast: light-dark(var(--trace-secondary), var(--trace-primary-dark));
478
+ --trace-button-outline-color: var(--trace-button-color);
479
+ --trace-button-radius: var(--trace-radius-control);
480
+ --trace-button-font-size: 1rem;
481
+ --trace-button-line-height: 1.5rem;
482
+ --trace-button-padding-block: .375rem;
483
+ --trace-button-padding-inline: .75rem;
484
+ --trace-button-box-shadow: var(--trace-shadow);
485
+ --trace-button-icon-gap: .5em;
486
+ }
487
+
488
+ :where(button[type="reset"], input[type="reset"]) {
489
+ --trace-button-color: var(--trace-primary-light);
490
+ --trace-button-contrast: var(--trace-secondary-lighter);
491
+ --trace-button-outline-color: var(--trace-button-color);
492
+ }
493
+
494
+ :where(button, input[type="button"], input[type="submit"], input[type="reset"]) {
495
+ justify-content: center;
496
+ align-items: center;
497
+ gap: var(--trace-button-icon-gap);
498
+ box-sizing: border-box;
499
+ padding: var(--trace-button-padding-block)
500
+ var(--trace-button-padding-inline);
501
+ border: 2px solid var(--trace-button-border, var(--trace-button-color));
502
+ border-radius: var(--trace-button-radius);
503
+ background-color: var(--trace-button-bg, var(--trace-button-color));
504
+ color: var(--trace-button-text, var(--trace-button-contrast));
505
+ font-size: var(--trace-button-font-size);
506
+ font-weight: 400;
507
+ line-height: var(--trace-button-line-height);
508
+ text-align: center;
509
+ cursor: pointer;
510
+ transition: background-color .2s ease-in-out, color .2s ease-in-out, border-color .2s ease-in-out, box-shadow .2s ease-in-out, transform .2s ease-in-out;
511
+ display: inline-flex;
512
+ }
513
+
514
+ :where(button:hover:not(:disabled), input[type="button"]:hover:not(:disabled), input[type="submit"]:hover:not(:disabled), input[type="reset"]:hover:not(:disabled)) {
515
+ box-shadow: var(--trace-button-box-shadow);
516
+ }
517
+
518
+ :where(button:active:not(:disabled), input[type="button"]:active:not(:disabled), input[type="submit"]:active:not(:disabled), input[type="reset"]:active:not(:disabled)) {
519
+ box-shadow: var(--trace-button-box-shadow);
520
+ transform: scale(.95);
521
+ }
522
+
523
+ :where(button:focus-visible, input[type="button"]:focus-visible, input[type="submit"]:focus-visible, input[type="reset"]:focus-visible) {
524
+ outline: 2px solid var(--trace-button-outline-color);
525
+ outline-offset: 2px;
526
+ box-shadow: none;
527
+ }
528
+
529
+ :where(button:disabled, input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled) {
530
+ opacity: .5;
531
+ cursor: not-allowed;
532
+ }
533
+
534
+ :where(button[aria-busy="true"]):after {
535
+ content: "";
536
+ inline-size: var(--trace-loader-size, 1em);
537
+ block-size: var(--trace-loader-size, 1em);
538
+ border-radius: var(--trace-loader-radius, 2px);
539
+ background-color: var(--trace-button-loader-color, var(--trace-button-text, var(--trace-button-contrast)));
540
+ animation: trace-square-rotate var(--trace-loader-duration, 3s) ease-in-out
541
+ infinite;
542
+ pointer-events: none;
543
+ margin: auto;
544
+ position: absolute;
545
+ inset: 0;
546
+ }
547
+
548
+ @media (prefers-reduced-motion: reduce) {
549
+ :where(button, input[type="button"], input[type="submit"], input[type="reset"]) {
550
+ transition: none;
551
+ transform: none;
552
+ }
553
+ }
554
+
555
+ @media (forced-colors: active) {
556
+ :where(button:disabled, input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled) {
557
+ opacity: 1;
558
+ color: graytext;
559
+ border-color: graytext;
560
+ }
561
+ }
562
+
563
+ :where(button[aria-busy="true"]) {
564
+ cursor: wait;
565
+ opacity: 1;
566
+ box-shadow: none;
567
+ color: #0000;
568
+ position: relative;
569
+ transform: none;
570
+ }
571
+
572
+ @media (prefers-reduced-motion: reduce) {
573
+ :where(button[aria-busy="true"]):after {
574
+ animation: none;
575
+ }
576
+ }
577
+
578
+ @media (forced-colors: active) {
579
+ :where(button[aria-busy="true"]) {
580
+ forced-color-adjust: none;
581
+ background-color: buttonface;
582
+ border-color: buttontext;
583
+ }
584
+
585
+ :where(button[aria-busy="true"]):after {
586
+ background-color: buttontext;
587
+ }
588
+ }
589
+
590
+ :where(button[aria-busy="true"] > *) {
591
+ opacity: 0;
592
+ }
593
+
594
+ :where(:root) {
595
+ --trace-switch-width: 2.125rem;
596
+ --trace-switch-height: 1.25rem;
597
+ --trace-switch-dot-size: .75rem;
598
+ --trace-switch-dot-active-size: .875rem;
599
+ --trace-switch-padding: .125rem;
600
+ --trace-switch-color: light-dark(var(--trace-primary), var(--trace-secondary));
601
+ --trace-switch-radius: var(--trace-radius-sm);
602
+ }
603
+
604
+ :where(input[type="checkbox"][role="switch"]) {
605
+ appearance: none;
606
+ box-sizing: border-box;
607
+ inline-size: var(--trace-switch-width);
608
+ block-size: var(--trace-switch-height);
609
+ padding: var(--trace-switch-padding);
610
+ border: 2px solid var(--trace-switch-color);
611
+ border-radius: var(--trace-switch-radius);
612
+ background-color: var(--trace-switch-bg, var(--trace-control-bg));
613
+ background-image: radial-gradient(ellipse at center,
614
+ var(--trace-switch-color) 50%,
615
+ transparent 50%);
616
+ vertical-align: middle;
617
+ cursor: pointer;
618
+ background-position: right -100% top 50%;
619
+ background-repeat: no-repeat;
620
+ background-size: 200% 300%;
621
+ flex-shrink: 0;
622
+ margin: 2px;
623
+ transition: transform .25s ease-in-out, background-position .25s ease-in-out;
624
+ display: inline-block;
625
+ position: relative;
626
+ overflow: hidden;
627
+ }
628
+
629
+ :where(input[type="checkbox"][role="switch"]):before {
630
+ content: "";
631
+ inline-size: var(--trace-switch-dot-size);
632
+ block-size: var(--trace-switch-dot-size);
633
+ background-color: var(--trace-switch-color);
634
+ border-radius: 2px;
635
+ transition: inset-inline-start .2s ease-in-out, inline-size .2s ease-in-out, background-color .2s ease-in-out;
636
+ position: absolute;
637
+ inset-block-start: var(--trace-switch-padding);
638
+ inset-inline-start: var(--trace-switch-padding);
639
+ }
640
+
641
+ :where(input[type="checkbox"][role="switch"]:checked) {
642
+ background-position: right 40% top 50%;
643
+ }
644
+
645
+ :where(input[type="checkbox"][role="switch"]:checked):before {
646
+ background-color: var(--trace-switch-dot-checked, var(--trace-switch-bg, var(--trace-control-bg)));
647
+ inset-inline-start: calc(100% - var(--trace-switch-dot-size) - var(--trace-switch-padding));
648
+ }
649
+
650
+ :where(input[type="checkbox"][role="switch"]:dir(rtl)) {
651
+ background-position: -100%;
652
+ }
653
+
654
+ :where(input[type="checkbox"][role="switch"]:dir(rtl):checked) {
655
+ background-position: 40%;
656
+ }
657
+
658
+ :where(input[type="checkbox"][role="switch"]:focus-visible) {
659
+ outline: 2px solid var(--trace-switch-color);
660
+ outline-offset: 2px;
661
+ }
662
+
663
+ :where(label:has( > input[type="checkbox"][role="switch"])) {
664
+ cursor: pointer;
665
+ align-items: center;
666
+ gap: .5rem;
667
+ display: inline-flex;
668
+ }
669
+
670
+ :where(input[type="checkbox"][role="switch"]:active:not(:disabled), label:active > input[type="checkbox"][role="switch"]:not(:disabled)) {
671
+ transform: scale(.9);
672
+ }
673
+
674
+ :where(input[type="checkbox"][role="switch"]:active:not(:disabled), label:active > input[type="checkbox"][role="switch"]:not(:disabled)):before {
675
+ inline-size: var(--trace-switch-dot-active-size);
676
+ }
677
+
678
+ :where(input[type="checkbox"][role="switch"]:active:checked:not(:disabled), label:active > input[type="checkbox"][role="switch"]:checked:not(:disabled)):before {
679
+ inset-inline-start: calc(100% - var(--trace-switch-dot-active-size) - var(--trace-switch-padding));
680
+ }
681
+
682
+ :where(input[type="checkbox"][role="switch"]:disabled) {
683
+ opacity: .5;
684
+ cursor: not-allowed;
685
+ }
686
+
687
+ :where(label:has( > input[type="checkbox"][role="switch"]:disabled)) {
688
+ cursor: not-allowed;
689
+ }
690
+
691
+ :where(label > input[type="checkbox"][role="switch"]:disabled ~ span) {
692
+ opacity: .5;
693
+ }
694
+
695
+ @media (prefers-reduced-motion: reduce) {
696
+ :where(input[type="checkbox"][role="switch"]), :where(input[type="checkbox"][role="switch"]):before {
697
+ transition: none;
698
+ transform: none;
699
+ }
700
+ }
701
+
702
+ @media (forced-colors: active) {
703
+ :where(input[type="checkbox"][role="switch"]) {
704
+ appearance: auto;
705
+ background: none;
706
+ }
707
+
708
+ :where(input[type="checkbox"][role="switch"]):before {
709
+ content: none;
710
+ }
711
+ }
712
+
713
+ :where(input[type="checkbox"][role="switch"][aria-invalid="true"]) {
714
+ --trace-switch-color: var(--trace-danger);
715
+ }
716
+
717
+ :where(:root) {
718
+ --trace-radio-size: 1.25rem;
719
+ --trace-radio-color: light-dark(var(--trace-primary), var(--trace-secondary));
720
+ }
721
+
722
+ :where(input[type="radio"]) {
723
+ appearance: none;
724
+ box-sizing: border-box;
725
+ inline-size: var(--trace-radio-size);
726
+ block-size: var(--trace-radio-size);
727
+ border: 2px solid var(--trace-radio-color);
728
+ background: var(--trace-radio-bg, var(--trace-control-bg));
729
+ vertical-align: middle;
730
+ cursor: pointer;
731
+ border-radius: 50%;
732
+ flex-shrink: 0;
733
+ margin: 2px;
734
+ padding: 0;
735
+ transition: transform .25s ease-in-out, border-color .25s ease-in-out;
736
+ display: inline-block;
737
+ position: relative;
738
+ }
739
+
740
+ :where(input[type="radio"]):before {
741
+ content: "";
742
+ box-sizing: border-box;
743
+ border: 2px solid var(--trace-radio-color);
744
+ background-color: #0000;
745
+ border-radius: 50%;
746
+ transition: border-color .25s ease-in-out, background-color .25s ease-in-out, transform .25s ease-in-out;
747
+ position: absolute;
748
+ inset: -2px;
749
+ }
750
+
751
+ :where(input[type="radio"]:checked):before {
752
+ background-color: var(--trace-radio-color);
753
+ transform: scale(.6);
754
+ }
755
+
756
+ :where(input[type="radio"]:focus-visible) {
757
+ outline: 2px solid var(--trace-radio-color);
758
+ outline-offset: 2px;
759
+ }
760
+
761
+ :where(label:has( > input[type="radio"])) {
762
+ cursor: pointer;
763
+ align-items: center;
764
+ gap: .5rem;
765
+ display: inline-flex;
766
+ }
767
+
768
+ :where(input[type="radio"]:active:not(:disabled), label:active > input[type="radio"]:not(:disabled)) {
769
+ transform: scale(.9);
770
+ }
771
+
772
+ :where(input[type="radio"]:disabled) {
773
+ opacity: .5;
774
+ cursor: not-allowed;
775
+ }
776
+
777
+ :where(label:has( > input[type="radio"]:disabled)) {
778
+ cursor: not-allowed;
779
+ }
780
+
781
+ :where(label > input[type="radio"]:disabled ~ span) {
782
+ opacity: .5;
783
+ }
784
+
785
+ @media (prefers-reduced-motion: reduce) {
786
+ :where(input[type="radio"]), :where(input[type="radio"]):before {
787
+ transition: none;
788
+ transform: none;
789
+ }
790
+
791
+ :where(input[type="radio"]:checked):before {
792
+ transform: scale(.6);
793
+ }
794
+ }
795
+
796
+ @media (forced-colors: active) {
797
+ :where(input[type="radio"]) {
798
+ appearance: auto;
799
+ }
800
+
801
+ :where(input[type="radio"]):before {
802
+ content: none;
803
+ }
804
+ }
805
+
806
+ :where(input[type="radio"][aria-invalid="true"]) {
807
+ --trace-radio-color: var(--trace-danger);
808
+ }
809
+
810
+ :where(:root) {
811
+ --trace-input-font-size: 1rem;
812
+ --trace-input-line-height: 1.5rem;
813
+ --trace-input-padding-block: .375rem;
814
+ --trace-input-padding-inline: .625rem;
815
+ --trace-input-radius: var(--trace-radius-control);
816
+ --trace-input-text: var(--trace-text);
817
+ --trace-input-border: light-dark(var(--trace-primary), var(--trace-secondary));
818
+ --trace-input-focus: light-dark(var(--trace-primary-light), var(--trace-secondary-light));
819
+ --trace-input-placeholder: light-dark(var(--trace-neutral), var(--trace-neutral-light));
820
+ --trace-input-error: var(--trace-danger);
821
+ --trace-input-shadow: var(--trace-shadow);
822
+ }
823
+
824
+ :where(input:not([type]), input:is([type="text"], [type="search"], [type="email"], [type="url"], [type="tel"], [type="password"], [type="number"], [type="date"], [type="datetime-local"], [type="month"], [type="week"], [type="time"], [type="color"], [type="file"])) {
825
+ --_trace-input-border: var(--trace-input-border);
826
+ box-sizing: border-box;
827
+ inline-size: 100%;
828
+ min-inline-size: 0;
829
+ padding: var(--trace-input-padding-block) var(--trace-input-padding-inline);
830
+ border: 2px solid var(--_trace-input-border);
831
+ border-radius: var(--trace-input-radius);
832
+ background-color: var(--trace-input-bg, var(--trace-control-bg));
833
+ color: var(--trace-input-text);
834
+ caret-color: var(--trace-input-focus);
835
+ font-family: var(--trace-font-body);
836
+ font-size: var(--trace-input-font-size);
837
+ line-height: var(--trace-input-line-height);
838
+ text-align: start;
839
+ cursor: text;
840
+ margin: 0;
841
+ transition: border-color .2s ease-in-out, box-shadow .2s ease-in-out;
842
+ display: block;
843
+
844
+ &::placeholder {
845
+ color: var(--trace-input-placeholder);
846
+ opacity: 1;
847
+ }
848
+
849
+ &:hover:not(:disabled):not([readonly]):not(:focus) {
850
+ box-shadow: var(--trace-input-shadow);
851
+ }
852
+
853
+ &:focus {
854
+ --_trace-input-border: var(--trace-input-focus);
855
+ outline-offset: 2px;
856
+ box-shadow: 0 0 0 4px
857
+ color-mix(in srgb, var(--trace-input-focus), transparent 70%);
858
+ outline: 2px solid #0000;
859
+ }
860
+
861
+ &[readonly] {
862
+ cursor: default;
863
+ }
864
+
865
+ &[aria-invalid="true"] {
866
+ --_trace-input-border: var(--trace-input-error);
867
+ }
868
+
869
+ &:user-invalid {
870
+ --_trace-input-border: var(--trace-input-error);
871
+ }
872
+
873
+ &:disabled {
874
+ opacity: .5;
875
+ cursor: not-allowed;
876
+ box-shadow: none;
877
+ }
878
+
879
+ @media (prefers-reduced-motion: reduce) {
880
+ transition: none;
881
+ }
882
+ }
883
+
884
+ :where(input[type="color"]) {
885
+ block-size: calc(var(--trace-input-line-height) + var(--trace-input-padding-block) * 2 +
886
+ 4px);
887
+ cursor: pointer;
888
+ padding: .25rem;
889
+ }
890
+
891
+ :where(input[type="color"])::-webkit-color-swatch-wrapper {
892
+ padding: 0;
893
+ }
894
+
895
+ :where(input[type="color"])::-webkit-color-swatch {
896
+ border: 0;
897
+ border-radius: 1px;
898
+ }
899
+
900
+ :where(input[type="color"])::-moz-color-swatch {
901
+ border: 0;
902
+ border-radius: 1px;
903
+ }
904
+
905
+ :where(label:has( > input:not([type]), > input:is([type="text"], [type="search"], [type="email"], [type="url"], [type="tel"], [type="password"], [type="number"], [type="date"], [type="datetime-local"], [type="month"], [type="week"], [type="time"], [type="color"], [type="file"]))) {
906
+ cursor: pointer;
907
+ min-inline-size: 0;
908
+ color: var(--trace-input-text);
909
+ gap: .25rem;
910
+ display: grid;
911
+
912
+ &:has( > input[aria-invalid="true"]) > small:last-child {
913
+ color: var(--trace-input-error);
914
+ }
915
+
916
+ &:has( > input:user-invalid) > small:last-child {
917
+ color: var(--trace-input-error);
918
+ }
919
+
920
+ &:has( > input:disabled) {
921
+ color: color-mix(in srgb, var(--trace-input-text), transparent 50%);
922
+ cursor: not-allowed;
923
+ }
924
+
925
+ & > small {
926
+ margin: 0;
927
+ line-height: 1.5;
928
+ }
929
+ }
930
+
931
+ :where(label:has(input) + small) {
932
+ margin-block-start: .25rem;
933
+ line-height: 1.5;
934
+ display: block;
935
+ }
936
+
937
+ :where(label:has(input[aria-invalid="true"], input:user-invalid) + small) {
938
+ color: var(--trace-input-error);
939
+ }
940
+
941
+ :where(label[for]:not(:has(input))) {
942
+ cursor: pointer;
943
+ color: var(--trace-input-text);
944
+ margin-block-end: .25rem;
945
+ display: inline-block;
946
+ }
947
+
948
+ :where(input[aria-invalid="true"] + small, input:user-invalid + small) {
949
+ color: var(--trace-input-error);
950
+ }
951
+
952
+ :where(label[for]:has( + input:disabled)) {
953
+ opacity: .5;
954
+ cursor: not-allowed;
955
+ }
956
+
957
+ :where(:root) {
958
+ --trace-file-button-bg: var(--trace-primary-light);
959
+ --trace-file-button-text: var(--trace-secondary-lighter);
960
+ }
961
+
962
+ :where(input[type="file"]) {
963
+ cursor: pointer;
964
+ padding-block: 0;
965
+ padding-inline-start: 0;
966
+ }
967
+
968
+ :where(input[type="file"])::file-selector-button {
969
+ padding: var(--trace-input-padding-block) var(--trace-input-padding-inline);
970
+ background: var(--trace-file-button-bg);
971
+ color: var(--trace-file-button-text);
972
+ font: inherit;
973
+ line-height: inherit;
974
+ cursor: pointer;
975
+ border: 0;
976
+ border-radius: 0;
977
+ margin: 0;
978
+ margin-inline-end: var(--trace-input-padding-inline);
979
+ }
980
+
981
+ :where(input[type="file"]:hover:not(:disabled):not([readonly]):not(:focus)) {
982
+ box-shadow: none;
983
+ }
984
+
985
+ :where(input[type="file"]:disabled)::file-selector-button {
986
+ cursor: not-allowed;
987
+ }
988
+
989
+ @media (forced-colors: active) {
990
+ :where(input[type="file"])::file-selector-button {
991
+ border-inline-end: 1px solid buttontext;
992
+ }
993
+ }
994
+
995
+ :where(:root) {
996
+ --trace-textarea-font-size: 1rem;
997
+ --trace-textarea-line-height: 1.5rem;
998
+ --trace-textarea-padding-block: .375rem;
999
+ --trace-textarea-padding-inline: .625rem;
1000
+ --trace-textarea-radius: var(--trace-radius-control);
1001
+ --trace-textarea-text: var(--trace-text);
1002
+ --trace-textarea-border: light-dark(var(--trace-primary), var(--trace-secondary));
1003
+ --trace-textarea-focus: light-dark(var(--trace-primary-light), var(--trace-secondary-light));
1004
+ --trace-textarea-placeholder: light-dark(var(--trace-neutral), var(--trace-neutral-light));
1005
+ --trace-textarea-error: var(--trace-danger);
1006
+ --trace-textarea-shadow: var(--trace-shadow);
1007
+ }
1008
+
1009
+ :where(textarea) {
1010
+ --_trace-textarea-border: var(--trace-textarea-border);
1011
+ box-sizing: border-box;
1012
+ inline-size: 100%;
1013
+ min-inline-size: 0;
1014
+ padding: var(--trace-textarea-padding-block)
1015
+ var(--trace-textarea-padding-inline);
1016
+ border: 2px solid var(--_trace-textarea-border);
1017
+ border-radius: var(--trace-textarea-radius);
1018
+ background: var(--trace-textarea-bg, var(--trace-control-bg));
1019
+ color: var(--trace-textarea-text);
1020
+ caret-color: var(--trace-textarea-focus);
1021
+ font-family: var(--trace-font-body);
1022
+ font-size: var(--trace-textarea-font-size);
1023
+ line-height: var(--trace-textarea-line-height);
1024
+ text-align: start;
1025
+ resize: vertical;
1026
+ cursor: text;
1027
+ margin: 0;
1028
+ transition: border-color .2s ease-in-out, box-shadow .2s ease-in-out;
1029
+ display: block;
1030
+
1031
+ &::placeholder {
1032
+ color: var(--trace-textarea-placeholder);
1033
+ opacity: 1;
1034
+ }
1035
+
1036
+ &:hover:not(:disabled):not([readonly]):not(:focus) {
1037
+ box-shadow: var(--trace-textarea-shadow);
1038
+ }
1039
+
1040
+ &:focus {
1041
+ --_trace-textarea-border: var(--trace-textarea-focus);
1042
+ outline-offset: 2px;
1043
+ box-shadow: 0 0 0 4px
1044
+ color-mix(in srgb, var(--trace-textarea-focus), transparent 70%);
1045
+ outline: 2px solid #0000;
1046
+ }
1047
+
1048
+ &[aria-invalid="true"] {
1049
+ --_trace-textarea-border: var(--trace-textarea-error);
1050
+ }
1051
+
1052
+ &:user-invalid {
1053
+ --_trace-textarea-border: var(--trace-textarea-error);
1054
+ }
1055
+
1056
+ &[readonly] {
1057
+ cursor: default;
1058
+ }
1059
+
1060
+ &:disabled {
1061
+ opacity: .5;
1062
+ cursor: not-allowed;
1063
+ box-shadow: none;
1064
+ }
1065
+
1066
+ @media (prefers-reduced-motion: reduce) {
1067
+ transition: none;
1068
+ }
1069
+ }
1070
+
1071
+ :where(label:has( > textarea)) {
1072
+ min-inline-size: 0;
1073
+ color: var(--trace-textarea-text);
1074
+ cursor: pointer;
1075
+ gap: .25rem;
1076
+ display: grid;
1077
+
1078
+ & > small {
1079
+ margin: 0;
1080
+ line-height: 1.5;
1081
+ }
1082
+
1083
+ &:has( > textarea:disabled) {
1084
+ color: color-mix(in srgb, var(--trace-textarea-text), transparent 50%);
1085
+ cursor: not-allowed;
1086
+ }
1087
+
1088
+ &:has( > textarea[aria-invalid="true"], > textarea:user-invalid) > small:last-child {
1089
+ color: var(--trace-textarea-error);
1090
+ }
1091
+ }
1092
+
1093
+ :where(label:has( > textarea) + small) {
1094
+ margin-block-start: .25rem;
1095
+ line-height: 1.5;
1096
+ display: block;
1097
+ }
1098
+
1099
+ :where(label:has( > textarea[aria-invalid="true"], > textarea:user-invalid) + small) {
1100
+ color: var(--trace-textarea-error);
1101
+ }
1102
+
1103
+ :where(label[for]:has( + textarea:disabled)) {
1104
+ opacity: .5;
1105
+ cursor: not-allowed;
1106
+ }
1107
+
1108
+ :where(textarea[aria-invalid="true"] + small, textarea:user-invalid + small) {
1109
+ color: var(--trace-textarea-error);
1110
+ }
1111
+
1112
+ :where(:root) {
1113
+ --trace-checkbox-size: 1.25rem;
1114
+ --trace-checkbox-radius: var(--trace-radius-control);
1115
+ --trace-checkbox-color: light-dark(var(--trace-primary), var(--trace-secondary));
1116
+ --trace-checkbox-mark: light-dark(var(--trace-neutral-lighter), var(--trace-primary-dark));
1117
+ }
1118
+
1119
+ :where(input[type="checkbox"]:not([role="switch"])) {
1120
+ appearance: none;
1121
+ isolation: isolate;
1122
+ box-sizing: border-box;
1123
+ inline-size: var(--trace-checkbox-size);
1124
+ block-size: var(--trace-checkbox-size);
1125
+ border: 2px solid var(--trace-checkbox-color);
1126
+ border-radius: var(--trace-checkbox-radius);
1127
+ background-color: var(--trace-checkbox-bg, var(--trace-control-bg));
1128
+ vertical-align: middle;
1129
+ cursor: pointer;
1130
+ flex-shrink: 0;
1131
+ margin: 2px;
1132
+ padding: 0;
1133
+ transition: transform .2s ease-in-out, border-color .2s ease-in-out;
1134
+ display: inline-block;
1135
+ position: relative;
1136
+
1137
+ &:before {
1138
+ content: "";
1139
+ z-index: 1;
1140
+ background: var(--trace-checkbox-mark);
1141
+ opacity: 0;
1142
+ transition: opacity .18s ease-in-out, transform .18s ease-in-out;
1143
+ position: absolute;
1144
+ inset: 10%;
1145
+ transform: scale(.6);
1146
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m5 12 4 4 10-10' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
1147
+ }
1148
+
1149
+ &:after {
1150
+ content: "";
1151
+ z-index: 0;
1152
+ border-radius: max(0px, calc(var(--trace-checkbox-radius) - 2px));
1153
+ background-color: var(--trace-checkbox-color);
1154
+ opacity: 0;
1155
+ transition: opacity .18s ease-in-out, transform .18s ease-in-out;
1156
+ position: absolute;
1157
+ inset: 0;
1158
+ transform: scale(.6);
1159
+ }
1160
+
1161
+ &:checked:after, &:indeterminate:after, &:checked:before {
1162
+ opacity: 1;
1163
+ transform: scale(1);
1164
+ }
1165
+
1166
+ &:indeterminate:before {
1167
+ opacity: 1;
1168
+ border-radius: 1px;
1169
+ block-size: 2px;
1170
+ inline-size: 60%;
1171
+ margin: auto;
1172
+ inset: 0;
1173
+ transform: scale(1);
1174
+ mask: none;
1175
+ }
1176
+
1177
+ &:focus-visible {
1178
+ outline: 2px solid var(--trace-checkbox-color);
1179
+ outline-offset: 2px;
1180
+ }
1181
+
1182
+ &:active:not(:disabled) {
1183
+ transform: scale(.9);
1184
+ }
1185
+
1186
+ &:disabled {
1187
+ opacity: .5;
1188
+ cursor: not-allowed;
1189
+ }
1190
+
1191
+ &[aria-invalid="true"] {
1192
+ --trace-checkbox-color: var(--trace-danger);
1193
+ --trace-checkbox-mark: var(--trace-neutral-lighter);
1194
+ }
1195
+
1196
+ &:user-invalid {
1197
+ --trace-checkbox-color: var(--trace-danger);
1198
+ --trace-checkbox-mark: var(--trace-neutral-lighter);
1199
+ }
1200
+
1201
+ @media (prefers-reduced-motion: reduce) {
1202
+ transition: none;
1203
+ transform: none;
1204
+
1205
+ &:before, &:after {
1206
+ transition: none;
1207
+ transform: none;
1208
+ }
1209
+ }
1210
+
1211
+ @media (forced-colors: active) {
1212
+ appearance: auto;
1213
+ background: none;
1214
+
1215
+ &:before, &:after {
1216
+ content: none;
1217
+ }
1218
+ }
1219
+ }
1220
+
1221
+ :where(label:has( > input[type="checkbox"]:not([role="switch"]))) {
1222
+ color: var(--trace-text);
1223
+ cursor: pointer;
1224
+ align-items: center;
1225
+ gap: .5rem;
1226
+ display: inline-flex;
1227
+
1228
+ &:has( > input:disabled) {
1229
+ color: color-mix(in srgb, var(--trace-text), transparent 50%);
1230
+ cursor: not-allowed;
1231
+ }
1232
+ }
1233
+
1234
+ :where(:root) {
1235
+ --trace-select-font-size: 1rem;
1236
+ --trace-select-line-height: 1.5rem;
1237
+ --trace-select-padding-block: .375rem;
1238
+ --trace-select-padding-inline: .625rem;
1239
+ --trace-select-radius: var(--trace-radius-control);
1240
+ --trace-select-text: var(--trace-text);
1241
+ --trace-select-border: light-dark(var(--trace-primary), var(--trace-secondary));
1242
+ --trace-select-focus: light-dark(var(--trace-primary-light), var(--trace-secondary-light));
1243
+ --trace-select-error: var(--trace-danger);
1244
+ --trace-select-shadow: var(--trace-shadow);
1245
+ --trace-select-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23646b79' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
1246
+ --trace-select-arrow-offset: var(--trace-select-padding-inline);
1247
+ --trace-select-arrow-size: 1.25em;
1248
+ }
1249
+
1250
+ :where(select) {
1251
+ --_trace-select-border: var(--trace-select-border);
1252
+ box-sizing: border-box;
1253
+ inline-size: 100%;
1254
+ min-inline-size: 0;
1255
+ padding: var(--trace-select-padding-block)
1256
+ var(--trace-select-padding-inline);
1257
+ border: 2px solid var(--_trace-select-border);
1258
+ border-radius: var(--trace-select-radius);
1259
+ background: var(--trace-select-bg, var(--trace-control-bg));
1260
+ color: var(--trace-select-text);
1261
+ font-family: var(--trace-font-body);
1262
+ font-size: var(--trace-select-font-size);
1263
+ line-height: var(--trace-select-line-height);
1264
+ text-align: start;
1265
+ appearance: auto;
1266
+ cursor: pointer;
1267
+ margin: 0;
1268
+ transition: border-color .2s ease-in-out, box-shadow .2s ease-in-out;
1269
+ display: block;
1270
+
1271
+ &:hover:not(:disabled):not(:focus) {
1272
+ box-shadow: var(--trace-select-shadow);
1273
+ }
1274
+
1275
+ &:focus {
1276
+ --_trace-select-border: var(--trace-select-focus);
1277
+ outline-offset: 2px;
1278
+ box-shadow: 0 0 0 4px
1279
+ color-mix(in srgb, var(--trace-select-focus), transparent 70%);
1280
+ outline: 2px solid #0000;
1281
+ }
1282
+
1283
+ &[aria-invalid="true"] {
1284
+ --_trace-select-border: var(--trace-select-error);
1285
+ }
1286
+
1287
+ &:user-invalid {
1288
+ --_trace-select-border: var(--trace-select-error);
1289
+ }
1290
+
1291
+ &:disabled {
1292
+ opacity: .5;
1293
+ cursor: not-allowed;
1294
+ box-shadow: none;
1295
+ }
1296
+
1297
+ @media (prefers-reduced-motion: reduce) {
1298
+ transition: none;
1299
+ }
1300
+ }
1301
+
1302
+ :where(select:not([multiple]):not([size]), select:not([multiple])[size="0"], select:not([multiple])[size="1"]) {
1303
+ appearance: none;
1304
+ background-image: var(--trace-select-arrow);
1305
+ background-repeat: no-repeat;
1306
+ background-size: var(--trace-select-arrow-size)
1307
+ var(--trace-select-arrow-size);
1308
+ background-position: right var(--trace-select-arrow-offset) center;
1309
+ padding-inline-end: calc(var(--trace-select-arrow-offset) + var(--trace-select-arrow-size) +
1310
+ var(--trace-select-padding-inline));
1311
+
1312
+ &:dir(rtl) {
1313
+ background-position: left var(--trace-select-arrow-offset) center;
1314
+ }
1315
+
1316
+ @media (forced-colors: active) {
1317
+ appearance: auto;
1318
+ background-image: none;
1319
+ }
1320
+ }
1321
+
1322
+ :where(select option, select optgroup) {
1323
+ background-color: var(--trace-select-bg, var(--trace-control-bg));
1324
+ color: var(--trace-select-text);
1325
+ }
1326
+
1327
+ :where(select[multiple], select[size]:not([size="1"])) {
1328
+ cursor: default;
1329
+ }
1330
+
1331
+ :where(label:has( > select)) {
1332
+ min-inline-size: 0;
1333
+ color: var(--trace-select-text);
1334
+ cursor: pointer;
1335
+ gap: .25rem;
1336
+ display: grid;
1337
+
1338
+ & > small {
1339
+ margin: 0;
1340
+ line-height: 1.5;
1341
+ }
1342
+
1343
+ &:has( > select:disabled) {
1344
+ color: color-mix(in srgb, var(--trace-select-text), transparent 50%);
1345
+ cursor: not-allowed;
1346
+ }
1347
+
1348
+ &:has( > select[aria-invalid="true"]) > small:last-child {
1349
+ color: var(--trace-select-error);
1350
+ }
1351
+
1352
+ &:has( > select:user-invalid) > small:last-child {
1353
+ color: var(--trace-select-error);
1354
+ }
1355
+ }
1356
+
1357
+ :where(label:has( > select) + small) {
1358
+ margin-block-start: .25rem;
1359
+ line-height: 1.5;
1360
+ display: block;
1361
+ }
1362
+
1363
+ :where(label:has( > select[aria-invalid="true"]) + small), :where(label:has( > select:user-invalid) + small) {
1364
+ color: var(--trace-select-error);
1365
+ }
1366
+
1367
+ :where(label[for]:has( + select:disabled)) {
1368
+ opacity: .5;
1369
+ cursor: not-allowed;
1370
+ }
1371
+
1372
+ :where(select[aria-invalid="true"] + small, select:user-invalid + small) {
1373
+ color: var(--trace-select-error);
1374
+ }
1375
+
1376
+ :where(:root) {
1377
+ --trace-range-color: light-dark(var(--trace-primary), var(--trace-secondary));
1378
+ --trace-range-track-color: light-dark(var(--trace-primary-light), var(--trace-secondary-dark));
1379
+ --trace-range-error: var(--trace-danger);
1380
+ --trace-range-track-size: .375rem;
1381
+ --trace-range-thumb-size: 1.25rem;
1382
+ --trace-range-height: 2rem;
1383
+ --trace-range-active-scale: 1.15;
1384
+ --trace-range-duration: .15s;
1385
+ }
1386
+
1387
+ :where(input[type="range"]) {
1388
+ appearance: none;
1389
+ box-sizing: border-box;
1390
+ inline-size: 100%;
1391
+ min-inline-size: 0;
1392
+ block-size: var(--trace-range-height);
1393
+ color: var(--trace-range-color);
1394
+ accent-color: var(--trace-range-color);
1395
+ cursor: pointer;
1396
+ background: none;
1397
+ border: 0;
1398
+ margin: 0;
1399
+ padding: 0;
1400
+ display: block;
1401
+
1402
+ &:focus-visible {
1403
+ outline: 2px solid var(--trace-range-color);
1404
+ outline-offset: 2px;
1405
+ border-radius: var(--trace-radius-control);
1406
+ }
1407
+
1408
+ &:disabled {
1409
+ opacity: .5;
1410
+ cursor: not-allowed;
1411
+ }
1412
+
1413
+ &[aria-invalid="true"] {
1414
+ --trace-range-color: var(--trace-range-error);
1415
+ --trace-range-track-color: color-mix(in srgb,
1416
+ var(--trace-range-error),
1417
+ transparent 70%);
1418
+ }
1419
+ }
1420
+
1421
+ :where(input[type="range"])::-webkit-slider-runnable-track {
1422
+ box-sizing: border-box;
1423
+ block-size: var(--trace-range-track-size);
1424
+ background: var(--trace-range-track-color);
1425
+ border: 0;
1426
+ border-radius: 999px;
1427
+ }
1428
+
1429
+ :where(input[type="range"])::-moz-range-track {
1430
+ box-sizing: border-box;
1431
+ block-size: var(--trace-range-track-size);
1432
+ background: var(--trace-range-track-color);
1433
+ border: 0;
1434
+ border-radius: 999px;
1435
+ }
1436
+
1437
+ :where(input[type="range"])::-webkit-slider-thumb {
1438
+ appearance: none;
1439
+ box-sizing: border-box;
1440
+ inline-size: var(--trace-range-thumb-size);
1441
+ block-size: var(--trace-range-thumb-size);
1442
+ border: 2px solid var(--trace-range-color);
1443
+ background: var(--trace-range-color);
1444
+ transition: transform var(--trace-range-duration) ease-out,
1445
+ box-shadow .2s ease-in-out;
1446
+ border-radius: 50%;
1447
+ margin-block-start: calc((var(--trace-range-track-size) - var(--trace-range-thumb-size)) / 2);
1448
+ }
1449
+
1450
+ :where(input[type="range"])::-moz-range-thumb {
1451
+ appearance: none;
1452
+ box-sizing: border-box;
1453
+ inline-size: var(--trace-range-thumb-size);
1454
+ block-size: var(--trace-range-thumb-size);
1455
+ border: 2px solid var(--trace-range-color);
1456
+ background: var(--trace-range-color);
1457
+ transition: transform var(--trace-range-duration) ease-out,
1458
+ box-shadow .2s ease-in-out;
1459
+ border-radius: 50%;
1460
+ }
1461
+
1462
+ :where(input[type="range"]:focus:not(:disabled))::-webkit-slider-thumb {
1463
+ box-shadow: 0 0 0 4px
1464
+ color-mix(in srgb, var(--trace-range-color), transparent 70%);
1465
+ }
1466
+
1467
+ :where(input[type="range"]:focus:not(:disabled))::-moz-range-thumb {
1468
+ box-shadow: 0 0 0 4px
1469
+ color-mix(in srgb, var(--trace-range-color), transparent 70%);
1470
+ }
1471
+
1472
+ :where(input[type="range"]:active:not(:disabled))::-webkit-slider-thumb {
1473
+ transform: scale(var(--trace-range-active-scale));
1474
+ }
1475
+
1476
+ :where(input[type="range"]:active:not(:disabled))::-moz-range-thumb {
1477
+ transform: scale(var(--trace-range-active-scale));
1478
+ }
1479
+
1480
+ @media (prefers-reduced-motion: reduce) {
1481
+ :where(input[type="range"])::-webkit-slider-thumb {
1482
+ transition: none;
1483
+ transform: none;
1484
+ }
1485
+
1486
+ :where(input[type="range"]:active:not(:disabled))::-webkit-slider-thumb {
1487
+ transition: none;
1488
+ transform: none;
1489
+ }
1490
+
1491
+ :where(input[type="range"])::-moz-range-thumb {
1492
+ transition: none;
1493
+ transform: none;
1494
+ }
1495
+
1496
+ :where(input[type="range"]:active:not(:disabled))::-moz-range-thumb {
1497
+ transition: none;
1498
+ transform: none;
1499
+ }
1500
+ }
1501
+
1502
+ :where(label:has( > input[type="range"])) {
1503
+ min-inline-size: 0;
1504
+ color: var(--trace-text);
1505
+ cursor: pointer;
1506
+ gap: .25rem;
1507
+ display: grid;
1508
+
1509
+ & > small {
1510
+ margin: 0;
1511
+ line-height: 1.5;
1512
+ }
1513
+
1514
+ &:has( > input[aria-invalid="true"]) > small:last-child {
1515
+ color: var(--trace-range-error);
1516
+ }
1517
+
1518
+ &:has( > input:disabled) {
1519
+ cursor: not-allowed;
1520
+ color: color-mix(in srgb, var(--trace-text), transparent 50%);
1521
+ }
1522
+ }
1523
+
1524
+ @media (forced-colors: active) {
1525
+ :where(input[type="range"]) {
1526
+ --trace-range-color: ButtonText;
1527
+ --trace-range-track-color: GrayText;
1528
+ }
1529
+ }
1530
+ }
1531
+
1532
+ @layer trace.extensions {
1533
+ :where(.trace-icon) {
1534
+ inline-size: var(--trace-icon-size, 1em);
1535
+ block-size: var(--trace-icon-size, 1em);
1536
+ vertical-align: middle;
1537
+ flex-shrink: 0;
1538
+ justify-content: center;
1539
+ align-items: center;
1540
+ line-height: 1;
1541
+ display: inline-flex;
1542
+ }
1543
+
1544
+ :where(.trace-icon > svg, .trace-icon > img) {
1545
+ object-fit: contain;
1546
+ block-size: 100%;
1547
+ inline-size: 100%;
1548
+ display: block;
1549
+ }
1550
+
1551
+ :where(.trace-icon-directional:dir(rtl)) {
1552
+ transform: scaleX(-1);
1553
+ }
1554
+
1555
+ :where(.trace-loader) {
1556
+ inline-size: var(--trace-loader-size, 1em);
1557
+ block-size: var(--trace-loader-size, 1em);
1558
+ vertical-align: middle;
1559
+ flex-shrink: 0;
1560
+ place-items: center;
1561
+ display: inline-grid;
1562
+ }
1563
+
1564
+ :where(.trace-loader):before {
1565
+ content: "";
1566
+ border-radius: var(--trace-loader-radius, 2px);
1567
+ background-color: var(--trace-loader-color, var(--trace-primary));
1568
+ block-size: 100%;
1569
+ inline-size: 100%;
1570
+ animation: trace-square-rotate var(--trace-loader-duration, 3s) ease-in-out
1571
+ infinite;
1572
+ }
1573
+
1574
+ @media (prefers-reduced-motion: reduce) {
1575
+ :where(.trace-loader):before {
1576
+ animation: none;
1577
+ transform: none;
1578
+ }
1579
+ }
1580
+
1581
+ :where(table.trace-striped > tbody > tr:nth-child(odd) > :is(th, td)) {
1582
+ background-color: var(--trace-table-stripe-bg);
1583
+ }
1584
+
1585
+ :where(table.trace-hover > tbody > tr:is(:hover, :focus-within) > :is(th, td)) {
1586
+ background-color: var(--trace-table-hover-bg);
1587
+ }
1588
+
1589
+ :where(table.trace-compact) {
1590
+ --trace-table-padding-block: .375rem;
1591
+ --trace-table-padding-inline: .625rem;
1592
+ --trace-table-font-size: .875rem;
1593
+ }
1594
+
1595
+ :where(table > :is(thead, tbody, tfoot) > tr > .trace-numeric, table > tr > .trace-numeric) {
1596
+ text-align: end;
1597
+ font-variant-numeric: tabular-nums;
1598
+ }
1599
+
1600
+ :where(.trace-table-wrap) {
1601
+ min-inline-size: 0;
1602
+ max-inline-size: 100%;
1603
+ overflow-x: auto;
1604
+
1605
+ &:focus-visible {
1606
+ outline: 2px solid var(--trace-table-border);
1607
+ outline-offset: 2px;
1608
+ }
1609
+ }
1610
+
1611
+ @media (forced-colors: active) {
1612
+ :where(table.trace-hover > tbody > tr:is(:hover, :focus-within) > :is(th, td)) {
1613
+ outline-offset: -1px;
1614
+ outline: 1px solid highlight;
1615
+ }
1616
+ }
1617
+
1618
+ :where(button > .trace-icon) {
1619
+ --trace-icon-size: var(--trace-button-line-height);
1620
+ }
1621
+
1622
+ :where(button[aria-busy="true"] > span.trace-icon) {
1623
+ position: relative;
1624
+ }
1625
+
1626
+ :where(button[aria-busy="true"] > span.trace-icon > *) {
1627
+ opacity: 0;
1628
+ }
1629
+
1630
+ :where(button[aria-busy="true"] > span.trace-icon):after {
1631
+ content: "";
1632
+ inline-size: var(--trace-loader-size, 1em);
1633
+ block-size: var(--trace-loader-size, 1em);
1634
+ border-radius: var(--trace-loader-radius, 2px);
1635
+ background-color: var(--trace-button-loader-color, var(--trace-button-text, var(--trace-button-contrast)));
1636
+ animation: trace-square-rotate var(--trace-loader-duration, 3s) ease-in-out
1637
+ infinite;
1638
+ pointer-events: none;
1639
+ margin: auto;
1640
+ position: absolute;
1641
+ inset: 0;
1642
+ }
1643
+
1644
+ :where(button.trace-icon-only) {
1645
+ padding-inline: var(--trace-button-padding-block);
1646
+ aspect-ratio: 1;
1647
+ }
1648
+
1649
+ :where(button.trace-small, input[type="button"].trace-small, input[type="submit"].trace-small, input[type="reset"].trace-small) {
1650
+ --trace-button-font-size: .875rem;
1651
+ --trace-button-line-height: 1.25rem;
1652
+ --trace-button-padding-block: .25rem;
1653
+ --trace-button-padding-inline: .5rem;
1654
+ }
1655
+
1656
+ :where(button.trace-large, input[type="button"].trace-large, input[type="submit"].trace-large, input[type="reset"].trace-large) {
1657
+ --trace-button-font-size: 1.125rem;
1658
+ --trace-button-line-height: 1.75rem;
1659
+ --trace-button-padding-block: .5rem;
1660
+ --trace-button-padding-inline: 1rem;
1661
+ }
1662
+
1663
+ :where(button.trace-primary, input[type="button"].trace-primary, input[type="submit"].trace-primary, input[type="reset"].trace-primary) {
1664
+ --trace-button-color: light-dark(var(--trace-primary-darker), var(--trace-secondary));
1665
+ --trace-button-contrast: light-dark(var(--trace-secondary), var(--trace-primary-dark));
1666
+ --trace-button-outline-color: var(--trace-button-color);
1667
+ }
1668
+
1669
+ :where(button.trace-secondary, input[type="button"].trace-secondary, input[type="submit"].trace-secondary, input[type="reset"].trace-secondary) {
1670
+ --trace-button-color: var(--trace-primary-light);
1671
+ --trace-button-contrast: var(--trace-secondary-lighter);
1672
+ --trace-button-outline-color: var(--trace-button-color);
1673
+ }
1674
+
1675
+ :where(button.trace-danger, input[type="button"].trace-danger, input[type="submit"].trace-danger, input[type="reset"].trace-danger) {
1676
+ --trace-button-color: var(--trace-danger);
1677
+ --trace-button-contrast: var(--trace-neutral-lighter);
1678
+ --trace-button-outline-color: var(--trace-button-color);
1679
+ }
1680
+
1681
+ :where(button.trace-outline, input[type="button"].trace-outline, input[type="submit"].trace-outline, input[type="reset"].trace-outline) {
1682
+ --trace-button-bg: transparent;
1683
+ --trace-button-text: var(--trace-button-outline-color);
1684
+ --trace-button-border: var(--trace-button-outline-color);
1685
+ }
1686
+
1687
+ :where(button.trace-outline:hover:not(:disabled):not([aria-busy="true"]), input[type="button"].trace-outline:hover:not(:disabled), input[type="submit"].trace-outline:hover:not(:disabled), input[type="reset"].trace-outline:hover:not(:disabled), button.trace-outline:active:not(:disabled):not([aria-busy="true"]), input[type="button"].trace-outline:active:not(:disabled), input[type="submit"].trace-outline:active:not(:disabled), input[type="reset"].trace-outline:active:not(:disabled), button.trace-outline[aria-busy="true"]) {
1688
+ background-color: var(--trace-button-color);
1689
+ color: var(--trace-button-contrast);
1690
+ border-color: var(--trace-button-color);
1691
+ }
1692
+
1693
+ :where(button.trace-outline[aria-busy="true"]) {
1694
+ --trace-button-text: var(--trace-button-contrast);
1695
+ --trace-button-loader-color: var(--trace-button-contrast);
1696
+ }
1697
+
1698
+ @media (prefers-reduced-motion: reduce) {
1699
+ :where(button[aria-busy="true"] > span.trace-icon):after {
1700
+ animation: none;
1701
+ }
1702
+ }
1703
+
1704
+ @media (forced-colors: active) {
1705
+ :where(button[aria-busy="true"] > span.trace-icon):after {
1706
+ background-color: buttontext;
1707
+ }
1708
+ }
1709
+
1710
+ :where(button[aria-busy="true"]:has( > span.trace-icon)) {
1711
+ color: var(--trace-button-text, var(--trace-button-contrast));
1712
+ }
1713
+
1714
+ :where(button[aria-busy="true"]:has( > span.trace-icon)):after {
1715
+ content: none;
1716
+ }
1717
+
1718
+ :where(button[aria-busy="true"]:has( > span.trace-icon) > *) {
1719
+ opacity: 1;
1720
+ }
1721
+
1722
+ :where(button.trace-outline[aria-busy="true"]:not(:has( > span.trace-icon))) {
1723
+ color: #0000;
1724
+ }
1725
+
1726
+ @media (forced-colors: active) {
1727
+ :where(button[aria-busy="true"]:has( > span.trace-icon):disabled) {
1728
+ border-color: graytext;
1729
+ }
1730
+
1731
+ :where(button[aria-busy="true"]:has( > span.trace-icon)) {
1732
+ forced-color-adjust: auto;
1733
+ }
1734
+
1735
+ :where(button.trace-outline[aria-busy="true"]:not(:has( > span.trace-icon))) {
1736
+ background-color: buttonface;
1737
+ border-color: buttontext;
1738
+ }
1739
+ }
1740
+
1741
+ :where(label:has( > .trace-switch > input[type="checkbox"][role="switch"])) {
1742
+ cursor: pointer;
1743
+ align-items: center;
1744
+ gap: .5rem;
1745
+ display: inline-flex;
1746
+ }
1747
+
1748
+ :where(label:has( > .trace-switch > input[type="checkbox"][role="switch"]:disabled)) {
1749
+ cursor: not-allowed;
1750
+ }
1751
+
1752
+ :where(.trace-switch) {
1753
+ vertical-align: middle;
1754
+ flex-shrink: 0;
1755
+ transition: transform .25s ease-in-out;
1756
+ display: inline-flex;
1757
+ position: relative;
1758
+ }
1759
+
1760
+ :where(.trace-switch > .trace-icon) {
1761
+ --trace-icon-size: var(--trace-switch-icon-size, .75rem);
1762
+ color: var(--trace-switch-color);
1763
+ pointer-events: none;
1764
+ margin-block: auto;
1765
+ transition: color .2s ease-in-out;
1766
+ position: absolute;
1767
+ inset-block: 0;
1768
+ inset-inline-end: calc(4px + var(--trace-switch-padding));
1769
+ }
1770
+
1771
+ :where(.trace-switch:has( > input:checked) > .trace-icon) {
1772
+ color: var(--trace-switch-dot-checked, var(--trace-switch-bg, var(--trace-control-bg)));
1773
+ inset-inline-start: calc(4px + var(--trace-switch-padding));
1774
+ inset-inline-end: auto;
1775
+ }
1776
+
1777
+ :where(.trace-switch:has( > input:disabled) > .trace-icon, label > .trace-switch:has( > input:disabled) ~ span) {
1778
+ opacity: .5;
1779
+ }
1780
+
1781
+ :where(.trace-switch:has( > input:disabled)) {
1782
+ cursor: not-allowed;
1783
+ }
1784
+
1785
+ :where(.trace-switch > input[type="checkbox"][role="switch"]) {
1786
+ transform: none;
1787
+ }
1788
+
1789
+ :where(.trace-switch:has( > input:active:not(:disabled)), label:active > .trace-switch:has( > input:not(:disabled))) {
1790
+ transform: scale(.9);
1791
+ }
1792
+
1793
+ :where(label:active > .trace-switch > input[role="switch"]:not(:disabled)):before {
1794
+ inline-size: var(--trace-switch-dot-active-size);
1795
+ }
1796
+
1797
+ :where(label:active > .trace-switch > input[role="switch"]:checked:not(:disabled)):before {
1798
+ inset-inline-start: calc(100% - var(--trace-switch-dot-active-size) - var(--trace-switch-padding));
1799
+ }
1800
+
1801
+ @media (prefers-reduced-motion: reduce) {
1802
+ :where(.trace-switch), :where(.trace-switch > .trace-icon) {
1803
+ transition: none;
1804
+ transform: none;
1805
+ }
1806
+ }
1807
+
1808
+ @media (forced-colors: active) {
1809
+ :where(.trace-switch > .trace-icon) {
1810
+ display: none;
1811
+ }
1812
+ }
1813
+
1814
+ :where(.trace-switch:has( > input[aria-invalid="true"])) {
1815
+ --trace-switch-color: var(--trace-danger);
1816
+ }
1817
+
1818
+ :where(.trace-switch:has( > input.trace-small) > .trace-icon) {
1819
+ display: none;
1820
+ }
1821
+
1822
+ :where(.trace-switch:has( > input.trace-large)) {
1823
+ --trace-switch-icon-size: 1rem;
1824
+ }
1825
+
1826
+ :where(input[type="checkbox"][role="switch"].trace-small) {
1827
+ --trace-switch-width: 1.75rem;
1828
+ --trace-switch-height: 1rem;
1829
+ --trace-switch-dot-size: .5rem;
1830
+ --trace-switch-dot-active-size: .625rem;
1831
+ }
1832
+
1833
+ :where(input[type="checkbox"][role="switch"].trace-large) {
1834
+ --trace-switch-width: 2.625rem;
1835
+ --trace-switch-height: 1.5rem;
1836
+ --trace-switch-dot-size: 1rem;
1837
+ --trace-switch-dot-active-size: 1.125rem;
1838
+ }
1839
+
1840
+ :where(input[type="radio"].trace-small) {
1841
+ --trace-radio-size: 1rem;
1842
+ }
1843
+
1844
+ :where(input[type="radio"].trace-large) {
1845
+ --trace-radio-size: 1.5rem;
1846
+ }
1847
+
1848
+ :where(label:has( > .trace-input-wrap > input)) {
1849
+ min-inline-size: 0;
1850
+ color: var(--trace-input-text);
1851
+ cursor: pointer;
1852
+ gap: .25rem;
1853
+ display: grid;
1854
+
1855
+ & > small {
1856
+ margin: 0;
1857
+ line-height: 1.5;
1858
+ }
1859
+
1860
+ &:has( > .trace-input-wrap > input:disabled) {
1861
+ color: color-mix(in srgb, var(--trace-input-text), transparent 50%);
1862
+ cursor: not-allowed;
1863
+ }
1864
+
1865
+ &:has( > .trace-input-wrap > input[aria-invalid="true"], > .trace-input-wrap > input:user-invalid) > small:last-child {
1866
+ color: var(--trace-input-error);
1867
+ }
1868
+ }
1869
+
1870
+ :where(.trace-input-wrap) {
1871
+ --trace-input-icon-size: 1.25rem;
1872
+ grid-template-columns: auto minmax(0, 1fr) auto;
1873
+ min-inline-size: 0;
1874
+ display: grid;
1875
+ position: relative;
1876
+ }
1877
+
1878
+ :where(.trace-input-wrap > input) {
1879
+ grid-area: 1 / 1 / 2 / 4;
1880
+ }
1881
+
1882
+ :where(.trace-input-wrap > .trace-input-icon-start, .trace-input-wrap > .trace-input-icon-end) {
1883
+ --trace-icon-size: var(--trace-input-icon-size);
1884
+ margin-inline: calc(2px + var(--trace-input-padding-inline));
1885
+ color: var(--trace-input-border);
1886
+ pointer-events: none;
1887
+ grid-row: 1;
1888
+ align-self: center;
1889
+ position: relative;
1890
+ }
1891
+
1892
+ :where(.trace-input-wrap > .trace-input-icon-start) {
1893
+ grid-column: 1;
1894
+ }
1895
+
1896
+ :where(.trace-input-wrap > .trace-input-icon-end) {
1897
+ grid-column: 3;
1898
+ }
1899
+
1900
+ :where(.trace-input-wrap:has( > .trace-input-icon-start) > input) {
1901
+ padding-inline-start: calc(var(--trace-input-padding-inline) + var(--trace-input-icon-size) + .5rem);
1902
+ }
1903
+
1904
+ :where(.trace-input-wrap:has( > .trace-input-icon-end) > input) {
1905
+ padding-inline-end: calc(var(--trace-input-padding-inline) + var(--trace-input-icon-size) + .5rem);
1906
+ }
1907
+
1908
+ :where(.trace-input-wrap:has( > input:focus) > .trace-icon) {
1909
+ color: var(--trace-input-focus);
1910
+ }
1911
+
1912
+ :where(.trace-input-wrap:has( > input[aria-invalid="true"], > input:user-invalid) > .trace-icon) {
1913
+ color: var(--trace-input-error);
1914
+ }
1915
+
1916
+ :where(.trace-input-wrap:has( > input:disabled) > .trace-icon) {
1917
+ opacity: .5;
1918
+ }
1919
+
1920
+ :where(.trace-input-wrap:has( > button) > input) {
1921
+ padding-inline-end: calc(var(--trace-input-padding-inline) + 2rem);
1922
+ }
1923
+
1924
+ :where(.trace-input-wrap > button) {
1925
+ border-radius: var(--trace-radius-sm);
1926
+ block-size: 1.5rem;
1927
+ inline-size: 1.5rem;
1928
+ color: var(--trace-input-border);
1929
+ box-shadow: none;
1930
+ --trace-button-outline-color: var(--trace-input-focus);
1931
+ background: none;
1932
+ border: 0;
1933
+ margin-block: auto;
1934
+ padding: 0;
1935
+ position: absolute;
1936
+ inset-block: 0;
1937
+ inset-inline-end: .5rem;
1938
+ }
1939
+
1940
+ :where(.trace-input-wrap > button:hover:not(:disabled)) {
1941
+ color: var(--trace-input-focus);
1942
+ box-shadow: none;
1943
+ }
1944
+
1945
+ :where(.trace-input-wrap > button:active:not(:disabled)) {
1946
+ box-shadow: none;
1947
+ transform: scale(.9);
1948
+ }
1949
+
1950
+ @media (prefers-reduced-motion: reduce) {
1951
+ :where(.trace-input-wrap > button) {
1952
+ transition: none;
1953
+ transform: none;
1954
+ }
1955
+ }
1956
+
1957
+ :where(.trace-input-wrap > button > .trace-icon) {
1958
+ --trace-icon-size: 1.25rem;
1959
+ }
1960
+
1961
+ :where(.trace-input-wrap:has( > input.trace-small)) {
1962
+ --trace-input-padding-inline: .5rem;
1963
+ --trace-input-icon-size: 1rem;
1964
+ }
1965
+
1966
+ :where(.trace-input-wrap:has( > input.trace-large)) {
1967
+ --trace-input-padding-inline: .75rem;
1968
+ --trace-input-icon-size: 1.5rem;
1969
+ }
1970
+
1971
+ :where(input.trace-small:not([type="checkbox"]):not([type="radio"])) {
1972
+ --trace-input-font-size: .875rem;
1973
+ --trace-input-line-height: 1.25rem;
1974
+ --trace-input-padding-block: .25rem;
1975
+ --trace-input-padding-inline: .5rem;
1976
+ }
1977
+
1978
+ :where(input.trace-large:not([type="checkbox"]):not([type="radio"])) {
1979
+ --trace-input-font-size: 1.125rem;
1980
+ --trace-input-line-height: 1.75rem;
1981
+ --trace-input-padding-block: .5rem;
1982
+ --trace-input-padding-inline: .75rem;
1983
+ }
1984
+
1985
+ :where(.trace-input-wrap > button[aria-busy="true"]) {
1986
+ cursor: wait;
1987
+ opacity: 1;
1988
+ box-shadow: none;
1989
+ position: absolute;
1990
+ transform: none;
1991
+ }
1992
+
1993
+ :where(.trace-input-wrap > button[aria-busy="true"]:not(:has( > span.trace-icon))) {
1994
+ color: #0000;
1995
+ }
1996
+
1997
+ @media (forced-colors: active) {
1998
+ :where(.trace-input-wrap > button[aria-busy="true"]:not(:has( > span.trace-icon))) {
1999
+ background-color: buttonface;
2000
+ border-color: buttontext;
2001
+ }
2002
+ }
2003
+
2004
+ :where(textarea.trace-small) {
2005
+ --trace-textarea-font-size: .875rem;
2006
+ --trace-textarea-line-height: 1.25rem;
2007
+ --trace-textarea-padding-block: .25rem;
2008
+ --trace-textarea-padding-inline: .5rem;
2009
+ }
2010
+
2011
+ :where(textarea.trace-large) {
2012
+ --trace-textarea-font-size: 1.125rem;
2013
+ --trace-textarea-line-height: 1.75rem;
2014
+ --trace-textarea-padding-block: .5rem;
2015
+ --trace-textarea-padding-inline: .75rem;
2016
+ }
2017
+
2018
+ :where(input[type="checkbox"]:not([role="switch"]).trace-small) {
2019
+ --trace-checkbox-size: 1rem;
2020
+ }
2021
+
2022
+ :where(input[type="checkbox"]:not([role="switch"]).trace-large) {
2023
+ --trace-checkbox-size: 1.5rem;
2024
+ }
2025
+
2026
+ :where(label:has( > .trace-select > select)) {
2027
+ min-inline-size: 0;
2028
+ color: var(--trace-select-text);
2029
+ cursor: pointer;
2030
+ gap: .25rem;
2031
+ display: grid;
2032
+
2033
+ & > small {
2034
+ margin: 0;
2035
+ line-height: 1.5;
2036
+ }
2037
+
2038
+ &:has( > .trace-select > select:disabled) {
2039
+ color: color-mix(in srgb, var(--trace-select-text), transparent 50%);
2040
+ cursor: not-allowed;
2041
+ }
2042
+
2043
+ &:has( > .trace-select > select[aria-invalid="true"], > .trace-select > select:user-invalid) > small:last-child {
2044
+ color: var(--trace-select-error);
2045
+ }
2046
+ }
2047
+
2048
+ :where(label:has( > .trace-select > select) + small) {
2049
+ margin-block-start: .25rem;
2050
+ line-height: 1.5;
2051
+ display: block;
2052
+ }
2053
+
2054
+ :where(label:has( > .trace-select > select[aria-invalid="true"], > .trace-select > select:user-invalid) + small) {
2055
+ color: var(--trace-select-error);
2056
+ }
2057
+
2058
+ :where(.trace-select) {
2059
+ --_trace-select-arrow-color: var(--trace-select-border);
2060
+ min-inline-size: 0;
2061
+ font-size: var(--trace-select-font-size);
2062
+ display: grid;
2063
+ position: relative;
2064
+
2065
+ &:has( > select.trace-small) {
2066
+ --trace-select-padding-inline: .5rem;
2067
+ font-size: .875rem;
2068
+ }
2069
+
2070
+ &:has( > select.trace-large) {
2071
+ --trace-select-padding-inline: .75rem;
2072
+ font-size: 1.125rem;
2073
+ }
2074
+
2075
+ &:has( > select:focus) {
2076
+ --_trace-select-arrow-color: var(--trace-select-focus);
2077
+ }
2078
+
2079
+ &:has( > select[aria-invalid="true"], > select:user-invalid) {
2080
+ --_trace-select-arrow-color: var(--trace-select-error);
2081
+ }
2082
+ }
2083
+
2084
+ :where(.trace-select:has( > select:not([multiple]):not([size])), .trace-select:has( > select:not([multiple])[size="0"]), .trace-select:has( > select:not([multiple])[size="1"])):after {
2085
+ content: "";
2086
+ inline-size: var(--trace-select-arrow-size);
2087
+ block-size: var(--trace-select-arrow-size);
2088
+ background-color: var(--_trace-select-arrow-color);
2089
+ mask: var(--trace-select-arrow) center / contain no-repeat;
2090
+ pointer-events: none;
2091
+ margin-block: auto;
2092
+ position: absolute;
2093
+ inset-block: 0;
2094
+ inset-inline-end: var(--trace-select-arrow-offset);
2095
+ }
2096
+
2097
+ :where(.trace-select > select) {
2098
+ background-image: none;
2099
+ }
2100
+
2101
+ :where(.trace-select:has( > select:disabled)):after {
2102
+ opacity: .5;
2103
+ }
2104
+
2105
+ @media (forced-colors: active) {
2106
+ :where(.trace-select):after {
2107
+ display: none;
2108
+ }
2109
+ }
2110
+
2111
+ :where(select.trace-small) {
2112
+ --trace-select-font-size: .875rem;
2113
+ --trace-select-line-height: 1.25rem;
2114
+ --trace-select-padding-block: .25rem;
2115
+ --trace-select-padding-inline: .5rem;
2116
+ }
2117
+
2118
+ :where(select.trace-large) {
2119
+ --trace-select-font-size: 1.125rem;
2120
+ --trace-select-line-height: 1.75rem;
2121
+ --trace-select-padding-block: .5rem;
2122
+ --trace-select-padding-inline: .75rem;
2123
+ }
2124
+
2125
+ :where(input[type="range"].trace-small) {
2126
+ --trace-range-thumb-size: 1rem;
2127
+ --trace-range-track-size: .25rem;
2128
+ --trace-range-height: 1.75rem;
2129
+ }
2130
+
2131
+ :where(input[type="range"].trace-large) {
2132
+ --trace-range-thumb-size: 1.5rem;
2133
+ --trace-range-track-size: .5rem;
2134
+ --trace-range-height: 2.5rem;
2135
+ }
2136
+ }