hexo-theme-gnix 9.0.0 → 10.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 (66) hide show
  1. package/README.md +4 -2
  2. package/include/hexo/feed.js +5 -5
  3. package/include/hexo/filter.js +25 -1
  4. package/include/hexo/generator/archive.js +116 -0
  5. package/include/hexo/generator/home.js +64 -0
  6. package/include/hexo/generator/index.js +82 -0
  7. package/include/hexo/generator/md_generator.js +87 -0
  8. package/include/hexo/generator/page.js +55 -0
  9. package/include/hexo/generator/tag.js +84 -0
  10. package/include/hexo/helper.js +38 -0
  11. package/include/hexo/i18n.js +183 -0
  12. package/include/util/article_font.js +132 -0
  13. package/include/util/i18n.js +280 -0
  14. package/include/util/theme.js +84 -0
  15. package/languages/en.yml +28 -0
  16. package/languages/zh-CN.yml +28 -0
  17. package/layout/archive.jsx +131 -127
  18. package/layout/common/article.jsx +283 -16
  19. package/layout/common/article_info.jsx +339 -0
  20. package/layout/common/article_media.jsx +11 -4
  21. package/layout/common/comment.jsx +15 -7
  22. package/layout/common/footer.jsx +6 -5
  23. package/layout/common/head.jsx +121 -32
  24. package/layout/common/navbar.jsx +195 -65
  25. package/layout/common/theme_selector.jsx +16 -14
  26. package/layout/layout.jsx +43 -5
  27. package/layout/misc/open_graph.jsx +162 -66
  28. package/layout/misc/paginator.jsx +2 -8
  29. package/layout/plugin/cookie_consent.jsx +252 -53
  30. package/layout/plugin/swup.jsx +1 -1
  31. package/layout/search/insight.jsx +1 -1
  32. package/layout/tag.jsx +3 -2
  33. package/layout/tags.jsx +81 -73
  34. package/package.json +5 -5
  35. package/scripts/index.js +1 -0
  36. package/source/css/archive.css +225 -180
  37. package/source/css/default.css +1162 -98
  38. package/source/css/responsive.css +426 -0
  39. package/source/css/shiki/shiki.css +12 -2081
  40. package/source/css/tags.css +183 -0
  41. package/source/css/twikoo.css +1049 -1045
  42. package/source/img/favicon.svg +1 -6
  43. package/source/img/og_image.webp +0 -0
  44. package/source/js/article-font-utils.js +99 -0
  45. package/source/js/busuanzi.js +91 -24
  46. package/source/js/components/chat.js +169 -50
  47. package/source/js/components/image-carousel.js +152 -108
  48. package/source/js/components/sidenote.js +210 -0
  49. package/source/js/components/text-image-section.js +78 -90
  50. package/source/js/components/theme-stacked.js +65 -33
  51. package/source/js/components/tree.js +30 -16
  52. package/source/js/decrypt.js +7 -2
  53. package/source/js/main.js +428 -5
  54. package/source/js/swup.js +39 -0
  55. package/source/js/theme-selector.js +26 -16
  56. package/include/hexo/generator.js +0 -53
  57. package/layout/misc/article_licensing.jsx +0 -99
  58. package/source/css/responsive/desktop.css +0 -36
  59. package/source/css/responsive/mobile.css +0 -29
  60. package/source/css/responsive/tablet.css +0 -43
  61. package/source/css/responsive/touch.css +0 -155
  62. package/source/img/logo.svg +0 -9
  63. package/source/js/archive-breadcrumb.js +0 -132
  64. package/source/js/host/cookieconsent/3.1.1/build/cookieconsent.min.css +0 -6
  65. package/source/js/host/cookieconsent/3.1.1/build/cookieconsent.min.js +0 -1
  66. package/source/js/swup.bundle.js +0 -1
@@ -1,22 +1,92 @@
1
1
  @charset "UTF-8";
2
2
 
3
3
  :root {
4
- --subtext1: color-mix(in oklch, var(--text) 90%, var(--mantle));
5
- --subtext0: color-mix(in oklch, var(--text) 80%, var(--mantle));
4
+ /* color */
5
+ --subtext1: color-mix(in oklch, var(--text) 90%, var(--base));
6
+ --subtext0: color-mix(in oklch, var(--text) 80%, var(--base));
6
7
  --surface0: color-mix(in oklch, var(--base) 80%, var(--text));
7
8
  --surface1: color-mix(in oklch, var(--base) 78%, var(--text));
8
9
  --surface2: color-mix(in oklch, var(--base) 67%, var(--text));
9
10
  --overlay0: color-mix(in oklch, var(--base) 56%, var(--text));
10
11
  --overlay1: color-mix(in oklch, var(--base) 45%, var(--text));
11
12
  --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;
13
+ /* font */
14
+ --font-serif: Gentium, ChillKai, Baskerville, New York, Georgia, Noto Serif CJK, STFangsong, STSong, Songti SC, serif;
15
+ --font-sans-serif: Avenir, system-ui, sans-serif;
15
16
  --font-mono: "SF Mono", "Maple Mono NF CN Local", "Maple Mono NF CN", Monaco, Consolas, monospace;
16
- --font-handwriting: "Bradley Hand", "homemade-apple", cursive;
17
+ --font-handwriting: "Bradley Hand", "homemade-apple", XingKai SC, cursive;
18
+ --article-font-size: 1rem;
19
+ --article-font-family: var(--font-serif);
20
+ --article-line-height: 1.7;
21
+ --article-font-weight: 400;
22
+ --article-bold-font-weight: 700;
23
+ /* misc */
17
24
  --radius: 12px;
18
25
  }
19
26
 
27
+ :root[data-article-font-size="small"] {
28
+ --article-font-size: 0.875rem;
29
+ }
30
+
31
+ :root[data-article-font-size="medium-small"] {
32
+ --article-font-size: 0.9375rem;
33
+ }
34
+
35
+ :root[data-article-font-size="medium"] {
36
+ --article-font-size: 1rem;
37
+ }
38
+
39
+ :root[data-article-font-size="medium-large"] {
40
+ --article-font-size: 1.0625rem;
41
+ }
42
+
43
+ :root[data-article-font-size="large"] {
44
+ --article-font-size: 1.125rem;
45
+ }
46
+
47
+ :root[data-article-font-family="serif"] {
48
+ --article-font-family: var(--font-serif);
49
+ }
50
+
51
+ :root[data-article-font-family="sans-serif"] {
52
+ --article-font-family: var(--font-sans-serif);
53
+ }
54
+
55
+ :root[data-article-font-family="mono"] {
56
+ --article-font-family: var(--font-mono);
57
+ }
58
+
59
+ :root[data-article-font-family="handwriting"] {
60
+ --article-font-family: var(--font-handwriting);
61
+ }
62
+
63
+ :root[data-article-line-height="compact"] {
64
+ --article-line-height: 1.55;
65
+ }
66
+
67
+ :root[data-article-line-height="normal"] {
68
+ --article-line-height: 1.7;
69
+ }
70
+
71
+ :root[data-article-line-height="relaxed"] {
72
+ --article-line-height: 1.85;
73
+ }
74
+
75
+ :root[data-article-font-weight="light"] {
76
+ --article-font-weight: 300;
77
+ --article-bold-font-weight: 700;
78
+ }
79
+
80
+ :root[data-article-font-weight="regular"] {
81
+ --article-font-weight: 400;
82
+ --article-bold-font-weight: 700;
83
+ }
84
+
85
+ :root[data-article-font-weight="medium"] {
86
+ --article-font-weight: 500;
87
+ --article-bold-font-weight: 700;
88
+ }
89
+
20
90
  /* #region Color */
