hexo-theme-gnix 7.0.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +6 -2
  2. package/include/hexo/encrypt.js +42 -0
  3. package/include/hexo/feed.js +330 -0
  4. package/include/util/common.js +7 -16
  5. package/languages/en.yml +5 -2
  6. package/languages/zh-CN.yml +5 -2
  7. package/layout/archive.jsx +8 -204
  8. package/layout/comment/twikoo.jsx +2 -11
  9. package/layout/common/article.jsx +45 -32
  10. package/layout/common/article_cover.jsx +11 -1
  11. package/layout/common/article_media.jsx +2 -4
  12. package/layout/common/footer.jsx +10 -14
  13. package/layout/common/head.jsx +7 -15
  14. package/layout/common/navbar.jsx +3 -18
  15. package/layout/common/scripts.jsx +6 -5
  16. package/layout/common/theme_selector.jsx +5 -6
  17. package/layout/common/toc.jsx +8 -14
  18. package/layout/index.jsx +2 -4
  19. package/layout/misc/open_graph.jsx +4 -4
  20. package/layout/misc/paginator.jsx +10 -4
  21. package/layout/misc/structured_data.jsx +3 -4
  22. package/layout/plugin/busuanzi.jsx +1 -1
  23. package/layout/plugin/cookie_consent.jsx +40 -31
  24. package/layout/plugin/swup.jsx +2 -22
  25. package/layout/search/insight.jsx +16 -3
  26. package/package.json +12 -8
  27. package/scripts/hot-reload.js +92 -0
  28. package/scripts/index.js +2 -0
  29. package/source/css/archive.css +251 -0
  30. package/source/css/default.css +300 -309
  31. package/source/css/encrypt.css +55 -0
  32. package/source/css/responsive/desktop.css +0 -119
  33. package/source/css/responsive/mobile.css +2 -22
  34. package/source/css/responsive/touch.css +9 -103
  35. package/source/css/twikoo.css +265 -249
  36. package/source/img/og_image.webp +0 -0
  37. package/source/js/archive-breadcrumb.js +1 -5
  38. package/source/js/busuanzi.js +1 -12
  39. package/source/js/components/chat.js +239 -0
  40. package/source/js/components/image-carousel.js +410 -0
  41. package/source/js/components/text-image-section.js +180 -0
  42. package/source/js/components/theme-stacked.js +165 -246
  43. package/source/js/components/tree.js +437 -0
  44. package/source/js/decrypt.js +112 -0
  45. package/source/js/insight.js +75 -65
  46. package/source/js/main.js +48 -31
  47. package/source/js/mdit/mermaid.js +12 -4
  48. package/source/js/swup.bundle.js +1 -0
  49. package/source/js/theme-selector.js +94 -113
  50. package/source/img/og_image.png +0 -0
  51. package/source/js/host/swup/Swup.umd.min.js +0 -1
  52. package/source/js/host/swup/head-plugin.umd.min.js +0 -1
  53. package/source/js/host/swup/scripts-plugin.umd.min.js +0 -2
@@ -1,12 +1,20 @@
1
1
  @charset "UTF-8";
2
2
 
3
3
  :root {
4
- --font-serif: New York, PT Serif, Georgia, serif;
5
- --font-sans-serif: SF Pro SC, SF Pro Display, SF Pro Icons, PingFang SC, system-ui, sans-serif;
6
- --font-mono: "RecMonoCasual Nerd Font", "Maple Mono NF CN Local", "Maple Mono NF CN", "SF Mono", "SF Pro", Monaco, Consolas, monospace;
4
+ --subtext1: color-mix(in oklch, var(--text) 90%, var(--mantle));
5
+ --subtext0: color-mix(in oklch, var(--text) 80%, var(--mantle));
6
+ --surface0: color-mix(in oklch, var(--base) 80%, var(--text));
7
+ --surface1: color-mix(in oklch, var(--base) 78%, var(--text));
8
+ --surface2: color-mix(in oklch, var(--base) 67%, var(--text));
9
+ --overlay0: color-mix(in oklch, var(--base) 56%, var(--text));
10
+ --overlay1: color-mix(in oklch, var(--base) 45%, var(--text));
11
+ --overlay2: color-mix(in oklch, var(--base) 34%, var(--text));
12
+
13
+ --font-serif: New York, Georgia, Noto Serif CJK, STFangsong, STSong, Songti SC, serif;
14
+ --font-sans-serif: system-ui, sans-serif;
15
+ --font-mono: "SF Mono", "Maple Mono NF CN Local", "Maple Mono NF CN", Monaco, Consolas, monospace;
7
16
  --font-handwriting: "Bradley Hand", "homemade-apple", cursive;
8
17
  --radius: 12px;
9
- --spaceing: 0.25rem;
10
18
  }
