trace-css 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1532 +0,0 @@
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;