@anyblades/blades 0.28.0-alpha.7 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/assets/blades.core.css +153 -117
- package/assets/blades.css +216 -168
- package/assets/blades.theme.css +52 -55
- package/assets/breakout.css +27 -32
- package/assets/float-label.core.css +22 -10
- package/assets/float-label.css +48 -28
- package/assets/float-label.theme.css +25 -17
- package/assets/link-icon.css +14 -18
- package/assets/pico.blades.css +1211 -0
- package/assets/responsive-table.css +8 -4
- package/blades.gemspec +1 -1
- package/package.json +6 -2
- package/src/link-icon.css +4 -4
- package/src/pico.blades.css +6 -0
- package/postcss.config.js +0 -5
package/assets/blades.css
CHANGED
|
@@ -25,13 +25,16 @@ Useful for tables of contents and long lists.
|
|
|
25
25
|
```css */
|
|
26
26
|
|
|
27
27
|
.columns {
|
|
28
|
+
-moz-columns: 30ch auto;
|
|
28
29
|
columns: 30ch auto; /* 2 cols max for 65ch container */
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Avoid breaking inside elements, such as nested lists */
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
.columns > * {
|
|
35
|
+
-moz-column-break-inside: avoid;
|
|
32
36
|
break-inside: avoid;
|
|
33
37
|
}
|
|
34
|
-
}
|
|
35
38
|
|
|
36
39
|
/*```
|
|
37
40
|
</details>
|
|
@@ -60,18 +63,29 @@ Useful for tables of contents and long lists.
|
|
|
60
63
|
/* Prepare the container for breakout elements */
|
|
61
64
|
padding-inline: 10%;
|
|
62
65
|
max-width: calc(10% + 65ch + 10%);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Breakout direct children only */
|
|
63
69
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
.breakout > *:is(
|
|
71
|
+
table,
|
|
72
|
+
pre,
|
|
73
|
+
figure, video, iframe, canvas,
|
|
74
|
+
img, picture,
|
|
75
|
+
|
|
76
|
+
.breakout-item,
|
|
77
|
+
.breakout-item-max
|
|
78
|
+
),
|
|
79
|
+
.breakout-all > *:is(
|
|
67
80
|
table,
|
|
68
81
|
pre,
|
|
69
82
|
figure, video, iframe, canvas,
|
|
70
83
|
img, picture,
|
|
71
|
-
|
|
84
|
+
|
|
72
85
|
.breakout-item,
|
|
73
86
|
.breakout-item-max
|
|
74
87
|
) {
|
|
88
|
+
width: -moz-fit-content;
|
|
75
89
|
width: fit-content;
|
|
76
90
|
min-width: 100%;
|
|
77
91
|
max-width: 125%;
|
|
@@ -79,33 +93,31 @@ Useful for tables of contents and long lists.
|
|
|
79
93
|
transform: translateX(-50%);
|
|
80
94
|
}
|
|
81
95
|
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
/* Respect img/picture min-width */
|
|
97
|
+
|
|
98
|
+
.breakout > *:is(img, picture), .breakout-all > *:is(img, picture) {
|
|
84
99
|
min-width: auto;
|
|
85
100
|
}
|
|
86
101
|
|
|
87
|
-
|
|
88
|
-
|
|
102
|
+
/* Max out the width of the element */
|
|
103
|
+
|
|
104
|
+
.breakout > *.breakout-item-max, .breakout-all > *.breakout-item-max {
|
|
89
105
|
width: 125% !important; /* !important is for cases like figure.breakout-item-max @TODO */
|
|
90
106
|
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
107
|
|
|
94
|
-
.breakout-all >
|
|
95
|
-
&:is(h2, h3, h4, h5, h6, hr):not([class]) {
|
|
108
|
+
.breakout-all > *:is(h2, h3, h4, h5, h6, hr):not([class]) {
|
|
96
109
|
position: relative;
|
|
110
|
+
}
|
|
97
111
|
|
|
98
|
-
|
|
112
|
+
.breakout-all > *:is(h2, h3, h4, h5, h6, hr):not([class])::before {
|
|
99
113
|
content: "";
|
|
100
114
|
display: block;
|
|
101
115
|
position: absolute;
|
|
102
116
|
background: gray;
|
|
103
117
|
opacity: 12.5%;
|
|
104
118
|
}
|
|
105
|
-
}
|
|
106
119
|
|
|
107
|
-
|
|
108
|
-
&::before {
|
|
120
|
+
.breakout-all > *:is(h2, h3, h4, h5, h6):not([class])::before {
|
|
109
121
|
width: 10em;
|
|
110
122
|
right: 100%;
|
|
111
123
|
margin-right: 0.8ch;
|
|
@@ -115,26 +127,24 @@ Useful for tables of contents and long lists.
|
|
|
115
127
|
background: linear-gradient(to left, gray, transparent);
|
|
116
128
|
}
|
|
117
129
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
130
|
+
/* @TODO: add to tricks-wiki why `*` works here, but `&` fails */
|
|
131
|
+
|
|
132
|
+
.breakout-all > *:is(h2, h3, h4, h5, h6):not([class]):where(hr + *)::before {
|
|
121
133
|
display: none !important;
|
|
122
134
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
&:is(hr) {
|
|
135
|
+
|
|
136
|
+
.breakout-all > *:is(hr) {
|
|
126
137
|
height: 0.5rem;
|
|
127
138
|
border: none;
|
|
128
139
|
overflow: visible;
|
|
140
|
+
}
|
|
129
141
|
|
|
130
|
-
|
|
142
|
+
.breakout-all > *:is(hr)::before {
|
|
131
143
|
width: 100vw;
|
|
132
144
|
left: 50%;
|
|
133
145
|
height: 100%;
|
|
134
146
|
transform: translateX(-50%);
|
|
135
147
|
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
148
|
|
|
139
149
|
/*```
|
|
140
150
|
<!--section:summary-->
|
|
@@ -201,8 +211,9 @@ h4,
|
|
|
201
211
|
h5,
|
|
202
212
|
h6 {
|
|
203
213
|
position: relative;
|
|
214
|
+
}
|
|
204
215
|
|
|
205
|
-
|
|
216
|
+
h1 a[href^="#"], h2 a[href^="#"], h3 a[href^="#"], h4 a[href^="#"], h5 a[href^="#"], h6 a[href^="#"] {
|
|
206
217
|
position: absolute;
|
|
207
218
|
right: 100%;
|
|
208
219
|
top: 50%;
|
|
@@ -212,14 +223,12 @@ h6 {
|
|
|
212
223
|
text-decoration: none;
|
|
213
224
|
visibility: hidden;
|
|
214
225
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
a[href^="#"] {
|
|
226
|
+
|
|
227
|
+
@media /* to avoid double-tap on touch devices */ (hover: hover) {
|
|
228
|
+
h1:hover a[href^="#"], h2:hover a[href^="#"], h3:hover a[href^="#"], h4:hover a[href^="#"], h5:hover a[href^="#"], h6:hover a[href^="#"] {
|
|
218
229
|
visibility: visible;
|
|
219
230
|
}
|
|
220
|
-
}
|
|
221
231
|
}
|
|
222
|
-
}
|
|
223
232
|
|
|
224
233
|
/*```
|
|
225
234
|
</details>
|
|
@@ -246,22 +255,21 @@ Customize markers using inline `style="--list-marker:..."` on `<ul>/<ol>` or eve
|
|
|
246
255
|
<details>How it works:
|
|
247
256
|
```css */
|
|
248
257
|
|
|
249
|
-
ul,
|
|
250
|
-
ol {
|
|
251
|
-
&[style*="--list-marker:"] {
|
|
258
|
+
ul[style*="--list-marker:"], ol[style*="--list-marker:"] {
|
|
252
259
|
list-style-type: var(--list-marker);
|
|
260
|
+
}
|
|
253
261
|
|
|
254
|
-
|
|
262
|
+
ul[style*="--list-marker:"] > li, ol[style*="--list-marker:"] > li {
|
|
255
263
|
list-style-type: inherit;
|
|
256
264
|
}
|
|
257
|
-
|
|
258
|
-
|
|
265
|
+
|
|
266
|
+
ul li[style*="--list-marker:"], ol li[style*="--list-marker:"] {
|
|
259
267
|
list-style-type: var(--list-marker);
|
|
260
268
|
}
|
|
261
|
-
|
|
269
|
+
|
|
270
|
+
ul li[data-marker]::marker, ol li[data-marker]::marker {
|
|
262
271
|
content: attr(data-marker) " "; /* ⚠️ Chrome and Firefox only */
|
|
263
272
|
}
|
|
264
|
-
}
|
|
265
273
|
|
|
266
274
|
/*```
|
|
267
275
|
</details>
|
|
@@ -284,18 +292,18 @@ ol {
|
|
|
284
292
|
<details>How it works:
|
|
285
293
|
```css */
|
|
286
294
|
|
|
287
|
-
ul,
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
.unlist-all
|
|
295
|
+
ul.unlist,
|
|
296
|
+
ul.unlist-all,
|
|
297
|
+
.unlist-all ul,
|
|
298
|
+
ol.unlist,
|
|
299
|
+
ol.unlist-all,
|
|
300
|
+
.unlist-all ol {
|
|
292
301
|
padding-inline-start: 0;
|
|
302
|
+
}
|
|
293
303
|
|
|
294
|
-
|
|
304
|
+
ul.unlist > li, ul.unlist-all > li, .unlist-all ul > li, ol.unlist > li, ol.unlist-all > li, .unlist-all ol > li {
|
|
295
305
|
list-style: none;
|
|
296
306
|
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
307
|
|
|
300
308
|
/*```
|
|
301
309
|
</details>
|
|
@@ -305,43 +313,42 @@ ol {
|
|
|
305
313
|
<!--section:code-->
|
|
306
314
|
```css */
|
|
307
315
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
316
|
+
/* Use inline flex only if link contains an icon */
|
|
317
|
+
|
|
318
|
+
a:has(> i) {
|
|
311
319
|
display: inline-flex;
|
|
312
320
|
gap: 0.375ch; /* =3/8 */
|
|
313
321
|
overflow-y: clip; /* to work in pair with text-underline-offset in Safari */
|
|
314
322
|
}
|
|
315
|
-
|
|
323
|
+
|
|
324
|
+
a > i {
|
|
316
325
|
font-style: normal;
|
|
317
326
|
float: left; /* ✅ Chrome ❌ Safari */
|
|
318
327
|
text-underline-offset: -2em; /* ❌ Chrome ✅ Safari - to clip it with overflow-y */
|
|
328
|
+
}
|
|
319
329
|
|
|
320
|
-
|
|
321
|
-
|
|
330
|
+
/* Favicons */
|
|
331
|
+
|
|
332
|
+
a > i > img {
|
|
322
333
|
height: 1.25em;
|
|
323
334
|
margin-block-start: calc(-0.25em / 2);
|
|
324
335
|
max-width: none; /* to keep ratio safe */
|
|
325
336
|
display: inline-block; /* for Tailwind CSS Typography */
|
|
326
337
|
}
|
|
327
338
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
&[class*=" fa-"] {
|
|
339
|
+
a > i[class^="fa-"],
|
|
340
|
+
a > i[class*=" fa-"] {
|
|
331
341
|
line-height: inherit;
|
|
332
342
|
--fa-width: auto;
|
|
333
343
|
}
|
|
334
|
-
|
|
344
|
+
|
|
345
|
+
/* Font Awesome */
|
|
346
|
+
|
|
347
|
+
a > i.fa-lg {
|
|
335
348
|
line-height: normal;
|
|
336
349
|
}
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
350
|
|
|
340
351
|
/*```
|
|
341
|
-
How we made it: https://codepen.io/editor/anydigital/pen/019d2b94-5616-75dc-a23e-e111869d5237
|
|
342
|
-
|
|
343
|
-
**PRO** example of automatic favicons for `11ty`: https://blades.ninja/build-awesome-11ty/processors/#auto-link-favicons
|
|
344
|
-
|
|
345
352
|
<!--section:summary-->
|
|
346
353
|
|
|
347
354
|
Use *Bl*ades `<i>`-helper to wrap emojis, favicons, or simply drop Font Awesome icons inside links.
|
|
@@ -364,6 +371,10 @@ Or even for:
|
|
|
364
371
|
<a href="#" style="margin: 0 0 0 1rem"><i>🥷</i> very-very-very-very-very-<br>long-multiline-links</a>
|
|
365
372
|
</article>
|
|
366
373
|
|
|
374
|
+
How we made it: https://codepen.io/editor/anydigital/pen/019d2b94-5616-75dc-a23e-e111869d5237
|
|
375
|
+
|
|
376
|
+
**PRO** example of automatic favicons for `11ty`: https://blades.ninja/build-awesome-11ty/processors/#auto-link-favicons
|
|
377
|
+
|
|
367
378
|
<!--section--> */
|
|
368
379
|
|
|
369
380
|
/* Extends https://github.com/picocss/pico/blob/main/scss/content/_table.scss
|
|
@@ -389,21 +400,20 @@ Living examples of big tables with `<hr>`-expanders: <!--A-Z-->
|
|
|
389
400
|
<details>How it works:
|
|
390
401
|
```css */
|
|
391
402
|
|
|
392
|
-
th {
|
|
393
|
-
hr {
|
|
403
|
+
th hr {
|
|
394
404
|
width: 12ch; /* min ~65/12 = ~5 cols */
|
|
395
405
|
height: 0;
|
|
396
406
|
margin: 0;
|
|
397
407
|
visibility: hidden;
|
|
408
|
+
}
|
|
398
409
|
|
|
399
|
-
|
|
410
|
+
th hr.lg {
|
|
400
411
|
width: 18ch;
|
|
401
412
|
}
|
|
402
|
-
|
|
413
|
+
|
|
414
|
+
th hr.x2 {
|
|
403
415
|
width: 24ch;
|
|
404
416
|
}
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
417
|
|
|
408
418
|
/*```
|
|
409
419
|
</details>
|
|
@@ -425,12 +435,10 @@ Living example: https://bladeswitch.com/#minimal-dependencies table
|
|
|
425
435
|
|
|
426
436
|
<!--section--> */
|
|
427
437
|
|
|
428
|
-
table.borderless
|
|
429
|
-
|
|
430
|
-
td {
|
|
438
|
+
table.borderless th,
|
|
439
|
+
table.borderless td {
|
|
431
440
|
border: none;
|
|
432
441
|
}
|
|
433
|
-
}
|
|
434
442
|
|
|
435
443
|
/*
|
|
436
444
|
<!--section:code-->
|
|
@@ -444,6 +452,7 @@ table.responsive,
|
|
|
444
452
|
transform: translateX(-50%);
|
|
445
453
|
|
|
446
454
|
/* Let them full-bleed */
|
|
455
|
+
width: -moz-max-content;
|
|
447
456
|
width: max-content;
|
|
448
457
|
min-width: auto;
|
|
449
458
|
max-width: 100vw;
|
|
@@ -453,12 +462,16 @@ table.responsive,
|
|
|
453
462
|
display: block;
|
|
454
463
|
overflow-x: auto;
|
|
455
464
|
-webkit-overflow-scrolling: touch; /* Smooth scroll for iOS */
|
|
465
|
+
}
|
|
456
466
|
|
|
457
|
-
|
|
458
|
-
td
|
|
467
|
+
table.responsive th,
|
|
468
|
+
table.responsive td,
|
|
469
|
+
.breakout > table:not(.does-not-exist) th,
|
|
470
|
+
.breakout > table:not(.does-not-exist) td,
|
|
471
|
+
.breakout-all > table:not(.does-not-exist) th,
|
|
472
|
+
.breakout-all > table:not(.does-not-exist) td {
|
|
459
473
|
padding-inline-start: 0;
|
|
460
474
|
}
|
|
461
|
-
}
|
|
462
475
|
|
|
463
476
|
/*```
|
|
464
477
|
`table:not(.does-not-exist)` trick (inspired by postcss) is used here to increase specificity against selectors like `&:is(table, .table)`
|
|
@@ -507,44 +520,43 @@ The `<pre><code>` blocks are Prism-compatible and support captions via `data-cap
|
|
|
507
520
|
pre {
|
|
508
521
|
padding: 1rem 1.5rem;
|
|
509
522
|
padding-inline-end: 2rem;
|
|
523
|
+
}
|
|
510
524
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
525
|
+
@media (max-width: 767px) {
|
|
526
|
+
|
|
527
|
+
pre {
|
|
528
|
+
border-radius: 0
|
|
514
529
|
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* Code block caption via data-attr (to display filename, etc.) */
|
|
515
533
|
|
|
516
|
-
code {
|
|
517
|
-
/* Code block caption via data-attr (to display filename, etc.) */
|
|
518
|
-
&[data-caption] {
|
|
519
|
-
&::before {
|
|
534
|
+
code[data-caption]::before {
|
|
520
535
|
content: attr(data-caption);
|
|
521
536
|
display: block;
|
|
522
537
|
margin-bottom: 1rem;
|
|
523
538
|
opacity: 50%;
|
|
524
539
|
font-style: italic;
|
|
525
540
|
}
|
|
526
|
-
}
|
|
527
541
|
|
|
528
|
-
|
|
542
|
+
code:where(pre > *) {
|
|
529
543
|
padding: 0;
|
|
530
544
|
}
|
|
531
|
-
}
|
|
532
545
|
|
|
533
546
|
/* Extends https://github.com/PrismJS/prism/blob/master/plugins/treeview/prism-treeview.css */
|
|
534
547
|
|
|
535
|
-
.token.treeview-part {
|
|
536
|
-
.entry-line {
|
|
548
|
+
.token.treeview-part .entry-line {
|
|
537
549
|
width: 2.5em !important;
|
|
538
550
|
opacity: 25%;
|
|
539
551
|
}
|
|
540
|
-
|
|
552
|
+
|
|
553
|
+
.token.treeview-part .entry-name:last-child {
|
|
541
554
|
opacity: 50%;
|
|
555
|
+
}
|
|
542
556
|
|
|
543
|
-
|
|
557
|
+
.token.treeview-part .entry-name:last-child::before {
|
|
544
558
|
display: none !important;
|
|
545
559
|
}
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
560
|
|
|
549
561
|
/*```
|
|
550
562
|
</details>
|
|
@@ -564,33 +576,53 @@ label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea
|
|
|
564
576
|
.has-float-label {
|
|
565
577
|
display: block;
|
|
566
578
|
position: relative;
|
|
567
|
-
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/*
|
|
568
582
|
```
|
|
569
583
|
Then, we define the default/fallback state (when the float label should be minimized):
|
|
570
584
|
```css */
|
|
571
|
-
|
|
572
|
-
|
|
585
|
+
|
|
586
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) > span,
|
|
587
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) label,
|
|
588
|
+
.has-float-label > span,
|
|
589
|
+
.has-float-label label {
|
|
573
590
|
position: absolute;
|
|
574
591
|
left: 0;
|
|
575
592
|
top: 0;
|
|
576
593
|
cursor: text;
|
|
577
594
|
font-size: 75%;
|
|
578
595
|
}
|
|
579
|
-
|
|
596
|
+
|
|
597
|
+
/*
|
|
580
598
|
```
|
|
581
599
|
Finally, we detect if placeholder is shown, but not in focus. That means we can safely hide it, and enlarge the float label instead:
|
|
582
600
|
```css */
|
|
583
|
-
|
|
601
|
+
|
|
602
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) *:placeholder-shown:not(:focus)::-moz-placeholder, .has-float-label *:placeholder-shown:not(:focus)::-moz-placeholder {
|
|
603
|
+
opacity: 0;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) *:-moz-placeholder:not(:focus)::placeholder, .has-float-label *:-moz-placeholder:not(:focus)::placeholder {
|
|
607
|
+
opacity: 0;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) *:placeholder-shown:not(:focus)::placeholder, .has-float-label *:placeholder-shown:not(:focus)::placeholder {
|
|
584
611
|
opacity: 0;
|
|
585
612
|
}
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
613
|
+
|
|
614
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:-moz-placeholder:not(:focus)) > span, label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:-moz-placeholder:not(:focus)) label, .has-float-label:has(*:-moz-placeholder:not(:focus)) > span, .has-float-label:has(*:-moz-placeholder:not(:focus)) label {
|
|
615
|
+
font-size: inherit;
|
|
616
|
+
opacity: 50%;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:placeholder-shown:not(:focus)) > span,
|
|
620
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:placeholder-shown:not(:focus)) label,
|
|
621
|
+
.has-float-label:has(*:placeholder-shown:not(:focus)) > span,
|
|
622
|
+
.has-float-label:has(*:placeholder-shown:not(:focus)) label {
|
|
589
623
|
font-size: inherit;
|
|
590
624
|
opacity: 50%;
|
|
591
625
|
}
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
626
|
|
|
595
627
|
/*
|
|
596
628
|
```
|
|
@@ -622,16 +654,22 @@ Historically, this was not possible: the float label had to be placed after the
|
|
|
622
654
|
}
|
|
623
655
|
|
|
624
656
|
.dark-auto {
|
|
625
|
-
/* Dark color scheme (Auto) */
|
|
626
|
-
@media (prefers-color-scheme: dark) {
|
|
627
|
-
filter: var(--blades-dark-filter);
|
|
628
|
-
}
|
|
629
657
|
/* Dark color scheme (Forced) */
|
|
630
|
-
|
|
631
|
-
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/* Dark color scheme (Auto) */
|
|
661
|
+
|
|
662
|
+
@media (prefers-color-scheme: dark) {
|
|
663
|
+
|
|
664
|
+
.dark-auto {
|
|
665
|
+
filter: var(--blades-dark-filter)
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.dark-auto[data-theme="dark"],
|
|
670
|
+
.dark-auto:where([data-theme="dark"] *) {
|
|
632
671
|
filter: var(--blades-dark-filter);
|
|
633
672
|
}
|
|
634
|
-
}
|
|
635
673
|
|
|
636
674
|
/*```
|
|
637
675
|
</details>
|
|
@@ -649,11 +687,11 @@ Historically, this was not possible: the float label had to be placed after the
|
|
|
649
687
|
|
|
650
688
|
.faded {
|
|
651
689
|
opacity: 50%;
|
|
690
|
+
}
|
|
652
691
|
|
|
653
|
-
|
|
692
|
+
.faded:hover {
|
|
654
693
|
opacity: 87.5%;
|
|
655
694
|
}
|
|
656
|
-
}
|
|
657
695
|
|
|
658
696
|
/*```
|
|
659
697
|
</details>
|
|
@@ -661,47 +699,60 @@ Historically, this was not possible: the float label had to be placed after the
|
|
|
661
699
|
|
|
662
700
|
/* Fix the scrollbar color when inverted by https://tailwindcss.com/docs/filter-invert */
|
|
663
701
|
|
|
664
|
-
.invert {
|
|
665
|
-
::-webkit-scrollbar {
|
|
702
|
+
.invert ::-webkit-scrollbar {
|
|
666
703
|
filter: invert(1) !important;
|
|
667
704
|
}
|
|
668
|
-
}
|
|
669
705
|
|
|
670
706
|
/*
|
|
671
707
|
<!--section:code-->
|
|
672
708
|
```css */
|
|
673
709
|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
label
|
|
710
|
+
/* Default/fallback state */
|
|
711
|
+
|
|
712
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) > span,
|
|
713
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) label,
|
|
714
|
+
.has-float-label > span,
|
|
715
|
+
.has-float-label label {
|
|
679
716
|
padding-inline-start: calc(1rem + 1px); /* match Pico's padding + border */
|
|
680
717
|
padding-block-start: 0.25rem;
|
|
681
718
|
opacity: 75%;
|
|
682
719
|
transition: all 0.25s;
|
|
683
720
|
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
select
|
|
721
|
+
|
|
722
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) input,
|
|
723
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) textarea,
|
|
724
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) select,
|
|
725
|
+
.has-float-label input,
|
|
726
|
+
.has-float-label textarea,
|
|
727
|
+
.has-float-label select {
|
|
687
728
|
margin-block-start: 0; /* reset Pico */
|
|
688
729
|
padding-inline-start: 1rem; /* match Pico */
|
|
689
730
|
padding-block: 1.125rem 0.375rem; /* match Pico's total: 2 x 0.75rem = 1.5rem */
|
|
731
|
+
}
|
|
690
732
|
|
|
691
|
-
|
|
733
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) input::-moz-placeholder, label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) textarea::-moz-placeholder, label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) select::-moz-placeholder, .has-float-label input::-moz-placeholder, .has-float-label textarea::-moz-placeholder, .has-float-label select::-moz-placeholder {
|
|
734
|
+
opacity: 100%;
|
|
735
|
+
-moz-transition: all 0.25s;
|
|
736
|
+
transition: all 0.25s;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) input::placeholder, label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) textarea::placeholder, label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) select::placeholder, .has-float-label input::placeholder, .has-float-label textarea::placeholder, .has-float-label select::placeholder {
|
|
692
740
|
opacity: 100%;
|
|
693
741
|
transition: all 0.25s;
|
|
694
742
|
}
|
|
695
|
-
}
|
|
696
743
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
744
|
+
/* Enlarged state */
|
|
745
|
+
|
|
746
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:-moz-placeholder:not(:focus)) > span, label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:-moz-placeholder:not(:focus)) label, .has-float-label:has(*:-moz-placeholder:not(:focus)) > span, .has-float-label:has(*:-moz-placeholder:not(:focus)) label {
|
|
747
|
+
padding-block: 0.75rem; /* match Pico */
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:placeholder-shown:not(:focus)) > span,
|
|
751
|
+
label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select):has(*:placeholder-shown:not(:focus)) label,
|
|
752
|
+
.has-float-label:has(*:placeholder-shown:not(:focus)) > span,
|
|
753
|
+
.has-float-label:has(*:placeholder-shown:not(:focus)) label {
|
|
701
754
|
padding-block: 0.75rem; /* match Pico */
|
|
702
755
|
}
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
756
|
|
|
706
757
|
html {
|
|
707
758
|
/* Prevent horizontal overflow and scrolling, modern way. */
|
|
@@ -719,31 +770,34 @@ body {
|
|
|
719
770
|
/* 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. */
|
|
720
771
|
display: flex;
|
|
721
772
|
flex-direction: column;
|
|
722
|
-
> main {
|
|
723
|
-
flex-grow: 1;
|
|
724
|
-
}
|
|
725
773
|
|
|
726
774
|
/* Evaluates the last ~4 lines of text blocks to prevent a single word from sitting on the final line. */
|
|
727
|
-
text-wrap: pretty;
|
|
728
775
|
|
|
729
776
|
/* Enable global hyphenation */
|
|
730
|
-
hyphens: auto;
|
|
731
777
|
/* ... except for links and tables which are better (safer) without hyphenation */
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
body > main {
|
|
781
|
+
flex-grow: 1;
|
|
735
782
|
}
|
|
783
|
+
|
|
784
|
+
body {
|
|
785
|
+
text-wrap: pretty;
|
|
786
|
+
hyphens: auto;
|
|
736
787
|
}
|
|
737
788
|
|
|
738
|
-
a
|
|
739
|
-
|
|
789
|
+
body a,
|
|
790
|
+
body table {
|
|
791
|
+
hyphens: none;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
a:not([href^="#"]) {
|
|
740
795
|
text-decoration-thickness: 1px;
|
|
796
|
+
}
|
|
741
797
|
|
|
742
|
-
|
|
798
|
+
a:not([href^="#"]):hover {
|
|
743
799
|
text-decoration-thickness: 2px;
|
|
744
800
|
}
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
801
|
|
|
748
802
|
h1 {
|
|
749
803
|
font-size: 2.5em; /* for pico.css & tw-typography */
|
|
@@ -754,39 +808,37 @@ hr {
|
|
|
754
808
|
margin-block: 2em; /* for pico.css & tw-typography */
|
|
755
809
|
}
|
|
756
810
|
|
|
757
|
-
ul {
|
|
758
|
-
ul {
|
|
811
|
+
ul ul {
|
|
759
812
|
font-size: 87.5%;
|
|
760
813
|
}
|
|
761
|
-
}
|
|
762
814
|
|
|
763
|
-
pre {
|
|
764
|
-
small {
|
|
815
|
+
pre small {
|
|
765
816
|
opacity: 75%;
|
|
766
817
|
font-weight: lighter;
|
|
767
818
|
}
|
|
768
|
-
}
|
|
769
819
|
|
|
770
|
-
table {
|
|
771
|
-
th {
|
|
820
|
+
table th {
|
|
772
821
|
vertical-align: bottom;
|
|
773
822
|
font-weight: bold;
|
|
774
823
|
}
|
|
775
|
-
|
|
824
|
+
|
|
825
|
+
table td {
|
|
776
826
|
vertical-align: top;
|
|
777
827
|
}
|
|
778
|
-
|
|
828
|
+
|
|
829
|
+
table pre {
|
|
779
830
|
margin-bottom: 0.25rem;
|
|
780
831
|
}
|
|
781
|
-
}
|
|
782
832
|
|
|
783
833
|
[data-jump-to="top"] {
|
|
784
834
|
opacity: 25%;
|
|
785
|
-
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
[data-jump-to="top"]:hover {
|
|
786
838
|
opacity: 75%;
|
|
787
839
|
}
|
|
788
840
|
|
|
789
|
-
|
|
841
|
+
[data-jump-to="top"] > i {
|
|
790
842
|
display: inline-block;
|
|
791
843
|
padding: 0.25rem 0.375rem;
|
|
792
844
|
margin: 0.5rem;
|
|
@@ -794,21 +846,17 @@ table {
|
|
|
794
846
|
color: black;
|
|
795
847
|
border-color: black;
|
|
796
848
|
}
|
|
797
|
-
}
|
|
798
849
|
|
|
799
|
-
.breakout,
|
|
800
|
-
.breakout
|
|
801
|
-
> img,
|
|
802
|
-
> figure {
|
|
850
|
+
.breakout > img,
|
|
851
|
+
.breakout > figure,
|
|
852
|
+
.breakout-all > img,
|
|
853
|
+
.breakout-all > figure {
|
|
803
854
|
margin-bottom: 1rem;
|
|
804
855
|
}
|
|
805
|
-
}
|
|
806
856
|
|
|
807
|
-
.faded {
|
|
808
|
-
a {
|
|
857
|
+
.faded a {
|
|
809
858
|
text-decoration-style: dotted;
|
|
810
859
|
}
|
|
811
|
-
}
|
|
812
860
|
|
|
813
861
|
/*```
|
|
814
862
|
<!--section--> */
|