@anyblades/blades 3.1.0-alpha.2 → 3.1.0-beta.4

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 (93) hide show
  1. package/README.md +48 -23
  2. package/css/blades.css +301 -593
  3. package/css/blades.min.css +4 -148
  4. package/css/blades.ninja.css +4204 -0
  5. package/css/blades.ninja.min.css +12 -0
  6. package/css/float-label.css +207 -0
  7. package/css/float-label.min.css +6 -0
  8. package/css/{pico.layered.css → layered/blades.layered.css} +589 -17
  9. package/css/layered/blades.layered.min.css +14 -0
  10. package/css/layered/compact.css +54 -0
  11. package/css/layered/components/accordion.css +85 -0
  12. package/css/layered/components/card.css +48 -0
  13. package/css/layered/components/dropdown.css +191 -0
  14. package/css/layered/components/group.css +208 -0
  15. package/css/layered/components/loading.css +61 -0
  16. package/css/layered/components/modal.css +158 -0
  17. package/css/layered/components/nav.css +117 -0
  18. package/css/layered/components/progress.css +76 -0
  19. package/css/layered/components/tooltip.css +176 -0
  20. package/css/layered/components.css +1099 -0
  21. package/css/layered/content/button.css +208 -0
  22. package/css/layered/content/code.css +64 -0
  23. package/css/layered/content/embedded-content.css +41 -0
  24. package/css/layered/content/figure.css +15 -0
  25. package/css/layered/content/link.css +84 -0
  26. package/css/layered/content/misc.css +22 -0
  27. package/css/layered/content/table.css +33 -0
  28. package/css/layered/content/typography.css +159 -0
  29. package/css/layered/content.css +611 -0
  30. package/css/layered/forms/basics.css +338 -0
  31. package/css/layered/forms/checkbox-radio-switch.css +164 -0
  32. package/css/layered/forms/input-color.css +20 -0
  33. package/css/layered/forms/input-datetime.css +57 -0
  34. package/css/layered/forms/input-file.css +29 -0
  35. package/css/layered/forms/input-range.css +121 -0
  36. package/css/layered/forms/input-search.css +66 -0
  37. package/css/layered/forms.css +778 -0
  38. package/css/layered/layout/container.css +42 -0
  39. package/css/layered/layout/document.css +48 -0
  40. package/css/layered/layout/grid.css +22 -0
  41. package/css/layered/layout/landmarks.css +12 -0
  42. package/css/layered/layout/overflow-auto.css +9 -0
  43. package/css/layered/layout/section.css +9 -0
  44. package/css/layered/layout.css +119 -0
  45. package/css/layered/utilities.css +35 -0
  46. package/css/layered/variables.css +365 -0
  47. package/css/pico.conditional.css +34 -16
  48. package/css/pico.conditional.min.css +2 -111
  49. package/css/pico.css +34 -16
  50. package/css/pico.min.css +2 -111
  51. package/package.json +16 -12
  52. package/src/blades/_compact.css +51 -0
  53. package/src/blades/_dropdown-popover.css +107 -0
  54. package/src/blades/_index.css +28 -0
  55. package/src/blades/_modal.css +26 -0
  56. package/src/blades/float-label/_index.css +2 -0
  57. package/src/{standalone/forms/_float-label.theme.css → blades/float-label/_theme.css} +5 -1
  58. package/src/blades.css +2 -2
  59. package/src/blades.ninja.css +3 -0
  60. package/src/float-label.css +1 -0
  61. package/src/ninja/LICENSE +22 -0
  62. package/src/ninja/README.md +1 -0
  63. package/src/ninja/_index.css +19 -0
  64. package/src/{standalone → ninja}/_theme.css +0 -2
  65. package/src/{ninja.css → ninja/_utilities.css} +55 -6
  66. package/src/pico/_variables.css +6 -5
  67. package/src/pico/components/_loading.css +27 -1
  68. package/src/pico/content/_button.css +1 -1
  69. package/src/pico/layout/_document.css +9 -0
  70. package/src/pico/layout/_index.css +0 -1
  71. package/src/pico/layout/_landmarks.css +1 -9
  72. package/src/pico.css +1 -0
  73. package/css/blades.standalone.css +0 -860
  74. package/css/blades.standalone.min.css +0 -37
  75. package/css/ninja.css +0 -83
  76. package/css/ninja.min.css +0 -5
  77. package/css/pico.layered.min.css +0 -118
  78. package/src/blades.standalone.css +0 -2
  79. package/src/standalone/_core.css +0 -32
  80. package/src/standalone/_utilities.css +0 -55
  81. package/src/standalone/forms/_float-label.css +0 -2
  82. /package/src/{standalone/content → blades}/_code.css +0 -0
  83. /package/src/{standalone/layout → blades}/_columns.css +0 -0
  84. /package/src/{standalone/components/_icon-helper.css → blades/_icon.css} +0 -0
  85. /package/src/{standalone/components → blades}/_timeline.css +0 -0
  86. /package/src/{standalone → blades}/_variables.css +0 -0
  87. /package/src/{standalone/forms/_float-label.core.css → blades/float-label/_core.css} +0 -0
  88. /package/src/{standalone/layout/_breakout.css → ninja/_container-breakout.css} +0 -0
  89. /package/src/{standalone/content/_typography.css → ninja/_heading-anchor.css} +0 -0
  90. /package/src/{standalone/content/_list.css → ninja/_list-helpers.css} +0 -0
  91. /package/src/{standalone/layout/_scroller.css → ninja/_page-anchors.css} +0 -0
  92. /package/src/{standalone/content/_table.css → ninja/_table-helpers.css} +0 -0
  93. /package/src/{standalone/content → ninja}/_table-responsive.css +0 -0
