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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +78 -3
  2. package/css/blades.css +371 -978
  3. package/css/blades.min.css +74 -37
  4. package/css/blades.ninja.css +4057 -0
  5. package/css/blades.ninja.min.css +190 -0
  6. package/css/float-label.css +207 -0
  7. package/css/float-label.min.css +55 -0
  8. package/css/{pico.layered.css → layered/blades.layered.css} +654 -397
  9. package/css/layered/blades.layered.min.css +184 -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 +43 -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 +1082 -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 +229 -396
  48. package/css/pico.conditional.min.css +42 -31
  49. package/css/pico.css +229 -396
  50. package/css/pico.min.css +42 -31
  51. package/package.json +24 -11
  52. package/src/_compact.css +51 -0
  53. package/src/blades/_index.css +23 -0
  54. package/src/blades/float-label/_index.css +2 -0
  55. package/src/{standalone/forms/_float-label.theme.css → blades/float-label/_theme.css} +5 -1
  56. package/src/blades.css +3 -2
  57. package/src/blades.ninja.css +3 -0
  58. package/src/float-label.css +1 -0
  59. package/src/ninja/_index.css +19 -0
  60. package/src/{standalone → ninja}/_theme.css +0 -2
  61. package/src/{ninja.css → ninja/_utilities.css} +55 -6
  62. package/src/pico/_variables.css +77 -386
  63. package/src/pico/components/_accordion.css +8 -0
  64. package/src/pico/components/_card.css +14 -0
  65. package/src/pico/components/_dropdown.css +9 -0
  66. package/src/pico/components/_group.css +38 -0
  67. package/src/pico/components/_loading.css +9 -0
  68. package/src/pico/components/_modal.css +13 -0
  69. package/src/pico/components/_nav.css +6 -0
  70. package/src/pico/components/_progress.css +6 -0
  71. package/src/pico/components/_tooltip.css +6 -0
  72. package/src/pico/content/_button.css +1 -1
  73. package/src/pico/forms/_checkbox-radio-switch.css +13 -0
  74. package/src/pico/forms/_input-datetime.css +6 -0
  75. package/src/pico/forms/_input-range.css +9 -0
  76. package/src/pico/forms/_input-search.css +5 -0
  77. package/src/pico/layout/_document.css +9 -0
  78. package/src/pico/layout/_index.css +0 -1
  79. package/src/pico/layout/_landmarks.css +1 -9
  80. package/src/pico.css +1 -0
  81. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -25
  82. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  83. package/.prettierignore +0 -3
  84. package/CODE_OF_CONDUCT.md +0 -92
  85. package/context7.json +0 -4
  86. package/css/blades.standalone.css +0 -860
  87. package/css/blades.standalone.min.css +0 -37
  88. package/css/ninja.css +0 -83
  89. package/css/ninja.min.css +0 -5
  90. package/css/pico.layered.min.css +0 -107
  91. package/css/postcss.config.js +0 -23
  92. package/index.html +0 -63
  93. package/src/blades.standalone.css +0 -2
  94. package/src/standalone/_core.css +0 -32
  95. package/src/standalone/_utilities.css +0 -55
  96. package/src/standalone/forms/_float-label.css +0 -2
  97. /package/src/{standalone/content → blades}/_code.css +0 -0
  98. /package/src/{standalone/layout → blades}/_columns.css +0 -0
  99. /package/src/{standalone/components/_icon-helper.css → blades/_icon.css} +0 -0
  100. /package/src/{standalone/components → blades}/_timeline.css +0 -0
  101. /package/src/{standalone → blades}/_variables.css +0 -0
  102. /package/src/{standalone/forms/_float-label.core.css → blades/float-label/_core.css} +0 -0
  103. /package/src/{standalone/layout/_breakout.css → ninja/_container-breakout.css} +0 -0
  104. /package/src/{standalone/content/_typography.css → ninja/_heading-anchor.css} +0 -0
  105. /package/src/{standalone/content/_list.css → ninja/_list-helpers.css} +0 -0
  106. /package/src/{standalone/layout/_scroller.css → ninja/_page-anchors.css} +0 -0
  107. /package/src/{standalone/content/_table.css → ninja/_table-helpers.css} +0 -0
  108. /package/src/{standalone/content → ninja}/_table-responsive.css +0 -0
