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,313 @@
1
+ /**
2
+ * Markdown 内容样式
3
+ */
4
+
5
+ .markdown-body {
6
+ font-size: var(--text-base);
7
+ line-height: var(--leading-relaxed);
8
+ color: var(--text-primary);
9
+ word-wrap: break-word;
10
+ }
11
+
12
+ /* 标题 */
13
+ .markdown-body h1,
14
+ .markdown-body h2,
15
+ .markdown-body h3,
16
+ .markdown-body h4,
17
+ .markdown-body h5,
18
+ .markdown-body h6 {
19
+ margin-top: var(--spacing-xl);
20
+ margin-bottom: var(--spacing-md);
21
+ font-weight: 600;
22
+ line-height: var(--leading-tight);
23
+ color: var(--text-primary);
24
+ }
25
+
26
+ .markdown-body h1 { font-size: var(--text-3xl); }
27
+ .markdown-body h2 { font-size: var(--text-2xl); }
28
+ .markdown-body h3 { font-size: var(--text-xl); }
29
+ .markdown-body h4 { font-size: var(--text-lg); }
30
+ .markdown-body h5 { font-size: var(--text-base); }
31
+ .markdown-body h6 { font-size: var(--text-sm); color: var(--text-secondary); }
32
+
33
+ .markdown-body h1:first-child,
34
+ .markdown-body h2:first-child,
35
+ .markdown-body h3:first-child {
36
+ margin-top: 0;
37
+ }
38
+
39
+ /* 锚点链接 */
40
+ .markdown-body h1:hover .headerlink,
41
+ .markdown-body h2:hover .headerlink,
42
+ .markdown-body h3:hover .headerlink,
43
+ .markdown-body h4:hover .headerlink {
44
+ opacity: 1;
45
+ }
46
+
47
+ .markdown-body .headerlink {
48
+ margin-left: var(--spacing-sm);
49
+ color: var(--primary-color);
50
+ text-decoration: none;
51
+ opacity: 0;
52
+ transition: opacity var(--transition-fast);
53
+ }
54
+
55
+ /* 段落 */
56
+ .markdown-body p {
57
+ margin-top: 0;
58
+ margin-bottom: var(--spacing-md);
59
+ }
60
+
61
+ /* 链接 */
62
+ .markdown-body a {
63
+ color: var(--primary-color);
64
+ text-decoration: none;
65
+ transition: color var(--transition-fast);
66
+ }
67
+
68
+ .markdown-body a:hover {
69
+ color: var(--primary-hover);
70
+ text-decoration: underline;
71
+ }
72
+
73
+ /* 强调 */
74
+ .markdown-body strong {
75
+ font-weight: 600;
76
+ color: var(--text-primary);
77
+ }
78
+
79
+ .markdown-body em {
80
+ font-style: italic;
81
+ }
82
+
83
+ /* 列表 */
84
+ .markdown-body ul,
85
+ .markdown-body ol {
86
+ margin-top: 0;
87
+ margin-bottom: var(--spacing-md);
88
+ padding-left: var(--spacing-xl);
89
+ }
90
+
91
+ .markdown-body li {
92
+ margin-bottom: var(--spacing-xs);
93
+ }
94
+
95
+ .markdown-body li > ul,
96
+ .markdown-body li > ol {
97
+ margin-top: var(--spacing-xs);
98
+ margin-bottom: 0;
99
+ }
100
+
101
+ /* 任务列表 */
102
+ .markdown-body .task-list-item {
103
+ list-style: none;
104
+ }
105
+
106
+ .markdown-body .task-list-item input {
107
+ margin-right: var(--spacing-sm);
108
+ }
109
+
110
+ /* 引用 */
111
+ .markdown-body blockquote {
112
+ margin: var(--spacing-md) 0;
113
+ padding: var(--spacing-md) var(--spacing-lg);
114
+ border-left: 4px solid var(--primary-color);
115
+ background-color: var(--bg-secondary);
116
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
117
+ color: var(--text-secondary);
118
+ }
119
+
120
+ .markdown-body blockquote > :first-child {
121
+ margin-top: 0;
122
+ }
123
+
124
+ .markdown-body blockquote > :last-child {
125
+ margin-bottom: 0;
126
+ }
127
+
128
+ /* 行内代码 */
129
+ .markdown-body code {
130
+ padding: 0.2em 0.4em;
131
+ font-family: var(--font-mono);
132
+ font-size: 0.9em;
133
+ background-color: var(--code-bg);
134
+ border: 1px solid var(--code-border);
135
+ border-radius: var(--radius-sm);
136
+ color: var(--text-primary);
137
+ }
138
+
139
+ /* 代码块 */
140
+ .markdown-body pre {
141
+ margin: var(--spacing-md) 0;
142
+ padding: var(--spacing-md);
143
+ overflow-x: auto;
144
+ font-family: var(--font-mono);
145
+ font-size: var(--text-sm);
146
+ line-height: 1.6;
147
+ background-color: var(--code-bg);
148
+ border: 1px solid var(--code-border);
149
+ border-radius: var(--radius-md);
150
+ }
151
+
152
+ .markdown-body pre code {
153
+ padding: 0;
154
+ font-size: inherit;
155
+ background: transparent;
156
+ border: none;
157
+ border-radius: 0;
158
+ }
159
+
160
+ /* 代码高亮 - 行号 */
161
+ .markdown-body figure.highlight {
162
+ margin: var(--spacing-md) 0;
163
+ overflow: hidden;
164
+ border-radius: var(--radius-md);
165
+ border: 1px solid var(--code-border);
166
+ }
167
+
168
+ .markdown-body figure.highlight pre {
169
+ margin: 0;
170
+ border: none;
171
+ border-radius: 0;
172
+ }
173
+
174
+ .markdown-body figure.highlight .gutter {
175
+ padding: var(--spacing-md);
176
+ padding-right: 0;
177
+ background-color: var(--code-bg);
178
+ border-right: 1px solid var(--code-border);
179
+ text-align: right;
180
+ color: var(--text-muted);
181
+ user-select: none;
182
+ }
183
+
184
+ .markdown-body figure.highlight .code {
185
+ padding: var(--spacing-md);
186
+ padding-left: var(--spacing-md);
187
+ }
188
+
189
+ /* 表格 */
190
+ .markdown-body table {
191
+ width: 100%;
192
+ margin: var(--spacing-md) 0;
193
+ border-collapse: collapse;
194
+ border-spacing: 0;
195
+ overflow: hidden;
196
+ border-radius: var(--radius-md);
197
+ border: 1px solid var(--border-color);
198
+ }
199
+
200
+ .markdown-body th,
201
+ .markdown-body td {
202
+ padding: var(--spacing-sm) var(--spacing-md);
203
+ border: 1px solid var(--border-color);
204
+ text-align: left;
205
+ }
206
+
207
+ .markdown-body th {
208
+ font-weight: 600;
209
+ background-color: var(--bg-secondary);
210
+ }
211
+
212
+ .markdown-body tr:nth-child(2n) {
213
+ background-color: var(--bg-secondary);
214
+ }
215
+
216
+ /* 分隔线 */
217
+ .markdown-body hr {
218
+ height: 1px;
219
+ margin: var(--spacing-xl) 0;
220
+ background-color: var(--border-color);
221
+ border: none;
222
+ }
223
+
224
+ /* 图片 */
225
+ .markdown-body img {
226
+ max-width: 100%;
227
+ height: auto;
228
+ border-radius: var(--radius-md);
229
+ box-shadow: var(--shadow-sm);
230
+ }
231
+
232
+ .markdown-body figure {
233
+ margin: var(--spacing-lg) 0;
234
+ text-align: center;
235
+ }
236
+
237
+ .markdown-body figcaption {
238
+ margin-top: var(--spacing-sm);
239
+ font-size: var(--text-sm);
240
+ color: var(--text-muted);
241
+ }
242
+
243
+ /* 脚注 */
244
+ .markdown-body .footnotes {
245
+ margin-top: var(--spacing-xl);
246
+ padding-top: var(--spacing-lg);
247
+ border-top: 1px solid var(--border-color);
248
+ font-size: var(--text-sm);
249
+ color: var(--text-secondary);
250
+ }
251
+
252
+ /* 提示块 */
253
+ .markdown-body .note,
254
+ .markdown-body .tip,
255
+ .markdown-body .warning,
256
+ .markdown-body .danger {
257
+ margin: var(--spacing-md) 0;
258
+ padding: var(--spacing-md) var(--spacing-lg);
259
+ border-radius: var(--radius-md);
260
+ border-left: 4px solid;
261
+ }
262
+
263
+ .markdown-body .note {
264
+ background-color: var(--primary-light);
265
+ border-color: var(--primary-color);
266
+ }
267
+
268
+ .markdown-body .tip {
269
+ background-color: rgba(34, 197, 94, 0.1);
270
+ border-color: var(--success);
271
+ }
272
+
273
+ .markdown-body .warning {
274
+ background-color: rgba(245, 158, 11, 0.1);
275
+ border-color: var(--warning);
276
+ }
277
+
278
+ .markdown-body .danger {
279
+ background-color: rgba(239, 68, 68, 0.1);
280
+ border-color: var(--error);
281
+ }
282
+
283
+ /* 键盘按键 */
284
+ .markdown-body kbd {
285
+ display: inline-block;
286
+ padding: 0.2em 0.5em;
287
+ font-family: var(--font-mono);
288
+ font-size: 0.85em;
289
+ line-height: 1;
290
+ background-color: var(--bg-secondary);
291
+ border: 1px solid var(--border-color);
292
+ border-radius: var(--radius-sm);
293
+ box-shadow: 0 1px 0 var(--border-color);
294
+ }
295
+
296
+ /* 详情/摘要 */
297
+ .markdown-body details {
298
+ margin: var(--spacing-md) 0;
299
+ padding: var(--spacing-md);
300
+ background-color: var(--bg-secondary);
301
+ border-radius: var(--radius-md);
302
+ border: 1px solid var(--border-color);
303
+ }
304
+
305
+ .markdown-body summary {
306
+ cursor: pointer;
307
+ font-weight: 500;
308
+ color: var(--text-primary);
309
+ }
310
+
311
+ .markdown-body details[open] summary {
312
+ margin-bottom: var(--spacing-md);
313
+ }
@@ -0,0 +1,282 @@
1
+ /**
2
+ * 响应式样式
3
+ */
4
+
5
+ /* ===== 大屏幕(桌面)===== */
6
+ @media (min-width: 1280px) {
7
+ .container {
8
+ max-width: var(--container-max);
9
+ }
10
+ }
11
+
12
+ /* ===== 中等屏幕(笔记本)===== */
13
+ @media (max-width: 1279px) {
14
+ :root {
15
+ --sidebar-width: 260px;
16
+ --toc-width: 220px;
17
+ }
18
+
19
+ .doc-toc {
20
+ display: none;
21
+ }
22
+ }
23
+
24
+ /* ===== 小屏幕(平板)===== */
25
+ @media (max-width: 1024px) {
26
+ :root {
27
+ --sidebar-width: 240px;
28
+ }
29
+
30
+ /* 博客布局 - 隐藏侧边栏 */
31
+ .blog-layout {
32
+ grid-template-columns: 1fr;
33
+ }
34
+
35
+ .blog-sidebar {
36
+ display: none;
37
+ }
38
+
39
+ /* 文章 TOC 隐藏 */
40
+ .post-toc {
41
+ display: none;
42
+ }
43
+
44
+ /* 文章布局调整 */
45
+ .post-layout {
46
+ grid-template-columns: 1fr;
47
+ max-width: var(--content-max);
48
+ margin: 0 auto;
49
+ }
50
+ }
51
+
52
+ /* ===== 移动端(手机)===== */
53
+ @media (max-width: 768px) {
54
+ :root {
55
+ --header-height: 56px;
56
+ --spacing-xl: 1.5rem;
57
+ --spacing-2xl: 2rem;
58
+ --spacing-3xl: 2.5rem;
59
+ }
60
+
61
+ /* 头部调整 */
62
+ .header-container {
63
+ padding: 0 var(--spacing-md);
64
+ }
65
+
66
+ .site-title {
67
+ font-size: var(--text-lg);
68
+ }
69
+
70
+ /* 隐藏桌面导航 */
71
+ .site-nav {
72
+ display: none;
73
+ }
74
+
75
+ /* 显示移动端菜单按钮 */
76
+ .menu-toggle {
77
+ display: flex;
78
+ }
79
+
80
+ /* 移动端导航显示 */
81
+ .mobile-nav.active {
82
+ display: block;
83
+ }
84
+
85
+ /* 容器内边距 */
86
+ .container {
87
+ padding: 0 var(--spacing-md);
88
+ }
89
+
90
+ /* 文章卡片 */
91
+ .post-card {
92
+ margin-bottom: var(--spacing-lg);
93
+ }
94
+
95
+ .post-card-content {
96
+ padding: var(--spacing-md);
97
+ }
98
+
99
+ .post-title {
100
+ font-size: var(--text-xl);
101
+ }
102
+
103
+ /* 元信息换行 */
104
+ .post-meta {
105
+ flex-wrap: wrap;
106
+ }
107
+
108
+ /* 文档布局 */
109
+ .doc-layout {
110
+ grid-template-columns: 1fr;
111
+ }
112
+
113
+ /* 文档侧边栏 - 移动端隐藏 */
114
+ .doc-sidebar {
115
+ position: fixed;
116
+ left: -100%;
117
+ top: var(--header-height);
118
+ width: 80%;
119
+ max-width: 300px;
120
+ height: calc(100vh - var(--header-height));
121
+ z-index: var(--z-fixed);
122
+ background-color: var(--bg-primary);
123
+ box-shadow: var(--shadow-xl);
124
+ transition: left var(--transition-slow);
125
+ }
126
+
127
+ .doc-sidebar.active {
128
+ left: 0;
129
+ }
130
+
131
+ /* 显示侧边栏切换按钮 */
132
+ .doc-sidebar-toggle {
133
+ display: flex;
134
+ }
135
+
136
+ /* 侧边栏遮罩 */
137
+ .doc-sidebar-overlay {
138
+ display: none;
139
+ position: fixed;
140
+ top: var(--header-height);
141
+ left: 0;
142
+ right: 0;
143
+ bottom: 0;
144
+ background-color: rgba(0, 0, 0, 0.5);
145
+ z-index: calc(var(--z-fixed) - 1);
146
+ }
147
+
148
+ .doc-sidebar-overlay.active {
149
+ display: block;
150
+ }
151
+
152
+ /* 文档内容 */
153
+ .doc-article {
154
+ padding: var(--spacing-lg) 0;
155
+ }
156
+
157
+ .doc-title {
158
+ font-size: var(--text-2xl);
159
+ }
160
+
161
+ /* 分页 */
162
+ .pagination {
163
+ flex-direction: column;
164
+ gap: var(--spacing-sm);
165
+ }
166
+
167
+ .page-numbers {
168
+ order: -1;
169
+ width: 100%;
170
+ justify-content: center;
171
+ }
172
+
173
+ .page-link {
174
+ flex: 1;
175
+ }
176
+
177
+ /* 归档页 */
178
+ .archive-wrapper {
179
+ padding: var(--spacing-lg) 0;
180
+ }
181
+
182
+ /* 标签云 */
183
+ .tags-cloud {
184
+ padding: var(--spacing-md);
185
+ }
186
+
187
+ /* 搜索模态框 */
188
+ .search-container {
189
+ width: 100%;
190
+ height: 100%;
191
+ max-height: none;
192
+ border-radius: 0;
193
+ }
194
+
195
+ .search-shortcut {
196
+ display: none;
197
+ }
198
+
199
+ /* 页脚 */
200
+ .footer-content {
201
+ flex-direction: column;
202
+ text-align: center;
203
+ }
204
+
205
+ .footer-social {
206
+ margin: var(--spacing-md) 0;
207
+ }
208
+ }
209
+
210
+ /* ===== 小手机 ===== */
211
+ @media (max-width: 480px) {
212
+ :root {
213
+ --text-3xl: 1.5rem;
214
+ --text-2xl: 1.25rem;
215
+ --text-xl: 1.125rem;
216
+ }
217
+
218
+ .post-nav {
219
+ flex-direction: column;
220
+ }
221
+
222
+ .post-nav-item {
223
+ width: 100%;
224
+ }
225
+
226
+ .doc-nav {
227
+ flex-direction: column;
228
+ }
229
+
230
+ .doc-nav-item {
231
+ width: 100%;
232
+ }
233
+ }
234
+
235
+ /* ===== 打印样式 ===== */
236
+ @media print {
237
+ .site-header,
238
+ .site-footer,
239
+ .blog-sidebar,
240
+ .post-toc,
241
+ .doc-sidebar,
242
+ .doc-toc,
243
+ .post-nav,
244
+ .doc-nav,
245
+ .pagination,
246
+ .search-modal {
247
+ display: none !important;
248
+ }
249
+
250
+ .container {
251
+ max-width: 100%;
252
+ padding: 0;
253
+ }
254
+
255
+ .post-article,
256
+ .doc-article,
257
+ .page-article {
258
+ max-width: 100%;
259
+ }
260
+
261
+ .markdown-body a {
262
+ color: var(--text-primary);
263
+ text-decoration: underline;
264
+ }
265
+
266
+ .markdown-body a::after {
267
+ content: " (" attr(href) ")";
268
+ font-size: var(--text-sm);
269
+ color: var(--text-muted);
270
+ }
271
+ }
272
+
273
+ /* ===== 减少动画(无障碍)===== */
274
+ @media (prefers-reduced-motion: reduce) {
275
+ *,
276
+ *::before,
277
+ *::after {
278
+ animation-duration: 0.01ms !important;
279
+ animation-iteration-count: 1 !important;
280
+ transition-duration: 0.01ms !important;
281
+ }
282
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * CSS 变量定义
3
+ * 用于主题颜色、字体、间距等
4
+ */
5
+
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
+ }