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