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,1534 +0,0 @@
1
- @scope (.tracecss) {
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
- }