@@ -1,8 +1,3 @@
1
- /*!
2
- * Blades CSS' ninja add-ons (experimental) 🥷🧪
3
- * Copyright 2026 (https://blades.ninja/css/ninja/)
4
- * Licensed under MIT
5
- */
6
1
  /*<!--section:docs-->
7
2
 
8
3
  ### `sup`er &nbsp; and &nbsp; `sub`headings
@@ -80,4 +75,58 @@ img[src*="?domain=github.com&"] {
80
75
  filter: invert(1);
81
76
  }
82
77
  }
83
- /*```*/
78
+ /*```
79
+
80
+ ## Dark auto
81
+
82
+ `.dark-auto` automatically creates a simple dark version of any element:
83
+
84
+ <article data-theme="dark">
85
+ <p>Look how cool <big class="dark-auto">🔥🕷️🐦‍⬛🐄🦓</big> can look in the dark!</p>
86
+ </article>
87
+
88
+ How it works:
89
+ ```css */
90
+ /* Per https://picocss.com/docs/css-variables#css-variables-for-color-schemes */
91
+ :root {
92
+ --blades-dark-filter: invert(100%) hue-rotate(180deg);
93
+ }
94
+ .dark-auto {
95
+ /* Dark color scheme (Auto) */
96
+ @media (prefers-color-scheme: dark) {
97
+ filter: var(--blades-dark-filter);
98
+ }
99
+ /* Dark color scheme (Forced) */
100
+ &[data-theme="dark"],
101
+ &:where([data-theme="dark"] *) {
102
+ filter: var(--blades-dark-filter);
103
+ }
104
+ }
105
+ /*```
106
+
107
+ ## Faded
108
+
109
+ `.faded` reduces the opacity of an element:
110
+
111
+ <article class="faded">
112
+ Hover to unfade me!
113
+ </article>
114
+
115
+ How it works:
116
+ ```css */
117
+ .faded {
118
+ opacity: 50%;
119
+
120
+ &:hover {
121
+ opacity: 87.5%;
122
+ }
123
+ }
124
+ /*```
125
+ <!--section--> */
126
+
127
+ /* Fix the scrollbar color when inverted by https://tailwindcss.com/docs/filter-invert */
128
+ .invert {
129
+ ::-webkit-scrollbar {
130
+ filter: invert(1) !important;
131
+ }
132
+ }
@@ -28,24 +28,10 @@
28
28
  --pico-grid-row-gap: var(--pico-spacing);
29
29
  --pico-form-element-spacing-vertical: 0.75rem;
30
30
  --pico-form-element-spacing-horizontal: 1rem;
31
- --pico-group-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
32
- --pico-group-box-shadow-focus-with-button: 0 0 0 var(--pico-outline-width)
33
- var(--pico-primary-focus);
34
- --pico-group-box-shadow-focus-with-input: 0 0 0 0.0625rem var(--pico-form-element-border-color);
35
- --pico-modal-overlay-backdrop-filter: blur(0.375rem);
36
31
  --pico-nav-element-spacing-vertical: 1rem;
37
- --pico-nav-element-spacing-horizontal: 0.5rem;
38
32
  --pico-nav-link-spacing-vertical: 0.5rem;
39
33
  --pico-nav-link-spacing-horizontal: 0.5rem;
40
- --pico-nav-breadcrumb-divider: ">";
41
- --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");
42
- --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");
43
34
  --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
- --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");
45
- --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");
46
- --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");
47
- --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");
48
- --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");
49
35
  }