11
19
 
12
20
  /* #region Color */
@@ -27,14 +35,6 @@
27
35
  --blue: #1e66f5;
28
36
  --lavender: #7287fd;
29
37
  --text: #4c4f69;
30
- --subtext1: #5c5f77;
31
- --subtext0: #6c6f85;
32
- --overlay2: #7c7f93;
33
- --overlay1: #8c8fa1;
34
- --overlay0: #9ca0b0;
35
- --surface2: #acb0be;
36
- --surface1: #bcc0cc;
37
- --surface0: #ccd0da;
38
38
  --base: #eff1f5;
39
39
  --mantle: #e6e9ef;
40
40
  --crust: #dce0e8;
@@ -57,14 +57,6 @@
57
57
  --blue: #9ccfd8;
58
58
  --lavender: #c4a7e7;
59
59
  --text: #e0def4;
60
- --subtext1: #908caa;
61
- --subtext0: #6e6a86;
62
- --overlay2: #57526e;
63
- --overlay1: #454158;
64
- --overlay0: #3c3b4d;
65
- --surface2: #302d41;
66
- --surface1: #26233a;
67
- --surface0: #1f1d2e;
68
60
  --base: #191726;
69
61
  --mantle: #161422;
70
62
  --crust: #11111b;
@@ -87,14 +79,6 @@
87
79
  --blue: #81a1c1;
88
80
  --lavender: #5e81ac;
89
81
  --text: #4c566a;
90
- --subtext1: #3b4252;
91
- --subtext0: #434c5e;
92
- --overlay2: #4c566a;
93
- --overlay1: #5a657a;
94
- --overlay0: #686e7e;
95
- --surface2: #76809f;
96
- --surface1: #7d8fa3;
97
- --surface0: #8fa3b0;
98
82
  --base: #eceff4;
99
83
  --mantle: #e5e9f0;
100
84
  --crust: #d8dee9;
@@ -117,14 +101,6 @@
117
101
  --blue: #89b4fa;
118
102
  --lavender: #b4befe;
119
103
  --text: #cdd6f4;
120
- --subtext1: #bac2de;
121
- --subtext0: #a6adc8;
122
- --overlay2: #9399b2;
123
- --overlay1: #7f849c;
124
- --overlay0: #6c7086;
125
- --surface2: #585b70;
126
- --surface1: #45475a;
127
- --surface0: #313244;
128
104
  --base: #1e1e2e;
129
105
  --mantle: #181825;
130
106
  --crust: #11111b;
@@ -147,14 +123,6 @@
147
123
  --blue: #7aa2f7;
148
124
  --lavender: #82aaff;
149
125
  --text: #c0caf5;
150
- --subtext1: #a9b1d6;
151
- --subtext0: #9aa5ce;
152
- --overlay2: #787c99;
153
- --overlay1: #565f89;
154
- --overlay0: #414868;
155
- --surface2: #414868;
156
- --surface1: #33467c;
157
- --surface0: #24283b;
158
126
  --base: #1a1b26;
159
127
  --mantle: #16161e;
160
128
  --crust: #101014;
@@ -177,14 +145,6 @@
177
145
  --blue: #5e81ac;
178
146
  --lavender: #81a1c1;
179
147
  --text: #eceff4;
180
- --subtext1: #e5e9f0;
181
- --subtext0: #d8dee9;
182
- --overlay2: #4c566a;
183
- --overlay1: #434c5e;
184
- --overlay0: #3b4252;
185
- --surface2: #434c5e;
186
- --surface1: #3b4252;
187
- --surface0: #3b4252;
188
148
  --base: #2e3440;
189
149
  --mantle: #292e39;
190
150
  --crust: #242933;
@@ -192,7 +152,14 @@
192
152
 
193
153
  body {
194
154
  background: var(--mantle);
195
- color: var(--text);
155
+ color: var(--subtext1);
156
+ min-height: 100%;
157
+ line-height: 1.7;
158
+ display: flex;
159
+ flex-direction: column;
160
+ /* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-autospace */
161
+ text-autospace: normal;
162
+ font-family: var(--font-sans-serif);
196
163
  }
197
164
 
