trace-css 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -3
  3. package/dist/trace.classless.conditional.css +1534 -0
  4. package/dist/trace.classless.conditional.min.css +1 -0
  5. package/dist/trace.classless.css +1532 -0
  6. package/dist/trace.classless.min.css +1 -0
  7. package/dist/trace.conditional.css +2138 -0
  8. package/dist/trace.conditional.min.css +1 -0
  9. package/dist/trace.css +2136 -0
  10. package/dist/trace.min.css +1 -0
  11. package/package.json +63 -4
  12. package/src/classless.css +16 -0
  13. package/src/content/link.css +75 -0
  14. package/src/content/table.css +108 -0
  15. package/src/content/table.extensions.css +45 -0
  16. package/src/content/typography.css +201 -0
  17. package/src/elements/button.css +168 -0
  18. package/src/elements/button.extensions.css +171 -0
  19. package/src/elements/icon.extensions.css +22 -0
  20. package/src/elements/loader.css +73 -0
  21. package/src/elements/loader.extensions.css +27 -0
  22. package/src/forms/checkbox.css +146 -0
  23. package/src/forms/checkbox.extensions.css +9 -0
  24. package/src/forms/file.css +39 -0
  25. package/src/forms/input.css +199 -0
  26. package/src/forms/input.extensions.css +171 -0
  27. package/src/forms/radio.css +112 -0
  28. package/src/forms/radio.extensions.css +9 -0
  29. package/src/forms/range.css +170 -0
  30. package/src/forms/range.extensions.css +13 -0
  31. package/src/forms/select.css +160 -0
  32. package/src/forms/select.extensions.css +107 -0
  33. package/src/forms/switch.css +156 -0
  34. package/src/forms/switch.extensions.css +122 -0
  35. package/src/forms/textarea.css +133 -0
  36. package/src/forms/textarea.extensions.css +15 -0
  37. package/src/foundation.css +35 -0
  38. package/src/index.css +14 -0
  39. package/src/variables.css +112 -0