21
91
  :where([data-theme="latte"]) {
22
92
  color-scheme: light;
@@ -84,6 +154,28 @@
84
154
  --crust: #d8dee9;
85
155
  }
86
156
 
157
+ :where([data-theme="song_ci"]) {
158
+ color-scheme: light;
159
+ --rosewater: #d8a48f;
160
+ --flamingo: #c87363;
161
+ --pink: #c04851;
162
+ --mauve: #7f5a83;
163
+ --red: #b13a2e;
164
+ --maroon: #9a3f3f;
165
+ --peach: #d68a3a;
166
+ --yellow: #c99a2e;
167
+ --green: #5f8f6f;
168
+ --teal: #2f7d73;
169
+ --sky: #73a6a1;
170
+ --sapphire: #2d6f8f;
171
+ --blue: #2f5597;
172
+ --lavender: #6f6a9f;
173
+ --text: #0f4c20;
174
+ --base: #f4efe3;
175
+ --mantle: #f1efea;
176
+ --crust: #c4d1b5;
177
+ }
178
+
87
179
  :where([data-theme="mocha"]) {
88
180
  color-scheme: dark;
89
181
  --rosewater: #f5e0dc;
@@ -162,15 +254,9 @@ body {
162
254
  font-family: var(--font-sans-serif);
163
255
  }
164
256
 
165
- .article-licensing {
166
- color: var(--subtext1);
167
- border-top: 0.1px dashed var(--surface0);
168
- }
169
-
170
257
  .navbar-main,
171
258
  .navbar-menu {
172
259
  user-select: none;
173
- background: var(--mantle);
174
260
  }
175
261
 
176
262
  .task-list-item-checkbox {
@@ -219,6 +305,133 @@ hr {
219
305
 
220
306
  /* #region Font */
221
307
 
308
+ @font-face {
309
+ font-family: "Gentium";
310
+ src: url("https://fontsapi.zeoseven.com/2105/bold.woff2") format("woff2");
311
+ font-style: normal;
312
+ font-weight: 700;
313
+ font-display: swap;
314
+ }
315
+ @font-face {
316
+ font-family: "Gentium";
317
+ src: url("https://fontsapi.zeoseven.com/2105/bold-italic.woff2") format("woff2");
318
+ font-style: italic;
319
+ font-weight: 700;
320
+ font-display: swap;
321
+ }
322
+ @font-face {
323
+ font-family: "Gentium";
324
+ src: url("https://fontsapi.zeoseven.com/2105/book.woff2") format("woff2");
325
+ font-style: normal;
326
+ font-weight: 450;
327
+ font-display: swap;
328
+ }
329
+ @font-face {
330
+ font-family: "Gentium";
331
+ src: url("https://fontsapi.zeoseven.com/2105/book-bold.woff2") format("woff2");
332
+ font-style: normal;
333
+ font-weight: 450;
334
+ font-display: swap;
335
+ }
336
+ @font-face {
337
+ font-family: "Gentium";
338
+ src: url("https://fontsapi.zeoseven.com/2105/book-bold-italic.woff2") format("woff2");
339
+ font-style: italic;
340
+ font-weight: 450;
341
+ font-display: swap;
342
+ }
343
+ @font-face {
344
+ font-family: "Gentium";
345
+ src: url("https://fontsapi.zeoseven.com/2105/book-italic.woff2") format("woff2");
346
+ font-style: italic;
347
+ font-weight: 450;
348
+ font-display: swap;
349
+ }
350
+ @font-face {
351
+ font-family: "Gentium";
352
+ src: url("https://fontsapi.zeoseven.com/2105/book-medium.woff2") format("woff2");
353
+ font-style: normal;
354
+ font-weight: 500;
355
+ font-display: swap;
356
+ }
357
+ @font-face {
358
+ font-family: "Gentium";
359
+ src: url("https://fontsapi.zeoseven.com/2105/book-medium-italic.woff2") format("woff2");
360
+ font-style: italic;
361
+ font-weight: 500;
362
+ font-display: swap;
363
+ }
364
+ @font-face {
365
+ font-family: "Gentium";
366
+ src: url("https://fontsapi.zeoseven.com/2105/book-semi-bold.woff2") format("woff2");
367
+ font-style: normal;
368
+ font-weight: 600;
369
+ font-display: swap;
370
+ }
371
+ @font-face {
372
+ font-family: "Gentium";
373
+ src: url("https://fontsapi.zeoseven.com/2105/book-semi-bold-italic.woff2") format("woff2");
374
+ font-style: italic;
375
+ font-weight: 600;
376
+ font-display: swap;
377
+ }
378
+ @font-face {
379
+ font-family: "Gentium";
380
+ src: url("https://fontsapi.zeoseven.com/2105/extra-bold.woff2") format("woff2");
381
+ font-style: normal;
382
+ font-weight: 800;
383
+ font-display: swap;
384
+ }
385
+ @font-face {
386
+ font-family: "Gentium";
387
+ src: url("https://fontsapi.zeoseven.com/2105/extra-bold-italic.woff2") format("woff2");
388
+ font-style: italic;
389
+ font-weight: 800;
390
+ font-display: swap;
391
+ }
392
+ @font-face {
393
+ font-family: "Gentium";
394
+ src: url("https://fontsapi.zeoseven.com/2105/italic.woff2") format("woff2");
395
+ font-style: italic;
396
+ font-weight: 400;
397
+ font-display: swap;
398
+ }
399
+ @font-face {
400
+ font-family: "Gentium";
401
+ src: url("https://fontsapi.zeoseven.com/2105/medium.woff2") format("woff2");
402
+ font-style: normal;
403
+ font-weight: 500;
404
+ font-display: swap;
405
+ }
406
+ @font-face {
407
+ font-family: "Gentium";
408
+ src: url("https://fontsapi.zeoseven.com/2105/medium-italic.woff2") format("woff2");
409
+ font-style: italic;
410
+ font-weight: 500;
411
+ font-display: swap;
412
+ }
413
+ @font-face {
414
+ font-family: "Gentium";
415
+ src: url("https://fontsapi.zeoseven.com/2105/main.woff2") format("woff2");
416
+ font-style: normal;
417
+ font-weight: 400;
418
+ font-display: swap;
419
+ }
420
+ @font-face {
421
+ font-family: "Gentium";
422
+ src: url("https://fontsapi.zeoseven.com/2105/semi-bold-italic.woff2") format("woff2");
423
+ font-style: italic;
424
+ font-weight: 600;
425
+ font-display: swap;
426
+ }
427
+ @font-face {
428
+ font-family: "Gentium";
429
+ src: url("https://fontsapi.zeoseven.com/2105/semi-bold.ttf.woff2") format("woff2");
430
+ font-style: normal;
431
+ font-weight: 600;
432
+ font-display: swap;
433
+ }
434
+
222
435
  @font-face {
223
436
  font-family: "Maple Mono NF CN Local";
224
437
  font-weight: 100 900;
@@ -301,6 +514,7 @@ html {
301
514
  min-width: 300px;
302
515
  overflow-x: hidden;
303
516
  overflow-y: scroll;
517
+ /* scroll-behavior: smooth; */
304
518
  }
305
519
 
306
520
  .card {
@@ -322,9 +536,18 @@ html {
322
536
  left: 0;
323
537
  right: 0;
324
538
  z-index: 100;
539
+ background: var(--mantle);
325
540
  border-bottom: 0.5px solid var(--surface0);
326
541
  }
327
542
 
543
+ @media screen and (min-width: 1024px) {
544
+ .navbar {
545
+ -webkit-backdrop-filter: blur(18px) saturate(1.35);
546
+ backdrop-filter: blur(18px) saturate(1.35);
547
+ background: hsl(from var(--mantle) h s l / 0.75);
548
+ }
549
+ }
550
+
328
551
  .navbar-container {
329
552
  flex-grow: 1;
330
553
  margin: 0 auto;
@@ -344,13 +567,32 @@ html {
344
567
  }
345
568
 
346
569
  .navbar-item {
347
- color: var(--subtext1);
570
+ color: var(--subtext0);
348
571
  align-items: center;
349
572
  display: flex;
350
573
  padding: 0 0.5rem;
351
574
  position: relative;
352
575
  flex-grow: 0;
353
576
  flex-shrink: 0;
577
+ letter-spacing: 0.05em;
578
+ transition: color 0.18s ease;
579
+ }
580
+
581
+ .navbar-start .navbar-item.is-active {
582
+ color: var(--text);
583
+ font-weight: 500;
584
+ }
585
+
586
+ .navbar-start .navbar-item.is-active::after {
587
+ content: "";
588
+ position: absolute;
589
+ left: 50%;
590
+ bottom: 0.875rem;
591
+ width: 1.45em;
592
+ height: 1px;
593
+ background: currentColor;
594
+ opacity: 0.36;
595
+ transform: translateX(-50%);
354
596
  }
355
597
 
356
598
  .navbar-end {
@@ -387,11 +629,10 @@ html {
387
629
  color: var(--text);
388
630
  padding: 0.75rem 1.25rem;
389
631
  cursor: pointer;
390
- font-size: 2rem;
391
- font-family: system-ui;
392
- font-variation-settings:
393
- "wght" 200,
394
- "wdth" 400;
632
+ font-size: clamp(1.35rem, 2vw, 2rem);
633
+ letter-spacing: clamp(0.1em, 0.3vw, 0.3em);
634
+ font-family: "Bradley Hand", var(--font-serif);
635
+ font-style: italic;
395
636
 
396
637
  &.is-focused,
397
638
  &:hover {
@@ -411,7 +652,8 @@ html {
411
652
  align-items: center;
412
653
  display: flex;
413
654
  text-align: center;
414
- font-family: var(--font-mono);
655
+ font-family: var(--font-serif);
656
+ font-style: italic;
415
657
  }
416
658
 
417
659
  .pagination-link.is-current {
@@ -425,7 +667,7 @@ html {
425
667
  .pagination-previous {
426
668
  user-select: none;
427
669
  color: var(--subtext0);
428
- padding: 0 0.5em;
670
+ padding: 0 1rem;
429
671
  display: inline-flex;
430
672
  min-width: 1.5em;
431
673
  }
@@ -539,11 +781,15 @@ html {
539
781
 
540
782
  .footer-title {
541
783
  font-family: homemade-apple, var(--font-handwriting);
784
+ font-weight: bolder;
785
+ font-size: 1.1rem;
786
+ margin-bottom: 0.25rem;
542
787
  }
543
788
 
544
- .footer-title,
545
789
  .footer-heading {
546
790
  font-weight: bolder;
791
+ font-family: var(--font-serif);
792
+ font-style: italic;
547
793
  font-size: 1.1rem;
548
794
  margin-bottom: 0.25rem;
549
795
  }
@@ -566,11 +812,6 @@ html {
566
812
  align-items: center;
567
813
  gap: 0.4rem;
568
814
  color: var(--subtext0);
569
- text-decoration: none;
570
-
571
- &:hover {
572
- text-decoration: underline;
573
- }
574
815
  }
575
816
 
576
817
  /* #endregion Footer */
@@ -584,7 +825,6 @@ html {
584
825
  .content {
585
826
  overflow: auto;
586
827
  word-wrap: break-word;
587
- font-size: 1rem;
588
828
  color: var(--subtext1);
589
829
 
590
830
  ::selection {
@@ -595,7 +835,8 @@ html {
595
835
 
596
836
  a.header-anchor {
597
837
  color: var(--text);
598
- font-family: var(--font-serif);
838
+ font-family: var(--article-font-family);
839
+ text-decoration: none;
599
840
  &::after {
600
841
  margin-left: 0.4em;
601
842
  opacity: 0;
@@ -610,15 +851,16 @@ html {
610
851
 
611
852
  sup.footnote-ref > a,
612
853
  li.footnote-item,
613
- a.footnote-backref,
614
- a.header-anchor,
615
854
  h2,
616
855
  h3,
617
856
  h4,
618
857
  h5,
619
858
  h6 {
620
859
  scroll-margin-top: 5rem;
621
- scroll-behavior: smooth;
860
+ }
861
+
862
+ .footnote-ref > a,
863
+ .footnote-backref {
622
864
  text-decoration: none;
623
865
  }
624
866
 
@@ -691,7 +933,7 @@ html {
691
933
  pre,
692
934
  details {
693
935
  margin-bottom: 1.5rem;
694
- line-height: 1.7;
936
+ line-height: var(--article-line-height);
695
937
  }
696
938
 
697
939
  li {
@@ -777,6 +1019,66 @@ html {
777
1019
  margin-bottom: 1rem;
778
1020
  }
779
1021
 
1022
+ .ratex {
1023
+ max-width: 100%;
1024
+ line-height: 0;
1025
+ color: var(--text);
1026
+
1027
+ svg {
1028
+ display: block;
1029
+ flex: 0 0 auto;
1030
+ fill: currentColor;
1031
+
1032
+ [fill] {
1033
+ fill: currentColor !important;
1034
+ }
1035
+
1036
+ [stroke] {
1037
+ stroke: currentColor !important;
1038
+ }
1039
+ }
1040
+ }
1041
+
1042
+ .ratex-inline {
1043
+ display: inline-flex;
1044
+ align-items: center;
1045
+ max-width: min(100%, 22em);
1046
+ margin: 0 0.08em;
1047
+ overflow-x: auto;
1048
+ overflow-y: hidden;
1049
+ vertical-align: -0.32em;
1050
+
1051
+ svg {
1052
+ width: auto;
1053
+ max-width: none;
1054
+ height: 1.42em;
1055
+ }
1056
+ /* 分数 */
1057
+ &:has(rect) {
1058
+ vertical-align: -0.45em;
1059
+ svg {
1060
+ height: 2em;
1061
+ }
1062
+ }
1063
+ }
1064
+
1065
+ .ratex-display {
1066
+ display: flex;
1067
+ justify-content: center;
1068
+ width: 100%;
1069
+ max-width: 100%;
1070
+ margin: 1.5rem 0;
1071
+ overflow-x: auto;
1072
+ overflow-y: hidden;
1073
+
1074
+ svg {
1075
+ width: auto;
1076
+ height: auto;
1077
+ max-width: min(100%, calc(100vw - 2.5rem));
1078
+ max-height: min(4.5em, 20vh);
1079
+ }
1080
+ }
1081
+
780
1082
  pre {
781
1083
  overflow-x: auto;
782
1084
  font-size: 0.85em;
@@ -811,16 +1113,47 @@ html {
811
1113
 
812
1114
  a {
813
1115
  text-decoration: underline;
814
- text-decoration-color: var(--subtext1);
1116
+ text-underline-offset: 3.5px;
1117
+ text-decoration-thickness: 1px;
1118
+ text-decoration-color: hsl(from var(--lavender) h s l / 0.8);
815
1119
  color: var(--text);
816
1120
  &:hover {
1121
+ text-decoration-color: var(--blue);
817
1122
  text-decoration-thickness: 2px;
818
1123
  }
819
1124
  }
1125
+
1126
+ aside {
1127
+ display: block;
1128
+ margin: 1.5rem 0;
1129
+ padding: 0.4rem 0 0.4rem 1rem;
1130
+ color: var(--subtext0);
1131
+ font-size: 0.875em;
1132
+ line-height: 1.55;
1133
+ border-left: 2px solid var(--surface1);
1134
+
1135
+ > :first-child {
1136
+ margin-top: 0;
1137
+ }
1138
+
1139
+ > :last-child {
1140
+ margin-bottom: 0;
1141
+ }
1142
+ }
1143
+ }
1144
+
1145
+ article.card-content .content {
1146
+ font-size: var(--article-font-size);
1147
+ font-family: var(--article-font-family);
1148
+ line-height: var(--article-line-height);
1149
+ font-weight: var(--article-font-weight);
1150
+ }
1151
+
1152
+ article.card-content .content :is(h1, h2, h3, h4, h5, h6, strong, b, th) {
1153
+ font-weight: var(--article-bold-font-weight);
820
1154
  }
821
1155
 
822
1156
  .footnotes {
823
- font-family: var(--font-serif);
824
1157
  font-size: 0.9em;
825
1158
  }
826
1159
 
@@ -862,6 +1195,8 @@ blockquote {
862
1195
  margin: 1.5rem 0;
863
1196
  border-left: 2px solid var(--red);
864
1197
  font-family: Georgia, Kai, var(--font-serif);
1198
+ font-style: italic;
1199
+ font-synthesis: none;
865
1200
 
866
1201
  &:before {
867
1202
  content: "”";
@@ -967,15 +1302,12 @@ section {
967
1302
  display: block;
968
1303
  }
969
1304
 
970
- .article:has(.article-licensing) {
971
- padding-bottom: 0 !important;
972
- }
973
-
974
1305
  /* #region Article Meta*/
975
1306
 
976
1307
  .article-title {
1308
+ font-family: var(--article-font-family);
977
1309
  font-size: 1.75em;
978
- font-family: var(--font-serif);
1310
+ font-weight: 500;
979
1311
  line-height: 1.2;
980
1312
  margin-bottom: 0.3em;
981
1313
  text-wrap: balance;
@@ -1030,8 +1362,12 @@ section {
1030
1362
  }
1031
1363
  }
1032
1364
 
1033
- .article-excerpt {
1365
+ em,
1366
+ .article-excerpt,
1367
+ .footnotes {
1034
1368
  font-family: var(--font-serif);
1369
+ font-style: italic;
1370
+ font-synthesis: none;
1035
1371
  }
1036
1372
 
1037
1373
  .article-tags {
@@ -1051,80 +1387,776 @@ section {
1051
1387
  }
1052
1388
  }
1053
1389
 
1054
- /* #endregion Article Meta */
1055
-
1056
- /* #region Licensing */
1057
-
1058
- .article-licensing {
1059
- display: block;
1060
- position: relative;
1061
- margin: 2rem -1.25rem 0 -1.25rem;
1062
- padding: 1.25rem;
1063
- z-index: 0;
1064
- border-radius: 0 0 24px 24px;
1065
- overflow: hidden;
1066
- justify-content: space-between;
1390
+ .article-footer.article-meta-bar {
1391
+ margin-bottom: 1rem;
1067
1392
  }
1068
1393
 
1069
- .article-licensing-bg-icon {
1070
- position: absolute;
1071
- z-index: -1;
1072
- right: -50px;
1073
- top: -88px;
1074
- font-size: 200px;
1075
- opacity: 0.1;
1076
- pointer-events: none;
1394
+ .article-title-actions {
1395
+ display: flex;
1396
+ align-items: center;
1397
+ gap: 0.25rem;
1398
+ flex-shrink: 0;
1077
1399
  }
1078
1400
 
1079
- .licensing-title {
1080
- margin-bottom: 0.75rem;
1081
- line-height: 1.2;
1401
+ .article-action-btn {
1402
+ display: inline-flex;
1403
+ width: 1.5rem;
1404
+ padding: 0;
1405
+ background: none;
1406
+ border: none;
1407
+ color: var(--subtext1);
1408
+ cursor: pointer;
1409
+
1410
+ &:hover {
1411
+ color: var(--mauve);
1412
+ }
1413
+
1414
+ svg {
1415
+ width: 1.1rem;
1416
+ height: 1.1rem;
1417
+ }
1082
1418
  }
1083
1419
 
1084
- .licensing-title p:not(:last-child) {
1085
- margin-bottom: 0.25rem;
1420
+ .article-popover {
1421
+ padding: 0;
1086
1422
  }
1087
1423
 
1088
- .licensing-meta {
1089
- .level-item p {
1090
- margin-right: 1.5rem;
1091
- margin-bottom: 0;
1092
- font-size: 0.7rem;
1424
+ .article-popover-header {
1425
+ display: flex;
1426
+ align-items: center;
1427
+ justify-content: space-between;
1428
+ padding: 1rem 1.25rem;
1429
+ border-bottom: 1px solid var(--surface0);
1430
+
1431
+ h3 {
1432
+ font-size: 1rem;
1433
+ font-weight: 600;
1434
+ margin: 0;
1435
+ color: var(--text);
1093
1436
  }
1437
+ }
1094
1438
 
1095
- iconify-icon {
1096
- font-size: 1.5em;
1097
- vertical-align: bottom;
1439
+ .article-popover-close {
1440
+ display: inline-flex;
1441
+ align-items: center;
1442
+ justify-content: center;
1443
+ width: 1.75rem;
1444
+ height: 1.75rem;
1445
+ padding: 0;
1446
+ background: transparent;
1447
+ border: none;
1448
+ border-radius: 6px;
1449
+ color: var(--subtext0);
1450
+ cursor: pointer;
1451
+ transition: all 0.2s ease;
1452
+
1453
+ &:hover {
1454
+ color: var(--text);
1455
+ background-color: var(--surface0);
1098
1456
  }
1099
1457
 
1100
- a {
1101
- color: inherit;
1458
+ &:focus-visible {
1459
+ outline: 2px solid var(--mauve);
1460
+ outline-offset: 2px;
1102
1461
  }
1103
1462
  }
1104
1463
 
1105
- /* #endregion Licensing */
1464
+ .article-popover-body {
1465
+ padding: 1.25rem;
1466
+ max-height: 70vh;
1467
+ overflow-y: auto;
1468
+ }
1106
1469
 
1107
- /* #region Search */
1470
+ .language-switch-popover {
1471
+ width: min(24rem, 90vw);
1472
+ }
1108
1473
 
1109
- input.searchbox-input {
1110
- color: inherit;
1111
- background-color: inherit;
1112
- font-family: inherit;
1113
- border: none;
1114
- outline: 0;
1115
- flex-grow: 1;
1116
- box-sizing: border-box;
1117
- padding: 0.75em 0 0.75em 1.25em;
1474
+ .language-switch-popover-body {
1475
+ p {
1476
+ margin: 0;
1477
+ color: var(--subtext1);
1478
+ line-height: 1.7;
1479
+ }
1118
1480
  }
1119
1481
 
1120
- .searchbox,
1121
- .searchbox-container {
1122
- align-items: center;
1123
- flex-direction: column;
1124
- line-height: 1.25em;
1482
+ .language-switch-popover-actions {
1483
+ display: flex;
1484
+ justify-content: flex-end;
1485
+ gap: 0.75rem;
1486
+ margin-top: 1.25rem;
1125
1487
  }
1126
1488
 
1127
- .searchbox-container {
1489
+ .language-switch-popover-action {
1490
+ display: inline-flex;
1491
+ align-items: center;
1492
+ justify-content: center;
1493
+ min-height: 2.25rem;
1494
+ padding: 0.4rem 0.85rem;
1495
+ border: 1px solid var(--surface1);
1496
+ border-radius: 8px;
1497
+ background: transparent;
1498
+ color: var(--text);
1499
+ cursor: pointer;
1500
+ font: inherit;
1501
+ text-decoration: none;
1502
+ line-height: 1.2;
1503
+
1504
+ &:hover {
1505
+ border-color: var(--mauve);
1506
+ color: var(--mauve);
1507
+ }
1508
+
1509
+ &.is-primary {
1510
+ border-color: var(--blue);
1511
+ background: var(--blue);
1512
+ color: var(--base);
1513
+
1514
+ &:hover {
1515
+ border-color: var(--mauve);
1516
+ background: var(--mauve);
1517
+ color: var(--base);
1518
+ }
1519
+ }
1520
+ }
1521
+
1522
+ .font-settings-column,
1523
+ .font-preview-column {
1524
+ min-width: 0;
1525
+ }
1526
+
1527
+ .font-setting-group {
1528
+ margin-bottom: 1.25rem;
1529
+
1530
+ &:last-child {
1531
+ margin-bottom: 0;
1532
+ }
1533
+ }
1534
+
1535
+ .font-setting-label {
1536
+ display: block;
1537
+ font-size: 0.875rem;
1538
+ font-weight: 500;
1539
+ color: var(--subtext1);
1540
+ margin-bottom: 0.75rem;
1541
+ }
1542
+
1543
+ .font-size-selector {
1544
+ display: flex;
1545
+ align-items: center;
1546
+ gap: 0.5rem;
1547
+ }
1548
+
1549
+ .font-size-btn {
1550
+ --font-size-preview: 16px;
1551
+ flex: 1;
1552
+ display: inline-flex;
1553
+ align-items: center;
1554
+ justify-content: center;
1555
+ height: 3em;
1556
+ padding: 0;
1557
+ background: transparent;
1558
+ color: var(--subtext0);
1559
+ border: 1px solid transparent;
1560
+ cursor: pointer;
1561
+
1562
+ &.is-active,
1563
+ &:hover {
1564
+ border-color: var(--mauve);
1565
+ border-radius: 100px;
1566
+ color: var(--mauve);
1567
+ background-color: hsl(from var(--mauve) h s l / 0.08);
1568
+ }
1569
+ }
1570
+
1571
+ .font-size-btn[data-size="small"] {
1572
+ --font-size-preview: 12px;
1573
+ }
1574
+
1575
+ .font-size-btn[data-size="medium-small"] {
1576
+ --font-size-preview: 14px;
1577
+ }
1578
+
1579
+ .font-size-btn[data-size="medium"] {
1580
+ --font-size-preview: 16px;
1581
+ }
1582
+
1583
+ .font-size-btn[data-size="medium-large"] {
1584
+ --font-size-preview: 18px;
1585
+ }
1586
+
1587
+ .font-size-btn[data-size="large"] {
1588
+ --font-size-preview: 20px;
1589
+ }
1590
+
1591
+ .font-size-preview {
1592
+ font-size: var(--font-size-preview);
1593
+ font-weight: 500;
1594
+ }
1595
+
1596
+ .font-weight-selector {
1597
+ display: grid;
1598
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1599
+ gap: 0;
1600
+ padding: 0.25rem;
1601
+ background: hsl(from var(--surface0) h s l / 0.35);
1602
+ border: 1px solid var(--surface0);
1603
+ border-radius: 14px;
1604
+ }
1605
+
1606
+ .font-weight-btn {
1607
+ --font-weight-preview: 400;
1608
+ display: inline-flex;
1609
+ align-items: center;
1610
+ justify-content: center;
1611
+ min-width: 0;
1612
+ min-height: 3rem;
1613
+ padding: 0.625rem 0.5rem;
1614
+ background: transparent;
1615
+ color: var(--subtext0);
1616
+ border: none;
1617
+ border-radius: 10px;
1618
+ font-weight: var(--font-weight-preview);
1619
+ cursor: pointer;
1620
+ transition: all 0.2s ease;
1621
+
1622
+ &:hover {
1623
+ color: var(--text);
1624
+ background-color: hsl(from var(--surface1) h s l / 0.55);
1625
+ }
1626
+
1627
+ &:focus-visible {
1628
+ outline: 2px solid var(--mauve);
1629
+ outline-offset: 2px;
1630
+ }
1631
+
1632
+ &.is-active {
1633
+ color: var(--mauve);
1634
+ background-color: hsl(from var(--mauve) h s l / 0.08);
1635
+ box-shadow: inset 0 0 0 1px hsl(from var(--mauve) h s l / 0.28);
1636
+ }
1637
+ }
1638
+
1639
+ .font-line-height-control {
1640
+ display: grid;
1641
+ grid-template-columns: auto minmax(0, 1fr) auto;
1642
+ align-items: center;
1643
+ gap: 0.75rem;
1644
+ padding: 0.75rem 0.875rem;
1645
+ background: hsl(from var(--surface0) h s l / 0.35);
1646
+ border: 1px solid var(--surface0);
1647
+ border-radius: 12px;
1648
+ }
1649
+
1650
+ .font-line-height-slider {
1651
+ width: 100%;
1652
+ margin: 0;
1653
+ appearance: none;
1654
+ -webkit-appearance: none;
1655
+ height: 1.5rem;
1656
+ background: transparent;
1657
+ accent-color: var(--mauve);
1658
+ cursor: pointer;
1659
+ }
1660
+
1661
+ .font-line-height-slider::-webkit-slider-runnable-track {
1662
+ height: 0.35rem;
1663
+ border-radius: 999px;
1664
+ background: linear-gradient(90deg, hsl(from var(--mauve) h s l / 0.92), hsl(from var(--surface0) h s l / 0.65));
1665
+ }
1666
+
1667
+ .font-line-height-slider::-webkit-slider-thumb {
1668
+ appearance: none;
1669
+ -webkit-appearance: none;
1670
+ width: 1rem;
1671
+ height: 1rem;
1672
+ margin-top: calc((0.35rem - 1rem) / 2);
1673
+ border: 2px solid var(--mantle);
1674
+ border-radius: 50%;
1675
+ background: var(--mauve);
1676
+ box-shadow: 0 0 0 1px hsl(from var(--mauve) h s l / 0.22);
1677
+ }
1678
+
1679
+ .font-line-height-slider::-moz-range-track {
1680
+ height: 0.35rem;
1681
+ border: none;
1682
+ border-radius: 999px;
1683
+ background: linear-gradient(90deg, hsl(from var(--mauve) h s l / 0.92), hsl(from var(--surface0) h s l / 0.65));
1684
+ }
1685
+
1686
+ .font-line-height-slider::-moz-range-thumb {
1687
+ width: 1rem;
1688
+ height: 1rem;
1689
+ border: 2px solid var(--mantle);
1690
+ border-radius: 50%;
1691
+ background: var(--mauve);
1692
+ box-shadow: 0 0 0 1px hsl(from var(--mauve) h s l / 0.22);
1693
+ }
1694
+
1695
+ .font-line-height-label {
1696
+ font-size: 0.75rem;
1697
+ font-weight: 500;
1698
+ color: var(--subtext0);
1699
+ white-space: nowrap;
1700
+ }
1701
+
1702
+ .font-line-height-meta {
1703
+ display: flex;
1704
+ justify-content: space-between;
1705
+ gap: 0.75rem;
1706
+ margin-top: 0.5rem;
1707
+ font-size: 0.75rem;
1708
+ color: var(--subtext0);
1709
+ padding-inline: 0.125rem;
1710
+ }
1711
+
1712
+ .font-line-height-value {
1713
+ color: var(--text);
1714
+ font-variant-numeric: tabular-nums;
1715
+ }
1716
+
1717
+ .font-weight-btn[data-weight="light"] {
1718
+ --font-weight-preview: 300;
1719
+ }
1720
+
1721
+ .font-weight-btn[data-weight="regular"] {
1722
+ --font-weight-preview: 400;
1723
+ }
1724
+
1725
+ .font-weight-btn[data-weight="medium"] {
1726
+ --font-weight-preview: 500;
1727
+ }
1728
+
1729
+ .font-option-name {
1730
+ max-width: 100%;
1731
+ font-size: 0.8125rem;
1732
+ line-height: 1.2;
1733
+ text-align: center;
1734
+ overflow-wrap: anywhere;
1735
+ }
1736
+
1737
+ .font-custom-form {
1738
+ display: grid;
1739
+ gap: 0.75rem;
1740
+ }
1741
+
1742
+ .font-custom-toggle {
1743
+ display: inline-flex;
1744
+ align-items: center;
1745
+ justify-content: space-between;
1746
+ gap: 0.75rem;
1747
+ width: 100%;
1748
+ padding: 0.5rem 0;
1749
+ background: transparent;
1750
+ border: 0;
1751
+ color: var(--text);
1752
+ font-size: 0.875rem;
1753
+ font-weight: 600;
1754
+ text-align: left;
1755
+ cursor: pointer;
1756
+ }
1757
+
1758
+ .font-custom-toggle-icon {
1759
+ display: inline-flex;
1760
+ align-items: center;
1761
+ justify-content: center;
1762
+ width: 0.95rem;
1763
+ height: 0.95rem;
1764
+ color: var(--subtext0);
1765
+ line-height: 1;
1766
+ transform: rotate(0deg);
1767
+ transform-origin: 50% 50%;
1768
+ transition:
1769
+ transform 0.18s ease,
1770
+ color 0.18s ease;
1771
+ }
1772
+
1773
+ .font-custom-toggle-icon svg {
1774
+ display: block;
1775
+ width: 100%;
1776
+ height: 100%;
1777
+ }
1778
+
1779
+ .font-custom-toggle:hover .font-custom-toggle-icon,
1780
+ .font-custom-toggle[aria-expanded="true"] .font-custom-toggle-icon {
1781
+ color: var(--mauve);
1782
+ }
1783
+
1784
+ .font-custom-toggle[aria-expanded="true"] .font-custom-toggle-icon {
1785
+ transform: rotate(45deg);
1786
+ }
1787
+
1788
+ .font-custom-panel {
1789
+ display: grid;
1790
+ grid-template-rows: 0fr;
1791
+ gap: 0;
1792
+ opacity: 0;
1793
+ transform: translateY(-0.25rem);
1794
+ transition:
1795
+ grid-template-rows 0.24s ease,
1796
+ opacity 0.2s ease,
1797
+ transform 0.24s ease,
1798
+ gap 0.24s ease;
1799
+ overflow: hidden;
1800
+ }
1801
+
1802
+ .font-custom-panel[data-expanded="true"] {
1803
+ grid-template-rows: 1fr;
1804
+ gap: 0.75rem;
1805
+ opacity: 1;
1806
+ transform: translateY(0);
1807
+ }
1808
+
1809
+ .font-custom-panel-inner {
1810
+ min-height: 0;
1811
+ overflow: hidden;
1812
+ }
1813
+
1814
+ .font-custom-label-row {
1815
+ display: inline-flex;
1816
+ align-items: center;
1817
+ gap: 0.375rem;
1818
+ min-width: 0;
1819
+ }
1820
+
1821
+ .font-custom-help-btn {
1822
+ display: inline-flex;
1823
+ align-items: center;
1824
+ justify-content: center;
1825
+ width: 1.25rem;
1826
+ height: 1.25rem;
1827
+ padding: 0;
1828
+ flex: 0 0 auto;
1829
+ color: var(--subtext0);
1830
+ background: transparent;
1831
+ border: 0;
1832
+ border-radius: 999px;
1833
+ cursor: pointer;
1834
+ }
1835
+
1836
+ .font-custom-help-btn:hover,
1837
+ .font-custom-help-btn:focus-visible {
1838
+ color: var(--mauve);
1839
+ }
1840
+
1841
+ .font-custom-help-btn:focus-visible {
1842
+ outline: 2px solid var(--mauve);
1843
+ outline-offset: 2px;
1844
+ }
1845
+
1846
+ .font-custom-help-popover {
1847
+ max-width: min(22rem, calc(100vw - 2rem));
1848
+ padding: 0.75rem 0.875rem;
1849
+ color: var(--text);
1850
+ background: var(--base);
1851
+ border: 1px solid var(--surface0);
1852
+ border-radius: 12px;
1853
+ box-shadow:
1854
+ 0 18px 42px -24px rgba(0, 0, 0, 0.45),
1855
+ 0 0 0 1px hsl(from var(--surface0) h s l / 0.2);
1856
+ font-size: 0.8125rem;
1857
+ line-height: 1.45;
1858
+ }
1859
+
1860
+ .font-custom-help-popover:popover-open {
1861
+ position: fixed;
1862
+ inset: auto auto auto auto;
1863
+ width: fit-content;
1864
+ height: auto;
1865
+ margin: 0;
1866
+ background: var(--base);
1867
+ backdrop-filter: none;
1868
+ display: block;
1869
+ z-index: 60;
1870
+ }
1871
+
1872
+ .font-custom-field {
1873
+ display: grid;
1874
+ gap: 0.375rem;
1875
+ min-width: 0;
1876
+ color: var(--subtext0);
1877
+ font-size: 0.75rem;
1878
+ font-weight: 500;
1879
+ }
1880
+
1881
+ .font-custom-field :is(input, textarea) {
1882
+ width: 100%;
1883
+ min-width: 0;
1884
+ box-sizing: border-box;
1885
+ padding: 0.625rem 0.75rem;
1886
+ color: var(--text);
1887
+ background: hsl(from var(--surface0) h s l / 0.35);
1888
+ border: 1px solid var(--surface0);
1889
+ border-radius: 10px;
1890
+ font: 0.8125rem / 1.45 var(--font-mono);
1891
+ outline: none;
1892
+ transition:
1893
+ border-color 0.2s ease,
1894
+ background-color 0.2s ease,
1895
+ box-shadow 0.2s ease;
1896
+ }
1897
+
1898
+ .font-custom-field textarea {
1899
+ resize: vertical;
1900
+ }
1901
+
1902
+ .font-custom-field :is(input, textarea)::placeholder {
1903
+ color: var(--overlay1);
1904
+ }
1905
+
1906
+ .font-custom-field :is(input, textarea):focus {
1907
+ border-color: var(--mauve);
1908
+ background: hsl(from var(--surface0) h s l / 0.52);
1909
+ box-shadow: 0 0 0 3px hsl(from var(--mauve) h s l / 0.1);
1910
+ }
1911
+
1912
+ .font-custom-family-grid {
1913
+ display: grid;
1914
+ gap: 0.625rem;
1915
+ }
1916
+
1917
+ .font-custom-actions {
1918
+ display: flex;
1919
+ flex-wrap: wrap;
1920
+ gap: 0.5rem;
1921
+ }
1922
+
1923
+ .font-custom-actions button {
1924
+ min-height: 2.25rem;
1925
+ padding: 0.5rem 0.75rem;
1926
+ border-radius: 10px;
1927
+ font-size: 0.8125rem;
1928
+ font-weight: 600;
1929
+ cursor: pointer;
1930
+ transition:
1931
+ border-color 0.2s ease,
1932
+ background-color 0.2s ease,
1933
+ color 0.2s ease;
1934
+ }
1935
+
1936
+ .font-custom-apply {
1937
+ color: var(--base);
1938
+ background: var(--mauve);
1939
+ border: 1px solid var(--mauve);
1940
+ }
1941
+
1942
+ .font-custom-apply:hover {
1943
+ background: color-mix(in oklch, var(--mauve) 88%, var(--text));
1944
+ }
1945
+
1946
+ .font-custom-reset {
1947
+ color: var(--subtext0);
1948
+ background: transparent;
1949
+ border: 1px solid var(--surface0);
1950
+ }
1951
+
1952
+ .font-custom-reset:hover {
1953
+ color: var(--text);
1954
+ border-color: var(--overlay0);
1955
+ background: hsl(from var(--surface0) h s l / 0.45);
1956
+ }
1957
+
1958
+ .font-type-selector {
1959
+ display: grid;
1960
+ grid-template-columns: 1fr 1fr;
1961
+ gap: 0.75rem;
1962
+ }
1963
+
1964
+ .font-type-btn {
1965
+ --font-type-preview-family: var(--font-serif);
1966
+ display: flex;
1967
+ flex-direction: column;
1968
+ align-items: center;
1969
+ gap: 0.375rem;
1970
+ padding: 0.875rem 0.5rem;
1971
+ background: transparent;
1972
+ border: 1.5px solid var(--surface0);
1973
+ border-radius: 10px;
1974
+ color: var(--subtext0);
1975
+ cursor: pointer;
1976
+ transition: all 0.2s ease;
1977
+
1978
+ &:hover {
1979
+ border-color: var(--overlay0);
1980
+ color: var(--text);
1981
+ }
1982
+
1983
+ &:focus-visible {
1984
+ outline: 2px solid var(--mauve);
1985
+ outline-offset: 2px;
1986
+ }
1987
+
1988
+ &.is-active {
1989
+ border-color: var(--mauve);
1990
+ color: var(--mauve);
1991
+ background-color: hsl(from var(--mauve) h s l / 0.08);
1992
+ }
1993
+ }
1994
+
1995
+ .font-type-btn[data-font="serif"] {
1996
+ --font-type-preview-family: var(--font-serif);
1997
+ }
1998
+
1999
+ .font-type-btn[data-font="sans-serif"] {
2000
+ --font-type-preview-family: var(--font-sans-serif);
2001
+ }
2002
+
2003
+ .font-type-btn[data-font="mono"] {
2004
+ --font-type-preview-family: var(--font-mono);
2005
+ }
2006
+
2007
+ .font-type-btn[data-font="handwriting"] {
2008
+ --font-type-preview-family: var(--font-handwriting);
2009
+ }
2010
+
2011
+ .font-type-preview {
2012
+ font-size: 1.5rem;
2013
+ font-family: var(--font-type-preview-family);
2014
+ line-height: 1;
2015
+ }
2016
+
2017
+ .font-type-name {
2018
+ font-size: 0.75rem;
2019
+ font-weight: 500;
2020
+ }
2021
+
2022
+ .font-preview-box {
2023
+ width: 100%;
2024
+ max-width: 100%;
2025
+ box-sizing: border-box;
2026
+ font-size: var(--article-font-size);
2027
+ font-family: var(--article-font-family);
2028
+ line-height: var(--article-line-height);
2029
+ font-weight: var(--article-font-weight);
2030
+ padding: 0.875rem 1rem;
2031
+ background: var(--base);
2032
+ border: 1px solid var(--surface0);
2033
+ border-radius: 10px;
2034
+
2035
+ .font-preview-title {
2036
+ font-size: 1.1em;
2037
+ font-weight: var(--article-bold-font-weight);
2038
+ color: var(--text);
2039
+ margin: 0 0 0.375rem 0;
2040
+ line-height: 1.4;
2041
+ }
2042
+
2043
+ .font-preview-excerpt {
2044
+ font-size: 0.9em;
2045
+ color: var(--subtext0);
2046
+ margin: 0;
2047
+ line-height: inherit;
2048
+ }
2049
+
2050
+ :is(strong, b) {
2051
+ font-weight: var(--article-bold-font-weight);
2052
+ }
2053
+ }
2054
+
2055
+ .article-info-list {
2056
+ display: flex;
2057
+ flex-direction: column;
2058
+ gap: 0.875rem;
2059
+ }
2060
+
2061
+ .article-info-item {
2062
+ display: flex;
2063
+ align-items: flex-start;
2064
+ gap: 0.75rem;
2065
+ }
2066
+
2067
+ .article-info-icon {
2068
+ display: inline-flex;
2069
+ align-items: center;
2070
+ justify-content: center;
2071
+ width: 2rem;
2072
+ height: 2rem;
2073
+ flex-shrink: 0;
2074
+ border-radius: 8px;
2075
+ background: var(--base);
2076
+ color: var(--subtext0);
2077
+ margin-top: 0.125rem;
2078
+
2079
+ svg {
2080
+ width: 1rem;
2081
+ height: 1rem;
2082
+ }
2083
+ }
2084
+
2085
+ .article-info-content {
2086
+ display: flex;
2087
+ flex-direction: column;
2088
+ gap: 0.125rem;
2089
+ min-width: 0;
2090
+ flex: 1;
2091
+ padding-top: 0.125rem;
2092
+ }
2093
+
2094
+ .article-info-label {
2095
+ font-size: 0.75rem;
2096
+ color: var(--subtext0);
2097
+ font-weight: 500;
2098
+ }
2099
+
2100
+ .article-info-value {
2101
+ font-size: 0.875rem;
2102
+ color: var(--text);
2103
+ word-break: break-word;
2104
+
2105
+ a {
2106
+ color: var(--lavender);
2107
+ text-decoration: none;
2108
+
2109
+ &:hover {
2110
+ text-decoration: underline;
2111
+ }
2112
+ }
2113
+ }
2114
+
2115
+ .article-comment-popover {
2116
+ width: min(920px, 92vw);
2117
+ }
2118
+
2119
+ .article-comment-popover-body {
2120
+ width: min(920px, 92vw);
2121
+ max-height: min(72vh, 760px);
2122
+ padding: 0;
2123
+ }
2124
+
2125
+ .article-comment-panel#comments {
2126
+ border-top: 0;
2127
+ }
2128
+
2129
+ .article-comment-panel {
2130
+ padding: 1.25rem;
2131
+
2132
+ .twikoo {
2133
+ margin: 0;
2134
+ }
2135
+ }
2136
+
2137
+ /* #endregion Article Meta */
2138
+
2139
+ /* #region Search */
2140
+
2141
+ input.searchbox-input {
2142
+ color: inherit;
2143
+ background-color: inherit;
2144
+ font-family: inherit;
2145
+ border: none;
2146
+ outline: 0;
2147
+ flex-grow: 1;
2148
+ box-sizing: border-box;
2149
+ padding: 0.75em 0 0.75em 1.25em;
2150
+ }
2151
+
2152
+ .searchbox,
2153
+ .searchbox-container {
2154
+ align-items: center;
2155
+ flex-direction: column;
2156
+ line-height: 1.25em;
2157
+ }
2158
+
2159
+ .searchbox-container {
1128
2160
  background-color: var(--mantle);
1129
2161
  border: 2px solid var(--surface0);
1130
2162
  color: var(--text);
@@ -1280,6 +2312,42 @@ input.searchbox-input {
1280
2312
  line-height: 0;
1281
2313
  display: flex;
1282
2314
  }
2315
+
2316
+ &.article-popover {
2317
+ position: fixed;
2318
+ width: fit-content;
2319
+ height: fit-content;
2320
+ inset: 0;
2321
+ margin: auto;
2322
+ max-width: 90vw;
2323
+ max-height: 85vh;
2324
+ border: 1px solid var(--surface0);
2325
+ border-radius: 16px;
2326
+ background: var(--mantle);
2327
+ color: var(--text);
2328
+ box-shadow:
2329
+ 0 20px 60px -15px rgba(0, 0, 0, 0.3),
2330
+ 0 0 0 1px var(--surface0);
2331
+ overflow: hidden;
2332
+ backdrop-filter: none;
2333
+ -webkit-backdrop-filter: none;
2334
+
2335
+ &::backdrop {
2336
+ background: hsl(from var(--mantle) h s l / 0.7);
2337
+ backdrop-filter: blur(10px);
2338
+ -webkit-backdrop-filter: blur(10px);
2339
+ }
2340
+
2341
+ &.article-font-popover {
2342
+ max-width: min(460px, 90vw);
2343
+ }
2344
+
2345
+ &.article-comment-popover {
2346
+ width: min(920px, 92vw);
2347
+ max-width: min(920px, 92vw);
2348
+ }
2349
+ }
2350
+
1283
2351
  &#theme-selector-popover {
1284
2352
  display: flex;
1285
2353
  align-items: center;
@@ -1293,6 +2361,7 @@ input.searchbox-input {
1293
2361
  overflow-y: auto;
1294
2362
  padding: 0;
1295
2363
  list-style: none;
2364
+ font-family: var(--article-font-family);
1296
2365
  }
1297
2366
 
1298
2367
  .toc-item {
@@ -1327,8 +2396,3 @@ input.searchbox-input {
1327
2396
  }
1328
2397
  }
1329
2398
  }
1330
-
1331
- /* #endregion TOC */
1332
- #comments {
1333
- border-top: 1px dashed var(--surface0);
1334
- }