50
36
  @media (min-width: 576px) {
51
37
  :scope,
@@ -191,36 +177,6 @@ nav details.dropdown summary:focus-visible {
191
177
  --pico-border-radius: 5rem;
192
178
  }
193
179
 
194
- [role="search"]:has(
195
- button.secondary:focus,
196
- [type="submit"].secondary:focus,
197
- [type="button"].secondary:focus,
198
- [role="button"].secondary:focus
199
- ),
200
- [role="group"]:has(
201
- button.secondary:focus,
202
- [type="submit"].secondary:focus,
203
- [type="button"].secondary:focus,
204
- [role="button"].secondary:focus
205
- ) {
206
- --pico-group-box-shadow-focus-with-button: 0 0 0 var(--pico-outline-width)
207
- var(--pico-secondary-focus);
208
- }
209
- [role="search"]:has(
210
- button.contrast:focus,
211
- [type="submit"].contrast:focus,
212
- [type="button"].contrast:focus,
213
- [role="button"].contrast:focus
214
- ),
215
- [role="group"]:has(
216
- button.contrast:focus,
217
- [type="submit"].contrast:focus,
218
- [type="button"].contrast:focus,
219
- [role="button"].contrast:focus
220
- ) {
221
- --pico-group-box-shadow-focus-with-button: 0 0 0 var(--pico-outline-width)
222
- var(--pico-contrast-focus);
223
- }
224
180
  [role="search"] button,
225
181
  [role="search"] [type="submit"],
226
182
  [role="search"] [type="button"],
@@ -248,273 +204,122 @@ details summary[role="button"]:not(.outline)::after {
248
204
 
249
205
  /**
250
206
  * Color schemes
207
+ * One palette for both schemes: light-dark() picks the value from the used color-scheme,
208
+ * so the dark scheme only has to switch color-scheme (same selectors as before).
251
209
  */
210
+ :scope,
211
+ :host,
252
212
  [data-theme="light"],
253
- :scope:not([data-theme="dark"]),
254
- :host(:not([data-theme="dark"])) {
213
+ [data-theme="dark"] {
255
214
  color-scheme: light;
256
- --pico-background-color: #fff;
257
- --pico-color: #373c44;
258
- --pico-text-selection-color: rgba(2, 154, 232, 0.25);
259
- --pico-muted-color: #646b79;
260
- --pico-muted-border-color: rgb(231, 234, 239.5);
261
- --pico-primary: #0172ad;
215
+ --pico-background-color: light-dark(#fff, rgb(19, 22.5, 30.5));
216
+ --pico-color: light-dark(#373c44, #c2c7d0);
217
+ --pico-text-selection-color: light-dark(rgba(2, 154, 232, 0.25), rgba(1, 170, 255, 0.1875));
218
+ --pico-muted-color: light-dark(#646b79, #7b8495);
219
+ --pico-muted-border-color: light-dark(rgb(231, 234, 239.5), #202632);
220
+ --pico-primary: light-dark(#0172ad, #01aaff);
262
221
  --pico-primary-background: #0172ad;
263
222
  --pico-primary-border: var(--pico-primary-background);
264
- --pico-primary-underline: rgba(1, 114, 173, 0.5);
265
- --pico-primary-hover: #015887;
266
- --pico-primary-hover-background: #02659a;
223
+ --pico-primary-underline: light-dark(rgba(1, 114, 173, 0.5), rgba(1, 170, 255, 0.5));
224
+ --pico-primary-hover: light-dark(#015887, #79c0ff);
225
+ --pico-primary-hover-background: light-dark(#02659a, #017fc0);
267
226
  --pico-primary-hover-border: var(--pico-primary-hover-background);
268
227
  --pico-primary-hover-underline: var(--pico-primary-hover);
269
- --pico-primary-focus: rgba(2, 154, 232, 0.5);
228
+ /* Focus rings are opaque: at 25–50% alpha they composite below 3:1 (SC 1.4.11), see #167 */
229
+ --pico-primary-focus: light-dark(rgb(2, 138, 212), rgb(1, 170, 255));
270
230
  --pico-primary-inverse: #fff;
271
- --pico-secondary: #5d6b89;
231
+ --pico-secondary: light-dark(#5d6b89, #969eaf);
272
232
  --pico-secondary-background: #525f7a;
273
233
  --pico-secondary-border: var(--pico-secondary-background);
274
- --pico-secondary-underline: rgba(93, 107, 137, 0.5);
275
- --pico-secondary-hover: #48536b;
276
- --pico-secondary-hover-background: #48536b;
234
+ --pico-secondary-underline: light-dark(rgba(93, 107, 137, 0.5), rgba(150, 158, 175, 0.5));
235
+ --pico-secondary-hover: light-dark(#48536b, #b3b9c5);
236
+ --pico-secondary-hover-background: light-dark(#48536b, #5d6b89);
277
237
  --pico-secondary-hover-border: var(--pico-secondary-hover-background);
278
238
  --pico-secondary-hover-underline: var(--pico-secondary-hover);
279
- --pico-secondary-focus: rgba(93, 107, 137, 0.25);
239
+ --pico-secondary-focus: light-dark(rgb(93, 107, 137), rgb(144, 158, 190));
280
240
  --pico-secondary-inverse: #fff;
281
- --pico-contrast: #181c25;
282
- --pico-contrast-background: #181c25;
241
+ --pico-contrast: light-dark(#181c25, #dfe3eb);
242
+ --pico-contrast-background: light-dark(#181c25, #eff1f4);
283
243
  --pico-contrast-border: var(--pico-contrast-background);
284
- --pico-contrast-underline: rgba(24, 28, 37, 0.5);
285
- --pico-contrast-hover: #000;
286
- --pico-contrast-hover-background: #000;
244
+ --pico-contrast-underline: light-dark(rgba(24, 28, 37, 0.5), rgba(223, 227, 235, 0.5));
245
+ --pico-contrast-hover: light-dark(#000, #fff);
246
+ --pico-contrast-hover-background: light-dark(#000, #fff);
287
247
  --pico-contrast-hover-border: var(--pico-contrast-hover-background);
288
- --pico-contrast-hover-underline: var(--pico-secondary-hover);
289
- --pico-contrast-focus: rgba(93, 107, 137, 0.25);
290
- --pico-contrast-inverse: #fff;
291
- --pico-box-shadow: 0 0.5rem 2.5rem rgba(129, 145, 181, 0.2);
292
- --pico-h1-color: #2d3138;
293
- --pico-h2-color: #373c44;
294
- --pico-h3-color: #424751;
295
- --pico-h4-color: #4d535e;
296
- --pico-h5-color: #5c6370;
297
- --pico-h6-color: #646b79;
298
- --pico-mark-background-color: rgb(252.5, 230.5, 191.5);
299
- --pico-mark-color: #0f1114;
300
- --pico-ins-color: rgb(28.5, 105.5, 84);
301
- --pico-del-color: rgb(136, 56.5, 53);
248
+ --pico-contrast-hover-underline: light-dark(
249
+ var(--pico-secondary-hover),
250
+ var(--pico-contrast-hover)
251
+ );
252
+ --pico-contrast-focus: light-dark(rgb(93, 107, 137), rgb(207, 213, 226));
253
+ --pico-contrast-inverse: light-dark(#fff, #000);
254
+ --pico-box-shadow: 0 0.5rem 2.5rem light-dark(rgba(129, 145, 181, 0.2), rgba(7, 8.5, 12, 0.2));
255
+ --pico-h1-color: light-dark(#2d3138, #f0f1f3);
256
+ --pico-h2-color: light-dark(#373c44, #e0e3e7);
257
+ --pico-h3-color: light-dark(#424751, #c2c7d0);
258
+ --pico-h4-color: light-dark(#4d535e, #b3b9c5);
259
+ --pico-h5-color: light-dark(#5c6370, #a4acba);
260
+ --pico-h6-color: light-dark(#646b79, #8891a4);
261
+ --pico-mark-background-color: light-dark(rgb(252.5, 230.5, 191.5), #014063);
262
+ --pico-mark-color: light-dark(#0f1114, #fff);
263
+ --pico-ins-color: light-dark(rgb(28.5, 105.5, 84), #62af9a);
264
+ --pico-del-color: light-dark(rgb(136, 56.5, 53), rgb(205.5, 126, 123));
302
265
  --pico-blockquote-border-color: var(--pico-muted-border-color);
303
266
  --pico-blockquote-footer-color: var(--pico-muted-color);
304
267
  --pico-button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
305
268
  --pico-button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
306
269
  --pico-table-border-color: var(--pico-muted-border-color);
307
270
  --pico-table-row-stripped-background-color: rgba(111, 120, 135, 0.0375);
308
- --pico-code-background-color: rgb(243, 244.5, 246.75);
309
- --pico-code-color: #646b79;
271
+ --pico-code-background-color: light-dark(rgb(243, 244.5, 246.75), rgb(26, 30.5, 40.25));
272
+ --pico-code-color: light-dark(#646b79, #8891a4);
310
273
  --pico-code-kbd-background-color: var(--pico-color);
311
274
  --pico-code-kbd-color: var(--pico-background-color);
312
- --pico-form-element-background-color: rgb(251, 251.5, 252.25);
313
- --pico-form-element-selected-background-color: #dfe3eb;
314
- --pico-form-element-border-color: #cfd5e2;
315
- --pico-form-element-color: #23262c;
316
- --pico-form-element-placeholder-color: var(--pico-muted-color);
317
- --pico-form-element-active-background-color: #fff;
275
+ --pico-form-element-background-color: light-dark(rgb(251, 251.5, 252.25), rgb(28, 33, 43.5));
276
+ --pico-form-element-selected-background-color: light-dark(#dfe3eb, #2a3140);
277
+ --pico-form-element-border-color: light-dark(#cfd5e2, #2a3140);
278
+ --pico-form-element-color: light-dark(#23262c, #e0e3e7);
279
+ --pico-form-element-placeholder-color: light-dark(var(--pico-muted-color), #8891a4);
280
+ --pico-form-element-active-background-color: light-dark(#fff, rgb(26, 30.5, 40.25));
318
281
  --pico-form-element-active-border-color: var(--pico-primary-border);
319
282
  --pico-form-element-focus-color: var(--pico-primary-border);
320
283
  --pico-form-element-disabled-opacity: 0.5;
321
- --pico-form-element-invalid-border-color: rgb(183.5, 105.5, 106.5);
322
- --pico-form-element-invalid-active-border-color: rgb(200.25, 79.25, 72.25);
284
+ --pico-form-element-invalid-border-color: light-dark(
285
+ rgb(183.5, 105.5, 106.5),
286
+ rgb(200.25, 79.25, 72.25)
287
+ );
288
+ --pico-form-element-invalid-active-border-color: light-dark(
289
+ rgb(200.25, 79.25, 72.25),
290
+ rgb(214, 92, 86)
291
+ );
323
292
  --pico-form-element-invalid-focus-color: var(--pico-form-element-invalid-active-border-color);
324
- --pico-form-element-valid-border-color: rgb(76, 154.5, 137.5);
325
- --pico-form-element-valid-active-border-color: rgb(39, 152.75, 118.75);
293
+ --pico-form-element-valid-border-color: light-dark(rgb(76, 154.5, 137.5), #2a7b6f);
294
+ --pico-form-element-valid-active-border-color: light-dark(
295
+ rgb(39, 152.75, 118.75),
296
+ rgb(22, 137, 105.5)
297
+ );
326
298
  --pico-form-element-valid-focus-color: var(--pico-form-element-valid-active-border-color);
327
- --pico-switch-background-color: #bfc7d9;
328
- --pico-switch-checked-background-color: var(--pico-primary-background);
329
- --pico-switch-color: #fff;
330
- --pico-switch-thumb-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
331
- --pico-range-border-color: #dfe3eb;
332
- --pico-range-active-border-color: #bfc7d9;
333
- --pico-range-thumb-border-color: var(--pico-background-color);
334
- --pico-range-thumb-color: var(--pico-secondary-background);
335
- --pico-range-thumb-active-color: var(--pico-primary-background);
336
- --pico-accordion-border-color: var(--pico-muted-border-color);
337
- --pico-accordion-active-summary-color: var(--pico-primary-hover);
338
- --pico-accordion-close-summary-color: var(--pico-color);
339
- --pico-accordion-open-summary-color: var(--pico-muted-color);
340
- --pico-card-background-color: var(--pico-background-color);
341
- --pico-card-border-color: var(--pico-muted-border-color);
342
- --pico-card-box-shadow: var(--pico-box-shadow);
343
- --pico-card-sectioning-background-color: rgb(251, 251.5, 252.25);
344
- --pico-dropdown-background-color: #fff;
345
- --pico-dropdown-border-color: #eff1f4;
346
- --pico-dropdown-box-shadow: var(--pico-box-shadow);
347
- --pico-dropdown-color: var(--pico-color);
348
- --pico-dropdown-hover-background-color: #eff1f4;
349
- --pico-loading-spinner-opacity: 0.5;
350
- --pico-modal-overlay-background-color: rgba(232, 234, 237, 0.75);
351
- --pico-progress-background-color: #dfe3eb;
352
- --pico-progress-color: var(--pico-primary-background);
353
- --pico-tooltip-background-color: var(--pico-contrast-background);
354
- --pico-tooltip-color: var(--pico-contrast-inverse);
299
+ /* One stroke color for both schemes, at least 3:1 on light and dark form backgrounds */
355
300
  --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");
356
301
  --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");
357
302
  }
358
- [data-theme="light"]
359
- input:is(
360
- [type="submit"],
361
- [type="button"],
362
- [type="reset"],
363
- [type="checkbox"],
364
- [type="radio"],
365
- [type="file"]
366
- ),
367
- :scope:not([data-theme="dark"])
368
- input:is(
369
- [type="submit"],
370
- [type="button"],
371
- [type="reset"],
372
- [type="checkbox"],
373
- [type="radio"],
374
- [type="file"]
375
- ),
376
- :host(:not([data-theme="dark"]))
377
- input:is(
378
- [type="submit"],
379
- [type="button"],
380
- [type="reset"],
381
- [type="checkbox"],
382
- [type="radio"],
383
- [type="file"]
384
- ) {
303
+
304
+ input:is(
305
+ [type="submit"],
306
+ [type="button"],
307
+ [type="reset"],
308
+ [type="checkbox"],
309
+ [type="radio"],
310
+ [type="file"]
311
+ ) {
385
312
  --pico-form-element-focus-color: var(--pico-primary-focus);
386
313
  }
387
314
 
315
+ /* Dark scheme: switch color-scheme, plus filters that light-dark() can't pick */
388
316
  @media only screen and (prefers-color-scheme: dark) {
389
317
  :scope:not([data-theme]),
390
318
  :host(:not([data-theme])) {
391
319
  color-scheme: dark;
392
- --pico-background-color: rgb(19, 22.5, 30.5);
393
- --pico-color: #c2c7d0;
394
- --pico-text-selection-color: rgba(1, 170, 255, 0.1875);
395
- --pico-muted-color: #7b8495;
396
- --pico-muted-border-color: #202632;
397
- --pico-primary: #01aaff;
398
- --pico-primary-background: #0172ad;
399
- --pico-primary-border: var(--pico-primary-background);
400
- --pico-primary-underline: rgba(1, 170, 255, 0.5);
401
- --pico-primary-hover: #79c0ff;
402
- --pico-primary-hover-background: #017fc0;
403
- --pico-primary-hover-border: var(--pico-primary-hover-background);
404
- --pico-primary-hover-underline: var(--pico-primary-hover);
405
- --pico-primary-focus: rgba(1, 170, 255, 0.375);
406
- --pico-primary-inverse: #fff;
407
- --pico-secondary: #969eaf;
408
- --pico-secondary-background: #525f7a;
409
- --pico-secondary-border: var(--pico-secondary-background);
410
- --pico-secondary-underline: rgba(150, 158, 175, 0.5);
411
- --pico-secondary-hover: #b3b9c5;
412
- --pico-secondary-hover-background: #5d6b89;
413
- --pico-secondary-hover-border: var(--pico-secondary-hover-background);
414
- --pico-secondary-hover-underline: var(--pico-secondary-hover);
415
- --pico-secondary-focus: rgba(144, 158, 190, 0.25);
416
- --pico-secondary-inverse: #fff;
417
- --pico-contrast: #dfe3eb;
418
- --pico-contrast-background: #eff1f4;
419
- --pico-contrast-border: var(--pico-contrast-background);
420
- --pico-contrast-underline: rgba(223, 227, 235, 0.5);
421
- --pico-contrast-hover: #fff;
422
- --pico-contrast-hover-background: #fff;
423
- --pico-contrast-hover-border: var(--pico-contrast-hover-background);
424
- --pico-contrast-hover-underline: var(--pico-contrast-hover);
425
- --pico-contrast-focus: rgba(207, 213, 226, 0.25);
426
- --pico-contrast-inverse: #000;
427
- --pico-box-shadow: 0 0.5rem 2.5rem rgba(7, 8.5, 12, 0.2);
428
- --pico-h1-color: #f0f1f3;
429
- --pico-h2-color: #e0e3e7;
430
- --pico-h3-color: #c2c7d0;
431
- --pico-h4-color: #b3b9c5;
432
- --pico-h5-color: #a4acba;
433
- --pico-h6-color: #8891a4;
434
- --pico-mark-background-color: #014063;
435
- --pico-mark-color: #fff;
436
- --pico-ins-color: #62af9a;
437
- --pico-del-color: rgb(205.5, 126, 123);
438
- --pico-blockquote-border-color: var(--pico-muted-border-color);
439
- --pico-blockquote-footer-color: var(--pico-muted-color);
440
- --pico-button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
441
- --pico-button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
442
- --pico-table-border-color: var(--pico-muted-border-color);
443
- --pico-table-row-stripped-background-color: rgba(111, 120, 135, 0.0375);
444
- --pico-code-background-color: rgb(26, 30.5, 40.25);
445
- --pico-code-color: #8891a4;
446
- --pico-code-kbd-background-color: var(--pico-color);
447
- --pico-code-kbd-color: var(--pico-background-color);
448
- --pico-form-element-background-color: rgb(28, 33, 43.5);
449
- --pico-form-element-selected-background-color: #2a3140;
450
- --pico-form-element-border-color: #2a3140;
451
- --pico-form-element-color: #e0e3e7;
452
- --pico-form-element-placeholder-color: #8891a4;
453
- --pico-form-element-active-background-color: rgb(26, 30.5, 40.25);
454
- --pico-form-element-active-border-color: var(--pico-primary-border);
455
- --pico-form-element-focus-color: var(--pico-primary-border);
456
- --pico-form-element-disabled-opacity: 0.5;
457
- --pico-form-element-invalid-border-color: rgb(149.5, 74, 80);
458
- --pico-form-element-invalid-active-border-color: rgb(183.25, 63.5, 59);
459
- --pico-form-element-invalid-focus-color: var(--pico-form-element-invalid-active-border-color);
460
- --pico-form-element-valid-border-color: #2a7b6f;
461
- --pico-form-element-valid-active-border-color: rgb(22, 137, 105.5);
462
- --pico-form-element-valid-focus-color: var(--pico-form-element-valid-active-border-color);
463
- --pico-switch-background-color: #333c4e;
464
- --pico-switch-checked-background-color: var(--pico-primary-background);
465
- --pico-switch-color: #fff;
466
- --pico-switch-thumb-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
467
- --pico-range-border-color: #202632;
468
- --pico-range-active-border-color: #2a3140;
469
- --pico-range-thumb-border-color: var(--pico-background-color);
470
- --pico-range-thumb-color: var(--pico-secondary-background);
471
- --pico-range-thumb-active-color: var(--pico-primary-background);
472
- --pico-accordion-border-color: var(--pico-muted-border-color);
473
- --pico-accordion-active-summary-color: var(--pico-primary-hover);
474
- --pico-accordion-close-summary-color: var(--pico-color);
475
- --pico-accordion-open-summary-color: var(--pico-muted-color);
476
- --pico-card-background-color: #181c25;
477
- --pico-card-border-color: var(--pico-card-background-color);
478
- --pico-card-box-shadow: var(--pico-box-shadow);
479
- --pico-card-sectioning-background-color: rgb(26, 30.5, 40.25);
480
- --pico-dropdown-background-color: #181c25;
481
- --pico-dropdown-border-color: #202632;
482
- --pico-dropdown-box-shadow: var(--pico-box-shadow);
483
- --pico-dropdown-color: var(--pico-color);
484
- --pico-dropdown-hover-background-color: #202632;
485
- --pico-loading-spinner-opacity: 0.5;
486
- --pico-modal-overlay-background-color: rgba(7.5, 8.5, 10, 0.75);
487
- --pico-progress-background-color: #202632;
488
- --pico-progress-color: var(--pico-primary-background);
489
- --pico-tooltip-background-color: var(--pico-contrast-background);
490
- --pico-tooltip-color: var(--pico-contrast-inverse);
491
- --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(42, 123, 111)' 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");
492
- --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(149.5, 74, 80)' 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");
493
- }
494
- :scope:not([data-theme])
495
- input:is(
496
- [type="submit"],
497
- [type="button"],
498
- [type="reset"],
499
- [type="checkbox"],
500
- [type="radio"],
501
- [type="file"]
502
- ),
503
- :host(:not([data-theme]))
504
- input:is(
505
- [type="submit"],
506
- [type="button"],
507
- [type="reset"],
508
- [type="checkbox"],
509
- [type="radio"],
510
- [type="file"]
511
- ) {
512
- --pico-form-element-focus-color: var(--pico-primary-focus);
513
320
  }
514
321
  :scope:not([data-theme]) details summary[role="button"].contrast:not(.outline)::after,
515
- :host(:not([data-theme])) details summary[role="button"].contrast:not(.outline)::after {
516
- filter: brightness(0);
517
- }
322
+ :host(:not([data-theme])) details summary[role="button"].contrast:not(.outline)::after,
518
323
  :scope:not([data-theme])
519
324
  [aria-busy="true"]:not(input, select, textarea).contrast:is(
520
325
  button,
@@ -536,122 +341,8 @@ details summary[role="button"]:not(.outline)::after {
536
341
  }
537
342
  [data-theme="dark"] {
538
343
  color-scheme: dark;
539
- --pico-background-color: rgb(19, 22.5, 30.5);
540
- --pico-color: #c2c7d0;
541
- --pico-text-selection-color: rgba(1, 170, 255, 0.1875);
542
- --pico-muted-color: #7b8495;
543
- --pico-muted-border-color: #202632;
544
- --pico-primary: #01aaff;
545
- --pico-primary-background: #0172ad;
546
- --pico-primary-border: var(--pico-primary-background);
547
- --pico-primary-underline: rgba(1, 170, 255, 0.5);
548
- --pico-primary-hover: #79c0ff;
549
- --pico-primary-hover-background: #017fc0;
550
- --pico-primary-hover-border: var(--pico-primary-hover-background);
551
- --pico-primary-hover-underline: var(--pico-primary-hover);
552
- --pico-primary-focus: rgba(1, 170, 255, 0.375);
553
- --pico-primary-inverse: #fff;
554
- --pico-secondary: #969eaf;
555
- --pico-secondary-background: #525f7a;
556
- --pico-secondary-border: var(--pico-secondary-background);
557
- --pico-secondary-underline: rgba(150, 158, 175, 0.5);
558
- --pico-secondary-hover: #b3b9c5;
559
- --pico-secondary-hover-background: #5d6b89;
560
- --pico-secondary-hover-border: var(--pico-secondary-hover-background);
561
- --pico-secondary-hover-underline: var(--pico-secondary-hover);
562
- --pico-secondary-focus: rgba(144, 158, 190, 0.25);
563
- --pico-secondary-inverse: #fff;
564
- --pico-contrast: #dfe3eb;
565
- --pico-contrast-background: #eff1f4;
566
- --pico-contrast-border: var(--pico-contrast-background);
567
- --pico-contrast-underline: rgba(223, 227, 235, 0.5);
568
- --pico-contrast-hover: #fff;
569
- --pico-contrast-hover-background: #fff;
570
- --pico-contrast-hover-border: var(--pico-contrast-hover-background);
571
- --pico-contrast-hover-underline: var(--pico-contrast-hover);
572
- --pico-contrast-focus: rgba(207, 213, 226, 0.25);
573
- --pico-contrast-inverse: #000;
574
- --pico-box-shadow: 0 0.5rem 2.5rem rgba(7, 8.5, 12, 0.2);
575
- --pico-h1-color: #f0f1f3;
576
- --pico-h2-color: #e0e3e7;
577
- --pico-h3-color: #c2c7d0;
578
- --pico-h4-color: #b3b9c5;
579
- --pico-h5-color: #a4acba;
580
- --pico-h6-color: #8891a4;
581
- --pico-mark-background-color: #014063;
582
- --pico-mark-color: #fff;
583
- --pico-ins-color: #62af9a;
584
- --pico-del-color: rgb(205.5, 126, 123);
585
- --pico-blockquote-border-color: var(--pico-muted-border-color);
586
- --pico-blockquote-footer-color: var(--pico-muted-color);
587
- --pico-button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
588
- --pico-button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
589
- --pico-table-border-color: var(--pico-muted-border-color);
590
- --pico-table-row-stripped-background-color: rgba(111, 120, 135, 0.0375);
591
- --pico-code-background-color: rgb(26, 30.5, 40.25);
592
- --pico-code-color: #8891a4;
593
- --pico-code-kbd-background-color: var(--pico-color);
594
- --pico-code-kbd-color: var(--pico-background-color);
595
- --pico-form-element-background-color: rgb(28, 33, 43.5);
596
- --pico-form-element-selected-background-color: #2a3140;
597
- --pico-form-element-border-color: #2a3140;
598
- --pico-form-element-color: #e0e3e7;
599
- --pico-form-element-placeholder-color: #8891a4;
600
- --pico-form-element-active-background-color: rgb(26, 30.5, 40.25);
601
- --pico-form-element-active-border-color: var(--pico-primary-border);
602
- --pico-form-element-focus-color: var(--pico-primary-border);
603
- --pico-form-element-disabled-opacity: 0.5;
604
- --pico-form-element-invalid-border-color: rgb(149.5, 74, 80);
605
- --pico-form-element-invalid-active-border-color: rgb(183.25, 63.5, 59);
606
- --pico-form-element-invalid-focus-color: var(--pico-form-element-invalid-active-border-color);
607
- --pico-form-element-valid-border-color: #2a7b6f;
608
- --pico-form-element-valid-active-border-color: rgb(22, 137, 105.5);
609
- --pico-form-element-valid-focus-color: var(--pico-form-element-valid-active-border-color);
610
- --pico-switch-background-color: #333c4e;
611
- --pico-switch-checked-background-color: var(--pico-primary-background);
612
- --pico-switch-color: #fff;
613
- --pico-switch-thumb-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
614
- --pico-range-border-color: #202632;
615
- --pico-range-active-border-color: #2a3140;
616
- --pico-range-thumb-border-color: var(--pico-background-color);
617
- --pico-range-thumb-color: var(--pico-secondary-background);
618
- --pico-range-thumb-active-color: var(--pico-primary-background);
619
- --pico-accordion-border-color: var(--pico-muted-border-color);
620
- --pico-accordion-active-summary-color: var(--pico-primary-hover);
621
- --pico-accordion-close-summary-color: var(--pico-color);
622
- --pico-accordion-open-summary-color: var(--pico-muted-color);
623
- --pico-card-background-color: #181c25;
624
- --pico-card-border-color: var(--pico-card-background-color);
625
- --pico-card-box-shadow: var(--pico-box-shadow);
626
- --pico-card-sectioning-background-color: rgb(26, 30.5, 40.25);
627
- --pico-dropdown-background-color: #181c25;
628
- --pico-dropdown-border-color: #202632;
629
- --pico-dropdown-box-shadow: var(--pico-box-shadow);
630
- --pico-dropdown-color: var(--pico-color);
631
- --pico-dropdown-hover-background-color: #202632;
632
- --pico-loading-spinner-opacity: 0.5;
633
- --pico-modal-overlay-background-color: rgba(7.5, 8.5, 10, 0.75);
634
- --pico-progress-background-color: #202632;
635
- --pico-progress-color: var(--pico-primary-background);
636
- --pico-tooltip-background-color: var(--pico-contrast-background);
637
- --pico-tooltip-color: var(--pico-contrast-inverse);
638
- --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(42, 123, 111)' 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");
639
- --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(149.5, 74, 80)' 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");
640
- }
641
- [data-theme="dark"]
642
- input:is(
643
- [type="submit"],
644
- [type="button"],
645
- [type="reset"],
646
- [type="checkbox"],
647
- [type="radio"],
648
- [type="file"]
649
- ) {
650
- --pico-form-element-focus-color: var(--pico-primary-focus);
651
- }
652
- [data-theme="dark"] details summary[role="button"].contrast:not(.outline)::after {
653
- filter: brightness(0);
654
344
  }
345
+ [data-theme="dark"] details summary[role="button"].contrast:not(.outline)::after,
655
346
  [data-theme="dark"]
656
347
  [aria-busy="true"]:not(input, select, textarea).contrast:is(
657
348
  button,
@@ -1,6 +1,14 @@
1
1
  /**
2
2
  * Accordion (<details>)
3
3
  */
4
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
5
+ :host {
6
+ --pico-accordion-border-color: var(--pico-muted-border-color);
7
+ --pico-accordion-active-summary-color: var(--pico-primary-hover);
8
+ --pico-accordion-close-summary-color: var(--pico-color);
9
+ --pico-accordion-open-summary-color: var(--pico-muted-color);
10
+ }
11
+
4
12
  details {
5
13
  display: block;
6
14
  margin-bottom: var(--pico-spacing);
@@ -1,6 +1,20 @@
1
1
  /**
2
2
  * Card (<article>)
3
3
  */
4
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
5
+ :host {
6
+ --pico-card-background-color: light-dark(var(--pico-background-color), #181c25);
7
+ --pico-card-border-color: light-dark(
8
+ var(--pico-muted-border-color),
9
+ var(--pico-card-background-color)
10
+ );
11
+ --pico-card-box-shadow: var(--pico-box-shadow);
12
+ --pico-card-sectioning-background-color: light-dark(
13
+ rgb(251, 251.5, 252.25),
14
+ rgb(26, 30.5, 40.25)
15
+ );
16
+ }
17
+
4
18
  article {
5
19
  margin-bottom: var(--pico-block-spacing-vertical);
6
20
  padding: var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal);
@@ -1,6 +1,15 @@
1
1
  /**
2
2
  * Dropdown (details.dropdown)
3
3
  */
4
+ :where(:scope, [data-theme="light"], [data-theme="dark"]),
5
+ :host {
6
+ --pico-dropdown-background-color: light-dark(#fff, #181c25);
7
+ --pico-dropdown-border-color: light-dark(#eff1f4, #202632);
8
+ --pico-dropdown-box-shadow: var(--pico-box-shadow);
9
+ --pico-dropdown-color: var(--pico-color);
10
+ --pico-dropdown-hover-background-color: light-dark(#eff1f4, #202632);
11
+ }
12
+
4
13
  details.dropdown {
5
14
  position: relative;
6
15
  border-bottom: none;