@@ -0,0 +1,168 @@
1
+ @layer trace.elements {
2
+ :where(:root) {
3
+ --trace-button-color: light-dark(
4
+ var(--trace-primary-darker),
5
+ var(--trace-secondary)
6
+ );
7
+ --trace-button-contrast: light-dark(
8
+ var(--trace-secondary),
9
+ var(--trace-primary-dark)
10
+ );
11
+ --trace-button-outline-color: var(--trace-button-color);
12
+ --trace-button-radius: var(--trace-radius-control);
13
+ --trace-button-font-size: 1rem;
14
+ --trace-button-line-height: 1.5rem;
15
+ --trace-button-padding-block: 0.375rem;
16
+ --trace-button-padding-inline: 0.75rem;
17
+ --trace-button-box-shadow: var(--trace-shadow);
18
+ --trace-button-icon-gap: 0.5em;
19
+ }
20
+
21
+ :where(button[type="reset"], input[type="reset"]) {
22
+ --trace-button-color: var(--trace-primary-light);
23
+ --trace-button-contrast: var(--trace-secondary-lighter);
24
+ --trace-button-outline-color: var(--trace-button-color);
25
+ }
26
+
27
+ :where(
28
+ button,
29
+ input[type="button"],
30
+ input[type="submit"],
31
+ input[type="reset"]
32
+ ) {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+ gap: var(--trace-button-icon-gap);
37
+ box-sizing: border-box;
38
+ padding: var(--trace-button-padding-block)
39
+ var(--trace-button-padding-inline);
40
+ border: 2px solid var(--trace-button-border, var(--trace-button-color));
41
+ border-radius: var(--trace-button-radius);
42
+ background-color: var(--trace-button-bg, var(--trace-button-color));
43
+ color: var(--trace-button-text, var(--trace-button-contrast));
44
+ font-size: var(--trace-button-font-size);
45
+ font-weight: 400;
46
+ line-height: var(--trace-button-line-height);
47
+ text-align: center;
48
+ cursor: pointer;
49
+ transition:
50
+ background-color 200ms ease-in-out,
51
+ color 200ms ease-in-out,
52
+ border-color 200ms ease-in-out,
53
+ box-shadow 200ms ease-in-out,
54
+ transform 200ms ease-in-out;
55
+ }
56
+
57
+ :where(
58
+ button:hover:not(:disabled),
59
+ input[type="button"]:hover:not(:disabled),
60
+ input[type="submit"]:hover:not(:disabled),
61
+ input[type="reset"]:hover:not(:disabled)
62
+ ) {
63
+ box-shadow: var(--trace-button-box-shadow);
64
+ }
65
+
66
+ :where(
67
+ button:active:not(:disabled),
68
+ input[type="button"]:active:not(:disabled),
69
+ input[type="submit"]:active:not(:disabled),
70
+ input[type="reset"]:active:not(:disabled)
71
+ ) {
72
+ transform: scale(0.95);
73
+ box-shadow: var(--trace-button-box-shadow);
74
+ }
75
+
76
+ :where(
77
+ button:focus-visible,
78
+ input[type="button"]:focus-visible,
79
+ input[type="submit"]:focus-visible,
80
+ input[type="reset"]:focus-visible
81
+ ) {
82
+ outline: 2px solid var(--trace-button-outline-color);
83
+ outline-offset: 2px;
84
+ box-shadow: none;
85
+ }
86
+
87
+ :where(
88
+ button:disabled,
89
+ input[type="button"]:disabled,
90
+ input[type="submit"]:disabled,
91
+ input[type="reset"]:disabled
92
+ ) {
93
+ opacity: 0.5;
94
+ cursor: not-allowed;
95
+ }
96
+
97
+ :where(button[aria-busy="true"])::after {
98
+ content: "";
99
+ position: absolute;
100
+ inset: 0;
101
+ margin: auto;
102
+ inline-size: var(--trace-loader-size, 1em);
103
+ block-size: var(--trace-loader-size, 1em);
104
+ border-radius: var(--trace-loader-radius, 2px);
105
+ background-color: var(
106
+ --trace-button-loader-color,
107
+ var(--trace-button-text, var(--trace-button-contrast))
108
+ );
109
+ animation: trace-square-rotate var(--trace-loader-duration, 3s) ease-in-out
110
+ infinite;
111
+ pointer-events: none;
112
+ }
113
+
114
+ @media (prefers-reduced-motion: reduce) {
115
+ :where(
116
+ button,
117
+ input[type="button"],
118
+ input[type="submit"],
119
+ input[type="reset"]
120
+ ) {
121
+ transition: none;
122
+ transform: none;
123
+ }
124
+ }
125
+
126
+ @media (forced-colors: active) {
127
+ :where(
128
+ button:disabled,
129
+ input[type="button"]:disabled,
130
+ input[type="submit"]:disabled,
131
+ input[type="reset"]:disabled
132
+ ) {
133
+ opacity: 1;
134
+ color: GrayText;
135
+ border-color: GrayText;
136
+ }
137
+ }
138
+ :where(button[aria-busy="true"]) {
139
+ position: relative;
140
+ cursor: wait;
141
+ opacity: 1;
142
+ box-shadow: none;
143
+ transform: none;
144
+ color: transparent;
145
+ }
146
+
147
+ @media (prefers-reduced-motion: reduce) {
148
+ :where(button[aria-busy="true"])::after {
149
+ animation: none;
150
+ }
151
+ }
152
+
153
+ @media (forced-colors: active) {
154
+ :where(button[aria-busy="true"]) {
155
+ forced-color-adjust: none;
156
+ background-color: ButtonFace;
157
+ border-color: ButtonText;
158
+ }
159
+
160
+ :where(button[aria-busy="true"])::after {
161
+ background-color: ButtonText;
162
+ }
163
+ }
164
+
165
+ :where(button[aria-busy="true"] > *) {
166
+ opacity: 0;
167
+ }
168
+ }
@@ -0,0 +1,171 @@
1
+ @layer trace.extensions {
2
+ :where(button > .trace-icon) {
3
+ --trace-icon-size: var(--trace-button-line-height);
4
+ }
5
+
6
+ :where(button[aria-busy="true"] > span.trace-icon) {
7
+ position: relative;
8
+ }
9
+
10
+ :where(button[aria-busy="true"] > span.trace-icon > *) {
11
+ opacity: 0;
12
+ }
13
+
14
+ :where(button[aria-busy="true"] > span.trace-icon)::after {
15
+ content: "";
16
+ position: absolute;
17
+ inset: 0;
18
+ margin: auto;
19
+ inline-size: var(--trace-loader-size, 1em);
20
+ block-size: var(--trace-loader-size, 1em);
21
+ border-radius: var(--trace-loader-radius, 2px);
22
+ background-color: var(
23
+ --trace-button-loader-color,
24
+ var(--trace-button-text, var(--trace-button-contrast))
25
+ );
26
+ animation: trace-square-rotate var(--trace-loader-duration, 3s) ease-in-out
27
+ infinite;
28
+ pointer-events: none;
29
+ }
30
+
31
+ :where(button.trace-icon-only) {
32
+ padding-inline: var(--trace-button-padding-block);
33
+ aspect-ratio: 1;
34
+ }
35
+
36
+ :where(
37
+ button.trace-small,
38
+ input[type="button"].trace-small,
39
+ input[type="submit"].trace-small,
40
+ input[type="reset"].trace-small
41
+ ) {
42
+ --trace-button-font-size: 0.875rem;
43
+ --trace-button-line-height: 1.25rem;
44
+ --trace-button-padding-block: 0.25rem;
45
+ --trace-button-padding-inline: 0.5rem;
46
+ }
47
+
48
+ :where(
49
+ button.trace-large,
50
+ input[type="button"].trace-large,
51
+ input[type="submit"].trace-large,
52
+ input[type="reset"].trace-large
53
+ ) {
54
+ --trace-button-font-size: 1.125rem;
55
+ --trace-button-line-height: 1.75rem;
56
+ --trace-button-padding-block: 0.5rem;
57
+ --trace-button-padding-inline: 1rem;
58
+ }
59
+
60
+ :where(
61
+ button.trace-primary,
62
+ input[type="button"].trace-primary,
63
+ input[type="submit"].trace-primary,
64
+ input[type="reset"].trace-primary
65
+ ) {
66
+ --trace-button-color: light-dark(
67
+ var(--trace-primary-darker),
68
+ var(--trace-secondary)
69
+ );
70
+ --trace-button-contrast: light-dark(
71
+ var(--trace-secondary),
72
+ var(--trace-primary-dark)
73
+ );
74
+ --trace-button-outline-color: var(--trace-button-color);
75
+ }
76
+
77
+ :where(
78
+ button.trace-secondary,
79
+ input[type="button"].trace-secondary,
80
+ input[type="submit"].trace-secondary,
81
+ input[type="reset"].trace-secondary
82
+ ) {
83
+ --trace-button-color: var(--trace-primary-light);
84
+ --trace-button-contrast: var(--trace-secondary-lighter);
85
+ --trace-button-outline-color: var(--trace-button-color);
86
+ }
87
+
88
+ :where(
89
+ button.trace-danger,
90
+ input[type="button"].trace-danger,
91
+ input[type="submit"].trace-danger,
92
+ input[type="reset"].trace-danger
93
+ ) {
94
+ --trace-button-color: var(--trace-danger);
95
+ --trace-button-contrast: var(--trace-neutral-lighter);
96
+ --trace-button-outline-color: var(--trace-button-color);
97
+ }
98
+
99
+ :where(
100
+ button.trace-outline,
101
+ input[type="button"].trace-outline,
102
+ input[type="submit"].trace-outline,
103
+ input[type="reset"].trace-outline
104
+ ) {
105
+ --trace-button-bg: transparent;
106
+ --trace-button-text: var(--trace-button-outline-color);
107
+ --trace-button-border: var(--trace-button-outline-color);
108
+ }
109
+
110
+ :where(
111
+ button.trace-outline:hover:not(:disabled):not([aria-busy="true"]),
112
+ input[type="button"].trace-outline:hover:not(:disabled),
113
+ input[type="submit"].trace-outline:hover:not(:disabled),
114
+ input[type="reset"].trace-outline:hover:not(:disabled),
115
+ button.trace-outline:active:not(:disabled):not([aria-busy="true"]),
116
+ input[type="button"].trace-outline:active:not(:disabled),
117
+ input[type="submit"].trace-outline:active:not(:disabled),
118
+ input[type="reset"].trace-outline:active:not(:disabled),
119
+ button.trace-outline[aria-busy="true"]
120
+ ) {
121
+ background-color: var(--trace-button-color);
122
+ color: var(--trace-button-contrast);
123
+ border-color: var(--trace-button-color);
124
+ }
125
+
126
+ :where(button.trace-outline[aria-busy="true"]) {
127
+ --trace-button-text: var(--trace-button-contrast);
128
+ --trace-button-loader-color: var(--trace-button-contrast);
129
+ }
130
+
131
+ @media (prefers-reduced-motion: reduce) {
132
+ :where(button[aria-busy="true"] > span.trace-icon)::after {
133
+ animation: none;
134
+ }
135
+ }
136
+
137
+ @media (forced-colors: active) {
138
+ :where(button[aria-busy="true"] > span.trace-icon)::after {
139
+ background-color: ButtonText;
140
+ }
141
+ }
142
+ :where(button[aria-busy="true"]:has(> span.trace-icon)) {
143
+ color: var(--trace-button-text, var(--trace-button-contrast));
144
+ }
145
+ :where(button[aria-busy="true"]:has(> span.trace-icon))::after {
146
+ content: none;
147
+ }
148
+ :where(button[aria-busy="true"]:has(> span.trace-icon) > *) {
149
+ opacity: 1;
150
+ }
151
+ :where(button.trace-outline[aria-busy="true"]:not(:has(> span.trace-icon))) {
152
+ color: transparent;
153
+ }
154
+
155
+ @media (forced-colors: active) {
156
+ :where(button[aria-busy="true"]:has(> span.trace-icon):disabled) {
157
+ border-color: GrayText;
158
+ }
159
+
160
+ :where(button[aria-busy="true"]:has(> span.trace-icon)) {
161
+ forced-color-adjust: auto;
162
+ }
163
+
164
+ :where(
165
+ button.trace-outline[aria-busy="true"]:not(:has(> span.trace-icon))
166
+ ) {
167
+ background-color: ButtonFace;
168
+ border-color: ButtonText;
169
+ }
170
+ }
171
+ }
@@ -0,0 +1,22 @@
1
+ @layer trace.extensions {
2
+ :where(.trace-icon) {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ inline-size: var(--trace-icon-size, 1em);
7
+ block-size: var(--trace-icon-size, 1em);
8
+ flex-shrink: 0;
9
+ vertical-align: middle;
10
+ line-height: 1;
11
+ }
12
+
13
+ :where(.trace-icon > svg, .trace-icon > img) {
14
+ display: block;
15
+ inline-size: 100%;
16
+ block-size: 100%;
17
+ object-fit: contain;
18
+ }
19
+ :where(.trace-icon-directional:dir(rtl)) {
20
+ transform: scaleX(-1);
21
+ }
22
+ }
@@ -0,0 +1,73 @@
1
+ @layer trace.elements {
2
+ @keyframes trace-square-rotate {
3
+ 0% {
4
+ transform: rotateX(0deg) rotateY(0deg);
5
+ }
6
+ 25% {
7
+ transform: rotateX(180deg) rotateY(0deg);
8
+ }
9
+ 50% {
10
+ transform: rotateX(180deg) rotateY(180deg);
11
+ }
12
+ 75% {
13
+ transform: rotateX(0deg) rotateY(180deg);
14
+ }
15
+ 100% {
16
+ transform: rotateX(0deg) rotateY(0deg);
17
+ }
18
+ }
19
+
20
+ :where(
21
+ div,
22
+ section,
23
+ article,
24
+ main,
25
+ aside,
26
+ nav,
27
+ header,
28
+ footer,
29
+ form,
30
+ fieldset,
31
+ figure
32
+ ):where([aria-busy="true"]) {
33
+ position: relative;
34
+ isolation: isolate;
35
+ cursor: wait;
36
+
37
+ &::before {
38
+ content: "";
39
+ position: absolute;
40
+ inset: 0;
41
+ z-index: 1;
42
+ border-radius: inherit;
43
+ background: var(
44
+ --trace-loader-overlay,
45
+ color-mix(in srgb, var(--trace-bg), transparent 30%)
46
+ );
47
+ }
48
+
49
+ &::after {
50
+ content: "";
51
+ position: absolute;
52
+ inset: 0;
53
+ z-index: 2;
54
+ margin: auto;
55
+ inline-size: var(--trace-loader-size, 2rem);
56
+ block-size: var(--trace-loader-size, 2rem);
57
+ border-radius: var(--trace-loader-radius, 2px);
58
+ background-color: var(
59
+ --trace-loader-color,
60
+ light-dark(var(--trace-primary), var(--trace-secondary))
61
+ );
62
+ animation: trace-square-rotate var(--trace-loader-duration, 3s)
63
+ ease-in-out infinite;
64
+ pointer-events: none;
65
+ }
66
+
67
+ @media (prefers-reduced-motion: reduce) {
68
+ &::after {
69
+ animation: none;
70
+ }
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,27 @@
1
+ @layer trace.extensions {
2
+ :where(.trace-loader) {
3
+ display: inline-grid;
4
+ place-items: center;
5
+ inline-size: var(--trace-loader-size, 1em);
6
+ block-size: var(--trace-loader-size, 1em);
7
+ flex-shrink: 0;
8
+ vertical-align: middle;
9
+ }
10
+
11
+ :where(.trace-loader)::before {
12
+ content: "";
13
+ inline-size: 100%;
14
+ block-size: 100%;
15
+ border-radius: var(--trace-loader-radius, 2px);
16
+ background-color: var(--trace-loader-color, var(--trace-primary));
17
+ animation: trace-square-rotate var(--trace-loader-duration, 3s) ease-in-out
18
+ infinite;
19
+ }
20
+
21
+ @media (prefers-reduced-motion: reduce) {
22
+ :where(.trace-loader)::before {
23
+ animation: none;
24
+ transform: none;
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,146 @@
1
+ @layer trace.elements {
2
+ :where(:root) {
3
+ --trace-checkbox-size: 1.25rem;
4
+ --trace-checkbox-radius: var(--trace-radius-control);
5
+ --trace-checkbox-color: light-dark(
6
+ var(--trace-primary),
7
+ var(--trace-secondary)
8
+ );
9
+ --trace-checkbox-mark: light-dark(
10
+ var(--trace-neutral-lighter),
11
+ var(--trace-primary-dark)
12
+ );
13
+ }
14
+
15
+ :where(input[type="checkbox"]:not([role="switch"])) {
16
+ appearance: none;
17
+ -webkit-appearance: none;
18
+ position: relative;
19
+ isolation: isolate;
20
+ display: inline-block;
21
+ box-sizing: border-box;
22
+ flex-shrink: 0;
23
+ inline-size: var(--trace-checkbox-size);
24
+ block-size: var(--trace-checkbox-size);
25
+ margin: 2px;
26
+ padding: 0;
27
+ border: 2px solid var(--trace-checkbox-color);
28
+ border-radius: var(--trace-checkbox-radius);
29
+ background-color: var(--trace-checkbox-bg, var(--trace-control-bg));
30
+ vertical-align: middle;
31
+ cursor: pointer;
32
+ transition:
33
+ transform 200ms ease-in-out,
34
+ border-color 200ms ease-in-out;
35
+
36
+ &::before {
37
+ content: "";
38
+ position: absolute;
39
+ inset: 10%;
40
+ z-index: 1;
41
+ background: var(--trace-checkbox-mark);
42
+ 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")
43
+ center / contain no-repeat;
44
+ opacity: 0;
45
+ transform: scale(0.6);
46
+ transition:
47
+ opacity 180ms ease-in-out,
48
+ transform 180ms ease-in-out;
49
+ }
50
+
51
+ &::after {
52
+ content: "";
53
+ position: absolute;
54
+ inset: 0;
55
+ z-index: 0;
56
+ border-radius: max(0px, calc(var(--trace-checkbox-radius) - 2px));
57
+ background-color: var(--trace-checkbox-color);
58
+ opacity: 0;
59
+ transform: scale(0.6);
60
+ transition:
61
+ opacity 180ms ease-in-out,
62
+ transform 180ms ease-in-out;
63
+ }
64
+
65
+ &:checked::after,
66
+ &:indeterminate::after {
67
+ opacity: 1;
68
+ transform: scale(1);
69
+ }
70
+
71
+ &:checked::before {
72
+ opacity: 1;
73
+ transform: scale(1);
74
+ }
75
+
76
+ &:indeterminate::before {
77
+ opacity: 1;
78
+ transform: scale(1);
79
+ inset: 0;
80
+ margin: auto;
81
+ inline-size: 60%;
82
+ block-size: 2px;
83
+ border-radius: 1px;
84
+ mask: none;
85
+ }
86
+
87
+ &:focus-visible {
88
+ outline: 2px solid var(--trace-checkbox-color);
89
+ outline-offset: 2px;
90
+ }
91
+
92
+ &:active:not(:disabled) {
93
+ transform: scale(0.9);
94
+ }
95
+
96
+ &:disabled {
97
+ opacity: 0.5;
98
+ cursor: not-allowed;
99
+ }
100
+
101
+ &[aria-invalid="true"] {
102
+ --trace-checkbox-color: var(--trace-danger);
103
+ --trace-checkbox-mark: var(--trace-neutral-lighter);
104
+ }
105
+
106
+ &:user-invalid {
107
+ --trace-checkbox-color: var(--trace-danger);
108
+ --trace-checkbox-mark: var(--trace-neutral-lighter);
109
+ }
110
+
111
+ @media (prefers-reduced-motion: reduce) {
112
+ transition: none;
113
+ transform: none;
114
+
115
+ &::before,
116
+ &::after {
117
+ transition: none;
118
+ transform: none;
119
+ }
120
+ }
121
+
122
+ @media (forced-colors: active) {
123
+ appearance: auto;
124
+ -webkit-appearance: auto;
125
+ background: none;
126
+
127
+ &::before,
128
+ &::after {
129
+ content: none;
130
+ }
131
+ }
132
+ }
133
+
134
+ :where(label:has(> input[type="checkbox"]:not([role="switch"]))) {
135
+ display: inline-flex;
136
+ align-items: center;
137
+ gap: 0.5rem;
138
+ color: var(--trace-text);
139
+ cursor: pointer;
140
+
141
+ &:has(> input:disabled) {
142
+ color: color-mix(in srgb, var(--trace-text), transparent 50%);
143
+ cursor: not-allowed;
144
+ }
145
+ }
146
+ }
@@ -0,0 +1,9 @@
1
+ @layer trace.extensions {
2
+ :where(input[type="checkbox"]:not([role="switch"]).trace-small) {
3
+ --trace-checkbox-size: 1rem;
4
+ }
5
+
6
+ :where(input[type="checkbox"]:not([role="switch"]).trace-large) {
7
+ --trace-checkbox-size: 1.5rem;
8
+ }
9
+ }
@@ -0,0 +1,39 @@
1
+ @layer trace.elements {
2
+ :where(:root) {
3
+ --trace-file-button-bg: var(--trace-primary-light);
4
+ --trace-file-button-text: var(--trace-secondary-lighter);
5
+ }
6
+
7
+ :where(input[type="file"]) {
8
+ padding-block: 0;
9
+ padding-inline-start: 0;
10
+ cursor: pointer;
11
+ }
12
+
13
+ :where(input[type="file"])::file-selector-button {
14
+ margin: 0;
15
+ margin-inline-end: var(--trace-input-padding-inline);
16
+ padding: var(--trace-input-padding-block) var(--trace-input-padding-inline);
17
+ border: 0;
18
+ border-radius: 0;
19
+ background: var(--trace-file-button-bg);
20
+ color: var(--trace-file-button-text);
21
+ font: inherit;
22
+ line-height: inherit;
23
+ cursor: pointer;
24
+ }
25
+
26
+ :where(input[type="file"]:hover:not(:disabled):not([readonly]):not(:focus)) {
27
+ box-shadow: none;
28
+ }
29
+
30
+ :where(input[type="file"]:disabled)::file-selector-button {
31
+ cursor: not-allowed;
32
+ }
33
+
34
+ @media (forced-colors: active) {
35
+ :where(input[type="file"])::file-selector-button {
36
+ border-inline-end: 1px solid ButtonText;
37
+ }
38
+ }
39
+ }