198
165
  .article-licensing {
@@ -233,7 +200,11 @@ mark {
233
200
  }
234
201
 
235
202
  hr {
236
- background-color: var(--surface0);
203
+ border: none;
204
+ display: block;
205
+ margin: 1.5rem 0;
206
+ background: transparent;
207
+ border-top: 2px dotted var(--surface0);
237
208
  }
238
209
 
239
210
  .searchbox-result-item.active span {
@@ -281,6 +252,7 @@ hr {
281
252
 
282
253
  @font-face {
283
254
  font-family: homemade-apple;
255
+ font-display: swap;
284
256
  src:
285
257
  local("Homemade Apple"),
286
258
  local("HomemadeApple-Regular"),
@@ -300,7 +272,6 @@ h3,
300
272
  h4,
301
273
  h5,
302
274
  h6,
303
- hr,
304
275
  html,
305
276
  iframe,
306
277
  legend,
@@ -332,34 +303,14 @@ html {
332
303
  overflow-y: scroll;
333
304
  }
334
305
 
335
- body {
336
- min-height: 100%;
337
- line-height: 1.5;
338
- display: flex;
339
- flex-direction: column;
340
- /* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-autospace */
341
- text-autospace: normal;
342
- }
343
-
344
- .toc-text,
345
- .footer-grid,
346
- .widget {
347
- font-family: var(--font-sans-serif);
348
- }
349
-
350
306
  .card {
351
307
  max-width: 100%;
352
308
  position: relative;
353
309
  overflow: visible;
354
- border: 1px solid var(--surface0);
355
- }
356
- .card + .card {
357
- border-top: none;
358
310
  }
359
311
 
360
312
  .card-content {
361
- padding: 1.25rem;
362
- border-radius: 0;
313
+ padding: 1.25em 1.25rem 0 1.25rem;
363
314
  }
364
315
 
365
316
  /* #region Navbar */
@@ -371,7 +322,6 @@ body {
371
322
  left: 0;
372
323
  right: 0;
373
324
  z-index: 100;
374
- font-family: var(--font-sans-serif);
375
325
  border-bottom: 0.5px solid var(--surface0);
376
326
  }
377
327
 
@@ -397,7 +347,6 @@ body {
397
347
  color: var(--subtext1);
398
348
  align-items: center;
399
349
  display: flex;
400
- font-size: 1.1rem;
401
350
  padding: 0 0.5rem;
402
351
  position: relative;
403
352
  flex-grow: 0;
@@ -410,8 +359,6 @@ body {
410
359
  }
411
360
 
412
361
  .navbar-item:hover {
413
- scale: 1.1;
414
- transition: all 0.2s ease;
415
362
  color: var(--lavender);
416
363
  }
417
364
  }
@@ -420,55 +367,38 @@ body {
420
367
 
421
368
  /* #region Theme Selector */
422
369
 
423
- #theme-selector-modal {
424
- position: fixed;
425
- inset: 0;
426
- z-index: 100;
427
- display: flex;
428
- align-items: center;
429
- justify-content: center;
430
- visibility: hidden;
431
- pointer-events: none;
432
- backdrop-filter: blur(8px);
370
+ #theme-selector-popover:focus {
371
+ outline: none;
433
372
  }
434
373
 
435
374
  .theme-selector-list {
436
- background-color: hsl(from var(--mantle) h s l / 0.8);
437
- border-radius: var(--radius);
438
- border: 2px solid var(--mauve);
439
- width: 90%;
375
+ width: 90vw;
440
376
  max-width: 480px;
441
377
  display: flex;
442
378
  flex-direction: column;
443
- gap: 0.5rem;
444
379
  padding: 0.5rem;
445
- }
446
-
447
- #theme-selector-modal.is-active {
448
- visibility: visible;
449
- pointer-events: auto;
380
+ overflow: hidden;
450
381
  }
451
382
 
452
383
  .theme-option {
453
- display: flex;
454
- align-items: center;
455
- text-align: center;
456
- padding: 1rem 1.25rem;
457
- border-radius: 6px;
384
+ background-color: inherit;
385
+ border: none;
386
+ outline: none;
387
+ color: var(--text);
388
+ padding: 0.75rem 1.25rem;
458
389
  cursor: pointer;
459
- position: relative;
390
+ font-size: 2rem;
391
+ font-family: system-ui;
392
+ font-variation-settings:
393
+ "wght" 200,
394
+ "wdth" 400;
460
395
 
461
396
  &.is-focused,
462
397
  &:hover {
463
398
  color: var(--rosewater);
464
399
  }
465
-
466
- .theme-name {
467
- flex: 1;
468
- font-size: 1.5rem;
469
- word-spacing: 0.5rem;
470
- letter-spacing: 0.05rem;
471
- font-family: var(--font-serif);
400
+ &.is-active {
401
+ color: var(--blue);
472
402
  }
473
403
  }
474
404
 
@@ -480,12 +410,13 @@ body {
480
410
  .pagination-list {
481
411
  align-items: center;
482
412
  display: flex;
483
- justify-content: center;
484
413
  text-align: center;
414
+ font-family: var(--font-mono);
485
415
  }
486
416
 
487
417
  .pagination-link.is-current {
488
- color: var(--lavender);
418
+ color: var(--text);
419
+ font-weight: bold;
489
420
  }
490
421
 
491
422
  .pagination-ellipsis,
@@ -493,21 +424,22 @@ body {
493
424
  .pagination-next,
494
425
  .pagination-previous {
495
426
  user-select: none;
496
- height: 2.5em;
497
- border-radius: 10px;
498
- font-weight: bold;
499
- color: var(--text);
500
- margin: 0.25rem;
427
+ color: var(--subtext0);
501
428
  padding: 0 0.5em;
502
- justify-content: center;
503
- text-align: center;
504
- align-items: center;
505
429
  display: inline-flex;
506
- position: relative;
507
- vertical-align: top;
508
430
  min-width: 1.5em;
509
431
  }
510
432
 
433
+ .pagination-previous {
434
+ margin-right: auto;
435
+ margin-left: 0.5rem;
436
+ }
437
+
438
+ .pagination-next {
439
+ margin-left: auto;
440
+ margin-right: 0.5rem;
441
+ }
442
+
511
443
  .pagination-list {
512
444
  flex-wrap: wrap;
513
445
  }
@@ -522,41 +454,33 @@ body {
522
454
  }
523
455
 
524
456
  .tabs-tabs-header {
525
- display: flex;
526
- padding: 0 10px;
457
+ padding: 0 0.5rem;
458
+ white-space: nowrap;
459
+ overflow-x: auto;
460
+ overflow-y: hidden;
527
461
  }
528
462
 
529
463
  .tabs-tab-button {
530
- flex: 1;
531
- padding: 0.5em 0;
464
+ padding: 0.5em 1rem;
532
465
  border: none;
466
+ border-bottom: 2px solid transparent;
533
467
  background: 0 0;
534
468
  font-size: 1em;
535
- font-weight: bold;
536
469
  cursor: pointer;
537
470
  position: relative;
538
471
  transition: color 0.3s ease;
539
472
  outline: 0;
540
- font-family: var(--font-sans-serif);
541
- color: var(--text);
473
+ color: var(--subtext0);
474
+ flex: 0 0 auto;
475
+ white-space: nowrap;
542
476
 
543
477
  &:hover,
544
478
  &.active {
545
- color: var(--lavender);
479
+ color: var(--text);
480
+ border-color: var(--text);
546
481
  }
547
482
  }
548
483
 
549
- .tabs-tab-button.active::after {
550
- content: "";
551
- position: absolute;
552
- bottom: 0;
553
- left: 0;
554
- width: 100%;
555
- height: 2px;
556
- background-color: var(--lavender);
557
- animation: slideIn 0.3s ease;
558
- }
559
-
560
484
  .tabs-tabs-container {
561
485
  padding: 0.8em 0 10px 0;
562
486
  }
@@ -583,7 +507,8 @@ body {
583
507
  flex-grow: 1;
584
508
  margin: 0 auto;
585
509
  position: relative;
586
- max-width: 960px;
510
+ max-width: 50em;
511
+ counter-reset: h2-counter;
587
512
  }
588
513
 
589
514
  /* #region Footer */
@@ -592,6 +517,7 @@ body {
592
517
  user-select: none;
593
518
  padding: 3rem 1.5rem 6rem;
594
519
  position: relative;
520
+ border-top: 0.5px solid var(--surface0);
595
521
 
596
522
  iconify-icon {
597
523
  font-size: 1.2rem;
@@ -612,11 +538,10 @@ body {
612
538
  }
613
539
 
614
540
  .footer-title {
615
- font-weight: bolder;
616
- font-size: 1.1rem;
617
- margin-bottom: 0.25rem;
541
+ font-family: homemade-apple, var(--font-handwriting);
618
542
  }
619
543
 
544
+ .footer-title,
620
545
  .footer-heading {
621
546
  font-weight: bolder;
622
547
  font-size: 1.1rem;
@@ -659,10 +584,7 @@ body {
659
584
  .content {
660
585
  overflow: auto;
661
586
  word-wrap: break-word;
662
- font-family: var(--font-sans-serif);
663
587
  font-size: 1rem;
664
- line-height: 1.5;
665
- letter-spacing: -0.003em;
666
588
  color: var(--subtext1);
667
589
 
668
590
  ::selection {
@@ -673,32 +595,60 @@ body {
673
595
 
674
596
  a.header-anchor {
675
597
  color: var(--text);
598
+ font-family: var(--font-serif);
599
+ &::after {
600
+ margin-left: 0.4em;
601
+ opacity: 0;
602
+ color: var(--surface0);
603
+ transition: opacity 0.2s ease;
604
+ }
676
605
 
677
606
  &:hover::after {
678
- margin-left: 0.2em;
679
- color: var(--surface0);
607
+ opacity: 1;
680
608
  }
681
609
  }
682
610
 
611
+ sup.footnote-ref > a,
612
+ li.footnote-item,
613
+ a.footnote-backref,
614
+ a.header-anchor,
615
+ h2,
616
+ h3,
617
+ h4,
618
+ h5,
619
+ h6 {
620
+ scroll-margin-top: 5rem;
621
+ scroll-behavior: smooth;
622
+ text-decoration: none;
623
+ }
624
+
683
625
  h2 {
684
- font-size: 2.25em;
685
- font-weight: 700;
686
- line-height: 1.25;
687
- letter-spacing: -0.02em;
688
- margin: 1rem 0 1rem;
626
+ font-size: 1.5em;
627
+ margin: 1.5rem 0 1rem;
628
+ line-height: 1.3;
689
629
  border-bottom: 0.8px solid var(--surface0);
690
630
 
691
- > a.header-anchor:hover::after {
692
- content: "##";
631
+ > a.header-anchor {
632
+ counter-increment: h2-counter;
633
+ &::before {
634
+ content: counter(h2-counter, decimal-leading-zero) ".";
635
+ color: var(--flamingo);
636
+ font-family: var(--font-mono);
637
+ padding-right: 0.2em;
638
+ font-size: 0.75em;
639
+ font-variant-numeric: tabular-nums;
640
+ }
641
+
642
+ &:hover::after {
643
+ content: "##";
644
+ }
693
645
  }
694
646
  }
695
647
 
696
648
  h3 {
697
- font-size: 1.875em;
698
- font-weight: 700;
699
- line-height: 1.25;
700
- letter-spacing: -0.015em;
701
- margin: 1.2rem 0 1rem;
649
+ font-size: 1.45em;
650
+ margin: 1.4rem 0 1rem;
651
+ line-height: 1.35;
702
652
 
703
653
  > a.header-anchor:hover::after {
704
654
  content: "###";
@@ -706,11 +656,9 @@ body {
706
656
  }
707
657
 
708
658
  h4 {
709
- font-size: 1.5em;
710
- font-weight: 600;
711
- line-height: 1.25;
712
- letter-spacing: -0.01em;
713
- margin: 1.2rem 0 1rem;
659
+ font-size: 1.35em;
660
+ margin: 1.3rem 0 1rem;
661
+ line-height: 1.4;
714
662
 
715
663
  > a.header-anchor:hover::after {
716
664
  content: "####";
@@ -718,12 +666,9 @@ body {
718
666
  }
719
667
 
720
668
  h5 {
721
- font-size: 1.35em;
722
- font-weight: 600;
723
- line-height: 1.25;
724
- font-variant-caps: all-petite-caps;
725
- letter-spacing: -0.005em;
669
+ font-size: 1.25em;
726
670
  margin: 1.2rem 0 1rem;
671
+ line-height: 1.4;
727
672
 
728
673
  > a.header-anchor:hover::after {
729
674
  content: "#####";
@@ -732,10 +677,8 @@ body {
732
677
 
733
678
  h6 {
734
679
  font-size: 1.1em;
735
- font-weight: 600;
736
- line-height: 1.25;
737
- font-variant-caps: all-petite-caps;
738
680
  margin: 1.2rem 0 1rem;
681
+ line-height: 1.45;
739
682
 
740
683
  > a.header-anchor:hover::after {
741
684
  content: "######";
@@ -747,7 +690,8 @@ body {
747
690
  dl,
748
691
  pre,
749
692
  details {
750
- margin-bottom: 1rem;
693
+ margin-bottom: 1.5rem;
694
+ line-height: 1.7;
751
695
  }
752
696
 
753
697
  li {
@@ -760,19 +704,23 @@ body {
760
704
  }
761
705
 
762
706
  img,
707
+ iframe,
763
708
  video {
764
709
  display: block;
765
710
  max-width: 100%;
766
- margin: 0 auto;
711
+ margin: 0 auto 0.5rem auto;
767
712
 
768
713
  &:hover {
769
714
  cursor: pointer;
770
715
  }
771
716
  }
717
+ figure {
718
+ text-align: center;
719
+ }
772
720
 
773
- video,
774
- .pic {
775
- margin: 1em auto;
721
+ figcaption {
722
+ font-style: italic;
723
+ font-family: var(--font-serif);
776
724
  }
777
725
 
778
726
  button.physical-btn,
@@ -796,7 +744,7 @@ body {
796
744
  border-bottom-width 0.1s ease;
797
745
 
798
746
  &:active {
799
- top: 0px;
747
+ top: 0;
800
748
  }
801
749
  }
802
750
 
@@ -829,33 +777,7 @@ body {
829
777
  margin-bottom: 1rem;
830
778
  }
831
779
 
832
- iframe {
833
- overflow: auto;
834
- }
835
-
836
- figure {
837
- margin: 1em 2.5rem;
838
- text-align: center;
839
- }
840
-
841
- figure:not(:first-child) {
842
- margin-top: 1.5rem;
843
- }
844
-
845
- figure:not(:last-child) {
846
- margin-bottom: 1rem;
847
- }
848
-
849
- figure img {
850
- display: inline-block;
851
- }
852
-
853
- figure figcaption {
854
- font-style: italic;
855
- }
856
-
857
780
  pre {
858
- -webkit-overflow-scrolling: touch;
859
781
  overflow-x: auto;
860
782
  font-size: 0.85em;
861
783
  padding: 1rem;
@@ -888,51 +810,11 @@ body {
888
810
  }
889
811
 
890
812
  a {
891
- font-weight: 500;
892
813
  text-decoration: underline;
893
- text-underline-offset: 3px;
894
814
  text-decoration-color: var(--subtext1);
895
815
  color: var(--text);
896
816
  &:hover {
897
- color: var(--lavender);
898
- text-decoration: none;
899
- }
900
- }
901
-
902
- a[href*="apple"]::before,
903
- a[href*="github"]::before,
904
- a[href*="wikipedia"]::before,
905
- a[href*="youtube"]::before {
906
- font-size: 1.2em;
907
- font-family: var(--font-mono);
908
- text-decoration: none;
909
- display: inline-block;
910
- padding-right: 0.5em;
911
- }
912
-
913
- a[href*="github"]::before {
914
- content: " ";
915
- }
916
-
917
- a[href*="wikipedia"]::before {
918
- content: "󰖬 ";
919
- }
920
-
921
- a[href*="youtube"]::before {
922
- content: " ";
923
- }
924
-
925
- a[href*="apple"]::before {
926
- content: "";
927
- }
928
-
929
- a.header-anchor,
930
- .footnote-ref a,
931
- .footnotes-item a,
932
- a.footnote-backref {
933
- text-decoration: none;
934
- &:hover {
935
- color: inherit;
817
+ text-decoration-thickness: 2px;
936
818
  }
937
819
  }
938
820
  }
@@ -955,6 +837,9 @@ td,
955
837
  th {
956
838
  vertical-align: middle;
957
839
  padding: 0.75em 1em;
840
+ &:not([align]) {
841
+ text-align: left;
842
+ }
958
843
  }
959
844
 
960
845
  thead th {
@@ -963,11 +848,6 @@ thead th {
963
848
  padding: 1em;
964
849
  }
965
850
 
966
- td:not([align]),
967
- th:not([align]) {
968
- text-align: left;
969
- }
970
-
971
851
  tbody tr td {
972
852
  border-bottom: 1px solid var(--surface0);
973
853
  }
@@ -978,11 +858,10 @@ tbody tr:last-child td {
978
858
 
979
859
  blockquote {
980
860
  position: relative;
981
- padding: 1.5rem 2rem 1.5rem 3rem;
861
+ padding: 0.7rem 2.5rem;
982
862
  margin: 1.5rem 0;
983
863
  border-left: 2px solid var(--red);
984
- border-radius: 0 8px 8px 0;
985
- font-family: var(--font-serif);
864
+ font-family: Georgia, Kai, var(--font-serif);
986
865
 
987
866
  &:before {
988
867
  content: "”";
@@ -995,6 +874,14 @@ blockquote {
995
874
  opacity: 0.3;
996
875
  line-height: 1;
997
876
  }
877
+
878
+ cite {
879
+ display: block;
880
+ text-align: right;
881
+ margin-top: 0.5em;
882
+ color: var(--subtext0);
883
+ font-style: italic;
884
+ }
998
885
  }
999
886
 
1000
887
  ul.contains-task-list {
@@ -1045,23 +932,14 @@ input.task-list-item-checkbox {
1045
932
  .heimu {
1046
933
  color: var(--text);
1047
934
  background-color: var(--text);
1048
- }
1049
-
1050
- .heimu:hover {
1051
- color: var(--base);
935
+ &:hover {
936
+ color: var(--base);
937
+ }
1052
938
  }
1053
939
 
1054
940
  strong {
1055
941
  font-weight: bolder;
1056
942
  padding: 0 0.15em;
1057
- /* color: var(--maroon); */
1058
- }
1059
-
1060
- hr {
1061
- border: none;
1062
- display: block;
1063
- height: 0.1em;
1064
- margin: 1.5rem 0;
1065
943
  }
1066
944
 
1067
945
  a strong {
@@ -1079,10 +957,6 @@ small {
1079
957
 
1080
958
  /* #endregion Content */
1081
959
 
1082
- :target {
1083
- scroll-margin-top: 5rem;
1084
- }
1085
-
1086
960
  article,
1087
961
  aside,
1088
962
  figure,
@@ -1100,10 +974,11 @@ section {
1100
974
  /* #region Article Meta*/
1101
975
 
1102
976
  .article-title {
1103
- font-family: var(--font-sans-serif);
1104
- font-size: 2.25em;
977
+ font-size: 1.75em;
978
+ font-family: var(--font-serif);
1105
979
  line-height: 1.2;
1106
980
  margin-bottom: 0.3em;
981
+ text-wrap: balance;
1107
982
 
1108
983
  > a {
1109
984
  color: var(--text);
@@ -1114,8 +989,6 @@ section {
1114
989
  font-family: var(--font-mono);
1115
990
  overflow: auto;
1116
991
  padding-bottom: 0.5em;
1117
- margin-bottom: 1rem;
1118
- border-bottom: 1px dashed var(--surface0);
1119
992
  color: var(--subtext0);
1120
993
  display: flex;
1121
994
  align-items: center;
@@ -1132,24 +1005,52 @@ section {
1132
1005
  }
1133
1006
  }
1134
1007
 
1135
- .article-meta-info,
1136
- .article-tags-inline {
1008
+ .article-meta-info {
1137
1009
  display: flex;
1138
1010
  align-items: center;
1139
1011
  flex-wrap: wrap;
1140
1012
  gap: 0.2rem;
1141
1013
  }
1142
1014
 
1143
- .article-tags-inline {
1144
- /* Push to the right */
1145
- gap: 0.8rem;
1146
- margin-left: auto;
1147
- }
1148
-
1149
1015
  .meta-separator {
1150
1016
  color: var(--overlay0);
1151
1017
  }
1152
1018
 
1019
+ .article-footer {
1020
+ display: flex;
1021
+ justify-content: space-between;
1022
+ align-items: center;
1023
+ margin-top: 1rem;
1024
+ padding-bottom: 0.75rem;
1025
+ border-bottom: 1px dashed var(--surface0);
1026
+ font-family: var(--font-mono);
1027
+ font-size: 0.75rem;
1028
+ & + .content {
1029
+ margin-top: 1rem;
1030
+ }
1031
+ }
1032
+
1033
+ .article-excerpt {
1034
+ font-family: var(--font-serif);
1035
+ }
1036
+
1037
+ .article-tags {
1038
+ display: flex;
1039
+ align-items: center;
1040
+ flex-wrap: wrap;
1041
+ gap: 0.2rem;
1042
+ }
1043
+
1044
+ .article-read-more {
1045
+ color: var(--subtext0);
1046
+ text-decoration: none;
1047
+ white-space: nowrap;
1048
+
1049
+ &:hover {
1050
+ color: var(--blue);
1051
+ }
1052
+ }
1053
+
1153
1054
  /* #endregion Article Meta */
1154
1055
 
1155
1056
  /* #region Licensing */
@@ -1161,7 +1062,6 @@ section {
1161
1062
  padding: 1.25rem;
1162
1063
  z-index: 0;
1163
1064
  border-radius: 0 0 24px 24px;
1164
- box-shadow: none;
1165
1065
  overflow: hidden;
1166
1066
  justify-content: space-between;
1167
1067
  }
@@ -1189,7 +1089,7 @@ section {
1189
1089
  .level-item p {
1190
1090
  margin-right: 1.5rem;
1191
1091
  margin-bottom: 0;
1192
- font-size: 0.75rem;
1092
+ font-size: 0.7rem;
1193
1093
  }
1194
1094
 
1195
1095
  iconify-icon {
@@ -1206,26 +1106,6 @@ section {
1206
1106
 
1207
1107
  /* #region Search */
1208
1108
 
1209
- .searchbox {
1210
- position: fixed;
1211
- top: 0;
1212
- left: 0;
1213
- width: 100%;
1214
- height: 100%;
1215
- z-index: 100;
1216
- font-family: var(--font-mono);
1217
- line-height: 0;
1218
- opacity: 0;
1219
- visibility: hidden;
1220
- display: flex;
1221
-
1222
- &.show {
1223
- opacity: 1;
1224
- visibility: visible;
1225
- backdrop-filter: blur(5px);
1226
- }
1227
- }
1228
-
1229
1109
  input.searchbox-input {
1230
1110
  color: inherit;
1231
1111
  background-color: inherit;
@@ -1320,6 +1200,7 @@ input.searchbox-input {
1320
1200
  display: block;
1321
1201
  overflow: hidden;
1322
1202
  height: 380px;
1203
+ border-radius: var(--radius);
1323
1204
 
1324
1205
  img {
1325
1206
  display: block;
@@ -1341,3 +1222,113 @@ input.searchbox-input {
1341
1222
  z-index: 2;
1342
1223
  }
1343
1224
  }
1225
+
1226
+ /* #region TOC */
1227
+
1228
+ .toc-button {
1229
+ position: fixed;
1230
+ top: 7rem;
1231
+ left: 2rem;
1232
+ width: 3rem;
1233
+ height: 3rem;
1234
+ border-radius: 50%;
1235
+ background-color: transparent;
1236
+ border: none;
1237
+ cursor: pointer;
1238
+
1239
+ > span {
1240
+ background-color: hsl(from var(--text) h s l / 0.5);
1241
+ height: 2px;
1242
+ left: calc(50% - 8px);
1243
+ position: absolute;
1244
+ width: 1rem;
1245
+
1246
+ &:nth-child(1) {
1247
+ top: calc(50% - 6px);
1248
+ }
1249
+
1250
+ &:nth-child(2) {
1251
+ width: 0.75rem;
1252
+ top: calc(50% - 1px);
1253
+ }
1254
+
1255
+ &:nth-child(3) {
1256
+ top: calc(50% + 4px);
1257
+ }
1258
+ }
1259
+ }
1260
+
1261
+ :popover-open {
1262
+ position: fixed;
1263
+ width: 100%;
1264
+ height: 100%;
1265
+ inset: 0;
1266
+ margin: 0;
1267
+ border: none;
1268
+ background: hsl(from var(--mantle) h s l / 0.7);
1269
+ backdrop-filter: blur(10px);
1270
+ &.toc-body {
1271
+ display: flex;
1272
+ flex-direction: column;
1273
+ align-items: center;
1274
+ justify-content: center;
1275
+ font-weight: 600;
1276
+ }
1277
+
1278
+ &.searchbox {
1279
+ font-family: var(--font-mono);
1280
+ line-height: 0;
1281
+ display: flex;
1282
+ }
1283
+ &#theme-selector-popover {
1284
+ display: flex;
1285
+ align-items: center;
1286
+ justify-content: center;
1287
+ }
1288
+ }
1289
+
1290
+ #icarus-toc-container {
1291
+ .toc {
1292
+ max-height: 80vh;
1293
+ overflow-y: auto;
1294
+ padding: 0;
1295
+ list-style: none;
1296
+ }
1297
+
1298
+ .toc-item {
1299
+ margin-bottom: 0.5rem;
1300
+ }
1301
+
1302
+ .toc-child {
1303
+ padding-left: 1.5rem;
1304
+ list-style: none;
1305
+ }
1306
+
1307
+ .toc-text {
1308
+ display: inline;
1309
+ color: var(--subtext0);
1310
+
1311
+ .toc-level-2 & {
1312
+ color: var(--text);
1313
+ font-size: 1.8rem;
1314
+ }
1315
+ .toc-level-3 & {
1316
+ color: var(--subtext1);
1317
+ font-size: 1.5rem;
1318
+ }
1319
+ .toc-level-4 & {
1320
+ font-size: 1.25rem;
1321
+ }
1322
+ .toc-level-6 & {
1323
+ font-size: 0.875rem;
1324
+ }
1325
+ &:hover {
1326
+ color: var(--mauve);
1327
+ }
1328
+ }
1329
+ }
1330
+
1331
+ /* #endregion TOC */
1332
+ #comments {
1333
+ border-top: 1px dashed var(--surface0);
1334
+ }