hexo-theme-gnix 8.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 +6 -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 +316 -34
  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 +122 -33
  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 +1223 -126
  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 +1053 -1049
  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 -38
  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: STFangsong, STSong, New York, Songti SC, Georgia, serif;
14
- --font-sans-serif: system-ui, sans-serif;
15
- --font-mono: "SF Mono", "SF Pro", "Maple Mono NF CN Local", "Maple Mono NF CN", Monaco, Consolas, monospace;
16
- --font-handwriting: "Bradley Hand", "homemade-apple", cursive;
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;
16
+ --font-mono: "SF Mono", "Maple Mono NF CN Local", "Maple Mono NF CN", Monaco, Consolas, monospace;
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;
@@ -154,7 +246,7 @@ body {
154
246
  background: var(--mantle);
155
247
  color: var(--subtext1);
156
248
  min-height: 100%;
157
- line-height: 1.5;
249
+ line-height: 1.7;
158
250
  display: flex;
159
251
  flex-direction: column;
160
252
  /* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-autospace */
@@ -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,20 +514,17 @@ 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 {
307
521
  max-width: 100%;
308
522
  position: relative;
309
523
  overflow: visible;
310
- border: 0.5px solid var(--surface0);
311
- }
312
- .card + .card {
313
- border-top: none;
314
524
  }
315
525
 
316
526
  .card-content {
317
- padding: 1.25rem;
527
+ padding: 1.25em 1.25rem 0 1.25rem;
318
528
  }
319
529
 
320
530
  /* #region Navbar */
@@ -326,9 +536,18 @@ html {
326
536
  left: 0;
327
537
  right: 0;
328
538
  z-index: 100;
539
+ background: var(--mantle);
329
540
  border-bottom: 0.5px solid var(--surface0);
330
541
  }
331
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
+
332
551
  .navbar-container {
333
552
  flex-grow: 1;
334
553
  margin: 0 auto;
@@ -348,13 +567,32 @@ html {
348
567
  }
349
568
 
350
569
  .navbar-item {
351
- color: var(--subtext1);
570
+ color: var(--subtext0);
352
571
  align-items: center;
353
572
  display: flex;
354
573
  padding: 0 0.5rem;
355
574
  position: relative;
356
575
  flex-grow: 0;
357
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%);
358
596
  }
359
597
 
360
598
  .navbar-end {
@@ -391,11 +629,10 @@ html {
391
629
  color: var(--text);
392
630
  padding: 0.75rem 1.25rem;
393
631
  cursor: pointer;
394
- font-size: 2rem;
395
- font-family: system-ui;
396
- font-variation-settings:
397
- "wght" 200,
398
- "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;
399
636
 
400
637
  &.is-focused,
401
638
  &:hover {
@@ -415,7 +652,8 @@ html {
415
652
  align-items: center;
416
653
  display: flex;
417
654
  text-align: center;
418
- font-family: var(--font-mono);
655
+ font-family: var(--font-serif);
656
+ font-style: italic;
419
657
  }
420
658
 
421
659
  .pagination-link.is-current {
@@ -429,7 +667,7 @@ html {
429
667
  .pagination-previous {
430
668
  user-select: none;
431
669
  color: var(--subtext0);
432
- padding: 0 0.5em;
670
+ padding: 0 1rem;
433
671
  display: inline-flex;
434
672
  min-width: 1.5em;
435
673
  }
@@ -511,7 +749,8 @@ html {
511
749
  flex-grow: 1;
512
750
  margin: 0 auto;
513
751
  position: relative;
514
- max-width: 960px;
752
+ max-width: 50em;
753
+ counter-reset: h2-counter;
515
754
  }
516
755
 
517
756
  /* #region Footer */
@@ -542,11 +781,15 @@ html {
542
781
 
543
782
  .footer-title {
544
783
  font-family: homemade-apple, var(--font-handwriting);
784
+ font-weight: bolder;
785
+ font-size: 1.1rem;
786
+ margin-bottom: 0.25rem;
545
787
  }
546
788
 
547
- .footer-title,
548
789
  .footer-heading {
549
790
  font-weight: bolder;
791
+ font-family: var(--font-serif);
792
+ font-style: italic;
550
793
  font-size: 1.1rem;
551
794
  margin-bottom: 0.25rem;
552
795
  }
@@ -569,11 +812,6 @@ html {
569
812
  align-items: center;
570
813
  gap: 0.4rem;
571
814
  color: var(--subtext0);
572
- text-decoration: none;
573
-
574
- &:hover {
575
- text-decoration: underline;
576
- }
577
815
  }
578
816
 
579
817
  /* #endregion Footer */
@@ -587,7 +825,6 @@ html {
587
825
  .content {
588
826
  overflow: auto;
589
827
  word-wrap: break-word;
590
- font-size: 1rem;
591
828
  color: var(--subtext1);
592
829
 
593
830
  ::selection {
@@ -598,41 +835,62 @@ html {
598
835
 
599
836
  a.header-anchor {
600
837
  color: var(--text);
601
- font-family: var(--font-serif);
838
+ font-family: var(--article-font-family);
839
+ text-decoration: none;
840
+ &::after {
841
+ margin-left: 0.4em;
842
+ opacity: 0;
843
+ color: var(--surface0);
844
+ transition: opacity 0.2s ease;
845
+ }
602
846
 
603
847
  &:hover::after {
604
- margin-left: 0.2em;
605
- color: var(--surface0);
848
+ opacity: 1;
606
849
  }
607
850
  }
608
851
 
609
852
  sup.footnote-ref > a,
610
853
  li.footnote-item,
611
- a.footnote-backref,
612
- a.header-anchor,
613
854
  h2,
614
855
  h3,
615
856
  h4,
616
857
  h5,
617
858
  h6 {
618
859
  scroll-margin-top: 5rem;
619
- scroll-behavior: smooth;
860
+ }
861
+
862
+ .footnote-ref > a,
863
+ .footnote-backref {
620
864
  text-decoration: none;
621
865
  }
622
866
 
623
867
  h2 {
624
- font-size: 2em;
625
- margin: 1rem 0;
868
+ font-size: 1.5em;
869
+ margin: 1.5rem 0 1rem;
870
+ line-height: 1.3;
626
871
  border-bottom: 0.8px solid var(--surface0);
627
872
 
628
- > a.header-anchor:hover::after {
629
- content: "##";
873
+ > a.header-anchor {
874
+ counter-increment: h2-counter;
875
+ &::before {
876
+ content: counter(h2-counter, decimal-leading-zero) ".";
877
+ color: var(--flamingo);
878
+ font-family: var(--font-mono);
879
+ padding-right: 0.2em;
880
+ font-size: 0.75em;
881
+ font-variant-numeric: tabular-nums;
882
+ }
883
+
884
+ &:hover::after {
885
+ content: "##";
886
+ }
630
887
  }
631
888
  }
632
889
 
633
890
  h3 {
634
- font-size: 1.75em;
635
- margin: 1.2rem 0 1rem;
891
+ font-size: 1.45em;
892
+ margin: 1.4rem 0 1rem;
893
+ line-height: 1.35;
636
894
 
637
895
  > a.header-anchor:hover::after {
638
896
  content: "###";
@@ -640,8 +898,9 @@ html {
640
898
  }
641
899
 
642
900
  h4 {
643
- font-size: 1.5em;
644
- margin: 1.2rem 0 1rem;
901
+ font-size: 1.35em;
902
+ margin: 1.3rem 0 1rem;
903
+ line-height: 1.4;
645
904
 
646
905
  > a.header-anchor:hover::after {
647
906
  content: "####";
@@ -651,6 +910,7 @@ html {
651
910
  h5 {
652
911
  font-size: 1.25em;
653
912
  margin: 1.2rem 0 1rem;
913
+ line-height: 1.4;
654
914
 
655
915
  > a.header-anchor:hover::after {
656
916
  content: "#####";
@@ -660,6 +920,7 @@ html {
660
920
  h6 {
661
921
  font-size: 1.1em;
662
922
  margin: 1.2rem 0 1rem;
923
+ line-height: 1.45;
663
924
 
664
925
  > a.header-anchor:hover::after {
665
926
  content: "######";
@@ -671,7 +932,8 @@ html {
671
932
  dl,
672
933
  pre,
673
934
  details {
674
- margin-bottom: 1rem;
935
+ margin-bottom: 1.5rem;
936
+ line-height: var(--article-line-height);
675
937
  }
676
938
 
677
939
  li {
@@ -688,16 +950,19 @@ html {
688
950
  video {
689
951
  display: block;
690
952
  max-width: 100%;
691
- margin: 0 auto;
953
+ margin: 0 auto 0.5rem auto;
692
954
 
693
955
  &:hover {
694
956
  cursor: pointer;
695
957
  }
696
958
  }
959
+ figure {
960
+ text-align: center;
961
+ }
697
962
 
698
- video,
699
- .pic {
700
- margin: 1em auto;
963
+ figcaption {
964
+ font-style: italic;
965
+ font-family: var(--font-serif);
701
966
  }
702
967
 
703
968
  button.physical-btn,
@@ -754,25 +1019,64 @@ html {
754
1019
  margin-bottom: 1rem;
755
1020
  }
756
1021
 
757
- figure {
758
- margin: 1em 2.5rem;
759
- text-align: center;
760
- }
1022
+ .ratex {
1023
+ max-width: 100%;
1024
+ line-height: 0;
1025
+ color: var(--text);
761
1026
 
762
- figure:not(:first-child) {
763
- margin-top: 1.5rem;
764
- }
1027
+ svg {
1028
+ display: block;
1029
+ flex: 0 0 auto;
1030
+ fill: currentColor;
765
1031
 
766
- figure:not(:last-child) {
767
- margin-bottom: 1rem;
1032
+ [fill] {
1033
+ fill: currentColor !important;
1034
+ }
1035
+
1036
+ [stroke] {
1037
+ stroke: currentColor !important;
1038
+ }
1039
+ }
768
1040
  }
769
1041
 
770
- figure img {
771
- display: inline-block;
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
+ }
772
1063
  }
773
1064
 
774
- figure figcaption {
775
- font-style: italic;
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
+ }
776
1080
  }
777
1081
 
778
1082
  pre {
@@ -809,16 +1113,47 @@ html {
809
1113
 
810
1114
  a {
811
1115
  text-decoration: underline;
812
- 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);
813
1119
  color: var(--text);
814
1120
  &:hover {
1121
+ text-decoration-color: var(--blue);
815
1122
  text-decoration-thickness: 2px;
816
1123
  }
817
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);
818
1154
  }
819
1155
 
820
1156
  .footnotes {
821
- font-family: var(--font-serif);
822
1157
  font-size: 0.9em;
823
1158
  }
824
1159
 
@@ -860,6 +1195,8 @@ blockquote {
860
1195
  margin: 1.5rem 0;
861
1196
  border-left: 2px solid var(--red);
862
1197
  font-family: Georgia, Kai, var(--font-serif);
1198
+ font-style: italic;
1199
+ font-synthesis: none;
863
1200
 
864
1201
  &:before {
865
1202
  content: "”";
@@ -965,17 +1302,15 @@ section {
965
1302
  display: block;
966
1303
  }
967
1304
 
968
- .article:has(.article-licensing) {
969
- padding-bottom: 0 !important;
970
- }
971
-
972
1305
  /* #region Article Meta*/
973
1306
 
974
1307
  .article-title {
975
- font-size: 2.25em;
976
- font-family: var(--font-serif);
1308
+ font-family: var(--article-font-family);
1309
+ font-size: 1.75em;
1310
+ font-weight: 500;
977
1311
  line-height: 1.2;
978
1312
  margin-bottom: 0.3em;
1313
+ text-wrap: balance;
979
1314
 
980
1315
  > a {
981
1316
  color: var(--text);
@@ -986,8 +1321,6 @@ section {
986
1321
  font-family: var(--font-mono);
987
1322
  overflow: auto;
988
1323
  padding-bottom: 0.5em;
989
- margin-bottom: 1rem;
990
- border-bottom: 1px dashed var(--surface0);
991
1324
  color: var(--subtext0);
992
1325
  display: flex;
993
1326
  align-items: center;
@@ -1004,80 +1337,808 @@ section {
1004
1337
  }
1005
1338
  }
1006
1339
 
1007
- .article-meta-info,
1008
- .article-tags-inline {
1340
+ .article-meta-info {
1009
1341
  display: flex;
1010
1342
  align-items: center;
1011
1343
  flex-wrap: wrap;
1012
1344
  gap: 0.2rem;
1013
1345
  }
1014
1346
 
1015
- .article-tags-inline {
1016
- /* Push to the right */
1017
- gap: 0.8rem;
1018
- margin-left: auto;
1019
- }
1020
-
1021
1347
  .meta-separator {
1022
1348
  color: var(--overlay0);
1023
1349
  }
1024
1350
 
1025
- /* #endregion Article Meta */
1351
+ .article-footer {
1352
+ display: flex;
1353
+ justify-content: space-between;
1354
+ align-items: center;
1355
+ margin-top: 1rem;
1356
+ padding-bottom: 0.75rem;
1357
+ border-bottom: 1px dashed var(--surface0);
1358
+ font-family: var(--font-mono);
1359
+ font-size: 0.75rem;
1360
+ & + .content {
1361
+ margin-top: 1rem;
1362
+ }
1363
+ }
1026
1364
 
1027
- /* #region Licensing */
1365
+ em,
1366
+ .article-excerpt,
1367
+ .footnotes {
1368
+ font-family: var(--font-serif);
1369
+ font-style: italic;
1370
+ font-synthesis: none;
1371
+ }
1028
1372
 
1029
- .article-licensing {
1030
- display: block;
1031
- position: relative;
1032
- margin: 2rem -1.25rem 0 -1.25rem;
1033
- padding: 1.25rem;
1034
- z-index: 0;
1035
- border-radius: 0 0 24px 24px;
1036
- overflow: hidden;
1037
- justify-content: space-between;
1373
+ .article-tags {
1374
+ display: flex;
1375
+ align-items: center;
1376
+ flex-wrap: wrap;
1377
+ gap: 0.2rem;
1038
1378
  }
1039
1379
 
1040
- .article-licensing-bg-icon {
1041
- position: absolute;
1042
- z-index: -1;
1043
- right: -50px;
1044
- top: -88px;
1045
- font-size: 200px;
1046
- opacity: 0.1;
1047
- pointer-events: none;
1380
+ .article-read-more {
1381
+ color: var(--subtext0);
1382
+ text-decoration: none;
1383
+ white-space: nowrap;
1384
+
1385
+ &:hover {
1386
+ color: var(--blue);
1387
+ }
1048
1388
  }
1049
1389
 
1050
- .licensing-title {
1051
- margin-bottom: 0.75rem;
1052
- line-height: 1.2;
1390
+ .article-footer.article-meta-bar {
1391
+ margin-bottom: 1rem;
1053
1392
  }
1054
1393
 
1055
- .licensing-title p:not(:last-child) {
1056
- margin-bottom: 0.25rem;
1394
+ .article-title-actions {
1395
+ display: flex;
1396
+ align-items: center;
1397
+ gap: 0.25rem;
1398
+ flex-shrink: 0;
1057
1399
  }
1058
1400
 
1059
- .licensing-meta {
1060
- .level-item p {
1061
- margin-right: 1.5rem;
1062
- margin-bottom: 0;
1063
- font-size: 0.75rem;
1064
- }
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;
1065
1409
 
1066
- iconify-icon {
1067
- font-size: 1.5em;
1068
- vertical-align: bottom;
1410
+ &:hover {
1411
+ color: var(--mauve);
1069
1412
  }
1070
1413
 
1071
- a {
1072
- color: inherit;
1414
+ svg {
1415
+ width: 1.1rem;
1416
+ height: 1.1rem;
1073
1417
  }
1074
1418
  }
1075
1419
 
1076
- /* #endregion Licensing */
1077
-
1078
- /* #region Search */
1420
+ .article-popover {
1421
+ padding: 0;
1422
+ }
1079
1423
 
1080
- input.searchbox-input {
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);
1436
+ }
1437
+ }
1438
+
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);
1456
+ }
1457
+
1458
+ &:focus-visible {
1459
+ outline: 2px solid var(--mauve);
1460
+ outline-offset: 2px;
1461
+ }
1462
+ }
1463
+
1464
+ .article-popover-body {
1465
+ padding: 1.25rem;
1466
+ max-height: 70vh;
1467
+ overflow-y: auto;
1468
+ }
1469
+
1470
+ .language-switch-popover {
1471
+ width: min(24rem, 90vw);
1472
+ }
1473
+
1474
+ .language-switch-popover-body {
1475
+ p {
1476
+ margin: 0;
1477
+ color: var(--subtext1);
1478
+ line-height: 1.7;
1479
+ }
1480
+ }
1481
+
1482
+ .language-switch-popover-actions {
1483
+ display: flex;
1484
+ justify-content: flex-end;
1485
+ gap: 0.75rem;
1486
+ margin-top: 1.25rem;
1487
+ }
1488
+
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 {
1081
2142
  color: inherit;
1082
2143
  background-color: inherit;
1083
2144
  font-family: inherit;
@@ -1171,6 +2232,7 @@ input.searchbox-input {
1171
2232
  display: block;
1172
2233
  overflow: hidden;
1173
2234
  height: 380px;
2235
+ border-radius: var(--radius);
1174
2236
 
1175
2237
  img {
1176
2238
  display: block;
@@ -1250,6 +2312,42 @@ input.searchbox-input {
1250
2312
  line-height: 0;
1251
2313
  display: flex;
1252
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
+
1253
2351
  &#theme-selector-popover {
1254
2352
  display: flex;
1255
2353
  align-items: center;
@@ -1263,6 +2361,7 @@ input.searchbox-input {
1263
2361
  overflow-y: auto;
1264
2362
  padding: 0;
1265
2363
  list-style: none;
2364
+ font-family: var(--article-font-family);
1266
2365
  }
1267
2366
 
1268
2367
  .toc-item {
@@ -1297,5 +2396,3 @@ input.searchbox-input {
1297
2396
  }
1298
2397
  }
1299
2398
  }
1300
-
1301
- /* #endregion TOC */