@semanticus/semanticus-css 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +53 -0
  3. package/README.md +151 -0
  4. package/dist/semanticus-semantics.css +2 -0
  5. package/dist/semanticus-utilities.css +7 -0
  6. package/dist/semanticus-variants.css +1 -0
  7. package/dist/semanticus.css +7 -0
  8. package/dist/semanticus.palette.amber.css +1 -0
  9. package/dist/semanticus.palette.blue.css +1 -0
  10. package/dist/semanticus.palette.cyan.css +1 -0
  11. package/dist/semanticus.palette.fuchsia.css +1 -0
  12. package/dist/semanticus.palette.green.css +1 -0
  13. package/dist/semanticus.palette.grey.css +1 -0
  14. package/dist/semanticus.palette.indigo.css +1 -0
  15. package/dist/semanticus.palette.jade.css +1 -0
  16. package/dist/semanticus.palette.lime.css +1 -0
  17. package/dist/semanticus.palette.orange.css +1 -0
  18. package/dist/semanticus.palette.pink.css +1 -0
  19. package/dist/semanticus.palette.pumpkin.css +1 -0
  20. package/dist/semanticus.palette.purple.css +1 -0
  21. package/dist/semanticus.palette.red.css +1 -0
  22. package/dist/semanticus.palette.sand.css +1 -0
  23. package/dist/semanticus.palette.slate.css +1 -0
  24. package/dist/semanticus.palette.violet.css +1 -0
  25. package/dist/semanticus.palette.yellow.css +1 -0
  26. package/dist/semanticus.palette.zinc.css +1 -0
  27. package/dist/semanticus.size.slim.css +1 -0
  28. package/package.json +102 -0
  29. package/src/_normalize.css +214 -0
  30. package/src/_variables.css +863 -0
  31. package/src/index.css +20 -0
  32. package/src/palettes/amber.css +56 -0
  33. package/src/palettes/blue.css +56 -0
  34. package/src/palettes/cyan.css +56 -0
  35. package/src/palettes/fuchsia.css +56 -0
  36. package/src/palettes/green.css +56 -0
  37. package/src/palettes/grey.css +56 -0
  38. package/src/palettes/indigo.css +56 -0
  39. package/src/palettes/jade.css +56 -0
  40. package/src/palettes/lime.css +56 -0
  41. package/src/palettes/orange.css +56 -0
  42. package/src/palettes/pink.css +56 -0
  43. package/src/palettes/pumpkin.css +56 -0
  44. package/src/palettes/purple.css +56 -0
  45. package/src/palettes/red.css +56 -0
  46. package/src/palettes/sand.css +56 -0
  47. package/src/palettes/slate.css +56 -0
  48. package/src/palettes/violet.css +56 -0
  49. package/src/palettes/yellow.css +56 -0
  50. package/src/palettes/zinc.css +56 -0
  51. package/src/semantics/_aria-busy.css +34 -0
  52. package/src/semantics/_article.css +6 -0
  53. package/src/semantics/_body.css +10 -0
  54. package/src/semantics/_button.css +106 -0
  55. package/src/semantics/_code.css +50 -0
  56. package/src/semantics/_details.css +292 -0
  57. package/src/semantics/_dialog.css +163 -0
  58. package/src/semantics/_document.css +18 -0
  59. package/src/semantics/_embedded.css +41 -0
  60. package/src/semantics/_figure.css +13 -0
  61. package/src/semantics/_hidden.css +7 -0
  62. package/src/semantics/_hr.css +10 -0
  63. package/src/semantics/_input.css +306 -0
  64. package/src/semantics/_links.css +33 -0
  65. package/src/semantics/_main.css +3 -0
  66. package/src/semantics/_nav.css +116 -0
  67. package/src/semantics/_progress.css +62 -0
  68. package/src/semantics/_role-group-search.css +129 -0
  69. package/src/semantics/_role-toolbar.css +17 -0
  70. package/src/semantics/_role-tooltip.css +138 -0
  71. package/src/semantics/_section.css +6 -0
  72. package/src/semantics/_table.css +28 -0
  73. package/src/semantics/_type-checkbox-radio.css +142 -0
  74. package/src/semantics/_type-color.css +22 -0
  75. package/src/semantics/_type-date.css +40 -0
  76. package/src/semantics/_type-file.css +26 -0
  77. package/src/semantics/_type-range.css +90 -0
  78. package/src/semantics/_type-search.css +34 -0
  79. package/src/semantics/_typography.css +137 -0
  80. package/src/semantics/index.css +14 -0
  81. package/src/semantics/modules.css +35 -0
  82. package/src/sizes/slim.css +12 -0
  83. package/src/utilities/_variables.css +244 -0
  84. package/src/utilities/borders/_border-radius.css +216 -0
  85. package/src/utilities/borders/_border-style.css +39 -0
  86. package/src/utilities/borders/_border-width.css +39 -0
  87. package/src/utilities/colors/_background-colors.css +209 -0
  88. package/src/utilities/colors/_border-colors.css +69 -0
  89. package/src/utilities/colors/_text-colors.css +371 -0
  90. package/src/utilities/display/_display.css +259 -0
  91. package/src/utilities/display/_overflow.css +47 -0
  92. package/src/utilities/display/_visibility.css +27 -0
  93. package/src/utilities/effects/_opacity.css +19 -0
  94. package/src/utilities/effects/_shadows.css +48 -0
  95. package/src/utilities/effects/_transforms.css +11 -0
  96. package/src/utilities/index.css +14 -0
  97. package/src/utilities/layout/_flexbox.css +846 -0
  98. package/src/utilities/layout/_grid.css +51 -0
  99. package/src/utilities/layout/_misc.css +77 -0
  100. package/src/utilities/media/_object-fit.css +139 -0
  101. package/src/utilities/modules.css +56 -0
  102. package/src/utilities/positioning/_floats.css +72 -0
  103. package/src/utilities/positioning/_inset.css +47 -0
  104. package/src/utilities/positioning/_position.css +108 -0
  105. package/src/utilities/positioning/_z-index.css +19 -0
  106. package/src/utilities/sizing/_height.css +31 -0
  107. package/src/utilities/sizing/_width.css +31 -0
  108. package/src/utilities/spacing/_gap.css +393 -0
  109. package/src/utilities/spacing/_margin.css +1030 -0
  110. package/src/utilities/spacing/_padding.css +885 -0
  111. package/src/utilities/typography/_font-family.css +7 -0
  112. package/src/utilities/typography/_font-sizes.css +38 -0
  113. package/src/utilities/typography/_font-weight.css +51 -0
  114. package/src/utilities/typography/_text-alignment.css +141 -0
  115. package/src/variants/_card.css +41 -0
  116. package/src/variants/_container.css +36 -0
  117. package/src/variants/_contrast.css +50 -0
  118. package/src/variants/_ghost.css +58 -0
  119. package/src/variants/_secondary.css +38 -0
  120. package/src/variants/_striped.css +10 -0
  121. package/src/variants/index.css +6 -0
  122. package/src/variants/modules.css +12 -0
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Basics form elements
3
+ */
4
+ input,
5
+ optgroup,
6
+ select,
7
+ textarea {
8
+ margin: 0;
9
+ font-size: 1rem;
10
+ line-height: var(--line-height);
11
+ font-family: inherit;
12
+ letter-spacing: inherit;
13
+ }
14
+
15
+ input {
16
+ overflow: visible;
17
+ }
18
+
19
+ select {
20
+ text-transform: none;
21
+ }
22
+
23
+ legend {
24
+ max-width: 100%;
25
+ padding: 0;
26
+ color: inherit;
27
+ white-space: normal;
28
+ }
29
+
30
+ textarea {
31
+ overflow: auto;
32
+ }
33
+
34
+ [type=checkbox],
35
+ [type=radio] {
36
+ padding: 0;
37
+ }
38
+
39
+ ::-webkit-inner-spin-button,
40
+ ::-webkit-outer-spin-button {
41
+ height: auto;
42
+ }
43
+
44
+ [type=search] {
45
+ -webkit-appearance: textfield;
46
+ outline-offset: -2px;
47
+
48
+ &::-webkit-search-decoration {
49
+ -webkit-appearance: none;
50
+ }
51
+ }
52
+
53
+ ::-webkit-file-upload-button {
54
+ -webkit-appearance: button;
55
+ font: inherit;
56
+ }
57
+
58
+ ::-moz-focus-inner {
59
+ padding: 0;
60
+ border-style: none;
61
+ }
62
+
63
+ :-moz-focusring {
64
+ outline: none;
65
+ }
66
+
67
+ :-moz-ui-invalid {
68
+ box-shadow: none;
69
+ }
70
+
71
+ ::-ms-expand {
72
+ display: none;
73
+ }
74
+
75
+ [type=file],
76
+ [type=range] {
77
+ padding: 0;
78
+ border-width: 0;
79
+ }
80
+
81
+ input:not([type=checkbox], [type=radio], [type=range]) {
82
+ height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);
83
+ }
84
+
85
+ fieldset {
86
+ width: 100%;
87
+ margin: 0;
88
+ margin-bottom: var(--spacing);
89
+ padding: 0;
90
+ border: 0;
91
+ }
92
+
93
+ label,
94
+ fieldset legend {
95
+ display: block;
96
+ margin-bottom: calc(var(--spacing) * 0.375);
97
+ color: var(--color-text);
98
+ font-weight: var(--form-label-font-weight, var(--font-weight));
99
+ }
100
+
101
+ fieldset legend {
102
+ margin-bottom: calc(var(--spacing) * 0.5);
103
+ }
104
+
105
+ input:not([type=checkbox], [type=radio]),
106
+ button[type=submit],
107
+ select,
108
+ textarea {
109
+ width: 100%;
110
+ }
111
+
112
+ input:not([type=checkbox], [type=radio], [type=range], [type=file]),
113
+ select,
114
+ textarea {
115
+ appearance: none;
116
+ padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
117
+ }
118
+
119
+ input,
120
+ select,
121
+ textarea {
122
+ --color-background: var(--form-bg);
123
+ --border-color: var(--form-border-color);
124
+ --color-text: var(--form-text-color);
125
+ --shadow-lg: none;
126
+ border: var(--border-width) solid var(--border-color);
127
+ border-radius: var(--border-radius);
128
+ outline: none;
129
+ background-color: var(--color-background);
130
+ box-shadow: var(--shadow-lg);
131
+ color: var(--color-text);
132
+ font-weight: var(--font-weight);
133
+ transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition);
134
+ }
135
+
136
+ input:not([type=submit],
137
+ [type=button],
138
+ [type=reset],
139
+ [type=checkbox],
140
+ [type=radio],
141
+ [readonly]):is(:active, :focus),
142
+ :where(select, textarea):not([readonly]):is(:active, :focus) {
143
+ --color-background: var(--form-active-bg);
144
+ }
145
+
146
+ input:not([type=submit], [type=button], [type=reset], [role=switch], [readonly]):is(:active, :focus),
147
+ :where(select, textarea):not([readonly]):is(:active, :focus) {
148
+ --border-color: var(--form-active-border);
149
+ }
150
+
151
+ input:not([type=submit],
152
+ [type=button],
153
+ [type=reset],
154
+ [type=range],
155
+ [type=file],
156
+ [readonly]):focus,
157
+ :where(select, textarea):not([readonly]):focus {
158
+ --shadow-lg: 0 0 0 var(--outline-width) var(--form-focus);
159
+ }
160
+
161
+ input:not([type=submit], [type=button], [type=reset])[disabled],
162
+ select[disabled],
163
+ textarea[disabled],
164
+ label[aria-disabled=true],
165
+ :where(fieldset[disabled]) :is(input:not([type=submit], [type=button], [type=reset]), select, textarea) {
166
+ opacity: var(--form-disabled-opacity);
167
+ pointer-events: none;
168
+ }
169
+
170
+ label[aria-disabled=true] input[disabled] {
171
+ opacity: 1;
172
+ }
173
+
174
+ :where(:is(input, select, textarea):not([type=checkbox],
175
+ [type=radio],
176
+ [type=date],
177
+ [type=datetime-local],
178
+ [type=month],
179
+ [type=time],
180
+ [type=week],
181
+ [type=range])[aria-invalid]) {
182
+ padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem);
183
+ padding-left: var(--form-element-spacing-horizontal);
184
+ padding-inline-start: var(--form-element-spacing-horizontal);
185
+ padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem);
186
+ background-position: center right 0.75rem;
187
+ background-size: 1rem auto;
188
+ background-repeat: no-repeat;
189
+ }
190
+ :where(input:not([type=checkbox],
191
+ [type=radio],
192
+ [type=date],
193
+ [type=datetime-local],
194
+ [type=month],
195
+ [type=time],
196
+ [type=week],
197
+ [type=range])[aria-invalid=false], textarea[aria-invalid=false]) {
198
+ background-image: var(--icon-valid);
199
+ }
200
+ :where(input:not([type=checkbox],
201
+ [type=radio],
202
+ [type=date],
203
+ [type=datetime-local],
204
+ [type=month],
205
+ [type=time],
206
+ [type=week],
207
+ [type=range])[aria-invalid=true], textarea[aria-invalid=true]) {
208
+ background-image: var(--icon-invalid);
209
+ }
210
+
211
+ :is(input, select, textarea)[aria-invalid=false] {
212
+ --border-color: var(--form-valid-border);
213
+ }
214
+ :is(input, select, textarea)[aria-invalid=false]:is(:active, :focus) {
215
+ --border-color: var(--form-valid-active-border);
216
+ }
217
+ input:not([type=checkbox], [type=radio])[aria-invalid=false]:is(:active, :focus), select[aria-invalid=false]:is(:active, :focus), textarea[aria-invalid=false]:is(:active, :focus) {
218
+ --shadow-lg: 0 0 0 var(--outline-width) var(--form-valid-focus);
219
+ }
220
+
221
+ :is(input, select, textarea)[aria-invalid=true] {
222
+ --border-color: var(--form-invalid-border);
223
+ }
224
+ :is(input, select, textarea)[aria-invalid=true]:is(:active, :focus) {
225
+ --border-color: var(--form-invalid-active-border);
226
+ }
227
+ input:not([type=checkbox], [type=radio])[aria-invalid=true]:is(:active, :focus), select[aria-invalid=true]:is(:active, :focus), textarea[aria-invalid=true]:is(:active, :focus) {
228
+ --shadow-lg: 0 0 0 var(--outline-width) var(--form-invalid-focus);
229
+ }
230
+
231
+ :where([dir=rtl] :is(input, select, textarea):not([type=checkbox], [type=radio]):is([aria-invalid], [aria-invalid=true], [aria-invalid=false])) {
232
+ background-position: center left 0.75rem;
233
+ }
234
+
235
+ input::placeholder,
236
+ input::-webkit-input-placeholder,
237
+ textarea::placeholder,
238
+ textarea::-webkit-input-placeholder,
239
+ select:invalid {
240
+ color: var(--form-placeholder-color);
241
+ opacity: 1;
242
+ }
243
+
244
+ input:not([type=checkbox], [type=radio]),
245
+ select,
246
+ textarea {
247
+ margin-bottom: var(--spacing);
248
+ }
249
+
250
+ select {
251
+ &::-ms-expand {
252
+ border: 0;
253
+ background-color: transparent;
254
+ }
255
+
256
+ &:not([multiple], [size]) {
257
+ padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem);
258
+ padding-left: var(--form-element-spacing-horizontal);
259
+ padding-inline-start: var(--form-element-spacing-horizontal);
260
+ padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem);
261
+ background-image: var(--icon-chevron);
262
+ background-position: center right 0.75rem;
263
+ background-size: 1rem auto;
264
+ background-repeat: no-repeat;
265
+ }
266
+
267
+ &[multiple] option:checked {
268
+ background: var(--form-selected-bg);
269
+ color: var(--form-text-color);
270
+ }
271
+ }
272
+
273
+ [dir=rtl] select:not([multiple], [size]) {
274
+ background-position: center left 0.75rem;
275
+ }
276
+
277
+ textarea {
278
+ display: block;
279
+ resize: vertical;
280
+ }
281
+
282
+ :where(textarea[aria-invalid]) {
283
+ --icon-height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);
284
+ background-position: top right 0.75rem;
285
+ background-size: 1rem var(--icon-height);
286
+ }
287
+
288
+ :where(input, select, textarea, fieldset) + small {
289
+ display: block;
290
+ width: 100%;
291
+ margin-top: calc(var(--spacing) * -0.75);
292
+ margin-bottom: var(--spacing);
293
+ color: var(--color-text-muted);
294
+ }
295
+
296
+ :where(input, select, textarea, fieldset)[aria-invalid=false] + small {
297
+ color: rgb(var(--success-rgb));
298
+ }
299
+
300
+ :where(input, select, textarea, fieldset)[aria-invalid=true] + small {
301
+ color: rgb(var(--danger-rgb));
302
+ }
303
+
304
+ label > :where(input, select, textarea) {
305
+ margin-top: calc(var(--spacing) * 0.25);
306
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Link
3
+ */
4
+ :where(a:not([role=button])),
5
+ [role=link] {
6
+ --color-text: var(--color-primary);
7
+ --color-background: transparent;
8
+ --underline: var(--color-primary-underline);
9
+ outline: none;
10
+ background-color: var(--color-background);
11
+ color: var(--color-text);
12
+ text-decoration: var(--text-decoration);
13
+ text-decoration-color: var(--underline);
14
+ text-underline-offset: 0.125em;
15
+ transition: background-color var(--transition), color var(--transition), text-decoration var(--transition), box-shadow var(--transition);
16
+ }
17
+
18
+ :where(a:not([role=button])),
19
+ [role=link] {
20
+ &:is([aria-current]:not([aria-current=false]), :hover, :active, :focus) {
21
+ --color-text: var(--color-primary-hover);
22
+ --underline: var(--color-primary-hover-underline);
23
+ --text-decoration: underline;
24
+ }
25
+
26
+ &:focus-visible {
27
+ box-shadow: 0 0 0 var(--outline-width) var(--color-primary-focus);
28
+ }
29
+ }
30
+
31
+ a[role=button] {
32
+ display: inline-block;
33
+ }
@@ -0,0 +1,3 @@
1
+ main {
2
+ display: block;
3
+ }
@@ -0,0 +1,116 @@
1
+ @charset "UTF-8";
2
+ /**
3
+ * Nav
4
+ */
5
+ :where(nav li)::before {
6
+ float: left;
7
+ content: "​";
8
+ }
9
+
10
+ :where(nav, nav ul) {
11
+ display: flex;
12
+ }
13
+
14
+ :where(nav) {
15
+ justify-content: space-between;
16
+ overflow: visible;
17
+ }
18
+
19
+ :where(nav ol, nav ul) {
20
+ align-items: center;
21
+ margin-bottom: 0;
22
+ padding: 0;
23
+ list-style: none;
24
+ }
25
+
26
+ :where(nav ol:first-of-type, nav ul:first-of-type) {
27
+ margin-left: calc(var(--nav-element-spacing-horizontal) * -1);
28
+ }
29
+
30
+ :where(nav ol:last-of-type, nav ul:last-of-type) {
31
+ margin-right: calc(var(--nav-element-spacing-horizontal) * -1);
32
+ }
33
+
34
+ :where(nav li) {
35
+ display: inline-block;
36
+ margin: 0;
37
+ padding: var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal);
38
+ }
39
+
40
+ nav li {
41
+ & :where(a, [role=link]) {
42
+ display: inline-block;
43
+ margin: calc(var(--nav-link-spacing-vertical) * -1) calc(var(--nav-link-spacing-horizontal) * -1);
44
+ padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);
45
+ border-radius: var(--border-radius);
46
+
47
+ &:not(:hover) {
48
+ text-decoration: none;
49
+ }
50
+ }
51
+
52
+ & :where(button, [role=button], [type=button], input:not([type=checkbox], [type=radio], [type=range], [type=file]), select) {
53
+ height: auto;
54
+ margin-right: inherit;
55
+ margin-bottom: 0;
56
+ margin-left: inherit;
57
+ padding: calc(var(--nav-link-spacing-vertical) - var(--border-width) * 2) var(--nav-link-spacing-horizontal);
58
+ }
59
+ }
60
+
61
+ :where(nav[aria-label=breadcrumb]) {
62
+ align-items: center;
63
+ justify-content: start;
64
+
65
+ & ul li {
66
+ &:not(:first-child) {
67
+ margin-inline-start: var(--nav-link-spacing-horizontal);
68
+ }
69
+
70
+ & :where(a, [role=link]) {
71
+ margin: calc(var(--nav-link-spacing-vertical) * -1) 0;
72
+ margin-inline-start: calc(var(--nav-link-spacing-horizontal) * -1);
73
+ }
74
+
75
+ &:not(:last-child)::after {
76
+ display: inline-block;
77
+ position: absolute;
78
+ width: calc(var(--nav-link-spacing-horizontal) * 4);
79
+ margin: 0 calc(var(--nav-link-spacing-horizontal) * -1);
80
+ content: var(--nav-breadcrumb-divider);
81
+ color: var(--color-text-muted);
82
+ text-align: center;
83
+ text-decoration: none;
84
+ white-space: nowrap;
85
+ }
86
+ }
87
+
88
+ & :where(a[aria-current]:not([aria-current=false]), [role=link][aria-current]:not([aria-current=false])) {
89
+ background-color: transparent;
90
+ color: inherit;
91
+ text-decoration: none;
92
+ pointer-events: none;
93
+ }
94
+ }
95
+
96
+ :where(aside nav, aside ol, aside ul, aside li) {
97
+ display: block;
98
+ }
99
+
100
+ :where(aside li) {
101
+ padding: calc(var(--nav-element-spacing-vertical) * 0.5) var(--nav-element-spacing-horizontal);
102
+ }
103
+
104
+ aside li {
105
+ & :where(a, [role=link], [role=button], button, [type=button]) {
106
+ display: block;
107
+ }
108
+
109
+ & :where([role=button], button, [type=button]) {
110
+ margin: inherit;
111
+ }
112
+ }
113
+
114
+ [dir=rtl] :where(nav[aria-label=breadcrumb]) ul li:not(:last-child)::after {
115
+ content: "\\";
116
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Progress
3
+ */
4
+ progress {
5
+ -webkit-appearance: none;
6
+ -moz-appearance: none;
7
+ display: inline-block;
8
+ appearance: none;
9
+ width: 100%;
10
+ height: 0.5rem;
11
+ margin-bottom: calc(var(--spacing) * 0.5);
12
+ overflow: hidden;
13
+ border: 0;
14
+ border-radius: var(--border-radius);
15
+ background-color: var(--progress-bg);
16
+ color: var(--progress-fill);
17
+ vertical-align: baseline;
18
+ accent-color: var(--color-primary);
19
+
20
+ &::-webkit-progress-bar {
21
+ border-radius: var(--border-radius);
22
+ background: none;
23
+ }
24
+
25
+ &[value]::-webkit-progress-value {
26
+ background-color: var(--progress-fill);
27
+ transition: inline-size var(--transition);
28
+ }
29
+
30
+ &::-moz-progress-bar {
31
+ background-color: var(--progress-fill);
32
+ }
33
+ }
34
+
35
+ @media (prefers-reduced-motion: no-preference) {
36
+ progress:indeterminate {
37
+ background: var(--progress-bg) linear-gradient(to right, var(--progress-fill) 30%, var(--progress-bg) 30%) top left/150% 150% no-repeat;
38
+ animation: progress-indeterminate 1s linear infinite;
39
+
40
+ &[value]::-webkit-progress-value {
41
+ background-color: transparent;
42
+ }
43
+
44
+ &::-moz-progress-bar {
45
+ background-color: transparent;
46
+ }
47
+ }
48
+
49
+ [dir=rtl] progress:indeterminate {
50
+ animation-direction: reverse;
51
+ }
52
+ }
53
+
54
+ @keyframes progress-indeterminate {
55
+ 0% {
56
+ background-position: 200% 0;
57
+ }
58
+
59
+ 100% {
60
+ background-position: -200% 0;
61
+ }
62
+ }
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Group ([role="group"], [role="search"])
3
+ */
4
+ [role="search"],
5
+ [role="group"] {
6
+ display: inline-flex;
7
+ position: relative;
8
+ width: 100%;
9
+ margin-bottom: var(--spacing);
10
+ border-radius: var(--border-radius);
11
+ box-shadow: var(--group-shadow, 0 0 0 rgba(0, 0, 0, 0));
12
+ vertical-align: middle;
13
+ transition: box-shadow var(--transition);
14
+
15
+ & > *:not(details),
16
+ & input:not([type="checkbox"], [type="radio"]),
17
+ & select {
18
+ position: relative;
19
+ flex: 1 1 auto;
20
+ margin-bottom: 0;
21
+
22
+ &:not(:first-child) {
23
+ margin-left: calc(var(--border-width) * -1);
24
+ border-top-left-radius: 0;
25
+ border-bottom-left-radius: 0;
26
+ }
27
+
28
+ &:not(:last-child) {
29
+ border-top-right-radius: 0;
30
+ border-bottom-right-radius: 0;
31
+ }
32
+
33
+ &:focus {
34
+ z-index: 2;
35
+ }
36
+ }
37
+
38
+ & button,
39
+ & [type="submit"],
40
+ & [type="reset"],
41
+ & [type="button"],
42
+ & [role="button"] {
43
+ width: auto;
44
+ }
45
+
46
+ /* Details dropdown inside group */
47
+ & > details {
48
+ position: relative;
49
+ margin-bottom: 0;
50
+ /* Constrain details height to just the button, not the dropdown menu */
51
+ height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);
52
+ overflow: visible;
53
+
54
+ &:not(:first-child) {
55
+ margin-left: calc(var(--border-width) * -1);
56
+
57
+ & > summary {
58
+ border-top-left-radius: 0;
59
+ border-bottom-left-radius: 0;
60
+ }
61
+ }
62
+
63
+ &:not(:last-child) > summary {
64
+ border-top-right-radius: 0;
65
+ border-bottom-right-radius: 0;
66
+ }
67
+
68
+ & > summary:focus {
69
+ z-index: 2;
70
+ }
71
+
72
+ /* Ensure consistent height with other form elements in the group */
73
+ & > summary[role="button"] {
74
+ display: flex;
75
+ align-items: center;
76
+ height: 100%;
77
+
78
+ &::after {
79
+ height: calc(1rem * var(--line-height, 1.5));
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ @supports selector(:has(*)) {
86
+ [role="search"],
87
+ [role="group"] {
88
+ &:has(button:focus, [type="submit"]:focus, [type="button"]:focus, [role="button"]:focus) {
89
+ --group-shadow: var(--group-shadow-focus-with-button);
90
+
91
+ & input:not([type="checkbox"], [type="radio"]),
92
+ & select {
93
+ border-color: transparent;
94
+ }
95
+ }
96
+
97
+ &:has(input:not([type="submit"], [type="button"]):focus, select:focus) {
98
+ --group-shadow: var(--group-shadow-focus-with-input);
99
+
100
+ & button,
101
+ & [type="submit"],
102
+ & [type="button"],
103
+ & [role="button"] {
104
+ --button-shadow: 0 0 0 var(--border-width) var(--color-primary-border);
105
+ --button-shadow-hover: 0 0 0 var(--border-width) var(--color-primary-hover-border);
106
+ }
107
+ }
108
+
109
+ & button:focus,
110
+ & [type="submit"]:focus,
111
+ & [type="reset"]:focus,
112
+ & [type="button"]:focus,
113
+ & [role="button"]:focus {
114
+ box-shadow: none;
115
+ }
116
+ }
117
+ }
118
+
119
+ [role="search"] {
120
+ & > :first-child {
121
+ border-top-left-radius: 5rem;
122
+ border-bottom-left-radius: 5rem;
123
+ }
124
+
125
+ & > :last-child {
126
+ border-top-right-radius: 5rem;
127
+ border-bottom-right-radius: 5rem;
128
+ }
129
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Minimal grid system with auto-layout columns
3
+ */
4
+ [role="toolbar"] {
5
+ grid-column-gap: var(--grid-column-gap);
6
+ grid-row-gap: var(--grid-row-gap);
7
+ display: grid;
8
+ grid-template-columns: 1fr;
9
+
10
+ @media (min-width: 425px) {
11
+ grid-template-columns: repeat(auto-fit, minmax(0%, 1fr));
12
+ }
13
+
14
+ & > * {
15
+ min-width: 0;
16
+ }
17
+ }