@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/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
- /* Avoid breaking inside elements, such as nested lists */
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
- /* Breakout direct children only */
65
- & > * {
66
- &:is(
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
- /* Custom utility classes for other tags that need to be broken out */
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
- /* Respect img/picture min-width */
83
- &:is(img, picture) {
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
- /* Max out the width of the element */
88
- &.breakout-item-max {
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
- &::before {
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
- &:is(h2, h3, h4, h5, h6):not([class]) {
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
- /* @TODO: add to tricks-wiki why `*` works here, but `&` fails */
119
- &:where(hr + *) {
120
- &::before {
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
- &::before {
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
- a[href^="#"] {
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
- @media /* to avoid double-tap on touch devices */ (hover: hover) {
216
- &:hover {
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
- > li {
262
+ ul[style*="--list-marker:"] > li, ol[style*="--list-marker:"] > li {
255
263
  list-style-type: inherit;
256
264
  }
257
- }
258
- li[style*="--list-marker:"] {
265
+
266
+ ul li[style*="--list-marker:"], ol li[style*="--list-marker:"] {
259
267
  list-style-type: var(--list-marker);
260
268
  }
261
- li[data-marker]::marker {
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
- ol {
289
- &.unlist,
290
- &.unlist-all,
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
- > li {
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
- a {
309
- /* Use inline flex only if link contains an icon */
310
- &:has(> i) {
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
- > i {
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
- /* Favicons */
321
- > img {
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
- /* Font Awesome */
329
- &[class^="fa-"],
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
- &.fa-lg {
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
- &.lg {
410
+ th hr.lg {
400
411
  width: 18ch;
401
412
  }
402
- &.x2 {
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
- th,
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
- th,
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
- @media (max-width: 767px) {
512
- border-radius: 0;
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
- &:where(pre > *) {
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
- .entry-name:last-child {
552
+
553
+ .token.treeview-part .entry-name:last-child {
541
554
  opacity: 50%;
555
+ }
542
556
 
543
- &::before {
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
- > span,
572
- label {
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
- *:placeholder-shown:not(:focus)::placeholder {
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
- &:has(*:placeholder-shown:not(:focus)) {
587
- > span,
588
- label {
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
- &[data-theme="dark"],
631
- &:where([data-theme="dark"] *) {
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
- &:hover {
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
- label:has(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select),
675
- .has-float-label {
676
- /* Default/fallback state */
677
- > span,
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
- input,
685
- textarea,
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
- &::placeholder {
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
- /* Enlarged state */
698
- &:has(*:placeholder-shown:not(:focus)) {
699
- > span,
700
- label {
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
- a,
733
- table {
734
- hyphens: none;
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
- &:not([href^="#"]) {
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
- &:hover {
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
- td {
824
+
825
+ table td {
776
826
  vertical-align: top;
777
827
  }
778
- pre {
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
- &:hover {
835
+ }
836
+
837
+ [data-jump-to="top"]:hover {
786
838
  opacity: 75%;
787
839
  }
788
840
 
789
- > i {
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-all {
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--> */