@@ -0,0 +1,4204 @@
1
+ /*!
2
+ * Blades CSS v3 with Pico CSS 🥷✨
3
+ * Copyright 2026 (https://blades.ninja/)
4
+ * Licensed under MIT
5
+ *//*!
6
+ * Blades CSS' Pico fork v2.5 🥷✨
7
+ * Copyright 2019-2025 (https://picocss.com)
8
+ * Copyright 2026 (https://blades.ninja/css/pico/)
9
+ * Licensed under MIT
10
+ *//**
11
+ * Variables
12
+ */
13
+ :scope,
14
+ :host {
15
+ --pico-font-family-emoji:
16
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
17
+ --pico-font-family-sans-serif:
18
+ system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, Helvetica, Arial, "Helvetica Neue",
19
+ sans-serif, var(--pico-font-family-emoji);
20
+ --pico-font-family-monospace:
21
+ ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace,
22
+ var(--pico-font-family-emoji);
23
+ --pico-font-family: var(--pico-font-family-sans-serif);
24
+ --pico-line-height: 1.5;
25
+ --pico-font-weight: 400;
26
+ --pico-font-size: 100%;
27
+ --pico-text-underline-offset: 0.1rem;
28
+ --pico-border-radius: 0.25rem;
29
+ --pico-border-width: 0.0625rem;
30
+ --pico-outline-width: 0.125rem;
31
+ --pico-transition: 0.2s ease-in-out;
32
+ --pico-spacing: 1rem;
33
+ --pico-typography-spacing-vertical: 1rem;
34
+ --pico-block-spacing-vertical: var(--pico-spacing);
35
+ --pico-block-spacing-horizontal: var(--pico-spacing);
36
+ --pico-grid-column-gap: var(--pico-spacing);
37
+ --pico-grid-row-gap: var(--pico-spacing);
38
+ --pico-form-element-spacing-vertical: 0.75rem;
39
+ --pico-form-element-spacing-horizontal: 1rem;
40
+ --pico-nav-element-spacing-vertical: 1rem;
41
+ --pico-nav-link-spacing-vertical: 0.5rem;
42
+ --pico-nav-link-spacing-horizontal: 0.5rem;
43
+ --pico-icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
44
+ }
45
+ @media (min-width: 576px) {
46
+ :scope,
47
+ :host {
48
+ --pico-font-size: 106.25%;
49
+ }
50
+ }
51
+ @media (min-width: 768px) {
52
+ :scope,
53
+ :host {
54
+ --pico-font-size: 112.5%;
55
+ }
56
+ }
57
+ @media (min-width: 1024px) {
58
+ :scope,
59
+ :host {
60
+ --pico-font-size: 118.75%;
61
+ }
62
+ }
63
+ @media (min-width: 1280px) {
64
+ :scope,
65
+ :host {
66
+ --pico-font-size: 125%;
67
+ }
68
+ }
69
+ @media (min-width: 1536px) {
70
+ :scope,
71
+ :host {
72
+ --pico-font-size: 131.25%;
73
+ }
74
+ }
75
+
76
+ a {
77
+ --pico-text-decoration: underline;
78
+ }
79
+ a.secondary,
80
+ a.contrast {
81
+ --pico-text-decoration: underline;
82
+ }
83
+
84
+ small {
85
+ --pico-font-size: 0.875em;
86
+ }
87
+
88
+ h1,
89
+ h2,
90
+ h3,
91
+ h4,
92
+ h5,
93
+ h6 {
94
+ --pico-font-weight: 700;
95
+ }
96
+
97
+ h1 {
98
+ --pico-font-size: 2rem;
99
+ --pico-line-height: 1.125;
100
+ --pico-typography-spacing-top: 3rem;
101
+ }
102
+
103
+ h2 {
104
+ --pico-font-size: 1.75rem;
105
+ --pico-line-height: 1.15;
106
+ --pico-typography-spacing-top: 2.625rem;
107
+ }
108
+
109
+ h3 {
110
+ --pico-font-size: 1.5rem;
111
+ --pico-line-height: 1.175;
112
+ --pico-typography-spacing-top: 2.25rem;
113
+ }
114
+
115
+ h4 {
116
+ --pico-font-size: 1.25rem;
117
+ --pico-line-height: 1.2;
118
+ --pico-typography-spacing-top: 1.874rem;
119
+ }
120
+
121
+ h5 {
122
+ --pico-font-size: 1.125rem;
123
+ --pico-line-height: 1.225;
124
+ --pico-typography-spacing-top: 1.6875rem;
125
+ }
126
+
127
+ h6 {
128
+ --pico-font-size: 1rem;
129
+ --pico-line-height: 1.25;
130
+ --pico-typography-spacing-top: 1.5rem;
131
+ }
132
+
133
+ thead th,
134
+ thead td,
135
+ tfoot th,
136
+ tfoot td {
137
+ --pico-font-weight: 600;
138
+ --pico-border-width: 0.1875rem;
139
+ }
140
+
141
+ pre,
142
+ code,
143
+ kbd,
144
+ samp {
145
+ --pico-font-family: var(--pico-font-family-monospace);
146
+ }
147
+
148
+ kbd {
149
+ --pico-font-weight: bolder;
150
+ }
151
+
152
+ input:not(
153
+ [type="submit"],
154
+ [type="button"],
155
+ [type="reset"],
156
+ [type="checkbox"],
157
+ [type="radio"],
158
+ [type="file"]
159
+ ),
160
+ :where(select, textarea) {
161
+ --pico-outline-width: 0.0625rem;
162
+ }
163
+
164
+ [type="search"] {
165
+ --pico-border-radius: 5rem;
166
+ }
167
+
168
+ [type="checkbox"],
169
+ [type="radio"] {
170
+ --pico-border-width: 0.125rem;
171
+ }
172
+
173
+ [type="checkbox"][role="switch"] {
174
+ --pico-border-width: 0.1875rem;
175
+ }
176
+
177
+ details.dropdown summary:not([role="button"]) {
178
+ --pico-outline-width: 0.0625rem;
179
+ }
180
+
181
+ nav details.dropdown summary:focus-visible {
182
+ --pico-outline-width: 0.125rem;
183
+ }
184
+
185
+ [role="search"] {
186
+ --pico-border-radius: 5rem;
187
+ }
188
+
189
+ [role="search"] button,
190
+ [role="search"] [type="submit"],
191
+ [role="search"] [type="button"],
192
+ [role="search"] [role="button"],
193
+ [role="group"] button,
194
+ [role="group"] [type="submit"],
195
+ [role="group"] [type="button"],
196
+ [role="group"] [role="button"] {
197
+ --pico-form-element-spacing-horizontal: 2rem;
198
+ }
199
+
200
+ details summary[role="button"]:not(.outline)::after {
201
+ filter: brightness(0) invert(1);
202
+ }
203
+
204
+ [aria-busy="true"]:not(input, select, textarea):is(
205
+ button,
206
+ [type="submit"],
207
+ [type="button"],
208
+ [type="reset"],
209
+ [role="button"]
210
+ ):not(.outline)::before {
211
+ filter: brightness(0) invert(1);
212
+ }
213
+
214
+ /**
215
+ * Color schemes
216
+ * One palette for both schemes: light-dark() picks the value from the used color-scheme,
217
+ * so the dark scheme only has to switch color-scheme (same selectors as before).
218
+ */
219
+ :scope,
220
+ :host,
221
+ [data-theme="light"],
222
+ [data-theme="dark"] {
223
+ color-scheme: light;
224
+ --pico-background-color: light-dark(#fff, rgb(19, 22.5, 30.5));
225
+ --pico-color: light-dark(#373c44, #c2c7d0);
226
+ --pico-text-selection-color: light-dark(rgba(2, 154, 232, 0.25), rgba(1, 170, 255, 0.1875));
227
+ --pico-muted-color: light-dark(#646b79, #7b8495);
228
+ --pico-muted-border-color: light-dark(rgb(231, 234, 239.5), #202632);
229
+ --pico-primary: light-dark(#0172ad, #01aaff);
230
+ --pico-primary-background: #0172ad;
231
+ --pico-primary-border: var(--pico-primary-background);
232
+ --pico-primary-underline: light-dark(rgba(1, 114, 173, 0.5), rgba(1, 170, 255, 0.5));
233
+ --pico-primary-hover: light-dark(#015887, #79c0ff);
234
+ --pico-primary-hover-background: light-dark(#02659a, #017fc0);
235
+ --pico-primary-hover-border: var(--pico-primary-hover-background);
236
+ --pico-primary-hover-underline: var(--pico-primary-hover);
237
+ /* Focus rings are opaque: at 25–50% alpha they composite below 3:1 (SC 1.4.11), see #167 */
238
+ --pico-primary-focus: light-dark(rgb(2, 138, 212), rgb(1, 170, 255));
239
+ --pico-primary-inverse: #fff;
240
+ --pico-secondary: light-dark(#5d6b89, #969eaf);
241
+ --pico-secondary-background: #525f7a;
242
+ --pico-secondary-border: var(--pico-secondary-background);
243
+ --pico-secondary-underline: light-dark(rgba(93, 107, 137, 0.5), rgba(150, 158, 175, 0.5));
244
+ --pico-secondary-hover: light-dark(#48536b, #b3b9c5);
245
+ --pico-secondary-hover-background: light-dark(#48536b, #5d6b89);
246
+ --pico-secondary-hover-border: var(--pico-secondary-hover-background);
247
+ --pico-secondary-hover-underline: var(--pico-secondary-hover);
248
+ --pico-secondary-focus: light-dark(rgb(93, 107, 137), rgb(144, 158, 190));
249
+ --pico-secondary-inverse: #fff;
250
+ --pico-contrast: light-dark(#181c25, #dfe3eb);
251
+ --pico-contrast-background: light-dark(#181c25, #eff1f4);
252
+ --pico-contrast-border: var(--pico-contrast-background);
253
+ --pico-contrast-underline: light-dark(rgba(24, 28, 37, 0.5), rgba(223, 227, 235, 0.5));
254
+ --pico-contrast-hover: light-dark(#000, #fff);
255
+ --pico-contrast-hover-background: light-dark(#000, #fff);
256
+ --pico-contrast-hover-border: var(--pico-contrast-hover-background);
257
+ --pico-contrast-hover-underline: light-dark(
258
+ var(--pico-secondary-hover),
259
+ var(--pico-contrast-hover)
260
+ );
261
+ --pico-contrast-focus: light-dark(rgb(93, 107, 137), rgb(207, 213, 226));
262
+ --pico-contrast-inverse: light-dark(#fff, #000);
263
+ --pico-box-shadow: 0 0.5rem 2.5rem light-dark(rgba(129, 145, 181, 0.2), rgba(7, 8.5, 12, 0.2));
264
+ --pico-h1-color: light-dark(#2d3138, #f0f1f3);
265
+ --pico-h2-color: light-dark(#373c44, #e0e3e7);
266
+ --pico-h3-color: light-dark(#424751, #c2c7d0);
267
+ --pico-h4-color: light-dark(#4d535e, #b3b9c5);
268
+ --pico-h5-color: light-dark(#5c6370, #a4acba);
269
+ --pico-h6-color: light-dark(#646b79, #8891a4);
270
+ --pico-mark-background-color: light-dark(rgb(252.5, 230.5, 191.5), #014063);
271
+ --pico-mark-color: light-dark(#0f1114, #fff);
272
+ --pico-ins-color: light-dark(rgb(28.5, 105.5, 84), #62af9a);
273
+ --pico-del-color: light-dark(rgb(136, 56.5, 53), rgb(205.5, 126, 123));
274
+ --pico-blockquote-border-color: var(--pico-muted-border-color);
275
+ --pico-blockquote-footer-color: var(--pico-muted-color);
276
+ --pico-button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
277
+ --pico-button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
278
+ --pico-table-border-color: var(--pico-muted-border-color);
279
+ --pico-table-row-stripped-background-color: rgba(111, 120, 135, 0.0375);
280
+ --pico-code-background-color: light-dark(rgb(243, 244.5, 246.75), rgb(26, 30.5, 40.25));
281
+ --pico-code-color: light-dark(#646b79, #8891a4);
282
+ --pico-code-kbd-background-color: var(--pico-color);
283
+ --pico-code-kbd-color: var(--pico-background-color);
284
+ --pico-form-element-background-color: light-dark(rgb(251, 251.5, 252.25), rgb(28, 33, 43.5));
285
+ --pico-form-element-selected-background-color: light-dark(#dfe3eb, #2a3140);
286
+ --pico-form-element-border-color: light-dark(#cfd5e2, #2a3140);
287
+ --pico-form-element-color: light-dark(#23262c, #e0e3e7);
288
+ --pico-form-element-placeholder-color: light-dark(var(--pico-muted-color), #8891a4);
289
+ --pico-form-element-active-background-color: light-dark(#fff, rgb(26, 30.5, 40.25));
290
+ --pico-form-element-active-border-color: var(--pico-primary-border);
291
+ --pico-form-element-focus-color: var(--pico-primary-border);
292
+ --pico-form-element-disabled-opacity: 0.5;
293
+ --pico-form-element-invalid-border-color: light-dark(
294
+ rgb(183.5, 105.5, 106.5),
295
+ rgb(200.25, 79.25, 72.25)
296
+ );
297
+ --pico-form-element-invalid-active-border-color: light-dark(
298
+ rgb(200.25, 79.25, 72.25),
299
+ rgb(214, 92, 86)
300
+ );
301
+ --pico-form-element-invalid-focus-color: var(--pico-form-element-invalid-active-border-color);
302
+ --pico-form-element-valid-border-color: light-dark(rgb(76, 154.5, 137.5), #2a7b6f);
303
+ --pico-form-element-valid-active-border-color: light-dark(
304
+ rgb(39, 152.75, 118.75),
305
+ rgb(22, 137, 105.5)
306
+ );
307
+ --pico-form-element-valid-focus-color: var(--pico-form-element-valid-active-border-color);
308
+ /* One stroke color for both schemes, at least 3:1 on light and dark form backgrounds */
309
+ --pico-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(76, 154.5, 137.5)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
310
+ --pico-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(200.25, 79.25, 72.25)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
311
+ }
312
+
313
+ input:is(
314
+ [type="submit"],
315
+ [type="button"],
316
+ [type="reset"],
317
+ [type="checkbox"],
318
+ [type="radio"],
319
+ [type="file"]
320
+ ) {
321
+ --pico-form-element-focus-color: var(--pico-primary-focus);
322
+ }
323
+
324
+ /* Dark scheme: switch color-scheme, plus filters that light-dark() can't pick */
325
+ @media only screen and (prefers-color-scheme: dark) {
326
+ :scope:not([data-theme]),
327
+ :host(:not([data-theme])) {
328
+ color-scheme: dark;
329
+ }
330
+ :scope:not([data-theme]) details summary[role="button"].contrast:not(.outline)::after,
331
+ :host(:not([data-theme])) details summary[role="button"].contrast:not(.outline)::after,
332
+ :scope:not([data-theme])
333
+ [aria-busy="true"]:not(input, select, textarea).contrast:is(
334
+ button,
335
+ [type="submit"],
336
+ [type="button"],
337
+ [type="reset"],
338
+ [role="button"]
339
+ ):not(.outline)::before,
340
+ :host(:not([data-theme]))
341
+ [aria-busy="true"]:not(input, select, textarea).contrast:is(
342
+ button,
343
+ [type="submit"],
344
+ [type="button"],
345
+ [type="reset"],
346
+ [role="button"]
347
+ ):not(.outline)::before {
348
+ filter: brightness(0);
349
+ }
350
+ }
351
+ [data-theme="dark"] {
352
+ color-scheme: dark;
353
+ }
354
+ [data-theme="dark"] details summary[role="button"].contrast:not(.outline)::after,
355
+ [data-theme="dark"]
356
+ [aria-busy="true"]:not(input, select, textarea).contrast:is(
357
+ button,
358
+ [type="submit"],
359
+ [type="button"],
360
+ [type="reset"],
361
+ [role="button"]
362
+ ):not(.outline)::before {
363
+ filter: brightness(0);
364
+ }
365
+
366
+ progress,
367
+ [type="checkbox"],
368
+ [type="radio"],
369
+ [type="range"] {
370
+ accent-color: var(--pico-primary);
371
+ }
372
+
373
+ /**
374
+ * Document
375
+ * Content-box & Responsive typography
376
+ */
377
+ *,
378
+ *::before,
379
+ *::after {
380
+ box-sizing: border-box;
381
+ background-repeat: no-repeat;
382
+ }
383
+
384
+ ::before,
385
+ ::after {
386
+ text-decoration: inherit;
387
+ vertical-align: inherit;
388
+ }
389
+
390
+ :where(:scope),
391
+ :where(:host) {
392
+ -webkit-tap-highlight-color: transparent;
393
+ -webkit-text-size-adjust: 100%;
394
+ -moz-text-size-adjust: 100%;
395
+ text-size-adjust: 100%;
396
+ background-color: var(--pico-background-color);
397
+ color: var(--pico-color);
398
+ font-weight: var(--pico-font-weight);
399
+ font-size: var(--pico-font-size);
400
+ line-height: var(--pico-line-height);
401
+ font-family: var(--pico-font-family);
402
+ text-underline-offset: var(--pico-text-underline-offset);
403
+ text-rendering: optimizeLegibility;
404
+ overflow-wrap: break-word;
405
+ -moz-tab-size: 4;
406
+ -o-tab-size: 4;
407
+ tab-size: 4;
408
+ }
409
+
410
+ body {
411
+ width: 100%;
412
+ margin: 0;
413
+ }
414
+
415
+ main {
416
+ display: block;
417
+ }
418
+
419
+ /**
420
+ * Section
421
+ */
422
+ section {
423
+ margin-bottom: var(--pico-block-spacing-vertical);
424
+ }
425
+ /**
426
+ * Container
427
+ */
428
+ .container,
429
+ .container-fluid {
430
+ width: 100%;
431
+ margin-right: auto;
432
+ margin-left: auto;
433
+ padding-right: var(--pico-spacing);
434
+ padding-left: var(--pico-spacing);
435
+ }
436
+
437
+ @media (min-width: 576px) {
438
+ .container {
439
+ max-width: 510px;
440
+ padding-right: 0;
441
+ padding-left: 0;
442
+ }
443
+ }
444
+ @media (min-width: 768px) {
445
+ .container {
446
+ max-width: 700px;
447
+ }
448
+ }
449
+ @media (min-width: 1024px) {
450
+ .container {
451
+ max-width: 950px;
452
+ }
453
+ }
454
+ @media (min-width: 1280px) {
455
+ .container {
456
+ max-width: 1200px;
457
+ }
458
+ }
459
+ @media (min-width: 1536px) {
460
+ .container {
461
+ max-width: 1450px;
462
+ }
463
+ }
464
+ /**
465
+ * Grid
466
+ * Minimal grid system with auto-layout columns
467
+ */
468
+ .grid {
469
+ grid-column-gap: var(--pico-grid-column-gap);
470
+ grid-row-gap: var(--pico-grid-row-gap);
471
+ display: grid;
472
+ grid-template-columns: 1fr;
473
+ }
474
+ @media (min-width: 768px) {
475
+ .grid {
476
+ grid-template-columns: repeat(auto-fit, minmax(0%, 1fr));
477
+ }
478
+ }
479
+ .grid > *:not(.does-not-exist) {
480
+ min-width: 0;
481
+ margin-bottom: 0; /* https://github.com/picocss/pico/issues/738 */
482
+ }
483
+ /**
484
+ * Overflow auto
485
+ */
486
+ .overflow-auto {
487
+ overflow: auto;
488
+ }
489
+ /**
490
+ * Typography
491
+ */
492
+ b,
493
+ strong {
494
+ font-weight: bolder;
495
+ }
496
+
497
+ sub,
498
+ sup {
499
+ position: relative;
500
+ font-size: 0.75em;
501
+ line-height: 0;
502
+ vertical-align: baseline;
503
+ }
504
+
505
+ sub {
506
+ bottom: -0.25em;
507
+ }
508
+
509
+ sup {
510
+ top: -0.5em;
511
+ }
512
+
513
+ address,
514
+ blockquote,
515
+ dl,
516
+ ol,
517
+ p,
518
+ pre,
519
+ table,
520
+ ul {
521
+ margin-top: 0;
522
+ margin-bottom: var(--pico-typography-spacing-vertical);
523
+ color: var(--pico-color);
524
+ font-style: normal;
525
+ font-weight: var(--pico-font-weight);
526
+ }
527
+
528
+ h1,
529
+ h2,
530
+ h3,
531
+ h4,
532
+ h5,
533
+ h6 {
534
+ margin-top: 0;
535
+ margin-bottom: var(--pico-typography-spacing-vertical);
536
+ color: var(--pico-color);
537
+ font-weight: var(--pico-font-weight);
538
+ font-size: var(--pico-font-size);
539
+ line-height: var(--pico-line-height);
540
+ font-family: var(--pico-font-family);
541
+ }
542
+
543
+ h1 {
544
+ --pico-color: var(--pico-h1-color);
545
+ }
546
+
547
+ h2 {
548
+ --pico-color: var(--pico-h2-color);
549
+ }
550
+
551
+ h3 {
552
+ --pico-color: var(--pico-h3-color);
553
+ }
554
+
555
+ h4 {
556
+ --pico-color: var(--pico-h4-color);
557
+ }
558
+
559
+ h5 {
560
+ --pico-color: var(--pico-h5-color);
561
+ }
562
+
563
+ h6 {
564
+ --pico-color: var(--pico-h6-color);
565
+ }
566
+
567
+ :where(article, address, blockquote, dl, figure, form, ol, p, pre, table, ul)
568
+ ~ :is(h1, h2, h3, h4, h5, h6) {
569
+ margin-top: var(--pico-typography-spacing-top);
570
+ }
571
+
572
+ p {
573
+ margin-bottom: var(--pico-typography-spacing-vertical);
574
+ }
575
+
576
+ hgroup {
577
+ margin-bottom: var(--pico-typography-spacing-vertical);
578
+ }
579
+ hgroup > * {
580
+ margin-top: 0;
581
+ margin-bottom: 0;
582
+ }
583
+ hgroup > *:not(:first-child):last-child {
584
+ --pico-color: var(--pico-muted-color);
585
+ --pico-font-weight: unset;
586
+ font-size: 1rem;
587
+ }
588
+
589
+ :where(ol, ul) li {
590
+ margin-bottom: calc(var(--pico-typography-spacing-vertical) * 0.25);
591
+ }
592
+
593
+ :where(dl, ol, ul) :where(dl, ol, ul) {
594
+ margin: 0;
595
+ margin-top: calc(var(--pico-typography-spacing-vertical) * 0.25);
596
+ }
597
+
598
+ ul li {
599
+ list-style: square;
600
+ }
601
+
602
+ mark {
603
+ padding: 0.125rem 0.25rem;
604
+ background-color: var(--pico-mark-background-color);
605
+ color: var(--pico-mark-color);
606
+ vertical-align: baseline;
607
+ }
608
+
609
+ blockquote {
610
+ display: block;
611
+ margin: var(--pico-typography-spacing-vertical) 0;
612
+ padding: var(--pico-spacing);
613
+ border-right: none;
614
+ border-left: 0.25rem solid var(--pico-blockquote-border-color);
615
+ border-inline-start: 0.25rem solid var(--pico-blockquote-border-color);
616
+ border-inline-end: none;
617
+ }
618
+ blockquote footer {
619
+ margin-top: calc(var(--pico-typography-spacing-vertical) * 0.5);
620
+ color: var(--pico-blockquote-footer-color);
621
+ }
622
+
623
+ abbr[title] {
624
+ border-bottom: 1px dotted;
625
+ text-decoration: none;
626
+ cursor: help;
627
+ }
628
+
629
+ ins {
630
+ color: var(--pico-ins-color);
631
+ text-decoration: none;
632
+ }
633
+
634
+ del {
635
+ color: var(--pico-del-color);
636
+ }
637
+
638
+ ::-moz-selection {
639
+ background-color: var(--pico-text-selection-color);
640
+ }
641
+
642
+ ::selection {
643
+ background-color: var(--pico-text-selection-color);
644
+ }
645
+
646
+ /**
647
+ * Link
648
+ */
649
+ :where(a:not([role="button"])),
650
+ [role="link"] {
651
+ --pico-color: var(--pico-primary);
652
+ --pico-background-color: transparent;
653
+ --pico-underline: var(--pico-primary-underline);
654
+ outline: none;
655
+ background-color: var(--pico-background-color);
656
+ color: var(--pico-color);
657
+ -webkit-text-decoration: var(--pico-text-decoration);
658
+ text-decoration: var(--pico-text-decoration);
659
+ text-decoration-color: var(--pico-underline);
660
+ text-underline-offset: 0.125em;
661
+ transition:
662
+ background-color var(--pico-transition),
663
+ color var(--pico-transition),
664
+ box-shadow var(--pico-transition),
665
+ -webkit-text-decoration var(--pico-transition);
666
+ transition:
667
+ background-color var(--pico-transition),
668
+ color var(--pico-transition),
669
+ text-decoration var(--pico-transition),
670
+ box-shadow var(--pico-transition);
671
+ transition:
672
+ background-color var(--pico-transition),
673
+ color var(--pico-transition),
674
+ text-decoration var(--pico-transition),
675
+ box-shadow var(--pico-transition),
676
+ -webkit-text-decoration var(--pico-transition);
677
+ }
678
+ :where(a:not([role="button"])):is(
679
+ [aria-current]:not([aria-current="false"]),
680
+ :hover,
681
+ :active,
682
+ :focus
683
+ ),
684
+ [role="link"]:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
685
+ --pico-color: var(--pico-primary-hover);
686
+ --pico-underline: var(--pico-primary-hover-underline);
687
+ --pico-text-decoration: underline;
688
+ }
689
+ :where(a:not([role="button"])):focus-visible,
690
+ [role="link"]:focus-visible {
691
+ box-shadow: 0 0 0 var(--pico-outline-width) var(--pico-primary-focus);
692
+ }
693
+ :where(a:not([role="button"])).secondary,
694
+ [role="link"].secondary {
695
+ --pico-color: var(--pico-secondary);
696
+ --pico-underline: var(--pico-secondary-underline);
697
+ }
698
+ :where(a:not([role="button"])).secondary:is(
699
+ [aria-current]:not([aria-current="false"]),
700
+ :hover,
701
+ :active,
702
+ :focus
703
+ ),
704
+ [role="link"].secondary:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
705
+ --pico-color: var(--pico-secondary-hover);
706
+ --pico-underline: var(--pico-secondary-hover-underline);
707
+ }
708
+ :where(a:not([role="button"])).contrast,
709
+ [role="link"].contrast {
710
+ --pico-color: var(--pico-contrast);
711
+ --pico-underline: var(--pico-contrast-underline);
712
+ }
713
+ :where(a:not([role="button"])).contrast:is(
714
+ [aria-current]:not([aria-current="false"]),
715
+ :hover,
716
+ :active,
717
+ :focus
718
+ ),
719
+ [role="link"].contrast:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
720
+ --pico-color: var(--pico-contrast-hover);
721
+ --pico-underline: var(--pico-contrast-hover-underline);
722
+ }
723
+
724
+ a[role="button"] {
725
+ display: inline-block;
726
+ }
727
+
728
+ /**
729
+ * Button
730
+ */
731
+ button {
732
+ margin: 0;
733
+ overflow: visible;
734
+ font-family: inherit;
735
+ text-transform: none;
736
+ }
737
+
738
+ button,
739
+ [type="submit"],
740
+ [type="reset"],
741
+ [type="button"] {
742
+ -webkit-appearance: button;
743
+ }
744
+
745
+ button,
746
+ [type="submit"],
747
+ [type="reset"],
748
+ [type="button"],
749
+ [type="file"]::file-selector-button,
750
+ [role="button"] {
751
+ --pico-background-color: var(--pico-primary-background);
752
+ --pico-border-color: var(--pico-primary-border);
753
+ --pico-color: var(--pico-primary-inverse);
754
+ --pico-box-shadow: var(--pico-button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
755
+ padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal);
756
+ border: var(--pico-border-width) solid var(--pico-border-color);
757
+ border-radius: var(--pico-border-radius);
758
+ outline: none;
759
+ background-color: var(--pico-background-color);
760
+ box-shadow: var(--pico-box-shadow);
761
+ color: var(--pico-color);
762
+ font-weight: var(--pico-button-font-weight, var(--pico-font-weight));
763
+ font-size: 1rem;
764
+ line-height: var(--pico-line-height);
765
+ text-align: center;
766
+ text-decoration: none;
767
+ cursor: pointer;
768
+ -webkit-user-select: none;
769
+ -moz-user-select: none;
770
+ transition:
771
+ background-color var(--pico-transition),
772
+ border-color var(--pico-transition),
773
+ color var(--pico-transition),
774
+ box-shadow var(--pico-transition);
775
+ user-select: none;
776
+ }
777
+ button:is([aria-current]:not([aria-current="false"])),
778
+ button:is(:hover, :active, :focus),
779
+ [type="submit"]:is([aria-current]:not([aria-current="false"])),
780
+ [type="submit"]:is(:hover, :active, :focus),
781
+ [type="reset"]:is([aria-current]:not([aria-current="false"])),
782
+ [type="reset"]:is(:hover, :active, :focus),
783
+ [type="button"]:is([aria-current]:not([aria-current="false"])),
784
+ [type="button"]:is(:hover, :active, :focus),
785
+ [type="file"]::file-selector-button:is([aria-current]:not([aria-current="false"])),
786
+ [type="file"]::file-selector-button:is(:hover, :active, :focus),
787
+ [role="button"]:is([aria-current]:not([aria-current="false"])),
788
+ [role="button"]:is(:hover, :active, :focus) {
789
+ --pico-background-color: var(--pico-primary-hover-background);
790
+ --pico-border-color: var(--pico-primary-hover-border);
791
+ --pico-box-shadow: var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
792
+ --pico-color: var(--pico-primary-inverse);
793
+ }
794
+ button:focus,
795
+ button:is([aria-current]:not([aria-current="false"])):focus,
796
+ [type="submit"]:focus,
797
+ [type="submit"]:is([aria-current]:not([aria-current="false"])):focus,
798
+ [type="reset"]:focus,
799
+ [type="reset"]:is([aria-current]:not([aria-current="false"])):focus,
800
+ [type="button"]:focus,
801
+ [type="button"]:is([aria-current]:not([aria-current="false"])):focus,
802
+ [type="file"]::file-selector-button:focus,
803
+ [type="file"]::file-selector-button:is([aria-current]:not([aria-current="false"])):focus,
804
+ [role="button"]:focus,
805
+ [role="button"]:is([aria-current]:not([aria-current="false"])):focus {
806
+ --pico-box-shadow:
807
+ var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
808
+ 0 0 0 var(--pico-outline-width) var(--pico-primary-focus);
809
+ }
810
+
811
+ [type="submit"],
812
+ [type="reset"],
813
+ [type="button"] {
814
+ margin-bottom: var(--pico-spacing);
815
+ }
816
+
817
+ :is(button, [type="submit"], [type="button"], [role="button"]).secondary,
818
+ [type="reset"],
819
+ [type="file"]::file-selector-button {
820
+ --pico-background-color: var(--pico-secondary-background);
821
+ --pico-border-color: var(--pico-secondary-border);
822
+ --pico-color: var(--pico-secondary-inverse);
823
+ cursor: pointer;
824
+ }
825
+ :is(button, [type="submit"], [type="button"], [role="button"]).secondary:is(
826
+ [aria-current]:not([aria-current="false"]),
827
+ :hover,
828
+ :active,
829
+ :focus
830
+ ),
831
+ [type="reset"]:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus),
832
+ [type="file"]::file-selector-button:is(
833
+ [aria-current]:not([aria-current="false"]),
834
+ :hover,
835
+ :active,
836
+ :focus
837
+ ) {
838
+ --pico-background-color: var(--pico-secondary-hover-background);
839
+ --pico-border-color: var(--pico-secondary-hover-border);
840
+ --pico-color: var(--pico-secondary-inverse);
841
+ }
842
+ :is(button, [type="submit"], [type="button"], [role="button"]).secondary:focus,
843
+ :is(button, [type="submit"], [type="button"], [role="button"]).secondary:is(
844
+ [aria-current]:not([aria-current="false"])
845
+ ):focus,
846
+ [type="reset"]:focus,
847
+ [type="reset"]:is([aria-current]:not([aria-current="false"])):focus,
848
+ [type="file"]::file-selector-button:focus,
849
+ [type="file"]::file-selector-button:is([aria-current]:not([aria-current="false"])):focus {
850
+ --pico-box-shadow:
851
+ var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
852
+ 0 0 0 var(--pico-outline-width) var(--pico-secondary-focus);
853
+ }
854
+
855
+ :is(button, [type="submit"], [type="button"], [role="button"]).contrast {
856
+ --pico-background-color: var(--pico-contrast-background);
857
+ --pico-border-color: var(--pico-contrast-border);
858
+ --pico-color: var(--pico-contrast-inverse);
859
+ }
860
+ :is(button, [type="submit"], [type="button"], [role="button"]).contrast:is(
861
+ [aria-current]:not([aria-current="false"]),
862
+ :hover,
863
+ :active,
864
+ :focus
865
+ ) {
866
+ --pico-background-color: var(--pico-contrast-hover-background);
867
+ --pico-border-color: var(--pico-contrast-hover-border);
868
+ --pico-color: var(--pico-contrast-inverse);
869
+ }
870
+ :is(button, [type="submit"], [type="button"], [role="button"]).contrast:focus,
871
+ :is(button, [type="submit"], [type="button"], [role="button"]).contrast:is(
872
+ [aria-current]:not([aria-current="false"])
873
+ ):focus {
874
+ --pico-box-shadow:
875
+ var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
876
+ 0 0 0 var(--pico-outline-width) var(--pico-contrast-focus);
877
+ }
878
+
879
+ :is(button, [type="submit"], [type="button"], [role="button"]).outline,
880
+ [type="reset"].outline {
881
+ --pico-background-color: transparent;
882
+ --pico-color: var(--pico-primary);
883
+ --pico-border-color: var(--pico-primary);
884
+ }
885
+ :is(button, [type="submit"], [type="button"], [role="button"]).outline:is(
886
+ [aria-current]:not([aria-current="false"]),
887
+ :hover,
888
+ :active,
889
+ :focus
890
+ ),
891
+ [type="reset"].outline:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
892
+ --pico-background-color: transparent;
893
+ --pico-color: var(--pico-primary-hover);
894
+ --pico-border-color: var(--pico-primary-hover);
895
+ }
896
+
897
+ :is(button, [type="submit"], [type="button"], [role="button"]).outline.secondary,
898
+ [type="reset"].outline {
899
+ --pico-color: var(--pico-secondary);
900
+ --pico-border-color: var(--pico-secondary);
901
+ }
902
+ :is(button, [type="submit"], [type="button"], [role="button"]).outline.secondary:is(
903
+ [aria-current]:not([aria-current="false"]),
904
+ :hover,
905
+ :active,
906
+ :focus
907
+ ),
908
+ [type="reset"].outline:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
909
+ --pico-color: var(--pico-secondary-hover);
910
+ --pico-border-color: var(--pico-secondary-hover);
911
+ }
912
+
913
+ :is(button, [type="submit"], [type="button"], [role="button"]).outline.contrast {
914
+ --pico-color: var(--pico-contrast);
915
+ --pico-border-color: var(--pico-contrast);
916
+ }
917
+ :is(button, [type="submit"], [type="button"], [role="button"]).outline.contrast:is(
918
+ [aria-current]:not([aria-current="false"]),
919
+ :hover,
920
+ :active,
921
+ :focus
922
+ ) {
923
+ --pico-color: var(--pico-contrast-hover);
924
+ --pico-border-color: var(--pico-contrast-hover);
925
+ }
926
+
927
+ :where(button, [type="submit"], [type="reset"], [type="button"], [role="button"])[disabled],
928
+ :where(fieldset[disabled])
929
+ :is(button, [type="submit"], [type="button"], [type="reset"], [role="button"]) {
930
+ opacity: 0.5;
931
+ pointer-events: none;
932
+ }
933
+
934
+ /**
935
+ * Table
936
+ */
937
+ :where(table) {
938
+ width: 100%;
939
+ border-collapse: collapse;
940
+ border-spacing: 0;
941
+ text-indent: 0;
942
+ }
943
+
944
+ th,
945
+ td {
946
+ padding: calc(var(--pico-spacing) / 2) var(--pico-spacing);
947
+ border-bottom: var(--pico-border-width) solid var(--pico-table-border-color);
948
+ background-color: var(--pico-background-color);
949
+ color: var(--pico-color);
950
+ font-weight: var(--pico-font-weight);
951
+ text-align: start;
952
+ }
953
+
954
+ tfoot th,
955
+ tfoot td {
956
+ border-top: var(--pico-border-width) solid var(--pico-table-border-color);
957
+ border-bottom: 0;
958
+ }
959
+
960
+ table.striped tbody tr:nth-child(odd) th,
961
+ table.striped tbody tr:nth-child(odd) td {
962
+ background-color: var(--pico-table-row-stripped-background-color);
963
+ }
964
+
965
+ /**
966
+ * Embedded content
967
+ */
968
+ :where(audio, canvas, iframe, img, svg, video) {
969
+ vertical-align: middle;
970
+ }
971
+
972
+ audio,
973
+ video {
974
+ display: inline-block;
975
+ }
976
+
977
+ audio:not([controls]) {
978
+ display: none;
979
+ height: 0;
980
+ }
981
+
982
+ :where(iframe) {
983
+ border-style: none;
984
+ }
985
+
986
+ img:not([height]) {
987
+ max-width: 100%;
988
+ height: auto;
989
+ }
990
+
991
+ img {
992
+ border-style: none;
993
+ }
994
+
995
+ :where(svg:not([fill])) {
996
+ fill: currentColor;
997
+ }
998
+
999
+ svg:not(:scope),
1000
+ svg:not(:host) {
1001
+ overflow: hidden;
1002
+ }
1003
+
1004
+ /**
1005
+ * Code
1006
+ */
1007
+ pre,
1008
+ code,
1009
+ var,
1010
+ kbd,
1011
+ samp {
1012
+ font-size: 0.875em;
1013
+ font-family: var(--pico-font-family);
1014
+ }
1015
+
1016
+ pre code,
1017
+ pre samp {
1018
+ font-size: inherit;
1019
+ font-family: inherit;
1020
+ }
1021
+
1022
+ pre {
1023
+ -ms-overflow-style: scrollbar;
1024
+ overflow: auto;
1025
+ }
1026
+
1027
+ pre,
1028
+ code,
1029
+ var,
1030
+ kbd,
1031
+ samp {
1032
+ border-radius: var(--pico-border-radius);
1033
+ background: var(--pico-code-background-color);
1034
+ color: var(--pico-code-color);
1035
+ font-weight: var(--pico-font-weight);
1036
+ line-height: initial;
1037
+ }
1038
+
1039
+ code,
1040
+ var,
1041
+ kbd,
1042
+ samp {
1043
+ display: inline-block;
1044
+ padding: 0.375rem;
1045
+ }
1046
+
1047
+ pre {
1048
+ display: block;
1049
+ margin-bottom: var(--pico-spacing);
1050
+ overflow-x: auto;
1051
+ }
1052
+ pre > code,
1053
+ pre > samp {
1054
+ display: block;
1055
+ padding: var(--pico-spacing);
1056
+ background: none;
1057
+ line-height: var(--pico-line-height);
1058
+ }
1059
+
1060
+ kbd {
1061
+ background-color: var(--pico-code-kbd-background-color);
1062
+ color: var(--pico-code-kbd-color);
1063
+ vertical-align: baseline;
1064
+ }
1065
+
1066
+ /**
1067
+ * Figure
1068
+ */
1069
+ figure {
1070
+ display: block;
1071
+ margin: 0;
1072
+ padding: 0;
1073
+ }
1074
+ figure figcaption {
1075
+ padding: calc(var(--pico-spacing) * 0.5) 0;
1076
+ color: var(--pico-muted-color);
1077
+ }
1078
+ /**
1079
+ * Misc
1080
+ */
1081
+ hr {
1082
+ height: 0;
1083
+ margin: var(--pico-typography-spacing-vertical) 0;
1084
+ border: 0;
1085
+ border-top: 1px solid var(--pico-muted-border-color);
1086
+ color: inherit;
1087
+ }
1088
+
1089
+ [hidden],
1090
+ template {
1091
+ display: none !important;
1092
+ }
1093
+
1094
+ canvas {
1095
+ display: inline-block;
1096
+ }
1097
+
1098
+ /**
1099
+ * Basics form elements
1100
+ */
1101
+ input,
1102
+ optgroup,
1103
+ select,
1104
+ textarea {
1105
+ margin: 0;
1106
+ font-size: 1rem;
1107
+ line-height: var(--pico-line-height);
1108
+ font-family: inherit;
1109
+ letter-spacing: inherit;
1110
+ }
1111
+
1112
+ input {
1113
+ overflow: visible;
1114
+ }
1115
+
1116
+ select {
1117
+ text-transform: none;
1118
+ }
1119
+
1120
+ legend {
1121
+ max-width: 100%;
1122
+ padding: 0;
1123
+ color: inherit;
1124
+ white-space: normal;
1125
+ }
1126
+
1127
+ textarea {
1128
+ overflow: auto;
1129
+ }
1130
+
1131
+ [type="checkbox"],
1132
+ [type="radio"] {
1133
+ padding: 0;
1134
+ }
1135
+
1136
+ ::-webkit-inner-spin-button,
1137
+ ::-webkit-outer-spin-button {
1138
+ height: auto;
1139
+ }
1140
+
1141
+ [type="search"] {
1142
+ -webkit-appearance: textfield;
1143
+ outline-offset: -2px;
1144
+ }
1145
+
1146
+ [type="search"]::-webkit-search-decoration {
1147
+ -webkit-appearance: none;
1148
+ }
1149
+
1150
+ ::-webkit-file-upload-button {
1151
+ -webkit-appearance: button;
1152
+ font: inherit;
1153
+ }
1154
+
1155
+ ::-moz-focus-inner {
1156
+ padding: 0;
1157
+ border-style: none;
1158
+ }
1159
+
1160
+ :-moz-focusring {
1161
+ outline: none;
1162
+ }
1163
+
1164
+ :-moz-ui-invalid {
1165
+ box-shadow: none;
1166
+ }
1167
+
1168
+ ::-ms-expand {
1169
+ display: none;
1170
+ }
1171
+
1172
+ [type="file"],
1173
+ [type="range"] {
1174
+ padding: 0;
1175
+ border-width: 0;
1176
+ }
1177
+
1178
+ input:not([type="checkbox"], [type="radio"], [type="range"]) {
1179
+ height: calc(
1180
+ 1rem * var(--pico-line-height) + var(--pico-form-element-spacing-vertical) * 2 +
1181
+ var(--pico-border-width) * 2
1182
+ );
1183
+ }
1184
+
1185
+ fieldset {
1186
+ width: 100%;
1187
+ min-width: 0;
1188
+ margin: 0;
1189
+ margin-bottom: var(--pico-spacing);
1190
+ padding: 0;
1191
+ border: 0;
1192
+ }
1193
+
1194
+ label,
1195
+ fieldset legend {
1196
+ display: block;
1197
+ margin-bottom: calc(var(--pico-spacing) * 0.375);
1198
+ color: var(--pico-color);
1199
+ font-weight: var(--pico-form-label-font-weight, var(--pico-font-weight));
1200
+ }
1201
+
1202
+ fieldset legend {
1203
+ margin-bottom: calc(var(--pico-spacing) * 0.5);
1204
+ }
1205
+
1206
+ input:not([type="checkbox"], [type="radio"]),
1207
+ button[type="submit"],
1208
+ select,
1209
+ textarea {
1210
+ width: 100%;
1211
+ }
1212
+
1213
+ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]),
1214
+ select,
1215
+ textarea {
1216
+ -webkit-appearance: none;
1217
+ -moz-appearance: none;
1218
+ appearance: none;
1219
+ padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal);
1220
+ }
1221
+
1222
+ input,
1223
+ select,
1224
+ textarea {
1225
+ --pico-background-color: var(--pico-form-element-background-color);
1226
+ --pico-border-color: var(--pico-form-element-border-color);
1227
+ --pico-color: var(--pico-form-element-color);
1228
+ --pico-box-shadow: none;
1229
+ border: var(--pico-border-width) solid var(--pico-border-color);
1230
+ border-radius: var(--pico-border-radius);
1231
+ outline: none;
1232
+ background-color: var(--pico-background-color);
1233
+ box-shadow: var(--pico-box-shadow);
1234
+ color: var(--pico-color);
1235
+ font-weight: var(--pico-font-weight);
1236
+ transition:
1237
+ background-color var(--pico-transition),
1238
+ border-color var(--pico-transition),
1239
+ color var(--pico-transition),
1240
+ box-shadow var(--pico-transition);
1241
+ }
1242
+
1243
+ input:not(
1244
+ [type="submit"],
1245
+ [type="button"],
1246
+ [type="reset"],
1247
+ [type="checkbox"],
1248
+ [type="radio"],
1249
+ [readonly]
1250
+ ):is(:active, :focus),
1251
+ :where(select, textarea):not([readonly]):is(:active, :focus) {
1252
+ --pico-background-color: var(--pico-form-element-active-background-color);
1253
+ }
1254
+
1255
+ input:not([type="submit"], [type="button"], [type="reset"], [role="switch"], [readonly]):is(
1256
+ :active,
1257
+ :focus
1258
+ ),
1259
+ :where(select, textarea):not([readonly]):is(:active, :focus) {
1260
+ --pico-border-color: var(--pico-form-element-active-border-color);
1261
+ }
1262
+
1263
+ input:not(
1264
+ [type="submit"],
1265
+ [type="button"],
1266
+ [type="reset"],
1267
+ [type="range"],
1268
+ [type="file"],
1269
+ [readonly]
1270
+ ):focus,
1271
+ :where(select, textarea):not([readonly]):focus {
1272
+ --pico-box-shadow: 0 0 0 var(--pico-outline-width) var(--pico-form-element-focus-color);
1273
+ }
1274
+
1275
+ input:not([type="submit"], [type="button"], [type="reset"])[disabled],
1276
+ select[disabled],
1277
+ textarea[disabled],
1278
+ label[aria-disabled="true"],
1279
+ :where(fieldset[disabled])
1280
+ :is(input:not([type="submit"], [type="button"], [type="reset"]), select, textarea) {
1281
+ opacity: var(--pico-form-element-disabled-opacity);
1282
+ pointer-events: none;
1283
+ }
1284
+
1285
+ label[aria-disabled="true"] input[disabled] {
1286
+ opacity: 1;
1287
+ }
1288
+
1289
+ :where(input, select, textarea):not(
1290
+ [type="checkbox"],
1291
+ [type="radio"],
1292
+ [type="date"],
1293
+ [type="datetime-local"],
1294
+ [type="month"],
1295
+ [type="time"],
1296
+ [type="week"],
1297
+ [type="range"]
1298
+ )[aria-invalid] {
1299
+ padding-right: calc(var(--pico-form-element-spacing-horizontal) + 1.5rem) !important;
1300
+ padding-left: var(--pico-form-element-spacing-horizontal);
1301
+ padding-inline-start: var(--pico-form-element-spacing-horizontal) !important;
1302
+ padding-inline-end: calc(var(--pico-form-element-spacing-horizontal) + 1.5rem) !important;
1303
+ background-position: center right 0.75rem;
1304
+ background-size: 1rem auto;
1305
+ background-repeat: no-repeat;
1306
+ }
1307
+ :where(input, select, textarea):not(
1308
+ [type="checkbox"],
1309
+ [type="radio"],
1310
+ [type="date"],
1311
+ [type="datetime-local"],
1312
+ [type="month"],
1313
+ [type="time"],
1314
+ [type="week"],
1315
+ [type="range"]
1316
+ )[aria-invalid="false"]:not(select) {
1317
+ background-image: var(--pico-icon-valid);
1318
+ }
1319
+ :where(input, select, textarea):not(
1320
+ [type="checkbox"],
1321
+ [type="radio"],
1322
+ [type="date"],
1323
+ [type="datetime-local"],
1324
+ [type="month"],
1325
+ [type="time"],
1326
+ [type="week"],
1327
+ [type="range"]
1328
+ )[aria-invalid="true"]:not(select) {
1329
+ background-image: var(--pico-icon-invalid);
1330
+ }
1331
+ :where(input, select, textarea)[aria-invalid="false"] {
1332
+ --pico-border-color: var(--pico-form-element-valid-border-color);
1333
+ }
1334
+ :where(input, select, textarea)[aria-invalid="false"]:is(:active, :focus) {
1335
+ --pico-border-color: var(--pico-form-element-valid-active-border-color) !important;
1336
+ }
1337
+ :where(input, select, textarea)[aria-invalid="false"]:is(:active, :focus):not(
1338
+ [type="checkbox"],
1339
+ [type="radio"]
1340
+ ) {
1341
+ --pico-box-shadow: 0 0 0 var(--pico-outline-width) var(--pico-form-element-valid-focus-color) !important;
1342
+ }
1343
+ :where(input, select, textarea)[aria-invalid="true"] {
1344
+ --pico-border-color: var(--pico-form-element-invalid-border-color);
1345
+ }
1346
+ :where(input, select, textarea)[aria-invalid="true"]:is(:active, :focus) {
1347
+ --pico-border-color: var(--pico-form-element-invalid-active-border-color) !important;
1348
+ }
1349
+ :where(input, select, textarea)[aria-invalid="true"]:is(:active, :focus):not(
1350
+ [type="checkbox"],
1351
+ [type="radio"]
1352
+ ) {
1353
+ --pico-box-shadow: 0 0 0 var(--pico-outline-width) var(--pico-form-element-invalid-focus-color) !important;
1354
+ }
1355
+
1356
+ [dir="rtl"]
1357
+ :where(input, select, textarea):not([type="checkbox"], [type="radio"]):is(
1358
+ [aria-invalid],
1359
+ [aria-invalid="true"],
1360
+ [aria-invalid="false"]
1361
+ ) {
1362
+ background-position: center left 0.75rem;
1363
+ }
1364
+
1365
+ input::placeholder,
1366
+ input::-webkit-input-placeholder,
1367
+ textarea::placeholder,
1368
+ textarea::-webkit-input-placeholder,
1369
+ select:invalid {
1370
+ color: var(--pico-form-element-placeholder-color);
1371
+ opacity: 1;
1372
+ }
1373
+
1374
+ input:not([type="checkbox"], [type="radio"]),
1375
+ select,
1376
+ textarea {
1377
+ margin-bottom: var(--pico-spacing);
1378
+ }
1379
+
1380
+ select::-ms-expand {
1381
+ border: 0;
1382
+ background-color: transparent;
1383
+ }
1384
+ select:not([multiple], [size]) {
1385
+ padding-right: calc(var(--pico-form-element-spacing-horizontal) + 1.5rem);
1386
+ padding-left: var(--pico-form-element-spacing-horizontal);
1387
+ padding-inline-start: var(--pico-form-element-spacing-horizontal);
1388
+ padding-inline-end: calc(var(--pico-form-element-spacing-horizontal) + 1.5rem);
1389
+ background-image: var(--pico-icon-chevron);
1390
+ background-position: center right 0.75rem;
1391
+ background-size: 1rem auto;
1392
+ background-repeat: no-repeat;
1393
+ }
1394
+ select[multiple] option:checked {
1395
+ background: var(--pico-form-element-selected-background-color);
1396
+ color: var(--pico-form-element-color);
1397
+ }
1398
+
1399
+ [dir="rtl"] select:not([multiple], [size]) {
1400
+ background-position: center left 0.75rem;
1401
+ }
1402
+
1403
+ textarea {
1404
+ display: block;
1405
+ resize: vertical;
1406
+ }
1407
+ textarea[aria-invalid] {
1408
+ --pico-icon-height: calc(
1409
+ 1rem * var(--pico-line-height) + var(--pico-form-element-spacing-vertical) * 2 +
1410
+ var(--pico-border-width) * 2
1411
+ );
1412
+ background-position: top right 0.75rem !important;
1413
+ background-size: 1rem var(--pico-icon-height) !important;
1414
+ }
1415
+
1416
+ :where(input, select, textarea, fieldset, .grid) + small {
1417
+ display: block;
1418
+ width: 100%;
1419
+ margin-top: calc(var(--pico-spacing) * -0.75);
1420
+ margin-bottom: var(--pico-spacing);
1421
+ color: var(--pico-muted-color);
1422
+ }
1423
+ :where(input, select, textarea, fieldset, .grid)[aria-invalid="false"] + small {
1424
+ color: var(--pico-ins-color);
1425
+ }
1426
+ :where(input, select, textarea, fieldset, .grid)[aria-invalid="true"] + small {
1427
+ color: var(--pico-del-color);
1428
+ }
1429
+
1430
+ label > :where(input, select, textarea) {
1431
+ margin-top: calc(var(--pico-spacing) * 0.25);
1432
+ }
1433
+
1434
+ /**
1435
+ * Checkboxes, Radios and Switches
1436
+ */
1437
+ :where(:scope),
1438
+ :host {
1439
+ --pico-icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
1440
+ --pico-icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
1441
+ }
1442
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
1443
+ :host {
1444
+ --pico-switch-background-color: light-dark(#bfc7d9, #333c4e);
1445
+ --pico-switch-checked-background-color: var(--pico-primary-background);
1446
+ --pico-switch-color: #fff;
1447
+ --pico-switch-thumb-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
1448
+ }
1449
+
1450
+ label:has([type="checkbox"], [type="radio"]) {
1451
+ width: -moz-fit-content;
1452
+ width: fit-content;
1453
+ cursor: pointer;
1454
+ }
1455
+
1456
+ [type="checkbox"],
1457
+ [type="radio"] {
1458
+ -webkit-appearance: none;
1459
+ -moz-appearance: none;
1460
+ appearance: none;
1461
+ width: 1.25em;
1462
+ height: 1.25em;
1463
+ margin-top: -0.125em;
1464
+ margin-inline-end: 0.5em;
1465
+ border-width: var(--pico-border-width);
1466
+ vertical-align: middle;
1467
+ cursor: pointer;
1468
+ }
1469
+ [type="checkbox"]::-ms-check,
1470
+ [type="radio"]::-ms-check {
1471
+ display: none;
1472
+ }
1473
+ [type="checkbox"]:checked,
1474
+ [type="checkbox"]:checked:active,
1475
+ [type="checkbox"]:checked:focus,
1476
+ [type="radio"]:checked,
1477
+ [type="radio"]:checked:active,
1478
+ [type="radio"]:checked:focus {
1479
+ --pico-background-color: var(--pico-primary-background);
1480
+ --pico-border-color: var(--pico-primary-border);
1481
+ background-image: var(--pico-icon-checkbox);
1482
+ background-position: center;
1483
+ background-size: 0.75em auto;
1484
+ background-repeat: no-repeat;
1485
+ }
1486
+ [type="checkbox"] ~ label,
1487
+ [type="radio"] ~ label {
1488
+ display: inline-block;
1489
+ margin-bottom: 0;
1490
+ cursor: pointer;
1491
+ }
1492
+ [type="checkbox"] ~ label:not(:last-of-type),
1493
+ [type="radio"] ~ label:not(:last-of-type) {
1494
+ margin-inline-end: 1em;
1495
+ }
1496
+
1497
+ [type="checkbox"]:indeterminate {
1498
+ --pico-background-color: var(--pico-primary-background);
1499
+ --pico-border-color: var(--pico-primary-border);
1500
+ background-image: var(--pico-icon-minus);
1501
+ background-position: center;
1502
+ background-size: 0.75em auto;
1503
+ background-repeat: no-repeat;
1504
+ }
1505
+
1506
+ [type="radio"] {
1507
+ border-radius: 50%;
1508
+ }
1509
+ [type="radio"]:checked,
1510
+ [type="radio"]:checked:active,
1511
+ [type="radio"]:checked:focus {
1512
+ --pico-background-color: var(--pico-primary-inverse);
1513
+ border-width: 0.35em;
1514
+ background-image: none;
1515
+ }
1516
+
1517
+ [type="checkbox"][role="switch"] {
1518
+ --pico-background-color: var(--pico-switch-background-color);
1519
+ --pico-color: var(--pico-switch-color);
1520
+ width: 2.25em;
1521
+ height: 1.25em;
1522
+ border: var(--pico-border-width) solid var(--pico-border-color);
1523
+ border-radius: 1.25em;
1524
+ background-color: var(--pico-background-color);
1525
+ line-height: 1.25em;
1526
+ }
1527
+ [type="checkbox"][role="switch"]:not([aria-invalid]) {
1528
+ --pico-border-color: var(--pico-switch-background-color);
1529
+ }
1530
+ [type="checkbox"][role="switch"]:before {
1531
+ display: block;
1532
+ aspect-ratio: 1;
1533
+ height: 100%;
1534
+ border-radius: 50%;
1535
+ background-color: var(--pico-color);
1536
+ box-shadow: var(--pico-switch-thumb-box-shadow);
1537
+ content: "";
1538
+ transition: margin 0.1s ease-in-out;
1539
+ }
1540
+ [type="checkbox"][role="switch"]:focus {
1541
+ --pico-background-color: var(--pico-switch-background-color);
1542
+ --pico-border-color: var(--pico-switch-background-color);
1543
+ }
1544
+ [type="checkbox"][role="switch"]:checked {
1545
+ --pico-background-color: var(--pico-switch-checked-background-color);
1546
+ --pico-border-color: var(--pico-switch-checked-background-color);
1547
+ background-image: none;
1548
+ }
1549
+ [type="checkbox"][role="switch"]:checked::before {
1550
+ margin-inline-start: calc(2.25em - 1.25em);
1551
+ }
1552
+ [type="checkbox"][role="switch"][disabled] {
1553
+ --pico-background-color: var(--pico-border-color);
1554
+ }
1555
+
1556
+ [type="checkbox"][aria-invalid="false"]:checked,
1557
+ [type="checkbox"][aria-invalid="false"]:checked:active,
1558
+ [type="checkbox"][aria-invalid="false"]:checked:focus,
1559
+ [type="checkbox"][role="switch"][aria-invalid="false"]:checked,
1560
+ [type="checkbox"][role="switch"][aria-invalid="false"]:checked:active,
1561
+ [type="checkbox"][role="switch"][aria-invalid="false"]:checked:focus {
1562
+ --pico-background-color: var(--pico-form-element-valid-border-color);
1563
+ }
1564
+ [type="checkbox"]:checked[aria-invalid="true"],
1565
+ [type="checkbox"]:checked:active[aria-invalid="true"],
1566
+ [type="checkbox"]:checked:focus[aria-invalid="true"],
1567
+ [type="checkbox"][role="switch"]:checked[aria-invalid="true"],
1568
+ [type="checkbox"][role="switch"]:checked:active[aria-invalid="true"],
1569
+ [type="checkbox"][role="switch"]:checked:focus[aria-invalid="true"] {
1570
+ --pico-background-color: var(--pico-form-element-invalid-border-color);
1571
+ }
1572
+
1573
+ [type="checkbox"][aria-invalid="false"]:checked,
1574
+ [type="checkbox"][aria-invalid="false"]:checked:active,
1575
+ [type="checkbox"][aria-invalid="false"]:checked:focus,
1576
+ [type="radio"][aria-invalid="false"]:checked,
1577
+ [type="radio"][aria-invalid="false"]:checked:active,
1578
+ [type="radio"][aria-invalid="false"]:checked:focus,
1579
+ [type="checkbox"][role="switch"][aria-invalid="false"]:checked,
1580
+ [type="checkbox"][role="switch"][aria-invalid="false"]:checked:active,
1581
+ [type="checkbox"][role="switch"][aria-invalid="false"]:checked:focus {
1582
+ --pico-border-color: var(--pico-form-element-valid-border-color);
1583
+ }
1584
+ [type="checkbox"]:checked[aria-invalid="true"],
1585
+ [type="checkbox"]:checked:active[aria-invalid="true"],
1586
+ [type="checkbox"]:checked:focus[aria-invalid="true"],
1587
+ [type="radio"]:checked[aria-invalid="true"],
1588
+ [type="radio"]:checked:active[aria-invalid="true"],
1589
+ [type="radio"]:checked:focus[aria-invalid="true"],
1590
+ [type="checkbox"][role="switch"]:checked[aria-invalid="true"],
1591
+ [type="checkbox"][role="switch"]:checked:active[aria-invalid="true"],
1592
+ [type="checkbox"][role="switch"]:checked:focus[aria-invalid="true"] {
1593
+ --pico-border-color: var(--pico-form-element-invalid-border-color);
1594
+ }
1595
+ /**
1596
+ * Input type color
1597
+ */
1598
+ [type="color"]::-webkit-color-swatch-wrapper {
1599
+ padding: 0;
1600
+ }
1601
+ [type="color"]::-moz-focus-inner {
1602
+ padding: 0;
1603
+ }
1604
+ [type="color"]::-webkit-color-swatch {
1605
+ border: 0;
1606
+ border-radius: calc(var(--pico-border-radius) * 0.5);
1607
+ }
1608
+ [type="color"]::-moz-color-swatch {
1609
+ border: 0;
1610
+ border-radius: calc(var(--pico-border-radius) * 0.5);
1611
+ }
1612
+ /**
1613
+ * Input type datetime
1614
+ */
1615
+ :where(:scope),
1616
+ :host {
1617
+ --pico-icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
1618
+ --pico-icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");
1619
+ }
1620
+
1621
+ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]):is(
1622
+ [type="date"],
1623
+ [type="datetime-local"],
1624
+ [type="month"],
1625
+ [type="time"],
1626
+ [type="week"]
1627
+ ) {
1628
+ --pico-icon-position: 0.75rem;
1629
+ --pico-icon-width: 1rem;
1630
+ min-width: 0;
1631
+ padding-right: calc(var(--pico-icon-width) + var(--pico-icon-position));
1632
+ background-image: var(--pico-icon-date);
1633
+ background-position: center right var(--pico-icon-position);
1634
+ background-size: var(--pico-icon-width) auto;
1635
+ background-repeat: no-repeat;
1636
+ }
1637
+ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type="time"] {
1638
+ background-image: var(--pico-icon-time);
1639
+ }
1640
+
1641
+ [type="date"]::-webkit-calendar-picker-indicator,
1642
+ [type="datetime-local"]::-webkit-calendar-picker-indicator,
1643
+ [type="month"]::-webkit-calendar-picker-indicator,
1644
+ [type="time"]::-webkit-calendar-picker-indicator,
1645
+ [type="week"]::-webkit-calendar-picker-indicator {
1646
+ width: var(--pico-icon-width);
1647
+ margin-right: calc(var(--pico-icon-width) * -1);
1648
+ margin-left: var(--pico-icon-position);
1649
+ opacity: 0;
1650
+ }
1651
+
1652
+ @-moz-document url-prefix() {
1653
+ [type="date"],
1654
+ [type="datetime-local"],
1655
+ [type="month"],
1656
+ [type="time"],
1657
+ [type="week"] {
1658
+ padding-right: var(--pico-form-element-spacing-horizontal) !important;
1659
+ background-image: none !important;
1660
+ }
1661
+ }
1662
+ [dir="rtl"]
1663
+ :is([type="date"], [type="datetime-local"], [type="month"], [type="time"], [type="week"]) {
1664
+ text-align: end;
1665
+ }
1666
+ /**
1667
+ * Input type file
1668
+ */
1669
+ [type="file"] {
1670
+ --pico-color: var(--pico-muted-color);
1671
+ margin-left: calc(var(--pico-outline-width) * -1);
1672
+ padding: calc(var(--pico-form-element-spacing-vertical) * 0.5) 0;
1673
+ padding-left: var(--pico-outline-width);
1674
+ border: 0;
1675
+ border-radius: 0;
1676
+ background: none;
1677
+ }
1678
+ [type="file"]::file-selector-button {
1679
+ margin-right: calc(var(--pico-spacing) / 2);
1680
+ padding: calc(var(--pico-form-element-spacing-vertical) * 0.5)
1681
+ var(--pico-form-element-spacing-horizontal);
1682
+ }
1683
+ [type="file"]:is(:hover, :active, :focus)::file-selector-button {
1684
+ --pico-background-color: var(--pico-secondary-hover-background);
1685
+ --pico-border-color: var(--pico-secondary-hover-border);
1686
+ }
1687
+ [type="file"]:focus::file-selector-button {
1688
+ --pico-box-shadow:
1689
+ var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
1690
+ 0 0 0 var(--pico-outline-width) var(--pico-secondary-focus);
1691
+ }
1692
+ /**
1693
+ * Input type range
1694
+ */
1695
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
1696
+ :host {
1697
+ --pico-range-border-color: light-dark(#dfe3eb, #202632);
1698
+ --pico-range-active-border-color: light-dark(#bfc7d9, #2a3140);
1699
+ --pico-range-thumb-border-color: var(--pico-background-color);
1700
+ --pico-range-thumb-color: var(--pico-secondary-background);
1701
+ --pico-range-thumb-active-color: var(--pico-primary-background);
1702
+ }
1703
+
1704
+ [type="range"] {
1705
+ -webkit-appearance: none;
1706
+ -moz-appearance: none;
1707
+ appearance: none;
1708
+ width: 100%;
1709
+ height: 1.25rem;
1710
+ background: none;
1711
+ }
1712
+ [type="range"]::-webkit-slider-runnable-track {
1713
+ width: 100%;
1714
+ height: 0.375rem;
1715
+ border-radius: var(--pico-border-radius);
1716
+ background-color: var(--pico-range-border-color);
1717
+ -webkit-transition:
1718
+ background-color var(--pico-transition),
1719
+ box-shadow var(--pico-transition);
1720
+ transition:
1721
+ background-color var(--pico-transition),
1722
+ box-shadow var(--pico-transition);
1723
+ }
1724
+ [type="range"]::-moz-range-track {
1725
+ width: 100%;
1726
+ height: 0.375rem;
1727
+ border-radius: var(--pico-border-radius);
1728
+ background-color: var(--pico-range-border-color);
1729
+ -moz-transition:
1730
+ background-color var(--pico-transition),
1731
+ box-shadow var(--pico-transition);
1732
+ transition:
1733
+ background-color var(--pico-transition),
1734
+ box-shadow var(--pico-transition);
1735
+ }
1736
+ [type="range"]::-ms-track {
1737
+ width: 100%;
1738
+ height: 0.375rem;
1739
+ border-radius: var(--pico-border-radius);
1740
+ background-color: var(--pico-range-border-color);
1741
+ -ms-transition:
1742
+ background-color var(--pico-transition),
1743
+ box-shadow var(--pico-transition);
1744
+ transition:
1745
+ background-color var(--pico-transition),
1746
+ box-shadow var(--pico-transition);
1747
+ }
1748
+ [type="range"]::-webkit-slider-thumb {
1749
+ -webkit-appearance: none;
1750
+ width: 1.25rem;
1751
+ height: 1.25rem;
1752
+ margin-top: -0.4375rem;
1753
+ border: 2px solid var(--pico-range-thumb-border-color);
1754
+ border-radius: 50%;
1755
+ background-color: var(--pico-range-thumb-color);
1756
+ cursor: pointer;
1757
+ -webkit-transition:
1758
+ background-color var(--pico-transition),
1759
+ transform var(--pico-transition);
1760
+ transition:
1761
+ background-color var(--pico-transition),
1762
+ transform var(--pico-transition);
1763
+ }
1764
+ [type="range"]::-moz-range-thumb {
1765
+ -webkit-appearance: none;
1766
+ width: 1.25rem;
1767
+ height: 1.25rem;
1768
+ margin-top: -0.4375rem;
1769
+ border: 2px solid var(--pico-range-thumb-border-color);
1770
+ border-radius: 50%;
1771
+ background-color: var(--pico-range-thumb-color);
1772
+ cursor: pointer;
1773
+ -moz-transition:
1774
+ background-color var(--pico-transition),
1775
+ transform var(--pico-transition);
1776
+ transition:
1777
+ background-color var(--pico-transition),
1778
+ transform var(--pico-transition);
1779
+ }
1780
+ [type="range"]::-ms-thumb {
1781
+ -webkit-appearance: none;
1782
+ width: 1.25rem;
1783
+ height: 1.25rem;
1784
+ margin-top: -0.4375rem;
1785
+ border: 2px solid var(--pico-range-thumb-border-color);
1786
+ border-radius: 50%;
1787
+ background-color: var(--pico-range-thumb-color);
1788
+ cursor: pointer;
1789
+ -ms-transition:
1790
+ background-color var(--pico-transition),
1791
+ transform var(--pico-transition);
1792
+ transition:
1793
+ background-color var(--pico-transition),
1794
+ transform var(--pico-transition);
1795
+ }
1796
+ [type="range"]:active,
1797
+ [type="range"]:focus-within {
1798
+ --pico-range-border-color: var(--pico-range-active-border-color);
1799
+ --pico-range-thumb-color: var(--pico-range-thumb-active-color);
1800
+ }
1801
+ [type="range"]:active::-webkit-slider-thumb {
1802
+ transform: scale(1.25);
1803
+ }
1804
+ [type="range"]:active::-moz-range-thumb {
1805
+ transform: scale(1.25);
1806
+ }
1807
+ [type="range"]:active::-ms-thumb {
1808
+ transform: scale(1.25);
1809
+ }
1810
+ /**
1811
+ * Input type search
1812
+ */
1813
+ :where(:scope),
1814
+ :host {
1815
+ --pico-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
1816
+ }
1817
+
1818
+ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type="search"] {
1819
+ padding-inline-start: calc(var(--pico-form-element-spacing-horizontal) + 1.75rem);
1820
+ background-image: var(--pico-icon-search);
1821
+ background-position: center left calc(var(--pico-form-element-spacing-horizontal) + 0.125rem);
1822
+ background-size: 1rem auto;
1823
+ background-repeat: no-repeat;
1824
+ }
1825
+ input:not(
1826
+ [type="checkbox"],
1827
+ [type="radio"],
1828
+ [type="range"],
1829
+ [type="file"]
1830
+ )[type="search"][aria-invalid] {
1831
+ padding-inline-start: calc(var(--pico-form-element-spacing-horizontal) + 1.75rem) !important;
1832
+ background-position:
1833
+ center left 1.125rem,
1834
+ center right 0.75rem;
1835
+ }
1836
+ input:not(
1837
+ [type="checkbox"],
1838
+ [type="radio"],
1839
+ [type="range"],
1840
+ [type="file"]
1841
+ )[type="search"][aria-invalid="false"] {
1842
+ background-image: var(--pico-icon-search), var(--pico-icon-valid);
1843
+ }
1844
+ input:not(
1845
+ [type="checkbox"],
1846
+ [type="radio"],
1847
+ [type="range"],
1848
+ [type="file"]
1849
+ )[type="search"][aria-invalid="true"] {
1850
+ background-image: var(--pico-icon-search), var(--pico-icon-invalid);
1851
+ }
1852
+
1853
+ [dir="rtl"]
1854
+ :where(input):not(
1855
+ [type="checkbox"],
1856
+ [type="radio"],
1857
+ [type="range"],
1858
+ [type="file"]
1859
+ )[type="search"] {
1860
+ background-position: center right 1.125rem;
1861
+ }
1862
+ [dir="rtl"]
1863
+ :where(input):not(
1864
+ [type="checkbox"],
1865
+ [type="radio"],
1866
+ [type="range"],
1867
+ [type="file"]
1868
+ )[type="search"][aria-invalid] {
1869
+ background-position:
1870
+ center right 1.125rem,
1871
+ center left 0.75rem;
1872
+ }
1873
+ /**
1874
+ * Accordion (<details>)
1875
+ */
1876
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
1877
+ :host {
1878
+ --pico-accordion-border-color: var(--pico-muted-border-color);
1879
+ --pico-accordion-active-summary-color: var(--pico-primary-hover);
1880
+ --pico-accordion-close-summary-color: var(--pico-color);
1881
+ --pico-accordion-open-summary-color: var(--pico-muted-color);
1882
+ }
1883
+
1884
+ details {
1885
+ display: block;
1886
+ margin-bottom: var(--pico-spacing);
1887
+ }
1888
+ details summary {
1889
+ line-height: 1rem;
1890
+ list-style-type: none;
1891
+ cursor: pointer;
1892
+ transition: color var(--pico-transition);
1893
+ }
1894
+ details summary:not([role]) {
1895
+ color: var(--pico-accordion-close-summary-color);
1896
+ }
1897
+ details summary::-webkit-details-marker {
1898
+ display: none;
1899
+ }
1900
+ details summary::marker {
1901
+ display: none;
1902
+ }
1903
+ details summary::-moz-list-bullet {
1904
+ list-style-type: none;
1905
+ }
1906
+ details summary::after {
1907
+ display: block;
1908
+ width: 1rem;
1909
+ height: 1rem;
1910
+ margin-inline-start: calc(var(--pico-spacing, 1rem) * 0.5);
1911
+ float: right;
1912
+ transform: rotate(-90deg);
1913
+ background-image: var(--pico-icon-chevron);
1914
+ background-position: right center;
1915
+ background-size: 1rem auto;
1916
+ background-repeat: no-repeat;
1917
+ content: "";
1918
+ transition: transform var(--pico-transition);
1919
+ }
1920
+ details summary:focus {
1921
+ outline: none;
1922
+ }
1923
+ details summary:focus:not([role]) {
1924
+ color: var(--pico-accordion-active-summary-color);
1925
+ }
1926
+ details summary:focus-visible:not([role]) {
1927
+ outline: var(--pico-outline-width) solid var(--pico-primary-focus);
1928
+ outline-offset: calc(var(--pico-spacing, 1rem) * 0.5);
1929
+ color: var(--pico-primary);
1930
+ }
1931
+ details summary[role="button"] {
1932
+ width: 100%;
1933
+ text-align: start;
1934
+ }
1935
+ details summary[role="button"]::after {
1936
+ height: calc(1rem * var(--pico-line-height, 1.5));
1937
+ }
1938
+ details[open] > summary {
1939
+ margin-bottom: var(--pico-spacing);
1940
+ }
1941
+ details[open] > summary:not([role]):not(:focus) {
1942
+ color: var(--pico-accordion-open-summary-color);
1943
+ }
1944
+ details[open] > summary::after {
1945
+ transform: rotate(0);
1946
+ }
1947
+
1948
+ [dir="rtl"] details summary {
1949
+ text-align: end;
1950
+ }
1951
+ [dir="rtl"] details summary::after {
1952
+ float: left;
1953
+ background-position: left center;
1954
+ }
1955
+ /**
1956
+ * Card (<article>)
1957
+ */
1958
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
1959
+ :host {
1960
+ --pico-card-background-color: light-dark(var(--pico-background-color), #181c25);
1961
+ --pico-card-border-color: light-dark(
1962
+ var(--pico-muted-border-color),
1963
+ var(--pico-card-background-color)
1964
+ );
1965
+ --pico-card-box-shadow: var(--pico-box-shadow);
1966
+ --pico-card-sectioning-background-color: light-dark(
1967
+ rgb(251, 251.5, 252.25),
1968
+ rgb(26, 30.5, 40.25)
1969
+ );
1970
+ }
1971
+
1972
+ article {
1973
+ margin-bottom: var(--pico-block-spacing-vertical);
1974
+ padding: var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal);
1975
+ border-radius: var(--pico-border-radius);
1976
+ background: var(--pico-card-background-color);
1977
+ box-shadow: var(--pico-card-box-shadow);
1978
+ }
1979
+ article > header,
1980
+ article > footer {
1981
+ margin-right: calc(var(--pico-block-spacing-horizontal) * -1);
1982
+ margin-left: calc(var(--pico-block-spacing-horizontal) * -1);
1983
+ padding: calc(var(--pico-block-spacing-vertical) * 0.66) var(--pico-block-spacing-horizontal);
1984
+ background-color: var(--pico-card-sectioning-background-color);
1985
+ }
1986
+ article > header {
1987
+ margin-top: calc(var(--pico-block-spacing-vertical) * -1);
1988
+ margin-bottom: var(--pico-block-spacing-vertical);
1989
+ border-bottom: var(--pico-border-width) solid var(--pico-card-border-color);
1990
+ border-top-right-radius: var(--pico-border-radius);
1991
+ border-top-left-radius: var(--pico-border-radius);
1992
+ }
1993
+ article > footer {
1994
+ margin-top: var(--pico-block-spacing-vertical);
1995
+ margin-bottom: calc(var(--pico-block-spacing-vertical) * -1);
1996
+ border-top: var(--pico-border-width) solid var(--pico-card-border-color);
1997
+ border-bottom-right-radius: var(--pico-border-radius);
1998
+ border-bottom-left-radius: var(--pico-border-radius);
1999
+ }
2000
+ /**
2001
+ * Dropdown (details.dropdown)
2002
+ */
2003
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
2004
+ :host {
2005
+ --pico-dropdown-background-color: light-dark(#fff, #181c25);
2006
+ --pico-dropdown-border-color: light-dark(#eff1f4, #202632);
2007
+ --pico-dropdown-box-shadow: var(--pico-box-shadow);
2008
+ --pico-dropdown-color: var(--pico-color);
2009
+ --pico-dropdown-hover-background-color: light-dark(#eff1f4, #202632);
2010
+ }
2011
+
2012
+ details.dropdown {
2013
+ position: relative;
2014
+ border-bottom: none;
2015
+ }
2016
+ details.dropdown > summary::after,
2017
+ details.dropdown > button::after,
2018
+ details.dropdown > a::after {
2019
+ display: block;
2020
+ width: 1rem;
2021
+ height: calc(1rem * var(--pico-line-height, 1.5));
2022
+ margin-inline-start: 0.25rem;
2023
+ float: right;
2024
+ transform: rotate(0deg) translateX(0.2rem);
2025
+ background-image: var(--pico-icon-chevron);
2026
+ background-position: right center;
2027
+ background-size: 1rem auto;
2028
+ background-repeat: no-repeat;
2029
+ content: "";
2030
+ }
2031
+
2032
+ nav details.dropdown {
2033
+ margin-bottom: 0;
2034
+ }
2035
+
2036
+ details.dropdown > summary:not([role]) {
2037
+ height: calc(
2038
+ 1rem * var(--pico-line-height) + var(--pico-form-element-spacing-vertical) * 2 +
2039
+ var(--pico-border-width) * 2
2040
+ );
2041
+ padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal);
2042
+ border: var(--pico-border-width) solid var(--pico-form-element-border-color);
2043
+ border-radius: var(--pico-border-radius);
2044
+ background-color: var(--pico-form-element-background-color);
2045
+ color: var(--pico-form-element-placeholder-color);
2046
+ line-height: inherit;
2047
+ cursor: pointer;
2048
+ -webkit-user-select: none;
2049
+ -moz-user-select: none;
2050
+ transition:
2051
+ background-color var(--pico-transition),
2052
+ border-color var(--pico-transition),
2053
+ color var(--pico-transition),
2054
+ box-shadow var(--pico-transition);
2055
+ user-select: none;
2056
+ }
2057
+ details.dropdown > summary:not([role]):active,
2058
+ details.dropdown > summary:not([role]):focus {
2059
+ border-color: var(--pico-form-element-active-border-color);
2060
+ background-color: var(--pico-form-element-active-background-color);
2061
+ }
2062
+ details.dropdown > summary:not([role]):focus {
2063
+ box-shadow: 0 0 0 var(--pico-outline-width) var(--pico-form-element-focus-color);
2064
+ }
2065
+ details.dropdown > summary:not([role]):focus-visible {
2066
+ outline: none;
2067
+ }
2068
+ details.dropdown > summary:not([role])[aria-invalid="false"] {
2069
+ --pico-form-element-border-color: var(--pico-form-element-valid-border-color);
2070
+ --pico-form-element-active-border-color: var(--pico-form-element-valid-focus-color);
2071
+ --pico-form-element-focus-color: var(--pico-form-element-valid-focus-color);
2072
+ }
2073
+ details.dropdown > summary:not([role])[aria-invalid="true"] {
2074
+ --pico-form-element-border-color: var(--pico-form-element-invalid-border-color);
2075
+ --pico-form-element-active-border-color: var(--pico-form-element-invalid-focus-color);
2076
+ --pico-form-element-focus-color: var(--pico-form-element-invalid-focus-color);
2077
+ }
2078
+
2079
+ nav details.dropdown {
2080
+ display: inline-block;
2081
+ margin: calc(var(--pico-nav-element-spacing-vertical) * -1) 0;
2082
+ }
2083
+ nav details.dropdown > summary::after {
2084
+ transform: rotate(0deg) translateX(0rem);
2085
+ }
2086
+ nav details.dropdown > summary:not([role]) {
2087
+ height: calc(1rem * var(--pico-line-height) + var(--pico-nav-link-spacing-vertical) * 2);
2088
+ padding: calc(var(--pico-nav-link-spacing-vertical) - var(--pico-border-width) * 2)
2089
+ var(--pico-nav-link-spacing-horizontal);
2090
+ }
2091
+ nav details.dropdown > summary:not([role]):focus-visible {
2092
+ box-shadow: 0 0 0 var(--pico-outline-width) var(--pico-primary-focus);
2093
+ }
2094
+
2095
+ details.dropdown > summary + ul {
2096
+ display: flex;
2097
+ z-index: 99;
2098
+ position: absolute;
2099
+ left: 0;
2100
+ flex-direction: column;
2101
+ width: 100%;
2102
+ min-width: -moz-fit-content;
2103
+ min-width: fit-content;
2104
+ margin: 0;
2105
+ margin-top: var(--pico-outline-width);
2106
+ padding: 0;
2107
+ border: var(--pico-border-width) solid var(--pico-dropdown-border-color);
2108
+ border-radius: var(--pico-border-radius);
2109
+ background-color: var(--pico-dropdown-background-color);
2110
+ box-shadow: var(--pico-dropdown-box-shadow);
2111
+ color: var(--pico-dropdown-color);
2112
+ white-space: nowrap;
2113
+ opacity: 0;
2114
+ transition:
2115
+ opacity var(--pico-transition),
2116
+ transform 0s ease-in-out 1s;
2117
+ }
2118
+ details.dropdown > summary + ul[dir="rtl"] {
2119
+ right: 0;
2120
+ left: auto;
2121
+ }
2122
+ details.dropdown > summary + ul li {
2123
+ width: 100%;
2124
+ margin-bottom: 0;
2125
+ padding: calc(var(--pico-form-element-spacing-vertical) * 0.5)
2126
+ var(--pico-form-element-spacing-horizontal);
2127
+ list-style: none;
2128
+ }
2129
+ details.dropdown > summary + ul li:first-of-type {
2130
+ margin-top: calc(var(--pico-form-element-spacing-vertical) * 0.5);
2131
+ }
2132
+ details.dropdown > summary + ul li:last-of-type {
2133
+ margin-bottom: calc(var(--pico-form-element-spacing-vertical) * 0.5);
2134
+ }
2135
+ details.dropdown > summary + ul li a {
2136
+ display: block;
2137
+ margin: calc(var(--pico-form-element-spacing-vertical) * -0.5)
2138
+ calc(var(--pico-form-element-spacing-horizontal) * -1);
2139
+ padding: calc(var(--pico-form-element-spacing-vertical) * 0.5)
2140
+ var(--pico-form-element-spacing-horizontal);
2141
+ overflow: hidden;
2142
+ border-radius: 0;
2143
+ color: var(--pico-dropdown-color);
2144
+ text-decoration: none;
2145
+ text-overflow: ellipsis;
2146
+ }
2147
+ details.dropdown > summary + ul li a:hover,
2148
+ details.dropdown > summary + ul li a:focus,
2149
+ details.dropdown > summary + ul li a:active,
2150
+ details.dropdown > summary + ul li a:focus-visible,
2151
+ details.dropdown > summary + ul li a[aria-current]:not([aria-current="false"]) {
2152
+ background-color: var(--pico-dropdown-hover-background-color);
2153
+ }
2154
+ details.dropdown > summary + ul li label {
2155
+ width: 100%;
2156
+ }
2157
+ details.dropdown > summary + ul li:has(label):hover {
2158
+ background-color: var(--pico-dropdown-hover-background-color);
2159
+ }
2160
+
2161
+ details.dropdown[open] > summary {
2162
+ margin-bottom: 0;
2163
+ }
2164
+
2165
+ details.dropdown[open] > summary + ul {
2166
+ transform: scaleY(1);
2167
+ opacity: 1;
2168
+ transition:
2169
+ opacity var(--pico-transition),
2170
+ transform 0s ease-in-out 0s;
2171
+ }
2172
+
2173
+ details.dropdown[open] > summary::before {
2174
+ display: block;
2175
+ z-index: 1;
2176
+ position: fixed;
2177
+ width: 100vw;
2178
+ height: 100vh;
2179
+ inset: 0;
2180
+ background: none;
2181
+ content: "";
2182
+ cursor: default;
2183
+ }
2184
+
2185
+ label > details.dropdown {
2186
+ margin-top: calc(var(--pico-spacing) * 0.25);
2187
+ }
2188
+
2189
+ /**
2190
+ * Group ([role="group"], [role="search"])
2191
+ */
2192
+ :where(:scope),
2193
+ :host {
2194
+ --pico-group-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
2195
+ --pico-group-box-shadow-focus-with-button: 0 0 0 var(--pico-outline-width)
2196
+ var(--pico-primary-focus);
2197
+ --pico-group-box-shadow-focus-with-input: 0 0 0 0.0625rem var(--pico-form-element-border-color);
2198
+ }
2199
+ [role="search"]:has(
2200
+ button.secondary:focus,
2201
+ [type="submit"].secondary:focus,
2202
+ [type="button"].secondary:focus,
2203
+ [role="button"].secondary:focus
2204
+ ),
2205
+ [role="group"]:has(
2206
+ button.secondary:focus,
2207
+ [type="submit"].secondary:focus,
2208
+ [type="button"].secondary:focus,
2209
+ [role="button"].secondary:focus
2210
+ ) {
2211
+ --pico-group-box-shadow-focus-with-button: 0 0 0 var(--pico-outline-width)
2212
+ var(--pico-secondary-focus);
2213
+ }
2214
+ [role="search"]:has(
2215
+ button.contrast:focus,
2216
+ [type="submit"].contrast:focus,
2217
+ [type="button"].contrast:focus,
2218
+ [role="button"].contrast:focus
2219
+ ),
2220
+ [role="group"]:has(
2221
+ button.contrast:focus,
2222
+ [type="submit"].contrast:focus,
2223
+ [type="button"].contrast:focus,
2224
+ [role="button"].contrast:focus
2225
+ ) {
2226
+ --pico-group-box-shadow-focus-with-button: 0 0 0 var(--pico-outline-width)
2227
+ var(--pico-contrast-focus);
2228
+ }
2229
+
2230
+ [role="search"],
2231
+ [role="group"] {
2232
+ display: inline-flex;
2233
+ position: relative;
2234
+ width: 100%;
2235
+ margin-bottom: var(--pico-spacing);
2236
+ border-radius: var(--pico-border-radius);
2237
+ box-shadow: var(--pico-group-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
2238
+ vertical-align: middle;
2239
+ transition: box-shadow var(--pico-transition);
2240
+ }
2241
+ [role="search"] > *,
2242
+ [role="search"] input:not([type="checkbox"], [type="radio"]),
2243
+ [role="search"] select,
2244
+ [role="group"] > *,
2245
+ [role="group"] input:not([type="checkbox"], [type="radio"]),
2246
+ [role="group"] select {
2247
+ position: relative;
2248
+ flex: 1 1 auto;
2249
+ margin-bottom: 0;
2250
+ }
2251
+ [role="search"] > *:not(:first-child),
2252
+ [role="search"] input:not([type="checkbox"], [type="radio"]):not(:first-child),
2253
+ [role="search"] select:not(:first-child),
2254
+ [role="group"] > *:not(:first-child),
2255
+ [role="group"] input:not([type="checkbox"], [type="radio"]):not(:first-child),
2256
+ [role="group"] select:not(:first-child) {
2257
+ margin-left: 0;
2258
+ border-top-left-radius: 0;
2259
+ border-bottom-left-radius: 0;
2260
+ }
2261
+ [role="search"] > *:not(:last-child),
2262
+ [role="search"] input:not([type="checkbox"], [type="radio"]):not(:last-child),
2263
+ [role="search"] select:not(:last-child),
2264
+ [role="group"] > *:not(:last-child),
2265
+ [role="group"] input:not([type="checkbox"], [type="radio"]):not(:last-child),
2266
+ [role="group"] select:not(:last-child) {
2267
+ border-top-right-radius: 0;
2268
+ border-bottom-right-radius: 0;
2269
+ }
2270
+ [role="search"] > *:focus,
2271
+ [role="search"] input:not([type="checkbox"], [type="radio"]):focus,
2272
+ [role="search"] select:focus,
2273
+ [role="group"] > *:focus,
2274
+ [role="group"] input:not([type="checkbox"], [type="radio"]):focus,
2275
+ [role="group"] select:focus {
2276
+ z-index: 2;
2277
+ }
2278
+ [role="search"] button:not(:first-child),
2279
+ [role="search"] [type="submit"]:not(:first-child),
2280
+ [role="search"] [type="reset"]:not(:first-child),
2281
+ [role="search"] [type="button"]:not(:first-child),
2282
+ [role="search"] [role="button"]:not(:first-child),
2283
+ [role="search"] input:not([type="checkbox"], [type="radio"]):not(:first-child),
2284
+ [role="search"] select:not(:first-child),
2285
+ [role="group"] button:not(:first-child),
2286
+ [role="group"] [type="submit"]:not(:first-child),
2287
+ [role="group"] [type="reset"]:not(:first-child),
2288
+ [role="group"] [type="button"]:not(:first-child),
2289
+ [role="group"] [role="button"]:not(:first-child),
2290
+ [role="group"] input:not([type="checkbox"], [type="radio"]):not(:first-child),
2291
+ [role="group"] select:not(:first-child) {
2292
+ margin-left: calc(var(--pico-border-width) * -1);
2293
+ }
2294
+ [role="search"] button,
2295
+ [role="search"] [type="submit"],
2296
+ [role="search"] [type="reset"],
2297
+ [role="search"] [type="button"],
2298
+ [role="search"] [role="button"],
2299
+ [role="group"] button,
2300
+ [role="group"] [type="submit"],
2301
+ [role="group"] [type="reset"],
2302
+ [role="group"] [type="button"],
2303
+ [role="group"] [role="button"] {
2304
+ width: auto;
2305
+ }
2306
+ @supports selector(:has(*)) {
2307
+ [role="search"]:has(
2308
+ button:focus,
2309
+ [type="submit"]:focus,
2310
+ [type="button"]:focus,
2311
+ [role="button"]:focus
2312
+ ),
2313
+ [role="group"]:has(
2314
+ button:focus,
2315
+ [type="submit"]:focus,
2316
+ [type="button"]:focus,
2317
+ [role="button"]:focus
2318
+ ) {
2319
+ --pico-group-box-shadow: var(--pico-group-box-shadow-focus-with-button);
2320
+ }
2321
+ [role="search"]:has(
2322
+ button:focus,
2323
+ [type="submit"]:focus,
2324
+ [type="button"]:focus,
2325
+ [role="button"]:focus
2326
+ )
2327
+ input:not([type="checkbox"], [type="radio"]),
2328
+ [role="search"]:has(
2329
+ button:focus,
2330
+ [type="submit"]:focus,
2331
+ [type="button"]:focus,
2332
+ [role="button"]:focus
2333
+ )
2334
+ select,
2335
+ [role="group"]:has(
2336
+ button:focus,
2337
+ [type="submit"]:focus,
2338
+ [type="button"]:focus,
2339
+ [role="button"]:focus
2340
+ )
2341
+ input:not([type="checkbox"], [type="radio"]),
2342
+ [role="group"]:has(
2343
+ button:focus,
2344
+ [type="submit"]:focus,
2345
+ [type="button"]:focus,
2346
+ [role="button"]:focus
2347
+ )
2348
+ select {
2349
+ border-color: transparent;
2350
+ }
2351
+ [role="search"]:has(input:not([type="submit"], [type="button"]):focus, select:focus),
2352
+ [role="group"]:has(input:not([type="submit"], [type="button"]):focus, select:focus) {
2353
+ --pico-group-box-shadow: var(--pico-group-box-shadow-focus-with-input);
2354
+ }
2355
+ [role="search"]:has(input:not([type="submit"], [type="button"]):focus, select:focus) button,
2356
+ [role="search"]:has(input:not([type="submit"], [type="button"]):focus, select:focus)
2357
+ [type="submit"],
2358
+ [role="search"]:has(input:not([type="submit"], [type="button"]):focus, select:focus)
2359
+ [type="button"],
2360
+ [role="search"]:has(input:not([type="submit"], [type="button"]):focus, select:focus)
2361
+ [role="button"],
2362
+ [role="group"]:has(input:not([type="submit"], [type="button"]):focus, select:focus) button,
2363
+ [role="group"]:has(input:not([type="submit"], [type="button"]):focus, select:focus)
2364
+ [type="submit"],
2365
+ [role="group"]:has(input:not([type="submit"], [type="button"]):focus, select:focus)
2366
+ [type="button"],
2367
+ [role="group"]:has(input:not([type="submit"], [type="button"]):focus, select:focus)
2368
+ [role="button"] {
2369
+ --pico-button-box-shadow: 0 0 0 var(--pico-border-width) var(--pico-primary-border);
2370
+ --pico-button-hover-box-shadow: 0 0 0 var(--pico-border-width) var(--pico-primary-hover-border);
2371
+ }
2372
+ [role="search"] button:focus,
2373
+ [role="search"] [type="submit"]:focus,
2374
+ [role="search"] [type="reset"]:focus,
2375
+ [role="search"] [type="button"]:focus,
2376
+ [role="search"] [role="button"]:focus,
2377
+ [role="group"] button:focus,
2378
+ [role="group"] [type="submit"]:focus,
2379
+ [role="group"] [type="reset"]:focus,
2380
+ [role="group"] [type="button"]:focus,
2381
+ [role="group"] [role="button"]:focus {
2382
+ box-shadow: none;
2383
+ }
2384
+ }
2385
+
2386
+ [role="search"] > *:first-child {
2387
+ border-top-left-radius: 5rem;
2388
+ border-bottom-left-radius: 5rem;
2389
+ }
2390
+ [role="search"] > *:last-child {
2391
+ border-top-right-radius: 5rem;
2392
+ border-bottom-right-radius: 5rem;
2393
+ }
2394
+ /**
2395
+ * Loading ([aria-busy=true])
2396
+ */
2397
+ :where(:scope),
2398
+ :host {
2399
+ --pico-icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E");
2400
+ }
2401
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
2402
+ :host {
2403
+ --pico-loading-spinner-opacity: 0.5;
2404
+ }
2405
+
2406
+ [aria-busy="true"]:not(input, select, textarea, html, form):not(
2407
+ :where(button, [type="submit"], [type="button"], [type="reset"], [role="button"])
2408
+ ) {
2409
+ /* :where() zeroes the specificity of the button list inside :not(), so this rule stays
2410
+ * low-specificity and doesn't override the more specific button rules below */
2411
+ white-space: nowrap;
2412
+ }
2413
+ [aria-busy="true"]:not(input, select, textarea, html, form)::before {
2414
+ display: inline-block;
2415
+ width: 1em;
2416
+ height: 1em;
2417
+ background-image: var(--pico-icon-loading);
2418
+ background-size: 1em auto;
2419
+ background-repeat: no-repeat;
2420
+ content: "";
2421
+ vertical-align: -0.125em;
2422
+ }
2423
+ [aria-busy="true"]:not(input, select, textarea, html, form):not(:empty)::before {
2424
+ margin-inline-end: calc(var(--pico-spacing) * 0.5);
2425
+ }
2426
+ [aria-busy="true"]:not(input, select, textarea, html, form):empty {
2427
+ text-align: center;
2428
+ }
2429
+
2430
+ button[aria-busy="true"],
2431
+ [type="submit"][aria-busy="true"],
2432
+ [type="button"][aria-busy="true"],
2433
+ [type="reset"][aria-busy="true"],
2434
+ [role="button"][aria-busy="true"],
2435
+ a[aria-busy="true"] {
2436
+ pointer-events: none;
2437
+ }
2438
+
2439
+ /* Buttons keep their size: the label stays in place but hidden, the spinner sits on top */
2440
+ button[aria-busy="true"]:not(:empty), [type="submit"][aria-busy="true"]:not(:empty), [type="button"][aria-busy="true"]:not(:empty), [type="reset"][aria-busy="true"]:not(:empty), [role="button"][aria-busy="true"]:not(:empty) {
2441
+ position: relative;
2442
+ color: transparent;
2443
+ }
2444
+ button[aria-busy="true"]:not(:empty) > *, [type="submit"][aria-busy="true"]:not(:empty) > *, [type="button"][aria-busy="true"]:not(:empty) > *, [type="reset"][aria-busy="true"]:not(:empty) > *, [role="button"][aria-busy="true"]:not(:empty) > * {
2445
+ opacity: 0;
2446
+ }
2447
+ button[aria-busy="true"]:not(:empty)::before, [type="submit"][aria-busy="true"]:not(:empty)::before, [type="button"][aria-busy="true"]:not(:empty)::before, [type="reset"][aria-busy="true"]:not(:empty)::before, [role="button"][aria-busy="true"]:not(:empty)::before {
2448
+ position: absolute;
2449
+ margin: auto;
2450
+ inset: 0;
2451
+ }
2452
+ /**
2453
+ * Modal (<dialog>)
2454
+ */
2455
+ :where(:scope),
2456
+ :host {
2457
+ --pico-modal-overlay-backdrop-filter: blur(0.375rem);
2458
+ --pico-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
2459
+ }
2460
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
2461
+ :host {
2462
+ --pico-modal-overlay-background-color: light-dark(
2463
+ rgba(232, 234, 237, 0.75),
2464
+ rgba(7.5, 8.5, 10, 0.75)
2465
+ );
2466
+ }
2467
+
2468
+ :scope,
2469
+ :host {
2470
+ --pico-scrollbar-width: 0px;
2471
+ }
2472
+
2473
+ dialog {
2474
+ display: flex;
2475
+ z-index: 999;
2476
+ position: fixed;
2477
+ top: 0;
2478
+ right: 0;
2479
+ bottom: 0;
2480
+ left: 0;
2481
+ align-items: center;
2482
+ justify-content: center;
2483
+ width: inherit;
2484
+ min-width: 100%;
2485
+ height: inherit;
2486
+ min-height: 100%;
2487
+ padding: 0;
2488
+ border: 0;
2489
+ backdrop-filter: var(--pico-modal-overlay-backdrop-filter);
2490
+ background-color: var(--pico-modal-overlay-background-color);
2491
+ color: var(--pico-color);
2492
+ }
2493
+ dialog > article {
2494
+ width: 100%;
2495
+ max-height: calc(100vh - var(--pico-spacing) * 2);
2496
+ margin: var(--pico-spacing);
2497
+ overflow: auto;
2498
+ }
2499
+ @media (min-width: 576px) {
2500
+ dialog > article {
2501
+ max-width: 510px;
2502
+ }
2503
+ }
2504
+ @media (min-width: 768px) {
2505
+ dialog > article {
2506
+ max-width: 700px;
2507
+ }
2508
+ }
2509
+ dialog > article > header > * {
2510
+ margin-bottom: 0;
2511
+ }
2512
+ dialog > article > header .close,
2513
+ dialog > article > header :is(a, button)[rel="prev"] {
2514
+ margin: 0;
2515
+ margin-left: var(--pico-spacing);
2516
+ padding: 0;
2517
+ float: right;
2518
+ }
2519
+ dialog > article > footer {
2520
+ text-align: end;
2521
+ }
2522
+ dialog > article > footer button,
2523
+ dialog > article > footer [role="button"] {
2524
+ margin-bottom: 0;
2525
+ }
2526
+ dialog > article > footer button:not(:first-of-type),
2527
+ dialog > article > footer [role="button"]:not(:first-of-type) {
2528
+ margin-left: calc(var(--pico-spacing) * 0.5);
2529
+ }
2530
+ dialog > article .close,
2531
+ dialog > article :is(a, button)[rel="prev"] {
2532
+ display: block;
2533
+ width: 1rem;
2534
+ height: 1rem;
2535
+ margin-top: calc(var(--pico-spacing) * -1);
2536
+ margin-bottom: var(--pico-spacing);
2537
+ margin-left: auto;
2538
+ border: none;
2539
+ background-image: var(--pico-icon-close);
2540
+ background-position: center;
2541
+ background-size: auto 1rem;
2542
+ background-repeat: no-repeat;
2543
+ background-color: transparent;
2544
+ opacity: 0.5;
2545
+ transition: opacity var(--pico-transition);
2546
+ }
2547
+ dialog > article .close:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus),
2548
+ dialog
2549
+ > article
2550
+ :is(a, button)[rel="prev"]:is(
2551
+ [aria-current]:not([aria-current="false"]),
2552
+ :hover,
2553
+ :active,
2554
+ :focus
2555
+ ) {
2556
+ opacity: 1;
2557
+ }
2558
+ dialog:not([open]),
2559
+ dialog[open="false"] {
2560
+ display: none;
2561
+ }
2562
+
2563
+ .modal-is-open {
2564
+ padding-right: var(--pico-scrollbar-width, 0px);
2565
+ overflow: hidden;
2566
+ pointer-events: none;
2567
+ touch-action: none;
2568
+ }
2569
+ .modal-is-open dialog {
2570
+ pointer-events: auto;
2571
+ touch-action: auto;
2572
+ }
2573
+
2574
+ :where(.modal-is-opening, .modal-is-closing) dialog,
2575
+ :where(.modal-is-opening, .modal-is-closing) dialog > article {
2576
+ animation-duration: 0.2s;
2577
+ animation-timing-function: ease-in-out;
2578
+ animation-fill-mode: both;
2579
+ }
2580
+ :where(.modal-is-opening, .modal-is-closing) dialog {
2581
+ animation-duration: 0.8s;
2582
+ animation-name: modal-overlay;
2583
+ }
2584
+ :where(.modal-is-opening, .modal-is-closing) dialog > article {
2585
+ animation-delay: 0.2s;
2586
+ animation-name: modal;
2587
+ }
2588
+
2589
+ .modal-is-closing dialog,
2590
+ .modal-is-closing dialog > article {
2591
+ animation-delay: 0s;
2592
+ animation-direction: reverse;
2593
+ }
2594
+
2595
+ @keyframes modal-overlay {
2596
+ from {
2597
+ backdrop-filter: none;
2598
+ background-color: transparent;
2599
+ }
2600
+ }
2601
+ @keyframes modal {
2602
+ from {
2603
+ transform: translateY(-100%);
2604
+ opacity: 0;
2605
+ }
2606
+ }
2607
+ /**
2608
+ * Nav
2609
+ */
2610
+ :where(:scope),
2611
+ :host {
2612
+ --pico-nav-element-spacing-horizontal: 0.5rem;
2613
+ --pico-nav-breadcrumb-divider: ">";
2614
+ }
2615
+
2616
+ :where(nav li)::before {
2617
+ float: left;
2618
+ content: "​";
2619
+ }
2620
+
2621
+ nav,
2622
+ nav ul {
2623
+ display: flex;
2624
+ }
2625
+
2626
+ nav {
2627
+ justify-content: space-between;
2628
+ overflow: visible;
2629
+ }
2630
+ nav ol,
2631
+ nav ul {
2632
+ align-items: center;
2633
+ margin-bottom: 0;
2634
+ padding: 0;
2635
+ list-style: none;
2636
+ }
2637
+ nav ol:first-of-type,
2638
+ nav ul:first-of-type {
2639
+ margin-left: calc(var(--pico-nav-element-spacing-horizontal) * -1);
2640
+ }
2641
+ nav ol:last-of-type,
2642
+ nav ul:last-of-type {
2643
+ margin-right: calc(var(--pico-nav-element-spacing-horizontal) * -1);
2644
+ }
2645
+ nav li {
2646
+ display: inline-block;
2647
+ margin: 0;
2648
+ padding: var(--pico-nav-element-spacing-vertical) var(--pico-nav-element-spacing-horizontal);
2649
+ }
2650
+ nav li :where(a, [role="link"]) {
2651
+ display: inline-block;
2652
+ margin: calc(var(--pico-nav-link-spacing-vertical) * -1)
2653
+ calc(var(--pico-nav-link-spacing-horizontal) * -1);
2654
+ padding: var(--pico-nav-link-spacing-vertical) var(--pico-nav-link-spacing-horizontal);
2655
+ border-radius: var(--pico-border-radius);
2656
+ }
2657
+ nav li :where(a, [role="link"]):not(:hover) {
2658
+ text-decoration: none;
2659
+ }
2660
+ nav li button,
2661
+ nav li [role="button"],
2662
+ nav li [type="button"],
2663
+ nav li input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]),
2664
+ nav li select {
2665
+ height: auto;
2666
+ margin-right: inherit;
2667
+ margin-bottom: 0;
2668
+ margin-left: inherit;
2669
+ padding: calc(var(--pico-nav-link-spacing-vertical) - var(--pico-border-width) * 2)
2670
+ var(--pico-nav-link-spacing-horizontal);
2671
+ }
2672
+ nav[aria-label="breadcrumb"] {
2673
+ align-items: center;
2674
+ justify-content: start;
2675
+ }
2676
+ nav[aria-label="breadcrumb"] ul li:not(:first-child) {
2677
+ margin-inline-start: var(--pico-nav-link-spacing-horizontal);
2678
+ }
2679
+ nav[aria-label="breadcrumb"] ul li a {
2680
+ margin: calc(var(--pico-nav-link-spacing-vertical) * -1) 0;
2681
+ margin-inline-start: calc(var(--pico-nav-link-spacing-horizontal) * -1);
2682
+ }
2683
+ nav[aria-label="breadcrumb"] ul li:not(:last-child)::after {
2684
+ display: inline-block;
2685
+ position: absolute;
2686
+ width: calc(var(--pico-nav-link-spacing-horizontal) * 4);
2687
+ margin: 0 calc(var(--pico-nav-link-spacing-horizontal) * -1);
2688
+ content: var(--pico-nav-breadcrumb-divider);
2689
+ color: var(--pico-muted-color);
2690
+ text-align: center;
2691
+ text-decoration: none;
2692
+ white-space: nowrap;
2693
+ }
2694
+ nav[aria-label="breadcrumb"] a[aria-current]:not([aria-current="false"]) {
2695
+ background-color: transparent;
2696
+ color: inherit;
2697
+ text-decoration: none;
2698
+ pointer-events: none;
2699
+ }
2700
+
2701
+ aside nav,
2702
+ aside ol,
2703
+ aside ul,
2704
+ aside li {
2705
+ display: block;
2706
+ }
2707
+ aside li {
2708
+ padding: calc(var(--pico-nav-element-spacing-vertical) * 0.5)
2709
+ var(--pico-nav-element-spacing-horizontal);
2710
+ }
2711
+ aside li a {
2712
+ display: block;
2713
+ }
2714
+ aside li [role="button"] {
2715
+ margin: inherit;
2716
+ }
2717
+
2718
+ [dir="rtl"] nav[aria-label="breadcrumb"] ul li:not(:last-child)::after {
2719
+ content: "\\";
2720
+ }
2721
+
2722
+ /**
2723
+ * Progress
2724
+ */
2725
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
2726
+ :host {
2727
+ --pico-progress-background-color: light-dark(#dfe3eb, #202632);
2728
+ --pico-progress-color: var(--pico-primary-background);
2729
+ }
2730
+
2731
+ progress {
2732
+ display: inline-block;
2733
+ vertical-align: baseline;
2734
+ }
2735
+
2736
+ progress {
2737
+ -webkit-appearance: none;
2738
+ -moz-appearance: none;
2739
+ display: inline-block;
2740
+ appearance: none;
2741
+ width: 100%;
2742
+ height: 0.5rem;
2743
+ margin-bottom: calc(var(--pico-spacing) * 0.5);
2744
+ overflow: hidden;
2745
+ border: 0;
2746
+ border-radius: var(--pico-border-radius);
2747
+ background-color: var(--pico-progress-background-color);
2748
+ color: var(--pico-progress-color);
2749
+ }
2750
+ progress::-webkit-progress-bar {
2751
+ border-radius: var(--pico-border-radius);
2752
+ background: none;
2753
+ }
2754
+ progress[value]::-webkit-progress-value {
2755
+ background-color: var(--pico-progress-color);
2756
+ -webkit-transition: inline-size var(--pico-transition);
2757
+ transition: inline-size var(--pico-transition);
2758
+ }
2759
+ progress::-moz-progress-bar {
2760
+ background-color: var(--pico-progress-color);
2761
+ }
2762
+ @media (prefers-reduced-motion: no-preference) {
2763
+ progress:indeterminate {
2764
+ background: var(--pico-progress-background-color)
2765
+ linear-gradient(
2766
+ to right,
2767
+ var(--pico-progress-color) 30%,
2768
+ var(--pico-progress-background-color) 30%
2769
+ )
2770
+ top left/150% 150% no-repeat;
2771
+ animation: progress-indeterminate 1s linear infinite;
2772
+ }
2773
+ progress:indeterminate[value]::-webkit-progress-value {
2774
+ background-color: transparent;
2775
+ }
2776
+ progress:indeterminate::-moz-progress-bar {
2777
+ background-color: transparent;
2778
+ }
2779
+ }
2780
+
2781
+ @media (prefers-reduced-motion: no-preference) {
2782
+ [dir="rtl"] progress:indeterminate {
2783
+ animation-direction: reverse;
2784
+ }
2785
+ }
2786
+
2787
+ @keyframes progress-indeterminate {
2788
+ 0% {
2789
+ background-position: 200% 0;
2790
+ }
2791
+ 100% {
2792
+ background-position: -200% 0;
2793
+ }
2794
+ }
2795
+
2796
+ /**
2797
+ * Tooltip ([data-tooltip])
2798
+ */
2799
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
2800
+ :host {
2801
+ --pico-tooltip-background-color: var(--pico-contrast-background);
2802
+ --pico-tooltip-color: var(--pico-contrast-inverse);
2803
+ }
2804
+
2805
+ [data-tooltip] {
2806
+ position: relative;
2807
+ }
2808
+ [data-tooltip]:not(a, button, input, [role="button"]) {
2809
+ border-bottom: 1px dotted;
2810
+ text-decoration: none;
2811
+ cursor: help;
2812
+ }
2813
+ [data-tooltip][data-placement="top"]::before,
2814
+ [data-tooltip][data-placement="top"]::after,
2815
+ [data-tooltip]::before,
2816
+ [data-tooltip]::after {
2817
+ display: block;
2818
+ z-index: 99;
2819
+ position: absolute;
2820
+ bottom: 100%;
2821
+ left: 50%;
2822
+ padding: 0.25rem 0.5rem;
2823
+ overflow: hidden;
2824
+ transform: translate(-50%, -0.25rem);
2825
+ border-radius: var(--pico-border-radius);
2826
+ background: var(--pico-tooltip-background-color);
2827
+ content: attr(data-tooltip);
2828
+ color: var(--pico-tooltip-color);
2829
+ font-style: normal;
2830
+ font-weight: var(--pico-font-weight);
2831
+ font-size: 0.875rem;
2832
+ text-decoration: none;
2833
+ text-overflow: ellipsis;
2834
+ white-space: nowrap;
2835
+ opacity: 0;
2836
+ pointer-events: none;
2837
+ }
2838
+ [data-tooltip][data-placement="top"]::after,
2839
+ [data-tooltip]::after {
2840
+ padding: 0;
2841
+ transform: translate(-50%, 0rem);
2842
+ border-top: 0.3rem solid;
2843
+ border-right: 0.3rem solid transparent;
2844
+ border-left: 0.3rem solid transparent;
2845
+ border-radius: 0;
2846
+ background-color: transparent;
2847
+ content: "";
2848
+ color: var(--pico-tooltip-background-color);
2849
+ }
2850
+ [data-tooltip][data-placement="bottom"]::before,
2851
+ [data-tooltip][data-placement="bottom"]::after {
2852
+ top: 100%;
2853
+ bottom: auto;
2854
+ transform: translate(-50%, 0.25rem);
2855
+ }
2856
+ [data-tooltip][data-placement="bottom"]:after {
2857
+ transform: translate(-50%, -0.3rem);
2858
+ border: 0.3rem solid transparent;
2859
+ border-bottom: 0.3rem solid;
2860
+ }
2861
+ [data-tooltip][data-placement="left"]::before,
2862
+ [data-tooltip][data-placement="left"]::after {
2863
+ top: 50%;
2864
+ right: 100%;
2865
+ bottom: auto;
2866
+ left: auto;
2867
+ transform: translate(-0.25rem, -50%);
2868
+ }
2869
+ [data-tooltip][data-placement="left"]:after {
2870
+ transform: translate(0.3rem, -50%);
2871
+ border: 0.3rem solid transparent;
2872
+ border-left: 0.3rem solid;
2873
+ }
2874
+ [data-tooltip][data-placement="right"]::before,
2875
+ [data-tooltip][data-placement="right"]::after {
2876
+ top: 50%;
2877
+ right: auto;
2878
+ bottom: auto;
2879
+ left: 100%;
2880
+ transform: translate(0.25rem, -50%);
2881
+ }
2882
+ [data-tooltip][data-placement="right"]:after {
2883
+ transform: translate(-0.3rem, -50%);
2884
+ border: 0.3rem solid transparent;
2885
+ border-right: 0.3rem solid;
2886
+ }
2887
+ [data-tooltip]:focus::before,
2888
+ [data-tooltip]:focus::after,
2889
+ [data-tooltip]:hover::before,
2890
+ [data-tooltip]:hover::after {
2891
+ opacity: 1;
2892
+ }
2893
+ @media (hover: hover) and (pointer: fine) {
2894
+ [data-tooltip]:focus::before,
2895
+ [data-tooltip]:focus::after,
2896
+ [data-tooltip]:hover::before,
2897
+ [data-tooltip]:hover::after {
2898
+ --pico-tooltip-slide-to: translate(-50%, -0.25rem);
2899
+ transform: translate(-50%, 0.75rem);
2900
+ animation-duration: 0.2s;
2901
+ animation-fill-mode: forwards;
2902
+ animation-name: tooltip-slide;
2903
+ opacity: 0;
2904
+ }
2905
+ [data-tooltip]:focus::after,
2906
+ [data-tooltip]:hover::after {
2907
+ --pico-tooltip-caret-slide-to: translate(-50%, 0rem);
2908
+ transform: translate(-50%, -0.25rem);
2909
+ animation-name: tooltip-caret-slide;
2910
+ }
2911
+ [data-tooltip][data-placement="bottom"]:focus::before,
2912
+ [data-tooltip][data-placement="bottom"]:focus::after,
2913
+ [data-tooltip][data-placement="bottom"]:hover::before,
2914
+ [data-tooltip][data-placement="bottom"]:hover::after {
2915
+ --pico-tooltip-slide-to: translate(-50%, 0.25rem);
2916
+ transform: translate(-50%, -0.75rem);
2917
+ animation-name: tooltip-slide;
2918
+ }
2919
+ [data-tooltip][data-placement="bottom"]:focus::after,
2920
+ [data-tooltip][data-placement="bottom"]:hover::after {
2921
+ --pico-tooltip-caret-slide-to: translate(-50%, -0.3rem);
2922
+ transform: translate(-50%, -0.5rem);
2923
+ animation-name: tooltip-caret-slide;
2924
+ }
2925
+ [data-tooltip][data-placement="left"]:focus::before,
2926
+ [data-tooltip][data-placement="left"]:focus::after,
2927
+ [data-tooltip][data-placement="left"]:hover::before,
2928
+ [data-tooltip][data-placement="left"]:hover::after {
2929
+ --pico-tooltip-slide-to: translate(-0.25rem, -50%);
2930
+ transform: translate(0.75rem, -50%);
2931
+ animation-name: tooltip-slide;
2932
+ }
2933
+ [data-tooltip][data-placement="left"]:focus::after,
2934
+ [data-tooltip][data-placement="left"]:hover::after {
2935
+ --pico-tooltip-caret-slide-to: translate(0.3rem, -50%);
2936
+ transform: translate(0.05rem, -50%);
2937
+ animation-name: tooltip-caret-slide;
2938
+ }
2939
+ [data-tooltip][data-placement="right"]:focus::before,
2940
+ [data-tooltip][data-placement="right"]:focus::after,
2941
+ [data-tooltip][data-placement="right"]:hover::before,
2942
+ [data-tooltip][data-placement="right"]:hover::after {
2943
+ --pico-tooltip-slide-to: translate(0.25rem, -50%);
2944
+ transform: translate(-0.75rem, -50%);
2945
+ animation-name: tooltip-slide;
2946
+ }
2947
+ [data-tooltip][data-placement="right"]:focus::after,
2948
+ [data-tooltip][data-placement="right"]:hover::after {
2949
+ --pico-tooltip-caret-slide-to: translate(-0.3rem, -50%);
2950
+ transform: translate(-0.05rem, -50%);
2951
+ animation-name: tooltip-caret-slide;
2952
+ }
2953
+ }
2954
+ @keyframes tooltip-slide {
2955
+ to {
2956
+ transform: var(--pico-tooltip-slide-to);
2957
+ opacity: 1;
2958
+ }
2959
+ }
2960
+ @keyframes tooltip-caret-slide {
2961
+ 50% {
2962
+ opacity: 0;
2963
+ }
2964
+ to {
2965
+ transform: var(--pico-tooltip-caret-slide-to);
2966
+ opacity: 1;
2967
+ }
2968
+ }
2969
+ /**
2970
+ * Accessibility & User interaction
2971
+ */
2972
+ [aria-controls] {
2973
+ cursor: pointer;
2974
+ }
2975
+
2976
+ [aria-disabled="true"],
2977
+ [disabled] {
2978
+ cursor: not-allowed;
2979
+ }
2980
+
2981
+ [dir="rtl"] {
2982
+ direction: rtl;
2983
+ }
2984
+
2985
+ /**
2986
+ * Reduce Motion Features
2987
+ */
2988
+ @media (prefers-reduced-motion: reduce) {
2989
+ *:not([aria-busy="true"]):not(.unreduce-motion),
2990
+ :not([aria-busy="true"])::before,
2991
+ :not([aria-busy="true"])::after {
2992
+ background-attachment: initial !important;
2993
+ animation-duration: 1ms !important;
2994
+ animation-delay: -1ms !important;
2995
+ animation-iteration-count: 1 !important;
2996
+ scroll-behavior: auto !important;
2997
+ transition-delay: 0s !important;
2998
+ transition-duration: 0s !important;
2999
+ }
3000
+ }
3001
+ /*!
3002
+ * Blades CSS standalone kit v3 🥷
3003
+ * Copyright 2026 (https://blades.ninja/css/standalone/)
3004
+ * Licensed under MIT
3005
+ */
3006
+ /*\3c !--section:code-->```css */
3007
+
3008
+ /* Follows https://github.com/picocss/pico/blob/main/scss/_index.scss */
3009
+
3010
+ :scope,
3011
+ :host {
3012
+ /**
3013
+ * Design Tokens !!! NAMING NOT FINALIZED YET !!!
3014
+ * `--in-pico: *` props below are for reference only (not to be used)
3015
+ */
3016
+ --blades-token-primary: var(--pico-primary, dodgerblue);
3017
+ --in-pico: #01aaff;
3018
+ --blades-token-secondary: var(--pico-secondary, lightslategray);
3019
+ --in-pico: #969eaf;
3020
+
3021
+ /**
3022
+ * Inherited Variables
3023
+ */
3024
+ --blades-timeline-border-color: color-mix(
3025
+ in srgb,
3026
+ var(--blades-token-secondary) 50%,
3027
+ transparent
3028
+ );
3029
+ }
3030
+
3031
+ /* Layout */
3032
+
3033
+ /*\3c !--section:docs-->
3034
+
3035
+ `.columns` automatically creates columns with at least 30 characters each:
3036
+
3037
+ <article class="columns">
3038
+ <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p>
3039
+ </article>
3040
+
3041
+ The smaller the font size, the more columns will be created:
3042
+
3043
+ <article class="columns" style="font-size: 65%">
3044
+ <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p>
3045
+ </article>
3046
+
3047
+ Useful for tables of contents and long lists.
3048
+
3049
+ \3c !--section:code-->
3050
+ ```css */
3051
+ .columns {
3052
+ -moz-columns: 25ch auto;
3053
+ columns: 25ch auto; /* common container 65ch / 25ch => 2 columns max, with a buffer for list paddings */
3054
+ }
3055
+ /* Avoid breaking inside elements, such as nested lists */
3056
+ .columns > * {
3057
+ -moz-column-break-inside: avoid;
3058
+ break-inside: avoid;
3059
+ }
3060
+ /* Content */
3061
+ /*\3c !--section:docs-->
3062
+
3063
+ The `<pre><code>` blocks are Prism-compatible and support captions via `data-caption="..."` attribute:
3064
+
3065
+ ```treeview {data-caption="Blades CSS ships:"}
3066
+ /css/
3067
+ ├── blades.css (Pico CSS successor)
3068
+ ├── blades.standalone.css (framework-agnostic)
3069
+ ├── ninja.css (experimental add-ons)
3070
+ └── pico.css (underlying fork)
3071
+ ```
3072
+
3073
+ \3c !--section:code-->
3074
+ ```css */
3075
+ @media (width < 768px) {
3076
+ pre {
3077
+ border-radius: 0
3078
+ }
3079
+ }
3080
+
3081
+ /* Code block caption via data-attr (to display filename, etc.) */
3082
+
3083
+ code[data-caption]::before {
3084
+ display: block;
3085
+ margin-bottom: 1rem;
3086
+ content: attr(data-caption);
3087
+ font-style: italic;
3088
+ opacity: 50%;
3089
+ }
3090
+
3091
+ /* Forms */
3092
+
3093
+ /*!
3094
+ * Float Label CSS v2 by Blades CSS 🥷🏷️
3095
+ * Copyright 2016–2026 (https://blades.ninja/css/float-label/)
3096
+ * Licensed under MIT
3097
+ */
3098
+ /*\3c !--section:docs-->
3099
+
3100
+ First, we target either:
3101
+ 1. `<label>` which `:has` inner form inputs (classless approach)
3102
+ 2. or explicit `.has-float-label` class (explicit approach)
3103
+
3104
+ ```css */
3105
+ label:has(> span):has(
3106
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3107
+ textarea,
3108
+ select
3109
+ ),
3110
+ .has-float-label {
3111
+ display: block;
3112
+ position: relative;
3113
+ /*```
3114
+ Finally, we detect if placeholder is shown, but not in focus. That means we can safely hide it, and enlarge the float label instead:
3115
+ ```css */
3116
+ }
3117
+ /*```
3118
+ Then, we define the default/fallback state (when the float label should be minimized):
3119
+ ```css */
3120
+ label:has(> span):has(
3121
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3122
+ textarea,
3123
+ select
3124
+ ) > span,
3125
+ label:has(> span):has(
3126
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3127
+ textarea,
3128
+ select
3129
+ ) label,
3130
+ .has-float-label > span,
3131
+ .has-float-label label {
3132
+ position: absolute;
3133
+ top: 0;
3134
+ left: 0;
3135
+ font-size: 75%;
3136
+ cursor: text;
3137
+ }
3138
+ label:has(> span):has(
3139
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3140
+ textarea,
3141
+ select
3142
+ ) *:placeholder-shown:not(:focus)::-moz-placeholder, .has-float-label *:placeholder-shown:not(:focus)::-moz-placeholder {
3143
+ opacity: 0;
3144
+ }
3145
+ label:has(> span):has(
3146
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3147
+ textarea,
3148
+ select
3149
+ ) *:-moz-placeholder:not(:focus)::placeholder, .has-float-label *:-moz-placeholder:not(:focus)::placeholder {
3150
+ opacity: 0;
3151
+ }
3152
+ label:has(> span):has(
3153
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3154
+ textarea,
3155
+ select
3156
+ ) *:placeholder-shown:not(:focus)::placeholder, .has-float-label *:placeholder-shown:not(:focus)::placeholder {
3157
+ opacity: 0;
3158
+ }
3159
+ label:has(> span):has(
3160
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3161
+ textarea,
3162
+ select
3163
+ ):has(*:-moz-placeholder:not(:focus)) > span, label:has(> span):has(
3164
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3165
+ textarea,
3166
+ select
3167
+ ):has(*:-moz-placeholder:not(:focus)) label, .has-float-label:has(*:-moz-placeholder:not(:focus)) > span, .has-float-label:has(*:-moz-placeholder:not(:focus)) label {
3168
+ font-size: inherit;
3169
+ opacity: 50%;
3170
+ }
3171
+ label:has(> span):has(
3172
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3173
+ textarea,
3174
+ select
3175
+ ):has(*:placeholder-shown:not(:focus)) > span,
3176
+ label:has(> span):has(
3177
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3178
+ textarea,
3179
+ select
3180
+ ):has(*:placeholder-shown:not(:focus)) label,
3181
+ .has-float-label:has(*:placeholder-shown:not(:focus)) > span,
3182
+ .has-float-label:has(*:placeholder-shown:not(:focus)) label {
3183
+ font-size: inherit;
3184
+ opacity: 50%;
3185
+ }
3186
+ /*```
3187
+
3188
+ The `:has(*:placeholder-shown:not(:focus))` trick allows this input state information to *propagate* to the parent level. This enables modern CSS to target inner float label (`<span>` or `<label>`) regardless of its position relative to the input field.
3189
+
3190
+ Historically, this was not possible: the float label had to be placed after the input field to be targeted using the `input:focus + label` selector.
3191
+
3192
+ */
3193
+ label:has(> span):has(
3194
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3195
+ textarea,
3196
+ select
3197
+ ),
3198
+ .has-float-label {
3199
+
3200
+ /* Enlarged state */
3201
+ }
3202
+ /* Default/fallback state */
3203
+ label:has(> span):has(
3204
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3205
+ textarea,
3206
+ select
3207
+ ) > span,
3208
+ label:has(> span):has(
3209
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3210
+ textarea,
3211
+ select
3212
+ ) label,
3213
+ .has-float-label > span,
3214
+ .has-float-label label {
3215
+ padding-inline-start: calc(1rem + 1px); /* match Pico's padding + border */
3216
+ padding-block-start: 0.25rem;
3217
+ opacity: 75%;
3218
+ transition: all 0.25s;
3219
+ }
3220
+ label:has(> span):has(
3221
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3222
+ textarea,
3223
+ select
3224
+ ) input,
3225
+ label:has(> span):has(
3226
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3227
+ textarea,
3228
+ select
3229
+ ) textarea,
3230
+ label:has(> span):has(
3231
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3232
+ textarea,
3233
+ select
3234
+ ) select,
3235
+ .has-float-label input,
3236
+ .has-float-label textarea,
3237
+ .has-float-label select {
3238
+ margin-block-start: 0; /* reset Pico */
3239
+ padding-inline-start: 1rem; /* match Pico */
3240
+ padding-block: 1.125rem 0.375rem; /* match Pico's total: 2 x 0.75rem = 1.5rem */
3241
+ }
3242
+ label:has(> span):has(
3243
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3244
+ textarea,
3245
+ select
3246
+ ) input::-moz-placeholder, label:has(> span):has(
3247
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3248
+ textarea,
3249
+ select
3250
+ ) textarea::-moz-placeholder, label:has(> span):has(
3251
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3252
+ textarea,
3253
+ select
3254
+ ) select::-moz-placeholder, .has-float-label input::-moz-placeholder, .has-float-label textarea::-moz-placeholder, .has-float-label select::-moz-placeholder {
3255
+ opacity: 100%;
3256
+ -moz-transition: all 0.25s;
3257
+ transition: all 0.25s;
3258
+ }
3259
+ label:has(> span):has(
3260
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3261
+ textarea,
3262
+ select
3263
+ ) input::placeholder, label:has(> span):has(
3264
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3265
+ textarea,
3266
+ select
3267
+ ) textarea::placeholder, label:has(> span):has(
3268
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3269
+ textarea,
3270
+ select
3271
+ ) select::placeholder, .has-float-label input::placeholder, .has-float-label textarea::placeholder, .has-float-label select::placeholder {
3272
+ opacity: 100%;
3273
+ transition: all 0.25s;
3274
+ }
3275
+ label:has(> span):has(
3276
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3277
+ textarea,
3278
+ select
3279
+ ):has(*:-moz-placeholder:not(:focus)) > span, label:has(> span):has(
3280
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3281
+ textarea,
3282
+ select
3283
+ ):has(*:-moz-placeholder:not(:focus)) label, .has-float-label:has(*:-moz-placeholder:not(:focus)) > span, .has-float-label:has(*:-moz-placeholder:not(:focus)) label {
3284
+ padding-block: 0.75rem; /* match Pico */
3285
+ }
3286
+ label:has(> span):has(
3287
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3288
+ textarea,
3289
+ select
3290
+ ):has(*:placeholder-shown:not(:focus)) > span,
3291
+ label:has(> span):has(
3292
+ input:not([type="checkbox"], [type="radio"], [type="range"]),
3293
+ textarea,
3294
+ select
3295
+ ):has(*:placeholder-shown:not(:focus)) label,
3296
+ .has-float-label:has(*:placeholder-shown:not(:focus)) > span,
3297
+ .has-float-label:has(*:placeholder-shown:not(:focus)) label {
3298
+ padding-block: 0.75rem; /* match Pico */
3299
+ }
3300
+ /* Components */
3301
+ /*\3c !--section:docs-->
3302
+
3303
+ A `<dialog>` opened with `dialog.showModal()` fades in and its `<article>` zooms in, without JS classes.
3304
+ Pico's modal JS (`.modal-is-open`, `.modal-is-opening`, `.modal-is-closing`) still works on top of it.
3305
+
3306
+ - `dialog.close()` closes it at once, as before.
3307
+ - `<dialog open>` in markup and non-modal `dialog.show()` aren't animated.
3308
+ - Browsers without `@starting-style`, and reduced motion, open it at once.
3309
+
3310
+ \3c !--section:code-->```css */
3311
+ dialog:modal {
3312
+ transition: opacity var(--pico-transition);
3313
+ }
3314
+ dialog:modal > article {
3315
+ transition: transform var(--pico-transition);
3316
+ }
3317
+ @starting-style {
3318
+ dialog:modal {
3319
+ opacity: 0;
3320
+ }
3321
+
3322
+ dialog:modal > article {
3323
+ transform: scale(0.96);
3324
+ }
3325
+ }
3326
+ /* Extends https://github.com/picocss/pico/blob/main/scss/content/_link.scss
3327
+ \3c !--section:code-->
3328
+ ```css */
3329
+ /* Use inline flex only if link contains an icon */
3330
+ a:not(.does-not-exist):has(> i) {
3331
+ display: inline-flex;
3332
+ overflow-y: clip; /* to work in pair with text-underline-offset in Safari */
3333
+ gap: 0.375ch; /* =3/8 */
3334
+ text-wrap: balance;
3335
+ }
3336
+ a:not(.does-not-exist) > i {
3337
+ float: left; /* ✅ Chrome ❌ Safari */
3338
+ font-style: normal;
3339
+ text-underline-offset: -2em; /* ❌ Chrome ✅ Safari - to clip it with overflow-y */
3340
+ }
3341
+ /* Favicons */
3342
+ a:not(.does-not-exist) > i > img {
3343
+ display: inline-block; /* for Tailwind CSS Typography */
3344
+ max-width: none; /* to keep ratio safe */
3345
+ height: 1.25em;
3346
+ margin-block-start: calc(-0.25em / 2);
3347
+ }
3348
+ a:not(.does-not-exist) > i[class^="fa-"],
3349
+ a:not(.does-not-exist) > i[class*=" fa-"] {
3350
+ line-height: inherit;
3351
+ --fa-width: auto;
3352
+ }
3353
+ /* Font Awesome */
3354
+ a:not(.does-not-exist) > i.fa-lg {
3355
+ line-height: normal;
3356
+ }
3357
+ /*```
3358
+ \3c !--section:summary-->
3359
+
3360
+ Use *Bl*ades `<i>`-helper to wrap emojis, favicons, or simply drop Font Awesome icons inside links.
3361
+ It automatically handles sizing and alignment while preventing underline on icons.
3362
+
3363
+ \3c !--section:docs-->
3364
+
3365
+ <article class="breakout-item">
3366
+
3367
+ | Use `<i>`-helper with | Clean HTML without `<span>ning` |
3368
+ | ------------------------------------------------------------------------------------- | ------------------------------------ |
3369
+ | [<i>🥷</i> Emojis](#) | `<a><i>🥷</i> Text</a>` |
3370
+ | [<i>![](https://www.google.com/s2/favicons?domain=any.digital&sz=64)</i> Favicons](#) | `<a><i><img src="..."></i> Text</a>` |
3371
+ | [<i class="fa-brands fa-github fa-lg"></i> Font Awesome icons](#) | `<a><i class="fa-..."></i> Text</a>` |
3372
+ </article>
3373
+
3374
+ Or even for:
3375
+
3376
+ <article>
3377
+ <a href="#" style="margin: 0 0 0 1rem"><i>🥷</i> very-very-very-very-very-<br>long-multiline-links</a>
3378
+ </article>
3379
+
3380
+ How we made it: https://codepen.io/editor/anydigital/pen/019d2b94-5616-75dc-a23e-e111869d5237
3381
+
3382
+ \3c !--section--> */
3383
+ /*\3c !--section:docs-->
3384
+
3385
+ A `<ul>` or `<menu>` with the `popover` attribute is styled like a dropdown and opens next to the button
3386
+ that toggles it, with no JS:
3387
+
3388
+ ```html
3389
+ <button popovertarget="actions">Actions</button>
3390
+ <ul id="actions" popover>
3391
+ <li><a href="#">Edit</a></li>
3392
+ <li><a href="#">Duplicate</a></li>
3393
+ </ul>
3394
+ ```
3395
+
3396
+ - Clicking outside or pressing Esc closes it, and it's drawn on top of everything (no `z-index`, no clipping by `overflow`).
3397
+ - It opens below the button (on the reading side, also in RTL) and flips when there's no room.
3398
+ Open it with `popovertarget`, `commandfor` or `showPopover({ source })`, so it knows its button.
3399
+ - Browsers without CSS anchor positioning show it in the middle of the screen instead, like a plain popover.
3400
+ - It uses the dropdown colours (`--pico-dropdown-*`, from `components/dropdown`).
3401
+
3402
+ \3c !--section:code-->```css */
3403
+ :is(ul, menu)[popover] {
3404
+ min-width: -moz-fit-content;
3405
+ min-width: fit-content;
3406
+ margin: auto;
3407
+ padding: 0;
3408
+ border: var(--pico-border-width) solid var(--pico-dropdown-border-color);
3409
+ border-radius: var(--pico-border-radius);
3410
+ background-color: var(--pico-dropdown-background-color);
3411
+ box-shadow: var(--pico-dropdown-box-shadow);
3412
+ color: var(--pico-dropdown-color);
3413
+ white-space: nowrap;
3414
+ opacity: 0;
3415
+ transition:
3416
+ opacity var(--pico-transition),
3417
+ overlay var(--pico-transition) allow-discrete,
3418
+ display var(--pico-transition) allow-discrete;
3419
+ }
3420
+ /* Beats `nav ul` / `aside ul`, which would otherwise show the closed menu */
3421
+ :is(ul, menu)[popover]:not(:popover-open) {
3422
+ display: none;
3423
+ }
3424
+ :is(ul, menu)[popover]:popover-open {
3425
+ display: block;
3426
+ opacity: 1;
3427
+ }
3428
+ :is(ul, menu)[popover] li {
3429
+ display: block;
3430
+ margin-bottom: 0;
3431
+ padding: calc(var(--pico-form-element-spacing-vertical) * 0.5)
3432
+ var(--pico-form-element-spacing-horizontal);
3433
+ list-style: none;
3434
+ }
3435
+ :is(ul, menu)[popover] li:first-of-type {
3436
+ margin-top: calc(var(--pico-form-element-spacing-vertical) * 0.5);
3437
+ }
3438
+ :is(ul, menu)[popover] li:last-of-type {
3439
+ margin-bottom: calc(var(--pico-form-element-spacing-vertical) * 0.5);
3440
+ }
3441
+ :is(ul, menu)[popover] li:has(label):hover {
3442
+ background-color: var(--pico-dropdown-hover-background-color);
3443
+ }
3444
+ :is(ul, menu)[popover] li a {
3445
+ display: block;
3446
+ margin: calc(var(--pico-form-element-spacing-vertical) * -0.5)
3447
+ calc(var(--pico-form-element-spacing-horizontal) * -1);
3448
+ padding: calc(var(--pico-form-element-spacing-vertical) * 0.5)
3449
+ var(--pico-form-element-spacing-horizontal);
3450
+ overflow: hidden;
3451
+ border-radius: 0;
3452
+ color: var(--pico-dropdown-color);
3453
+ text-decoration: none;
3454
+ text-overflow: ellipsis;
3455
+ }
3456
+ :is(ul, menu)[popover] li a:is(:hover, :focus, :active, :focus-visible, [aria-current]:not([aria-current="false"])) {
3457
+ background-color: var(--pico-dropdown-hover-background-color);
3458
+ }
3459
+ :is(ul, menu)[popover] li label {
3460
+ width: 100%;
3461
+ }
3462
+ /* Beats Pico's `nav ul:first-of-type` / `:last-of-type` margins */
3463
+ nav :is(ul, menu)[popover] {
3464
+ margin: auto;
3465
+ }
3466
+ @starting-style {
3467
+ :is(ul, menu)[popover]:popover-open {
3468
+ opacity: 0;
3469
+ }
3470
+ }
3471
+
3472
+ /* Next to the button that opened it (its implicit anchor) */
3473
+ @supports (position-area: bottom) {
3474
+ :is(ul, menu)[popover],
3475
+ nav :is(ul, menu)[popover] {
3476
+ position-area: bottom span-right;
3477
+ position-try-fallbacks: flip-block, flip-inline;
3478
+ margin: 0;
3479
+ margin-top: var(--pico-outline-width);
3480
+ inset: auto;
3481
+ }
3482
+
3483
+ :is(ul, menu)[popover]:dir(rtl), nav :is(ul, menu)[popover]:dir(rtl) {
3484
+ position-area: bottom span-left;
3485
+ }
3486
+ }
3487
+ /*\3c !--section:docs-->
3488
+
3489
+ Use `dl.timeline` or wrap a `<dl>` with `.has-timeline` to style it as a
3490
+ vertical timeline — each `<dd>` gets a left border strip acting as the track:
3491
+
3492
+ <article class="has-timeline">
3493
+
3494
+ May 11, 2026
3495
+ : First Blades CSS stable release (v2.2.0).
3496
+
3497
+ Mar 15, 2025
3498
+ : Last Pico CSS update (v2.1.1).
3499
+
3500
+ </article>
3501
+
3502
+ \3c !--section:code-->```css */
3503
+ dl.timeline dd, .has-timeline > dl dd {
3504
+ margin-block: 0;
3505
+ padding: 0.25rem 0 0.75rem 1rem;
3506
+ border-inline-start: 0.25rem solid var(--blades-timeline-border-color);
3507
+ }
3508
+ /* Compact version (opt-in via `data-compact` attr anywhere) */
3509
+ /*
3510
+ * Compact: opt-in denser sizing and a more current look, applied under `data-compact` on
3511
+ * <html> (whole page) or on any element such as a single <form>. Without the attribute it
3512
+ * changes nothing. Part of blades.css (and blades.layered.css); with per-part imports, import it
3513
+ * last (in the same layer as the other parts).
3514
+ *
3515
+ * The extra selectors keep the values winning where Pico re-declares them at the same
3516
+ * specificity: nested [data-theme] sections, the `.pico` root when combined with the conditional build,
3517
+ * and a shadow host.
3518
+ */
3519
+ [data-compact],
3520
+ [data-compact] :is([data-theme], .pico),
3521
+ .pico[data-compact],
3522
+ :host([data-compact]),
3523
+ :host([data-compact]) [data-theme] {
3524
+ --pico-border-radius: 0.5rem;
3525
+ --pico-outline-width: 0.1875rem;
3526
+ --pico-block-spacing-vertical: 1.5rem;
3527
+ --pico-block-spacing-horizontal: 1.5rem;
3528
+ --pico-form-element-spacing-vertical: 0.375rem;
3529
+ --pico-form-element-spacing-horizontal: 0.75rem;
3530
+ --pico-form-label-font-weight: 500;
3531
+ --pico-button-font-weight: 500;
3532
+ --pico-form-element-background-color: light-dark(#fff, rgb(28, 33, 43.5));
3533
+ --pico-card-border-color: var(--pico-muted-border-color);
3534
+ --pico-card-box-shadow:
3535
+ 0 0 0 var(--pico-border-width) var(--pico-card-border-color), 0 1px 2px rgba(0, 0, 0, 0.05);
3536
+ --pico-card-sectioning-background-color: var(--pico-card-background-color);
3537
+ }
3538
+
3539
+ /* Search fields keep their pill shape */
3540
+ [data-compact]:is([role="search"], [type="search"]) {
3541
+ --pico-border-radius: 5rem;
3542
+ }
3543
+
3544
+ /* Page-level only: everything is sized in rem, so the root size can't change per element */
3545
+ :root[data-compact],
3546
+ :host([data-compact]) {
3547
+ --pico-font-size: 100%;
3548
+ }
3549
+
3550
+ [data-compact] :is(h1, h2, h3, h4, h5, h6),
3551
+ :host([data-compact]) :is(h1, h2, h3, h4, h5, h6) {
3552
+ --pico-font-weight: 600;
3553
+ }
3554
+
3555
+ /* Keep helper text at the normal weight under the 500-weight labels */
3556
+ [data-compact] :where(input, select, textarea, fieldset, .grid) + small,
3557
+ :host([data-compact]) :where(input, select, textarea, fieldset, .grid) + small {
3558
+ font-weight: var(--pico-font-weight);
3559
+ }
3560
+ /**
3561
+ * Landmarks
3562
+ * Included in pico.css and blades.ninja.css; not in blades.css
3563
+ */
3564
+ body > header,
3565
+ body > main,
3566
+ body > footer {
3567
+ padding-block: var(--pico-block-spacing-vertical);
3568
+ }
3569
+ /*!
3570
+ * Blades CSS' ninja add-ons (experimental) 🥷🧪
3571
+ * Copyright 2026 (https://blades.ninja/css/ninja/)
3572
+ * Licensed under MIT
3573
+ */
3574
+
3575
+ /* Layout */
3576
+
3577
+ /*
3578
+ \3c !--section:code-->
3579
+ ```css */
3580
+ .breakout,
3581
+ .breakout-all {
3582
+ max-width: calc(10% + 65ch + 10%);
3583
+ /* Prepare the container for breakout elements */
3584
+ padding-inline: 10%;
3585
+ }
3586
+ @media (width < 768px) {
3587
+ .breakout,
3588
+ .breakout-all {
3589
+ max-width: calc(1rem + 65ch + 1rem);
3590
+ padding-inline: 1rem
3591
+ }
3592
+ }
3593
+ /* Breakout direct children only */
3594
+ .breakout > *:is(
3595
+ table,
3596
+ pre,
3597
+ figure, video, iframe, canvas,
3598
+ img, picture,
3599
+
3600
+ .breakout-item,
3601
+ .breakout-item-max
3602
+ ),
3603
+ .breakout-all > *:is(
3604
+ table,
3605
+ pre,
3606
+ figure, video, iframe, canvas,
3607
+ img, picture,
3608
+
3609
+ .breakout-item,
3610
+ .breakout-item-max
3611
+ ) {
3612
+ width: -moz-fit-content;
3613
+ width: fit-content;
3614
+ min-width: 100%;
3615
+ max-width: min(125%, 100dvw);
3616
+ margin-left: 50%;
3617
+ transform: translateX(-50%);
3618
+ }
3619
+ /* Respect img/picture min-width */
3620
+ .breakout > *:is(img, picture):not(.does-not-exist), .breakout-all > *:is(img, picture):not(.does-not-exist) /* soft win specificity over .breakout-item above */ {
3621
+ min-width: auto;
3622
+ }
3623
+ /* Max out the width of the element */
3624
+ .breakout > *.breakout-item-max, .breakout-all > *.breakout-item-max {
3625
+ width: min(125%, 100dvw) !important;
3626
+ /* !important is for cases like figure.breakout-item-max @TODO */
3627
+ }
3628
+
3629
+ .breakout-all > *:is(h2, h3, h4, h5, h6, hr):not([class]) {
3630
+ position: relative;
3631
+ }
3632
+
3633
+ .breakout-all > *:is(h2, h3, h4, h5, h6, hr):not([class])::before {
3634
+ display: block;
3635
+ position: absolute;
3636
+ background: gray;
3637
+ content: "";
3638
+ opacity: 12.5%;
3639
+ }
3640
+
3641
+ .breakout-all > *:is(h2, h3, h4, h5, h6):not([class])::before {
3642
+ top: 50%;
3643
+ right: 100%;
3644
+ width: 10em;
3645
+ height: 0.25em;
3646
+ margin-right: 0.8ch;
3647
+ transform: translateY(-50%);
3648
+ background: linear-gradient(to left, gray, transparent);
3649
+ }
3650
+
3651
+ /* @TODO: add to tricks-wiki why `*` works here, but `&` fails */
3652
+
3653
+ .breakout-all > *:is(h2, h3, h4, h5, h6):not([class]):where(hr:not([class]) + *)::before {
3654
+ display: none !important;
3655
+ }
3656
+
3657
+ .breakout-all > *:is(hr):not([class]) {
3658
+ height: 0.5rem;
3659
+ overflow: visible;
3660
+ border: none;
3661
+ }
3662
+
3663
+ .breakout-all > *:is(hr):not([class])::before {
3664
+ left: 50%;
3665
+ width: 100dvw;
3666
+ height: 100%;
3667
+ transform: translateX(-50%);
3668
+ }
3669
+ /*```
3670
+ \3c !--section:docs-->
3671
+
3672
+ The `.breakout` layout allows images, tables, and other figures to automatically extend or bleed beyond their parent container’s width.
3673
+
3674
+ Break out a wide image from the text flow:
3675
+
3676
+ <div>\3c !-- Dummy div to avoid p tag in Markdown --></div><img
3677
+ src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='3000' height='300'><rect width='100%' height='100%' fill='gray'/></svg>">
3678
+
3679
+ Or table:
3680
+
3681
+ | Imagine<hr> | a<hr> | really<hr> | wide<hr> | table<hr> | here<hr> |
3682
+ | ----------- | ----- | ---------- | -------- | --------- | -------- |
3683
+ | ... |
3684
+
3685
+ Or code block:
3686
+
3687
+ ```html
3688
+ <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod.</p>
3689
+ ```
3690
+
3691
+ Or anything else:
3692
+
3693
+ <article class="breakout-item-max" data-theme="dark">
3694
+
3695
+ Using `.breakout-item` and `.breakout-item-max` helpers {style=margin:0}
3696
+ </article>
3697
+
3698
+ <div><hr></div>
3699
+
3700
+ `.breakout-all` also visually breaks out headings and horizontal rules:
3701
+
3702
+ <h2>Heading 2</h2><h3>Heading 3</h3><h4>Heading 4</h4><h5>Heading 5</h5><h6>Heading 6</h6>
3703
+ <hr>
3704
+
3705
+ \3c !--section--> */
3706
+ /*```\3c !--section:docs-->
3707
+
3708
+ `<a href="#top">` is automatically fixed to the bottom-right corner with extra top padding for easier clicking:
3709
+ ```css */
3710
+ [href="#top"] {
3711
+ position: fixed;
3712
+ right: 0;
3713
+ bottom: 0;
3714
+ padding-top: 50vh;
3715
+ }
3716
+ /* Content */
3717
+ /*\3c !--section:docs-->
3718
+
3719
+ ## Heading anchors
3720
+
3721
+ Links with `href="#..."` inside headings are automatically displayed as anchors:
3722
+
3723
+ <article>
3724
+ <h2 style="margin: 0 0 0 1.5rem">Heading with anchor <a aria-hidden="true" style="visibility: visible">#</a></h2>
3725
+ </article>
3726
+
3727
+ How it works:
3728
+ ```css */
3729
+ h1,
3730
+ h2,
3731
+ h3,
3732
+ h4,
3733
+ h5,
3734
+ h6 {
3735
+ position: relative;
3736
+ }
3737
+ h1 a[aria-hidden="true"], h2 a[aria-hidden="true"], h3 a[aria-hidden="true"], h4 a[aria-hidden="true"], h5 a[aria-hidden="true"], h6 a[aria-hidden="true"] {
3738
+ visibility: hidden;
3739
+ position: absolute;
3740
+ top: 50%;
3741
+ right: 100%;
3742
+ padding-right: 0.2ch;
3743
+ transform: translateY(-50%);
3744
+ color: silver;
3745
+ text-decoration: none;
3746
+ }
3747
+ @media /* to avoid double-tap on touch devices */ (hover: hover) {
3748
+ h1:hover a[aria-hidden="true"], h2:hover a[aria-hidden="true"], h3:hover a[aria-hidden="true"], h4:hover a[aria-hidden="true"], h5:hover a[aria-hidden="true"], h6:hover a[aria-hidden="true"] {
3749
+ visibility: visible;
3750
+ }
3751
+ }
3752
+ /*\3c !--section:docs-->
3753
+
3754
+ ## Custom markers
3755
+
3756
+ Customize markers using inline `style="--list-marker:..."` on `<ul>/<ol>` or even individual `<li>`:
3757
+
3758
+ <article>
3759
+
3760
+ - you
3761
+ - can
3762
+ - make
3763
+ - really
3764
+ - cool markers {style="--list-marker:'🧊 '"}
3765
+ - with
3766
+ - *Bl*ades {style="--list-marker:'🥷 '"}
3767
+
3768
+ {style="--list-marker:'→ '"}
3769
+ </article>
3770
+
3771
+ How it works:
3772
+ ```css */
3773
+ ul[style*="--list-marker:"], ol[style*="--list-marker:"] {
3774
+ list-style-type: var(--list-marker);
3775
+ }
3776
+ ul[style*="--list-marker:"] > li, ol[style*="--list-marker:"] > li {
3777
+ list-style-type: inherit;
3778
+ }
3779
+ ul li[style*="--list-marker:"], ol li[style*="--list-marker:"] {
3780
+ list-style-type: var(--list-marker);
3781
+ }
3782
+ ul li[data-marker]::marker, ol li[data-marker]::marker {
3783
+ content: attr(data-marker) " "; /* ⚠️ Chrome and Firefox only */
3784
+ }
3785
+ /*```
3786
+
3787
+ ## Markerless
3788
+
3789
+ `.markerless` removes markers and reduces padding:
3790
+
3791
+ <article>
3792
+
3793
+ - 1️⃣ so you can use
3794
+ - 2️⃣ emojis or images
3795
+ - 3️⃣ instead of bullets
3796
+
3797
+ {.markerless}
3798
+ </article>
3799
+
3800
+ How it works:
3801
+ ```css */
3802
+ ul.markerless, ol.markerless {
3803
+ padding-inline-start: 1.25rem;
3804
+ }
3805
+ ul.markerless li, ol.markerless li {
3806
+ list-style: none;
3807
+ }
3808
+ /*```
3809
+
3810
+ ## Unlist
3811
+
3812
+ `.unlist` removes list styling at all:
3813
+
3814
+ <article>
3815
+
3816
+ - One: <article>1</article>
3817
+ - Two: <article>2</article>
3818
+ - Three: <article>3</article>
3819
+
3820
+ {.unlist .grid style=margin:0}
3821
+ </article>
3822
+
3823
+ `.unlist-all` removes styling from all nested lists too.
3824
+
3825
+ How it works:
3826
+ ```css */
3827
+ ul.unlist,
3828
+ ul.unlist-all,
3829
+ .unlist-all ul,
3830
+ ol.unlist,
3831
+ ol.unlist-all,
3832
+ .unlist-all ol {
3833
+ padding-inline-start: 0;
3834
+ }
3835
+ ul.unlist > li, ul.unlist-all > li, .unlist-all ul > li, ol.unlist > li, ol.unlist-all > li, .unlist-all ol > li {
3836
+ list-style: none;
3837
+ }
3838
+ /*\3c !--section:docs-->
3839
+
3840
+ ## Column expanders
3841
+
3842
+ Place `<hr>` element inside `<th>` column to expand it horizontally:
3843
+
3844
+ <article>
3845
+
3846
+ | Column with `<hr>`<hr> | Same column without `<hr>` | ... {style=width:100%} |
3847
+ | --- | --- | --- |
3848
+ | (012) 345-6789 | (012) 345-6789 |
3849
+ </article>
3850
+
3851
+ Living examples of big tables with `<hr>`-expanders: \3c !--A-Z-->
3852
+ - https://blades.ninja/ai/ide/
3853
+ - https://blades.ninja/build-awesome-11ty/starters/
3854
+ - https://blades.ninja/css/frameworks/
3855
+ - https://blades.ninja/ssg/
3856
+
3857
+ How it works:
3858
+ ```css */
3859
+ th hr {
3860
+ visibility: hidden;
3861
+ width: 12ch; /* min ~65/12 = ~5 cols */
3862
+ height: 0;
3863
+ margin: 0;
3864
+ }
3865
+ th hr.lg {
3866
+ width: 18ch;
3867
+ }
3868
+ th hr.x2 {
3869
+ width: 24ch;
3870
+ }
3871
+ /*```
3872
+
3873
+ ## Borderless table
3874
+
3875
+ `.borderless` removes all default borders:
3876
+
3877
+ <article>
3878
+
3879
+ | Less | borders |
3880
+ | ---- | ------- |
3881
+ | More | fun |
3882
+
3883
+ {.borderless}
3884
+ </article>
3885
+
3886
+ \3c !--section-->*/
3887
+ table.borderless th,
3888
+ table.borderless td {
3889
+ border: none;
3890
+ }
3891
+ /*
3892
+ \3c !--section:code-->
3893
+ ```css */
3894
+ table.responsive,
3895
+ .breakout > table:not(.does-not-exist),
3896
+ .breakout-all > table:not(.does-not-exist) {
3897
+
3898
+ /* Let them scroll */
3899
+ display: block;
3900
+
3901
+ /* Let them full-bleed */
3902
+ width: -moz-max-content;
3903
+ width: max-content;
3904
+ min-width: auto;
3905
+ max-width: 100dvw;
3906
+ /* Center horizontally */
3907
+ margin-left: 50%;
3908
+ padding-inline: 7.5%;
3909
+ overflow-x: auto;
3910
+ transform: translateX(-50%);
3911
+ -webkit-overflow-scrolling: touch; /* Smooth scroll for iOS */
3912
+ }
3913
+ table.responsive th,
3914
+ table.responsive td,
3915
+ .breakout > table:not(.does-not-exist) th,
3916
+ .breakout > table:not(.does-not-exist) td,
3917
+ .breakout-all > table:not(.does-not-exist) th,
3918
+ .breakout-all > table:not(.does-not-exist) td {
3919
+ padding-inline-start: 0;
3920
+ }
3921
+ /*```
3922
+ `table:not(.does-not-exist)` trick (inspired by postcss) is used here to increase specificity against selectors like `&:is(table, .table)`
3923
+
3924
+ \3c !--section:summary-->
3925
+
3926
+ `.responsive` makes a table full-bleed and scroll on mobile, without a need for a redundant wrapper (finally).
3927
+ Tables inside https://blades.ninja/css/breakout/ are responsive by default.
3928
+
3929
+ \3c !--section:docs-->
3930
+
3931
+ ### Demo table
3932
+
3933
+ | Term | Description <hr class="x2"> | Link |
3934
+ | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
3935
+ | Responsive design | Approach to web design that aims to make web pages render well on a variety of devices and window or screen sizes from minimum to maximum display size to ensure usability and satisfaction. | https://en.wikipedia.org/wiki/Responsive_web_design |
3936
+
3937
+ {.responsive}
3938
+
3939
+ ---
3940
+
3941
+ Living examples: \3c !--A-Z-->
3942
+ - https://blades.ninja/ai/ide/
3943
+ - https://blades.ninja/build-awesome-11ty/starters/
3944
+ - https://blades.ninja/css/frameworks/
3945
+ - https://blades.ninja/ssg/
3946
+
3947
+ \3c !--section--> */
3948
+ /* Other */
3949
+ /*\3c !--section:docs-->
3950
+
3951
+ ### `sup`er &nbsp; and &nbsp; `sub`headings
3952
+
3953
+ <article><br>
3954
+
3955
+ # <sup style>Parent page</sup> Page title <sub style>Subtitle</sub>
3956
+
3957
+ </article>
3958
+
3959
+ How it works:
3960
+ ```css */
3961
+ sup[style] {
3962
+ display: block;
3963
+ font-size: min(50%, 0.75rem);
3964
+ letter-spacing: 0.0625em;
3965
+ text-transform: uppercase;
3966
+ }
3967
+ sub[style] {
3968
+ display: block;
3969
+ bottom: 0;
3970
+ font-weight: 300;
3971
+ line-height: 1.1;
3972
+ opacity: 75%;
3973
+ }
3974
+ sub[style]:where(h1 > *) {
3975
+ font-size: 50%;
3976
+ }
3977
+ /*```
3978
+
3979
+ ### Teasers
3980
+
3981
+ <article style="padding-inline: 2rem">
3982
+ <a href="https://blades.ninja/" role="button" class="outline">
3983
+ <h4>Blades CSS</h4>
3984
+ Fully compatible and actively maintained successor to Pico CSS.
3985
+ </a>
3986
+ </article>
3987
+
3988
+ How it works:
3989
+ ```css */
3990
+ a[role="button"]:has(h1, h2, h3, h4, h5, h6) {
3991
+ margin: 0 0 0.5rem -1rem;
3992
+ border-width: 1px 0 0 1px;
3993
+ text-align: start;
3994
+ }
3995
+ /*```
3996
+
3997
+ ### `.opt`ional content
3998
+
3999
+ How it works:
4000
+ ```css */
4001
+ @media (width < 1024px) {
4002
+ .opt:not(.does-not-exist) {
4003
+ display: none
4004
+ }
4005
+ }
4006
+ /*```
4007
+
4008
+ ### Nicer GitHub favicons
4009
+
4010
+ <article>
4011
+
4012
+ https://github.com/anyblades/blades
4013
+
4014
+ </article>
4015
+
4016
+ How it works:
4017
+ ```css */
4018
+ img[src*="?domain=github.com&"] {
4019
+ border-radius: 50%;
4020
+ }
4021
+ @media (prefers-color-scheme: dark) {
4022
+ img[src*="?domain=github.com&"] {
4023
+ filter: invert(1)
4024
+ }
4025
+ }
4026
+ /*```
4027
+
4028
+ ## Dark auto
4029
+
4030
+ `.dark-auto` automatically creates a simple dark version of any element:
4031
+
4032
+ <article data-theme="dark">
4033
+ <p>Look how cool <big class="dark-auto">🔥🕷️🐦‍⬛🐄🦓</big> can look in the dark!</p>
4034
+ </article>
4035
+
4036
+ How it works:
4037
+ ```css */
4038
+ /* Per https://picocss.com/docs/css-variables#css-variables-for-color-schemes */
4039
+ :root {
4040
+ --blades-dark-filter: invert(100%) hue-rotate(180deg);
4041
+ }
4042
+ .dark-auto {
4043
+ /* Dark color scheme (Forced) */
4044
+ }
4045
+ /* Dark color scheme (Auto) */
4046
+ @media (prefers-color-scheme: dark) {
4047
+ .dark-auto {
4048
+ filter: var(--blades-dark-filter)
4049
+ }
4050
+ }
4051
+ .dark-auto[data-theme="dark"],
4052
+ .dark-auto:where([data-theme="dark"] *) {
4053
+ filter: var(--blades-dark-filter);
4054
+ }
4055
+ /*```
4056
+
4057
+ ## Faded
4058
+
4059
+ `.faded` reduces the opacity of an element:
4060
+
4061
+ <article class="faded">
4062
+ Hover to unfade me!
4063
+ </article>
4064
+
4065
+ How it works:
4066
+ ```css */
4067
+ .faded {
4068
+ opacity: 50%;
4069
+ }
4070
+ .faded:hover {
4071
+ opacity: 87.5%;
4072
+ }
4073
+ /*```
4074
+ \3c !--section--> */
4075
+
4076
+ /* Fix the scrollbar color when inverted by https://tailwindcss.com/docs/filter-invert */
4077
+ .invert ::-webkit-scrollbar {
4078
+ filter: invert(1) !important;
4079
+ }
4080
+ /*\3c !--section:code-->```css */
4081
+ html {
4082
+ /* Prevent horizontal overflow and scrolling, modern way. */
4083
+ overflow-x: clip;
4084
+
4085
+ /* Enable font smoothing */
4086
+ -webkit-font-smoothing: antialiased;
4087
+ -moz-osx-font-smoothing: grayscale;
4088
+ }
4089
+
4090
+ body {
4091
+
4092
+ /* Make the `body` a flex container with column layout, and `main` to automatically fill available space. This is useful for creating sticky footers and full-height layouts. */
4093
+ display: flex;
4094
+ flex-direction: column;
4095
+ /* Ensure `body` takes at least the full height of the viewport (using dynamic viewport height for better mobile support). */
4096
+ min-height: 100dvh;
4097
+
4098
+ /* Evaluates the last ~4 lines of text blocks to prevent a single word from sitting on the final line. */
4099
+
4100
+ /* Enable global hyphenation */
4101
+ /* ... except for links and tables which are better (safer) without hyphenation */
4102
+ }
4103
+
4104
+ body > main {
4105
+ flex-grow: 1;
4106
+ }
4107
+
4108
+ body {
4109
+ hyphens: auto;
4110
+ text-wrap: pretty;
4111
+ }
4112
+
4113
+ body a,
4114
+ body table {
4115
+ hyphens: none;
4116
+ }
4117
+
4118
+ a:not([href^="#"]) {
4119
+ text-decoration-thickness: 1px;
4120
+ }
4121
+
4122
+ a:not([href^="#"]):hover {
4123
+ text-decoration-thickness: 2px;
4124
+ }
4125
+
4126
+ h1,
4127
+ h2,
4128
+ h3,
4129
+ h4,
4130
+ h5,
4131
+ h6 {
4132
+ text-wrap: balance;
4133
+ }
4134
+ h1 {
4135
+ margin-bottom: 1rem; /* for tw-typography */
4136
+ font-size: 2.5em; /* for pico.css & tw-typography */
4137
+ }
4138
+
4139
+ hr {
4140
+ margin-block: 2em; /* for pico.css & tw-typography */
4141
+ }
4142
+
4143
+ ul ul {
4144
+ font-size: 87.5%;
4145
+ }
4146
+
4147
+ dl dt {
4148
+ margin-block: 0.25rem;
4149
+ font-weight: 500;
4150
+ }
4151
+
4152
+ dl dd {
4153
+ margin-block-end: 1rem;
4154
+ }
4155
+
4156
+ pre small {
4157
+ font-weight: lighter;
4158
+ opacity: 75%;
4159
+ }
4160
+
4161
+ pre:has(code) {
4162
+ background: #181c25 !important;
4163
+ }
4164
+
4165
+ table th {
4166
+ font-weight: bold;
4167
+ vertical-align: bottom;
4168
+ }
4169
+
4170
+ table td {
4171
+ vertical-align: top;
4172
+ }
4173
+
4174
+ table pre {
4175
+ margin-bottom: 0.25rem;
4176
+ }
4177
+
4178
+ [href="#top"] {
4179
+ opacity: 25%;
4180
+ }
4181
+
4182
+ [href="#top"]:hover {
4183
+ opacity: 75%;
4184
+ }
4185
+
4186
+ [href="#top"] > i {
4187
+ display: inline-block;
4188
+ margin: 0.5rem;
4189
+ padding: 0.25rem 0.375rem;
4190
+ border-color: black;
4191
+ color: black;
4192
+ font-size: 0.75rem;
4193
+ }
4194
+
4195
+ .breakout > img,
4196
+ .breakout > figure,
4197
+ .breakout-all > img,
4198
+ .breakout-all > figure {
4199
+ margin-bottom: 1rem;
4200
+ }
4201
+
4202
+ .faded a {
4203
+ text-decoration-style: dotted;
4204
+ }