hexo-theme-hydrogen 1.1.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.
@@ -0,0 +1,1857 @@
1
+ /**
2
+ * Hexo Theme Starter - 主样式文件
3
+ */
4
+
5
+ /* ===== CSS 变量定义 ===== */
6
+ :root {
7
+ /* 颜色 */
8
+ --primary-color: #2563eb;
9
+ --primary-hover: #1d4ed8;
10
+ --primary-light: #dbeafe;
11
+
12
+ /* 文本颜色 */
13
+ --text-primary: #1e293b;
14
+ --text-secondary: #475569;
15
+ --text-muted: #94a3b8;
16
+ --text-inverse: #ffffff;
17
+
18
+ /* 背景颜色 */
19
+ --bg-primary: #ffffff;
20
+ --bg-secondary: #f8fafc;
21
+ --bg-tertiary: #f1f5f9;
22
+ --bg-hover: #e2e8f0;
23
+
24
+ /* 边框颜色 */
25
+ --border-color: #e2e8f0;
26
+ --border-light: #f1f5f9;
27
+
28
+ /* 代码颜色 */
29
+ --code-bg: #f8fafc;
30
+ --code-border: #e2e8f0;
31
+
32
+ /* 状态颜色 */
33
+ --success: #22c55e;
34
+ --warning: #f59e0b;
35
+ --error: #ef4444;
36
+ --info: #3b82f6;
37
+
38
+ /* 阴影 */
39
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
40
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
41
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
42
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
43
+
44
+ /* 字体 */
45
+ --font-sans: 'Inter', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
46
+ --font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
47
+
48
+ /* 字体大小 */
49
+ --text-xs: 0.75rem;
50
+ --text-sm: 0.875rem;
51
+ --text-base: 1rem;
52
+ --text-lg: 1.125rem;
53
+ --text-xl: 1.25rem;
54
+ --text-2xl: 1.5rem;
55
+ --text-3xl: 1.875rem;
56
+ --text-4xl: 2.25rem;
57
+
58
+ /* 行高 */
59
+ --leading-tight: 1.25;
60
+ --leading-normal: 1.5;
61
+ --leading-relaxed: 1.75;
62
+
63
+ /* 间距 */
64
+ --spacing-xs: 0.25rem;
65
+ --spacing-sm: 0.5rem;
66
+ --spacing-md: 1rem;
67
+ --spacing-lg: 1.5rem;
68
+ --spacing-xl: 2rem;
69
+ --spacing-2xl: 3rem;
70
+ --spacing-3xl: 4rem;
71
+
72
+ /* 布局 */
73
+ --container-max: 1280px;
74
+ --content-max: 720px;
75
+ --sidebar-width: 280px;
76
+ --toc-width: 240px;
77
+ --header-height: 64px;
78
+
79
+ /* 圆角 */
80
+ --radius-sm: 4px;
81
+ --radius-md: 8px;
82
+ --radius-lg: 12px;
83
+ --radius-xl: 16px;
84
+ --radius-full: 9999px;
85
+
86
+ /* 过渡 */
87
+ --transition-fast: 150ms ease;
88
+ --transition-base: 200ms ease;
89
+ --transition-slow: 300ms ease;
90
+
91
+ /* Z-index */
92
+ --z-dropdown: 100;
93
+ --z-sticky: 200;
94
+ --z-fixed: 300;
95
+ --z-modal: 400;
96
+ --z-tooltip: 500;
97
+ }
98
+
99
+ /* 深色主题 */
100
+ [data-theme="dark"] {
101
+ --primary-color: #3b82f6;
102
+ --primary-hover: #60a5fa;
103
+ --primary-light: #1e3a5f;
104
+
105
+ --text-primary: #f1f5f9;
106
+ --text-secondary: #cbd5e1;
107
+ --text-muted: #64748b;
108
+ --text-inverse: #0f172a;
109
+
110
+ --bg-primary: #0f172a;
111
+ --bg-secondary: #1e293b;
112
+ --bg-tertiary: #334155;
113
+ --bg-hover: #475569;
114
+
115
+ --border-color: #334155;
116
+ --border-light: #1e293b;
117
+
118
+ --code-bg: #1e293b;
119
+ --code-border: #334155;
120
+
121
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
122
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
123
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
124
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.4);
125
+ }
126
+
127
+ /* ===== 基础样式 ===== */
128
+ *,
129
+ *::before,
130
+ *::after {
131
+ box-sizing: border-box;
132
+ margin: 0;
133
+ padding: 0;
134
+ }
135
+
136
+ html {
137
+ font-size: 16px;
138
+ scroll-behavior: smooth;
139
+ scroll-padding-top: calc(var(--header-height) + var(--spacing-lg));
140
+ }
141
+
142
+ body {
143
+ font-family: var(--font-sans), serif;
144
+ font-size: var(--text-base);
145
+ line-height: var(--leading-normal);
146
+ color: var(--text-primary);
147
+ background-color: var(--bg-primary);
148
+ -webkit-font-smoothing: antialiased;
149
+ -moz-osx-font-smoothing: grayscale;
150
+ }
151
+
152
+ a {
153
+ color: inherit;
154
+ text-decoration: none;
155
+ }
156
+
157
+ img {
158
+ max-width: 100%;
159
+ height: auto;
160
+ }
161
+
162
+ button {
163
+ font-family: inherit;
164
+ cursor: pointer;
165
+ border: none;
166
+ background: none;
167
+ }
168
+
169
+ /* ===== 容器 ===== */
170
+ .container {
171
+ width: 100%;
172
+ max-width: var(--container-max);
173
+ margin: 0 auto;
174
+ padding: 0 var(--spacing-lg);
175
+ }
176
+
177
+ /* ===== 头部 ===== */
178
+ .site-header {
179
+ position: sticky;
180
+ top: 0;
181
+ z-index: var(--z-sticky);
182
+ height: var(--header-height);
183
+ background-color: var(--bg-primary);
184
+ border-bottom: 1px solid var(--border-color);
185
+ backdrop-filter: blur(10px);
186
+ background-color: rgba(255, 255, 255, 0.9);
187
+ }
188
+
189
+ [data-theme="dark"] .site-header {
190
+ background-color: rgba(15, 23, 42, 0.9);
191
+ }
192
+
193
+ .header-container {
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: space-between;
197
+ height: 100%;
198
+ max-width: var(--container-max);
199
+ margin: 0 auto;
200
+ padding: 0 var(--spacing-lg);
201
+ }
202
+
203
+ /* Logo / 站点标题 */
204
+ .site-brand {
205
+ flex-shrink: 0;
206
+ }
207
+
208
+ .site-logo {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: var(--spacing-sm);
212
+ }
213
+
214
+ .site-logo img {
215
+ height: 32px;
216
+ width: auto;
217
+ }
218
+
219
+ .site-title {
220
+ font-size: var(--text-xl);
221
+ font-weight: 700;
222
+ color: var(--text-primary);
223
+ }
224
+
225
+ /* 导航 */
226
+ .site-nav {
227
+ flex: 1;
228
+ display: flex;
229
+ justify-content: center;
230
+ }
231
+
232
+ .nav-list {
233
+ display: flex;
234
+ gap: var(--spacing-md);
235
+ list-style: none;
236
+ }
237
+
238
+ .nav-link {
239
+ display: inline-block;
240
+ padding: var(--spacing-sm) var(--spacing-md);
241
+ font-size: var(--text-sm);
242
+ font-weight: 500;
243
+ color: var(--text-secondary);
244
+ border-radius: var(--radius-md);
245
+ transition: all var(--transition-fast);
246
+ }
247
+
248
+ .nav-link:hover {
249
+ color: var(--text-primary);
250
+ background-color: var(--bg-hover);
251
+ }
252
+
253
+ .nav-link.active {
254
+ color: var(--primary-color);
255
+ background-color: var(--primary-light);
256
+ }
257
+
258
+ /* 工具栏 */
259
+ .header-tools {
260
+ display: flex;
261
+ align-items: center;
262
+ gap: var(--spacing-sm);
263
+ }
264
+
265
+ .tool-btn {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ width: 40px;
270
+ height: 40px;
271
+ color: var(--text-secondary);
272
+ border-radius: var(--radius-md);
273
+ transition: all var(--transition-fast);
274
+ }
275
+
276
+ .tool-btn:hover {
277
+ color: var(--text-primary);
278
+ background-color: var(--bg-hover);
279
+ }
280
+
281
+ /* 主题切换按钮 */
282
+ .theme-toggle .icon-moon {
283
+ display: none;
284
+ }
285
+
286
+ [data-theme="dark"] .theme-toggle .icon-sun {
287
+ display: none;
288
+ }
289
+
290
+ [data-theme="dark"] .theme-toggle .icon-moon {
291
+ display: block;
292
+ }
293
+
294
+ /* 移动端菜单按钮 */
295
+ .menu-toggle {
296
+ display: none;
297
+ }
298
+
299
+ /* 移动端导航 */
300
+ .mobile-nav {
301
+ display: none;
302
+ position: absolute;
303
+ top: 100%;
304
+ left: 0;
305
+ right: 0;
306
+ background-color: var(--bg-primary);
307
+ border-bottom: 1px solid var(--border-color);
308
+ box-shadow: var(--shadow-lg);
309
+ }
310
+
311
+ .mobile-nav-list {
312
+ list-style: none;
313
+ padding: var(--spacing-md);
314
+ }
315
+
316
+ .mobile-nav-item {
317
+ border-bottom: 1px solid var(--border-light);
318
+ }
319
+
320
+ .mobile-nav-item:last-child {
321
+ border-bottom: none;
322
+ }
323
+
324
+ .mobile-nav-link {
325
+ display: block;
326
+ padding: var(--spacing-md);
327
+ font-weight: 500;
328
+ color: var(--text-primary);
329
+ transition: background-color var(--transition-fast);
330
+ }
331
+
332
+ .mobile-nav-link:hover {
333
+ background-color: var(--bg-hover);
334
+ }
335
+
336
+ .mobile-nav-link.active {
337
+ color: var(--primary-color);
338
+ }
339
+
340
+ /* ===== 主内容区 ===== */
341
+ .main-content {
342
+ min-height: calc(100vh - var(--header-height) - 133px);
343
+ padding: var(--spacing-2xl) 0;
344
+ }
345
+
346
+ /* ===== 页面布局 ===== */
347
+ .page-layout {
348
+ display: grid;
349
+ gap: var(--spacing-2xl);
350
+ }
351
+
352
+ /* 博客布局 */
353
+ .blog-layout {
354
+ grid-template-columns: 1fr 300px;
355
+ }
356
+
357
+ /* 文章布局 */
358
+ .post-layout {
359
+ grid-template-columns: 1fr var(--toc-width);
360
+ max-width: calc(var(--content-max) + var(--toc-width) + var(--spacing-2xl));
361
+ margin: 0 auto;
362
+ }
363
+
364
+ /* 文档布局 */
365
+ .doc-layout {
366
+ grid-template-columns: var(--sidebar-width) 1fr var(--toc-width);
367
+ }
368
+
369
+ /* ===== 文章卡片 ===== */
370
+ .post-list {
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: var(--spacing-xl);
374
+ }
375
+
376
+ .post-card {
377
+ background-color: var(--bg-primary);
378
+ border-radius: var(--radius-lg);
379
+ border: 1px solid var(--border-color);
380
+ overflow: hidden;
381
+ transition: all var(--transition-base);
382
+ }
383
+
384
+ .post-card:hover {
385
+ border-color: var(--primary-color);
386
+ box-shadow: var(--shadow-md);
387
+ }
388
+
389
+ .post-cover {
390
+ aspect-ratio: 16 / 9;
391
+ overflow: hidden;
392
+ }
393
+
394
+ .post-cover img {
395
+ width: 100%;
396
+ height: 100%;
397
+ object-fit: cover;
398
+ transition: transform var(--transition-slow);
399
+ }
400
+
401
+ .post-card:hover .post-cover img {
402
+ transform: scale(1.05);
403
+ }
404
+
405
+ .post-card-content {
406
+ padding: var(--spacing-lg);
407
+ }
408
+
409
+ .post-title {
410
+ margin-bottom: var(--spacing-sm);
411
+ font-size: var(--text-xl);
412
+ font-weight: 600;
413
+ line-height: var(--leading-tight);
414
+ }
415
+
416
+ .post-title a {
417
+ color: var(--text-primary);
418
+ transition: color var(--transition-fast);
419
+ }
420
+
421
+ .post-title a:hover {
422
+ color: var(--primary-color);
423
+ }
424
+
425
+ /* 文章元信息 */
426
+ .post-meta {
427
+ display: flex;
428
+ flex-wrap: wrap;
429
+ gap: var(--spacing-md);
430
+ margin-bottom: var(--spacing-md);
431
+ font-size: var(--text-sm);
432
+ color: var(--text-muted);
433
+ }
434
+
435
+ .meta-item {
436
+ display: inline-flex;
437
+ align-items: center;
438
+ gap: var(--spacing-xs);
439
+ }
440
+
441
+ .meta-item svg {
442
+ flex-shrink: 0;
443
+ }
444
+
445
+ .meta-item a {
446
+ color: var(--text-secondary);
447
+ transition: color var(--transition-fast);
448
+ }
449
+
450
+ .meta-item a:hover {
451
+ color: var(--primary-color);
452
+ }
453
+
454
+ /* 文章摘要 */
455
+ .post-excerpt {
456
+ margin-bottom: var(--spacing-md);
457
+ color: var(--text-secondary);
458
+ line-height: var(--leading-relaxed);
459
+ }
460
+
461
+ /* 阅读更多 */
462
+ .read-more {
463
+ display: inline-flex;
464
+ align-items: center;
465
+ gap: var(--spacing-xs);
466
+ font-size: var(--text-sm);
467
+ font-weight: 500;
468
+ color: var(--primary-color);
469
+ transition: gap var(--transition-fast);
470
+ }
471
+
472
+ .read-more:hover {
473
+ gap: var(--spacing-sm);
474
+ }
475
+
476
+ /* ===== 文章页 ===== */
477
+ .post-article {
478
+ max-width: var(--content-max);
479
+ }
480
+
481
+ .post-header {
482
+ margin-bottom: var(--spacing-xl);
483
+ padding-bottom: var(--spacing-xl);
484
+ border-bottom: 1px solid var(--border-color);
485
+ }
486
+
487
+ .post-header .post-title {
488
+ margin-bottom: var(--spacing-md);
489
+ font-size: var(--text-3xl);
490
+ }
491
+
492
+ .post-header .post-cover {
493
+ margin-top: var(--spacing-lg);
494
+ border-radius: var(--radius-lg);
495
+ }
496
+
497
+ /* 文章标签 */
498
+ .post-tags {
499
+ display: flex;
500
+ flex-wrap: wrap;
501
+ align-items: center;
502
+ gap: var(--spacing-sm);
503
+ margin-top: var(--spacing-xl);
504
+ padding-top: var(--spacing-lg);
505
+ border-top: 1px solid var(--border-color);
506
+ color: var(--text-muted);
507
+ }
508
+
509
+ .post-tags svg {
510
+ flex-shrink: 0;
511
+ }
512
+
513
+ .tag-link {
514
+ display: inline-block;
515
+ padding: var(--spacing-xs) var(--spacing-sm);
516
+ font-size: var(--text-sm);
517
+ color: var(--primary-color);
518
+ background-color: var(--primary-light);
519
+ border-radius: var(--radius-full);
520
+ transition: all var(--transition-fast);
521
+ }
522
+
523
+ .tag-link:hover {
524
+ color: var(--text-inverse);
525
+ background-color: var(--primary-color);
526
+ }
527
+
528
+ /* 版权信息 */
529
+ .post-copyright {
530
+ margin-top: var(--spacing-xl);
531
+ padding: var(--spacing-lg);
532
+ font-size: var(--text-sm);
533
+ color: var(--text-secondary);
534
+ background-color: var(--bg-secondary);
535
+ border-radius: var(--radius-md);
536
+ border-left: 4px solid var(--primary-color);
537
+ }
538
+
539
+ .post-copyright p {
540
+ margin-bottom: var(--spacing-xs);
541
+ }
542
+
543
+ .post-copyright p:last-child {
544
+ margin-bottom: 0;
545
+ }
546
+
547
+ .post-copyright a {
548
+ color: var(--primary-color);
549
+ }
550
+
551
+ /* 文章导航 */
552
+ .post-nav {
553
+ display: flex;
554
+ gap: var(--spacing-lg);
555
+ margin-top: var(--spacing-2xl);
556
+ }
557
+
558
+ .post-nav-item {
559
+ flex: 1;
560
+ display: flex;
561
+ flex-direction: column;
562
+ gap: var(--spacing-xs);
563
+ padding: var(--spacing-lg);
564
+ background-color: var(--bg-secondary);
565
+ border-radius: var(--radius-md);
566
+ border: 1px solid var(--border-color);
567
+ transition: all var(--transition-fast);
568
+ }
569
+
570
+ .post-nav-item:hover {
571
+ border-color: var(--primary-color);
572
+ background-color: var(--primary-light);
573
+ }
574
+
575
+ .post-nav-item.disabled {
576
+ opacity: 0;
577
+ pointer-events: none;
578
+ }
579
+
580
+ .post-nav-item.next {
581
+ text-align: right;
582
+ }
583
+
584
+ .post-nav-label {
585
+ font-size: var(--text-sm);
586
+ color: var(--text-muted);
587
+ }
588
+
589
+ .post-nav-title {
590
+ font-weight: 500;
591
+ color: var(--text-primary);
592
+ }
593
+
594
+ /* ===== TOC 目录 ===== */
595
+ .post-toc,
596
+ .doc-toc {
597
+ position: sticky;
598
+ top: calc(var(--header-height) + var(--spacing-lg));
599
+ max-height: calc(100vh - var(--header-height) - var(--spacing-2xl));
600
+ overflow-y: auto;
601
+ }
602
+
603
+ .toc-wrapper {
604
+ padding: var(--spacing-md);
605
+ background-color: var(--bg-secondary);
606
+ border-radius: var(--radius-md);
607
+ border: 1px solid var(--border-color);
608
+ }
609
+
610
+ .toc-title {
611
+ margin-bottom: var(--spacing-md);
612
+ font-size: var(--text-sm);
613
+ font-weight: 600;
614
+ color: var(--text-muted);
615
+ text-transform: uppercase;
616
+ letter-spacing: 0.05em;
617
+ }
618
+
619
+ .toc-content {
620
+ font-size: var(--text-sm);
621
+ }
622
+
623
+ .toc-content ol {
624
+ list-style: none;
625
+ padding-left: 0;
626
+ }
627
+
628
+ .toc-content ol ol {
629
+ padding-left: var(--spacing-md);
630
+ }
631
+
632
+ .toc-content li {
633
+ margin-bottom: var(--spacing-xs);
634
+ }
635
+
636
+ .toc-content a {
637
+ display: block;
638
+ padding: var(--spacing-xs) 0;
639
+ color: var(--text-secondary);
640
+ transition: color var(--transition-fast);
641
+ }
642
+
643
+ .toc-content a:hover {
644
+ color: var(--primary-color);
645
+ }
646
+
647
+ .toc-content .active > a {
648
+ color: var(--primary-color);
649
+ font-weight: 500;
650
+ }
651
+
652
+ /* ===== 博客侧边栏 ===== */
653
+ .blog-sidebar {
654
+ display: flex;
655
+ flex-direction: column;
656
+ gap: var(--spacing-lg);
657
+ }
658
+
659
+ .sidebar-widget {
660
+ padding: var(--spacing-lg);
661
+ background-color: var(--bg-secondary);
662
+ border-radius: var(--radius-md);
663
+ border: 1px solid var(--border-color);
664
+ }
665
+
666
+ .widget-title {
667
+ margin-bottom: var(--spacing-md);
668
+ font-size: var(--text-sm);
669
+ font-weight: 600;
670
+ color: var(--text-muted);
671
+ text-transform: uppercase;
672
+ letter-spacing: 0.05em;
673
+ }
674
+
675
+ /* 作者信息 */
676
+ .author-widget {
677
+ text-align: center;
678
+ }
679
+
680
+ .author-avatar {
681
+ width: 80px;
682
+ height: 80px;
683
+ margin: 0 auto var(--spacing-md);
684
+ border-radius: var(--radius-full);
685
+ overflow: hidden;
686
+ }
687
+
688
+ .author-avatar img {
689
+ width: 100%;
690
+ height: 100%;
691
+ object-fit: cover;
692
+ }
693
+
694
+ .avatar-placeholder {
695
+ display: flex;
696
+ align-items: center;
697
+ justify-content: center;
698
+ width: 100%;
699
+ height: 100%;
700
+ font-size: var(--text-2xl);
701
+ font-weight: 700;
702
+ color: var(--text-inverse);
703
+ background-color: var(--primary-color);
704
+ }
705
+
706
+ .author-name {
707
+ margin-bottom: var(--spacing-xs);
708
+ font-size: var(--text-lg);
709
+ font-weight: 600;
710
+ }
711
+
712
+ .author-desc {
713
+ margin-bottom: var(--spacing-md);
714
+ font-size: var(--text-sm);
715
+ color: var(--text-muted);
716
+ }
717
+
718
+ .author-stats {
719
+ display: flex;
720
+ justify-content: center;
721
+ gap: var(--spacing-lg);
722
+ padding-top: var(--spacing-md);
723
+ border-top: 1px solid var(--border-color);
724
+ }
725
+
726
+ .author-about {
727
+ display: flex;
728
+ justify-content: center;
729
+ align-items: center;
730
+ width: calc(100% - 40px);
731
+ margin-top: var(--spacing-md);
732
+ margin-left: 20px;
733
+ margin-right: 20px;
734
+ height: 35px;
735
+ color: var(--text-inverse);
736
+ border-radius: var(--radius-md);
737
+ background-color: var(--primary-color);
738
+ }
739
+
740
+ .stat-item {
741
+ text-align: center;
742
+ }
743
+
744
+ .stat-count {
745
+ display: block;
746
+ font-size: var(--text-xl);
747
+ font-weight: 700;
748
+ color: var(--primary-color);
749
+ }
750
+
751
+ .stat-label {
752
+ font-size: var(--text-xs);
753
+ color: var(--text-muted);
754
+ }
755
+
756
+ /* 最新文章 */
757
+ .recent-posts-list {
758
+ list-style: none;
759
+ }
760
+
761
+ .recent-post-item {
762
+ padding: var(--spacing-sm) 0;
763
+ border-bottom: 1px solid var(--border-light);
764
+ }
765
+
766
+ .recent-post-item:last-child {
767
+ border-bottom: none;
768
+ padding-bottom: 0;
769
+ }
770
+
771
+ .recent-post-item a {
772
+ display: flex;
773
+ justify-content: space-between;
774
+ gap: var(--spacing-sm);
775
+ color: var(--text-secondary);
776
+ transition: color var(--transition-fast);
777
+ }
778
+
779
+ .recent-post-item a:hover {
780
+ color: var(--primary-color);
781
+ }
782
+
783
+ .recent-post-title {
784
+ flex: 1;
785
+ overflow: hidden;
786
+ text-overflow: ellipsis;
787
+ white-space: nowrap;
788
+ }
789
+
790
+ .recent-post-date {
791
+ flex-shrink: 0;
792
+ font-size: var(--text-xs);
793
+ color: var(--text-muted);
794
+ }
795
+
796
+ /* 侧边栏标签 */
797
+ .sidebar-tags {
798
+ display: flex;
799
+ flex-wrap: wrap;
800
+ gap: var(--spacing-xs);
801
+ }
802
+
803
+ .sidebar-tag {
804
+ display: inline-flex;
805
+ align-items: center;
806
+ gap: var(--spacing-xs);
807
+ padding: var(--spacing-xs) var(--spacing-sm);
808
+ font-size: var(--text-xs);
809
+ color: var(--text-secondary);
810
+ background-color: var(--bg-tertiary);
811
+ border-radius: var(--radius-full);
812
+ transition: all var(--transition-fast);
813
+ }
814
+
815
+ .sidebar-tag:hover {
816
+ color: var(--primary-color);
817
+ background-color: var(--primary-light);
818
+ }
819
+
820
+ .sidebar-tag .tag-count {
821
+ font-size: var(--text-xs);
822
+ color: var(--text-muted);
823
+ }
824
+
825
+ /* 归档列表 */
826
+ .archives-list {
827
+ list-style: none;
828
+ }
829
+
830
+ .archives-list .archive-item {
831
+ padding: var(--spacing-xs) 0;
832
+ }
833
+
834
+ .archives-list .archive-item a {
835
+ display: flex;
836
+ justify-content: space-between;
837
+ color: var(--text-secondary);
838
+ transition: color var(--transition-fast);
839
+ }
840
+
841
+ .archives-list .archive-item a:hover {
842
+ color: var(--primary-color);
843
+ }
844
+
845
+ .archives-list .archive-count {
846
+ font-size: var(--text-xs);
847
+ color: var(--text-muted);
848
+ }
849
+
850
+ /* ===== 归档页 ===== */
851
+ .archive-wrapper {
852
+ max-width: var(--content-max);
853
+ margin: 0 auto;
854
+ padding: var(--spacing-xl) 0;
855
+ }
856
+
857
+ .archive-header {
858
+ margin-bottom: var(--spacing-xl);
859
+ text-align: center;
860
+ }
861
+
862
+ .archive-title {
863
+ display: inline-flex;
864
+ align-items: center;
865
+ gap: var(--spacing-sm);
866
+ margin-bottom: var(--spacing-sm);
867
+ font-size: var(--text-3xl);
868
+ }
869
+
870
+ .archive-count {
871
+ color: var(--text-muted);
872
+ }
873
+
874
+ .archive-year {
875
+ margin-top: var(--spacing-xl);
876
+ margin-bottom: var(--spacing-md);
877
+ padding-bottom: var(--spacing-sm);
878
+ font-size: var(--text-2xl);
879
+ font-weight: 700;
880
+ color: var(--primary-color);
881
+ border-bottom: 2px solid var(--primary-color);
882
+ }
883
+
884
+ .archive-list {
885
+ list-style: none;
886
+ }
887
+
888
+ .archive-content .archive-item {
889
+ display: flex;
890
+ align-items: center;
891
+ gap: var(--spacing-md);
892
+ padding: var(--spacing-sm) 0;
893
+ border-bottom: 1px dashed var(--border-light);
894
+ }
895
+
896
+ .archive-content .archive-date {
897
+ flex-shrink: 0;
898
+ font-family: var(--font-mono);
899
+ font-size: var(--text-sm);
900
+ color: var(--text-muted);
901
+ }
902
+
903
+ .archive-content .archive-link {
904
+ color: var(--text-primary);
905
+ transition: color var(--transition-fast);
906
+ }
907
+
908
+ .archive-content .archive-link:hover {
909
+ color: var(--primary-color);
910
+ }
911
+
912
+ /* ===== 标签云页 ===== */
913
+ .tags-wrapper {
914
+ max-width: var(--content-max);
915
+ margin: 0 auto;
916
+ padding: var(--spacing-xl) 0;
917
+ }
918
+
919
+ .tags-header {
920
+ margin-bottom: var(--spacing-xl);
921
+ text-align: center;
922
+ }
923
+
924
+ .tags-title {
925
+ margin-bottom: var(--spacing-sm);
926
+ font-size: var(--text-3xl);
927
+ }
928
+
929
+ .tags-count {
930
+ color: var(--text-muted);
931
+ }
932
+
933
+ .tags-cloud {
934
+ display: flex;
935
+ flex-wrap: wrap;
936
+ justify-content: center;
937
+ gap: var(--spacing-md);
938
+ padding: var(--spacing-xl);
939
+ background-color: var(--bg-secondary);
940
+ border-radius: var(--radius-lg);
941
+ border: 1px solid var(--border-color);
942
+ }
943
+
944
+ .tag-cloud-item {
945
+ display: inline-flex;
946
+ align-items: center;
947
+ gap: var(--spacing-xs);
948
+ padding: var(--spacing-xs) var(--spacing-md);
949
+ color: var(--text-secondary);
950
+ background-color: var(--bg-primary);
951
+ border-radius: var(--radius-full);
952
+ border: 1px solid var(--border-color);
953
+ transition: all var(--transition-fast);
954
+ }
955
+
956
+ .tag-cloud-item:hover {
957
+ color: var(--primary-color);
958
+ border-color: var(--primary-color);
959
+ background-color: var(--primary-light);
960
+ }
961
+
962
+ .tag-cloud-item .tag-count {
963
+ font-size: var(--text-xs);
964
+ color: var(--text-muted);
965
+ }
966
+
967
+ /* ===== 分页 ===== */
968
+ .pagination {
969
+ display: flex;
970
+ justify-content: center;
971
+ align-items: center;
972
+ gap: var(--spacing-md);
973
+ margin-top: var(--spacing-2xl);
974
+ }
975
+
976
+ .page-link {
977
+ display: inline-flex;
978
+ align-items: center;
979
+ gap: var(--spacing-xs);
980
+ padding: var(--spacing-sm) var(--spacing-md);
981
+ font-size: var(--text-sm);
982
+ font-weight: 500;
983
+ color: var(--text-secondary);
984
+ background-color: var(--bg-secondary);
985
+ border-radius: var(--radius-md);
986
+ border: 1px solid var(--border-color);
987
+ transition: all var(--transition-fast);
988
+ }
989
+
990
+ .page-link:hover:not(.disabled) {
991
+ color: var(--primary-color);
992
+ border-color: var(--primary-color);
993
+ }
994
+
995
+ .page-link.disabled {
996
+ opacity: 0.5;
997
+ cursor: not-allowed;
998
+ }
999
+
1000
+ .page-numbers {
1001
+ display: flex;
1002
+ align-items: center;
1003
+ gap: var(--spacing-xs);
1004
+ }
1005
+
1006
+ .page-number {
1007
+ display: inline-flex;
1008
+ align-items: center;
1009
+ justify-content: center;
1010
+ min-width: 36px;
1011
+ height: 36px;
1012
+ font-size: var(--text-sm);
1013
+ color: var(--text-secondary);
1014
+ background-color: var(--bg-secondary);
1015
+ border-radius: var(--radius-md);
1016
+ border: 1px solid var(--border-color);
1017
+ transition: all var(--transition-fast);
1018
+ }
1019
+
1020
+ .page-number:hover:not(.current) {
1021
+ color: var(--primary-color);
1022
+ border-color: var(--primary-color);
1023
+ }
1024
+
1025
+ .page-number.current {
1026
+ color: var(--text-inverse);
1027
+ background-color: var(--primary-color);
1028
+ border-color: var(--primary-color);
1029
+ }
1030
+
1031
+ .page-ellipsis {
1032
+ padding: 0 var(--spacing-xs);
1033
+ color: var(--text-muted);
1034
+ }
1035
+
1036
+ /* ===== 文档侧边栏 ===== */
1037
+ .doc-sidebar {
1038
+ position: sticky;
1039
+ top: calc(var(--header-height) + var(--spacing-lg));
1040
+ max-height: calc(100vh - var(--header-height) - var(--spacing-2xl));
1041
+ overflow-y: auto;
1042
+ }
1043
+
1044
+ .doc-sidebar-wrapper {
1045
+ padding: var(--spacing-md);
1046
+ background-color: var(--bg-secondary);
1047
+ border-radius: var(--radius-lg);
1048
+ border: 1px solid var(--border-color);
1049
+ }
1050
+
1051
+ .doc-sidebar-title {
1052
+ margin-bottom: var(--spacing-md);
1053
+ padding-bottom: var(--spacing-sm);
1054
+ font-size: var(--text-base);
1055
+ font-weight: 600;
1056
+ color: var(--text-primary);
1057
+ border-bottom: 1px solid var(--border-color);
1058
+ }
1059
+
1060
+ /* 树形目录 */
1061
+ .doc-tree {
1062
+ font-size: var(--text-sm);
1063
+ }
1064
+
1065
+ .tree-item {
1066
+ user-select: none;
1067
+ }
1068
+
1069
+ /* 每一行 */
1070
+ .tree-row {
1071
+ display: flex;
1072
+ align-items: center;
1073
+ height: 32px;
1074
+ padding-right: var(--spacing-sm);
1075
+ border-radius: var(--radius-sm);
1076
+ cursor: pointer;
1077
+ transition: background-color var(--transition-fast);
1078
+ }
1079
+
1080
+ .tree-row:hover {
1081
+ background-color: var(--bg-hover);
1082
+ }
1083
+
1084
+ .tree-row.active {
1085
+ background-color: var(--primary-light);
1086
+ }
1087
+
1088
+ .tree-row.active .tree-label {
1089
+ color: var(--primary-color);
1090
+ font-weight: 500;
1091
+ }
1092
+
1093
+ /* 展开箭头 */
1094
+ .tree-arrow {
1095
+ display: flex;
1096
+ align-items: center;
1097
+ justify-content: center;
1098
+ width: 20px;
1099
+ height: 20px;
1100
+ color: var(--text-muted);
1101
+ transition: transform var(--transition-fast);
1102
+ flex-shrink: 0;
1103
+ }
1104
+
1105
+ .tree-arrow.open {
1106
+ transform: rotate(90deg);
1107
+ }
1108
+
1109
+ .tree-arrow-placeholder {
1110
+ width: 20px;
1111
+ height: 20px;
1112
+ flex-shrink: 0;
1113
+ }
1114
+
1115
+ /* 标签文字 */
1116
+ .tree-label {
1117
+ flex: 1;
1118
+ overflow: hidden;
1119
+ text-overflow: ellipsis;
1120
+ white-space: nowrap;
1121
+ color: var(--text-secondary);
1122
+ line-height: 32px;
1123
+ }
1124
+
1125
+ .tree-label.tree-folder {
1126
+ color: var(--text-primary);
1127
+ font-weight: 500;
1128
+ }
1129
+
1130
+ a.tree-label:hover {
1131
+ color: var(--primary-color);
1132
+ }
1133
+
1134
+ /* 子项容器 */
1135
+ .tree-children {
1136
+ display: none;
1137
+ }
1138
+
1139
+ .tree-children.open {
1140
+ display: block;
1141
+ }
1142
+
1143
+ /* 空状态 */
1144
+ .doc-sidebar-empty {
1145
+ padding: var(--spacing-xl);
1146
+ font-size: var(--text-sm);
1147
+ color: var(--text-muted);
1148
+ text-align: center;
1149
+ }
1150
+
1151
+ /* 文档侧边栏切换按钮 */
1152
+ .doc-sidebar-toggle {
1153
+ display: none;
1154
+ position: fixed;
1155
+ bottom: var(--spacing-lg);
1156
+ left: var(--spacing-lg);
1157
+ z-index: var(--z-fixed);
1158
+ width: 48px;
1159
+ height: 48px;
1160
+ align-items: center;
1161
+ justify-content: center;
1162
+ color: var(--text-inverse);
1163
+ background-color: var(--primary-color);
1164
+ border-radius: var(--radius-full);
1165
+ box-shadow: var(--shadow-lg);
1166
+ transition: all var(--transition-fast);
1167
+ }
1168
+
1169
+ .doc-sidebar-toggle:hover {
1170
+ background-color: var(--primary-hover);
1171
+ transform: scale(1.1);
1172
+ }
1173
+
1174
+ /* ===== 文档页 ===== */
1175
+ .doc-article {
1176
+ max-width: var(--content-max);
1177
+ padding: var(--spacing-xl) var(--spacing-lg);
1178
+ }
1179
+
1180
+ .doc-header {
1181
+ margin-bottom: var(--spacing-xl);
1182
+ padding-bottom: var(--spacing-lg);
1183
+ border-bottom: 1px solid var(--border-color);
1184
+ }
1185
+
1186
+ .doc-title {
1187
+ margin-bottom: var(--spacing-md);
1188
+ font-size: var(--text-3xl);
1189
+ font-weight: 700;
1190
+ }
1191
+
1192
+ .doc-meta {
1193
+ display: flex;
1194
+ flex-wrap: wrap;
1195
+ gap: var(--spacing-md);
1196
+ font-size: var(--text-sm);
1197
+ color: var(--text-muted);
1198
+ }
1199
+
1200
+ .doc-meta .meta-item {
1201
+ display: inline-flex;
1202
+ align-items: center;
1203
+ gap: var(--spacing-xs);
1204
+ }
1205
+
1206
+ /* 文档导航 */
1207
+ .doc-nav {
1208
+ display: flex;
1209
+ gap: var(--spacing-lg);
1210
+ margin-top: var(--spacing-2xl);
1211
+ padding-top: var(--spacing-xl);
1212
+ border-top: 1px solid var(--border-color);
1213
+ }
1214
+
1215
+ .doc-nav-item {
1216
+ flex: 1;
1217
+ display: flex;
1218
+ align-items: center;
1219
+ gap: var(--spacing-sm);
1220
+ padding: var(--spacing-lg);
1221
+ background-color: var(--bg-secondary);
1222
+ border-radius: var(--radius-md);
1223
+ border: 1px solid var(--border-color);
1224
+ transition: all var(--transition-fast);
1225
+ }
1226
+
1227
+ .doc-nav-item:hover {
1228
+ border-color: var(--primary-color);
1229
+ background-color: var(--primary-light);
1230
+ }
1231
+
1232
+ .doc-nav-item.disabled {
1233
+ opacity: 0;
1234
+ pointer-events: none;
1235
+ }
1236
+
1237
+ .doc-nav-item.next {
1238
+ flex-direction: row-reverse;
1239
+ text-align: right;
1240
+ }
1241
+
1242
+ .doc-nav-text {
1243
+ display: flex;
1244
+ flex-direction: column;
1245
+ gap: var(--spacing-xs);
1246
+ }
1247
+
1248
+ .doc-nav-label {
1249
+ font-size: var(--text-xs);
1250
+ color: var(--text-muted);
1251
+ }
1252
+
1253
+ .doc-nav-title {
1254
+ font-weight: 500;
1255
+ color: var(--text-primary);
1256
+ }
1257
+
1258
+ /* ===== 搜索模态框 ===== */
1259
+ .search-modal {
1260
+ display: none;
1261
+ position: fixed;
1262
+ top: 0;
1263
+ left: 0;
1264
+ right: 0;
1265
+ bottom: 0;
1266
+ z-index: var(--z-modal);
1267
+ background-color: rgba(0, 0, 0, 0.5);
1268
+ backdrop-filter: blur(4px);
1269
+ align-items: flex-start;
1270
+ justify-content: center;
1271
+ padding-top: 10vh;
1272
+ }
1273
+
1274
+ .search-modal.active {
1275
+ display: flex;
1276
+ }
1277
+
1278
+ .search-container {
1279
+ width: 100%;
1280
+ max-width: 600px;
1281
+ max-height: 80vh;
1282
+ margin: 0 var(--spacing-md);
1283
+ background-color: var(--bg-primary);
1284
+ border-radius: var(--radius-lg);
1285
+ box-shadow: var(--shadow-xl);
1286
+ overflow: hidden;
1287
+ display: flex;
1288
+ flex-direction: column;
1289
+ }
1290
+
1291
+ .search-header {
1292
+ padding: var(--spacing-md);
1293
+ border-bottom: 1px solid var(--border-color);
1294
+ }
1295
+
1296
+ .search-input-wrapper {
1297
+ display: flex;
1298
+ align-items: center;
1299
+ gap: var(--spacing-sm);
1300
+ padding: var(--spacing-sm) var(--spacing-md);
1301
+ background-color: var(--bg-secondary);
1302
+ border-radius: var(--radius-md);
1303
+ border: 1px solid var(--border-color);
1304
+ }
1305
+
1306
+ .search-input-wrapper:focus-within {
1307
+ border-color: var(--primary-color);
1308
+ }
1309
+
1310
+ .search-icon {
1311
+ flex-shrink: 0;
1312
+ color: var(--text-muted);
1313
+ }
1314
+
1315
+ .search-input {
1316
+ flex: 1;
1317
+ border: none;
1318
+ background: none;
1319
+ font-size: var(--text-base);
1320
+ color: var(--text-primary);
1321
+ outline: none;
1322
+ }
1323
+
1324
+ .search-input::placeholder {
1325
+ color: var(--text-muted);
1326
+ }
1327
+
1328
+ .search-close {
1329
+ flex-shrink: 0;
1330
+ display: flex;
1331
+ align-items: center;
1332
+ justify-content: center;
1333
+ width: 32px;
1334
+ height: 32px;
1335
+ color: var(--text-muted);
1336
+ border-radius: var(--radius-sm);
1337
+ transition: all var(--transition-fast);
1338
+ }
1339
+
1340
+ .search-close:hover {
1341
+ color: var(--text-primary);
1342
+ background-color: var(--bg-hover);
1343
+ }
1344
+
1345
+ .search-shortcut {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ gap: var(--spacing-sm);
1349
+ margin-top: var(--spacing-sm);
1350
+ font-size: var(--text-xs);
1351
+ color: var(--text-muted);
1352
+ }
1353
+
1354
+ .search-shortcut kbd {
1355
+ padding: 2px 6px;
1356
+ font-family: var(--font-mono);
1357
+ font-size: var(--text-xs);
1358
+ background-color: var(--bg-secondary);
1359
+ border: 1px solid var(--border-color);
1360
+ border-radius: var(--radius-sm);
1361
+ }
1362
+
1363
+ .shortcut-divider {
1364
+ color: var(--border-color);
1365
+ }
1366
+
1367
+ .search-results {
1368
+ flex: 1;
1369
+ overflow-y: auto;
1370
+ padding: var(--spacing-md);
1371
+ }
1372
+
1373
+ .search-tip,
1374
+ .search-loading,
1375
+ .search-empty,
1376
+ .search-error {
1377
+ padding: var(--spacing-xl);
1378
+ text-align: center;
1379
+ color: var(--text-muted);
1380
+ }
1381
+
1382
+ .search-result-item {
1383
+ display: block;
1384
+ padding: var(--spacing-md);
1385
+ margin-bottom: var(--spacing-sm);
1386
+ background-color: var(--bg-secondary);
1387
+ border-radius: var(--radius-md);
1388
+ border: 1px solid var(--border-color);
1389
+ transition: all var(--transition-fast);
1390
+ }
1391
+
1392
+ .search-result-item:hover {
1393
+ border-color: var(--primary-color);
1394
+ background-color: var(--primary-light);
1395
+ }
1396
+
1397
+ .search-result-title {
1398
+ font-weight: 600;
1399
+ color: var(--text-primary);
1400
+ margin-bottom: var(--spacing-xs);
1401
+ }
1402
+
1403
+ .search-result-excerpt {
1404
+ font-size: var(--text-sm);
1405
+ color: var(--text-secondary);
1406
+ margin-bottom: var(--spacing-xs);
1407
+ }
1408
+
1409
+ .search-result-tags {
1410
+ display: flex;
1411
+ flex-wrap: wrap;
1412
+ gap: var(--spacing-xs);
1413
+ margin-bottom: var(--spacing-xs);
1414
+ }
1415
+
1416
+ .search-tag {
1417
+ display: inline-block;
1418
+ padding: 2px 8px;
1419
+ font-size: var(--text-xs);
1420
+ color: var(--primary-color);
1421
+ background-color: var(--primary-light);
1422
+ border-radius: var(--radius-full);
1423
+ }
1424
+
1425
+ .search-result-date {
1426
+ font-size: var(--text-xs);
1427
+ color: var(--text-muted);
1428
+ }
1429
+
1430
+ .search-result-item mark {
1431
+ background-color: rgba(245, 158, 11, 0.3);
1432
+ color: inherit;
1433
+ padding: 0 2px;
1434
+ border-radius: 2px;
1435
+ }
1436
+
1437
+ .search-footer {
1438
+ padding: var(--spacing-sm) var(--spacing-md);
1439
+ border-top: 1px solid var(--border-color);
1440
+ text-align: center;
1441
+ }
1442
+
1443
+ .search-footer-text {
1444
+ font-size: var(--text-xs);
1445
+ color: var(--text-muted);
1446
+ }
1447
+
1448
+ .search-footer kbd {
1449
+ padding: 2px 6px;
1450
+ font-family: var(--font-mono);
1451
+ font-size: var(--text-xs);
1452
+ background-color: var(--bg-secondary);
1453
+ border: 1px solid var(--border-color);
1454
+ border-radius: var(--radius-sm);
1455
+ }
1456
+
1457
+ /* ===== 页脚 ===== */
1458
+ .site-footer {
1459
+ padding: var(--spacing-2xl) 0;
1460
+ background-color: var(--bg-secondary);
1461
+ border-top: 1px solid var(--border-color);
1462
+ }
1463
+
1464
+ .footer-container {
1465
+ max-width: var(--container-max);
1466
+ margin: 0 auto;
1467
+ padding: 0 var(--spacing-lg);
1468
+ }
1469
+
1470
+ .footer-content {
1471
+ display: flex;
1472
+ flex-wrap: wrap;
1473
+ justify-content: center;
1474
+ align-items: center;
1475
+ gap: var(--spacing-md);
1476
+ text-align: center;
1477
+ font-size: var(--text-sm);
1478
+ color: var(--text-muted);
1479
+ }
1480
+
1481
+ .footer-content a {
1482
+ color: var(--text-secondary);
1483
+ transition: color var(--transition-fast);
1484
+ }
1485
+
1486
+ .footer-content a:hover {
1487
+ color: var(--primary-color);
1488
+ }
1489
+
1490
+ .footer-social {
1491
+ display: flex;
1492
+ gap: var(--spacing-md);
1493
+ }
1494
+
1495
+ .footer-social a {
1496
+ display: flex;
1497
+ align-items: center;
1498
+ justify-content: center;
1499
+ width: 36px;
1500
+ height: 36px;
1501
+ color: var(--text-muted);
1502
+ background-color: var(--bg-tertiary);
1503
+ border-radius: var(--radius-full);
1504
+ transition: all var(--transition-fast);
1505
+ }
1506
+
1507
+ .footer-social a:hover {
1508
+ color: var(--primary-color);
1509
+ background-color: var(--primary-light);
1510
+ }
1511
+
1512
+ .footer-powered .separator {
1513
+ margin: 0 var(--spacing-sm);
1514
+ color: var(--border-color);
1515
+ }
1516
+
1517
+ /* ===== 普通页面 ===== */
1518
+ .page-single {
1519
+ max-width: var(--content-max);
1520
+ margin: 0 auto;
1521
+ }
1522
+
1523
+ .page-article {
1524
+ padding: var(--spacing-xl) 0;
1525
+ }
1526
+
1527
+ .page-header {
1528
+ margin-bottom: var(--spacing-xl);
1529
+ text-align: center;
1530
+ }
1531
+
1532
+ .page-title {
1533
+ font-size: var(--text-3xl);
1534
+ font-weight: 700;
1535
+ }
1536
+
1537
+ /* ===== 图片灯箱 ===== */
1538
+ .lightbox {
1539
+ display: none;
1540
+ position: fixed;
1541
+ top: 0;
1542
+ left: 0;
1543
+ right: 0;
1544
+ bottom: 0;
1545
+ z-index: var(--z-modal);
1546
+ background-color: rgba(0, 0, 0, 0.9);
1547
+ align-items: center;
1548
+ justify-content: center;
1549
+ cursor: zoom-out;
1550
+ }
1551
+
1552
+ .lightbox.active {
1553
+ display: flex;
1554
+ }
1555
+
1556
+ .lightbox img {
1557
+ max-width: 90vw;
1558
+ max-height: 90vh;
1559
+ border-radius: var(--radius-md);
1560
+ box-shadow: var(--shadow-xl);
1561
+ }
1562
+
1563
+ /* ===== 滚动条样式 ===== */
1564
+ ::-webkit-scrollbar {
1565
+ width: 8px;
1566
+ height: 8px;
1567
+ }
1568
+
1569
+ ::-webkit-scrollbar-track {
1570
+ background-color: var(--bg-secondary);
1571
+ }
1572
+
1573
+ ::-webkit-scrollbar-thumb {
1574
+ background-color: var(--border-color);
1575
+ border-radius: var(--radius-full);
1576
+ }
1577
+
1578
+ ::-webkit-scrollbar-thumb:hover {
1579
+ background-color: var(--text-muted);
1580
+ }
1581
+
1582
+ /* ===== 选中文本 ===== */
1583
+ ::selection {
1584
+ background-color: var(--primary-color);
1585
+ color: var(--text-inverse);
1586
+ }
1587
+
1588
+ /* ===== Markdown 内容样式 ===== */
1589
+ .markdown-body {
1590
+ font-size: var(--text-base);
1591
+ line-height: var(--leading-relaxed);
1592
+ color: var(--text-primary);
1593
+ word-wrap: break-word;
1594
+ }
1595
+
1596
+ .markdown-body h1,
1597
+ .markdown-body h2,
1598
+ .markdown-body h3,
1599
+ .markdown-body h4,
1600
+ .markdown-body h5,
1601
+ .markdown-body h6 {
1602
+ margin-top: var(--spacing-xl);
1603
+ margin-bottom: var(--spacing-md);
1604
+ font-weight: 600;
1605
+ line-height: var(--leading-tight);
1606
+ color: var(--text-primary);
1607
+ }
1608
+
1609
+ .markdown-body h1 { font-size: var(--text-3xl); }
1610
+ .markdown-body h2 { font-size: var(--text-2xl); }
1611
+ .markdown-body h3 { font-size: var(--text-xl); }
1612
+ .markdown-body h4 { font-size: var(--text-lg); }
1613
+ .markdown-body h5 { font-size: var(--text-base); }
1614
+ .markdown-body h6 { font-size: var(--text-sm); color: var(--text-secondary); }
1615
+
1616
+ .markdown-body h1:first-child,
1617
+ .markdown-body h2:first-child,
1618
+ .markdown-body h3:first-child {
1619
+ margin-top: 0;
1620
+ }
1621
+
1622
+ .markdown-body p {
1623
+ margin-top: 0;
1624
+ margin-bottom: var(--spacing-md);
1625
+ }
1626
+
1627
+ .markdown-body a {
1628
+ color: var(--primary-color);
1629
+ text-decoration: none;
1630
+ transition: color var(--transition-fast);
1631
+ }
1632
+
1633
+ .markdown-body a:hover {
1634
+ color: var(--primary-hover);
1635
+ text-decoration: underline;
1636
+ }
1637
+
1638
+ .markdown-body strong {
1639
+ font-weight: 600;
1640
+ color: var(--text-primary);
1641
+ }
1642
+
1643
+ .markdown-body ul,
1644
+ .markdown-body ol {
1645
+ margin-top: 0;
1646
+ margin-bottom: var(--spacing-md);
1647
+ padding-left: var(--spacing-xl);
1648
+ }
1649
+
1650
+ .markdown-body li {
1651
+ margin-bottom: var(--spacing-xs);
1652
+ }
1653
+
1654
+ .markdown-body blockquote {
1655
+ margin: var(--spacing-md) 0;
1656
+ padding: var(--spacing-md) var(--spacing-lg);
1657
+ border-left: 4px solid var(--primary-color);
1658
+ background-color: var(--bg-secondary);
1659
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
1660
+ color: var(--text-secondary);
1661
+ }
1662
+
1663
+ .markdown-body code {
1664
+ padding: 0.2em 0.4em;
1665
+ font-family: var(--font-mono);
1666
+ font-size: 0.9em;
1667
+ background-color: var(--code-bg);
1668
+ border: 1px solid var(--code-border);
1669
+ border-radius: var(--radius-sm);
1670
+ color: var(--text-primary);
1671
+ }
1672
+
1673
+ .markdown-body pre {
1674
+ margin: var(--spacing-md) 0;
1675
+ padding: var(--spacing-md);
1676
+ overflow-x: auto;
1677
+ font-family: var(--font-mono);
1678
+ font-size: var(--text-sm);
1679
+ line-height: 1.6;
1680
+ background-color: var(--code-bg);
1681
+ border: 1px solid var(--code-border);
1682
+ border-radius: var(--radius-md);
1683
+ }
1684
+
1685
+ .markdown-body pre code {
1686
+ padding: 0;
1687
+ font-size: inherit;
1688
+ background: transparent;
1689
+ border: none;
1690
+ border-radius: 0;
1691
+ }
1692
+
1693
+ /* Hexo 代码高亮 - 隐藏行号,简洁显示 */
1694
+ .markdown-body figure.highlight {
1695
+ margin: var(--spacing-md) 0;
1696
+ background-color: var(--code-bg);
1697
+ border: 1px solid var(--code-border);
1698
+ border-radius: var(--radius-md);
1699
+ overflow: hidden;
1700
+ }
1701
+
1702
+ .markdown-body figure.highlight pre {
1703
+ margin: 0;
1704
+ padding: var(--spacing-md);
1705
+ background: transparent;
1706
+ border: none;
1707
+ }
1708
+
1709
+ .markdown-body figure.highlight table {
1710
+ width: 100%;
1711
+ margin: 0;
1712
+ border: none;
1713
+ }
1714
+
1715
+ .markdown-body figure.highlight td {
1716
+ padding: 0;
1717
+ border: none;
1718
+ }
1719
+
1720
+ /* 隐藏行号列 */
1721
+ .markdown-body figure.highlight .gutter {
1722
+ display: none;
1723
+ }
1724
+
1725
+ .markdown-body figure.highlight .code {
1726
+ width: 100%;
1727
+ }
1728
+
1729
+ .markdown-body figure.highlight .code pre {
1730
+ padding: var(--spacing-md);
1731
+ }
1732
+
1733
+ .markdown-body table {
1734
+ width: 100%;
1735
+ margin: var(--spacing-md) 0;
1736
+ border-collapse: collapse;
1737
+ border: 1px solid var(--border-color);
1738
+ }
1739
+
1740
+ .markdown-body th,
1741
+ .markdown-body td {
1742
+ padding: var(--spacing-sm) var(--spacing-md);
1743
+ border: 1px solid var(--border-color);
1744
+ text-align: left;
1745
+ }
1746
+
1747
+ .markdown-body th {
1748
+ font-weight: 600;
1749
+ background-color: var(--bg-secondary);
1750
+ }
1751
+
1752
+ .markdown-body hr {
1753
+ height: 1px;
1754
+ margin: var(--spacing-xl) 0;
1755
+ background-color: var(--border-color);
1756
+ border: none;
1757
+ }
1758
+
1759
+ .markdown-body img {
1760
+ max-width: 100%;
1761
+ height: auto;
1762
+ border-radius: var(--radius-md);
1763
+ box-shadow: var(--shadow-sm);
1764
+ }
1765
+
1766
+ /* ===== 响应式样式 ===== */
1767
+ @media (max-width: 1279px) {
1768
+ .doc-toc {
1769
+ display: none;
1770
+ }
1771
+ }
1772
+
1773
+ @media (max-width: 1024px) {
1774
+ .blog-layout {
1775
+ grid-template-columns: 1fr;
1776
+ }
1777
+
1778
+ .blog-sidebar {
1779
+ display: none;
1780
+ }
1781
+
1782
+ .post-toc {
1783
+ display: none;
1784
+ }
1785
+
1786
+ .post-layout {
1787
+ grid-template-columns: 1fr;
1788
+ max-width: var(--content-max);
1789
+ margin: 0 auto;
1790
+ }
1791
+ }
1792
+
1793
+ @media (max-width: 768px) {
1794
+ :root {
1795
+ --header-height: 56px;
1796
+ }
1797
+
1798
+ .site-nav {
1799
+ display: none;
1800
+ }
1801
+
1802
+ .menu-toggle {
1803
+ display: flex;
1804
+ }
1805
+
1806
+ .mobile-nav.active {
1807
+ display: block;
1808
+ }
1809
+
1810
+ .doc-layout {
1811
+ grid-template-columns: 1fr;
1812
+ }
1813
+
1814
+ .doc-sidebar {
1815
+ position: fixed;
1816
+ left: -100%;
1817
+ top: var(--header-height);
1818
+ width: 80%;
1819
+ max-width: 300px;
1820
+ height: calc(100vh - var(--header-height));
1821
+ z-index: var(--z-fixed);
1822
+ background-color: var(--bg-primary);
1823
+ box-shadow: var(--shadow-xl);
1824
+ transition: left var(--transition-slow);
1825
+ }
1826
+
1827
+ .doc-sidebar.active {
1828
+ left: 0;
1829
+ }
1830
+
1831
+ .doc-sidebar-toggle {
1832
+ display: flex;
1833
+ }
1834
+
1835
+ .pagination {
1836
+ flex-direction: column;
1837
+ gap: var(--spacing-sm);
1838
+ }
1839
+ }
1840
+
1841
+ @media (max-width: 480px) {
1842
+ .post-nav {
1843
+ flex-direction: column;
1844
+ }
1845
+
1846
+ .post-nav-item {
1847
+ width: 100%;
1848
+ }
1849
+
1850
+ .doc-nav {
1851
+ flex-direction: column;
1852
+ }
1853
+
1854
+ .doc-nav-item {
1855
+ width: 100%;
1856
+ }
1857
+ }