create-lumfall 1.0.0 → 1.1.1

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 (82) hide show
  1. package/README.md +24 -17
  2. package/cli.js +179 -24
  3. package/package.json +5 -7
  4. package/templates/basic/README.md +0 -113
  5. package/templates/basic/app/controller/demo.js +0 -28
  6. package/templates/basic/app/extend/README.md +0 -3
  7. package/templates/basic/app/middleware/README.md +0 -2
  8. package/templates/basic/app/middleware.js +0 -13
  9. package/templates/basic/app/pages/home/entry.home.js +0 -4
  10. package/templates/basic/app/pages/home/home.vue +0 -164
  11. package/templates/basic/app/router/demo.js +0 -17
  12. package/templates/basic/app/router-schema/demo.js +0 -29
  13. package/templates/basic/app/service/demo.js +0 -51
  14. package/templates/basic/app/webpack.config.js +0 -4
  15. package/templates/basic/build.js +0 -7
  16. package/templates/basic/config/config.beta.js +0 -4
  17. package/templates/basic/config/config.default.js +0 -32
  18. package/templates/basic/config/config.local.js +0 -4
  19. package/templates/basic/config/config.prod.js +0 -6
  20. package/templates/basic/package.json +0 -31
  21. package/templates/basic/server.js +0 -26
  22. package/templates/document/README.md +0 -145
  23. package/templates/document/app/extend/README.md +0 -6
  24. package/templates/document/app/middleware/README.md +0 -2
  25. package/templates/document/app/middleware.js +0 -2
  26. package/templates/document/app/pages/docs/assets/docs-logo.svg +0 -5
  27. package/templates/document/app/pages/docs/components/doc-layout.vue +0 -144
  28. package/templates/document/app/pages/docs/components/doc-navbar.vue +0 -103
  29. package/templates/document/app/pages/docs/components/doc-search.vue +0 -131
  30. package/templates/document/app/pages/docs/components/doc-sidebar.vue +0 -29
  31. package/templates/document/app/pages/docs/components/doc-toc.vue +0 -21
  32. package/templates/document/app/pages/docs/content.js +0 -28
  33. package/templates/document/app/pages/docs/docs-config.js +0 -154
  34. package/templates/document/app/pages/docs/docs.vue +0 -24
  35. package/templates/document/app/pages/docs/entry.docs.js +0 -26
  36. package/templates/document/app/pages/docs/markdown/highlight.js +0 -30
  37. package/templates/document/app/pages/docs/markdown/index.js +0 -129
  38. package/templates/document/app/pages/docs/search.js +0 -142
  39. package/templates/document/app/pages/docs/styles/docs.less +0 -1091
  40. package/templates/document/app/pages/docs/styles/vars.less +0 -87
  41. package/templates/document/app/pages/docs/theme.js +0 -47
  42. package/templates/document/app/pages/docs/utils.js +0 -58
  43. package/templates/document/app/pages/docs/views/doc-home.vue +0 -56
  44. package/templates/document/app/pages/docs/views/doc-page.vue +0 -147
  45. package/templates/document/app/webpack.config.js +0 -15
  46. package/templates/document/build.js +0 -6
  47. package/templates/document/config/config.beta.js +0 -2
  48. package/templates/document/config/config.default.js +0 -9
  49. package/templates/document/config/config.local.js +0 -2
  50. package/templates/document/config/config.prod.js +0 -2
  51. package/templates/document/docs/advanced/dashboard.md +0 -66
  52. package/templates/document/docs/advanced/health.md +0 -72
  53. package/templates/document/docs/advanced/monitoring.md +0 -60
  54. package/templates/document/docs/advanced/security.md +0 -88
  55. package/templates/document/docs/core/app-instance.md +0 -114
  56. package/templates/document/docs/core/controller-service.md +0 -113
  57. package/templates/document/docs/core/lifecycle.md +0 -60
  58. package/templates/document/docs/core/middleware.md +0 -83
  59. package/templates/document/docs/core/plugins.md +0 -77
  60. package/templates/document/docs/core/router-schema.md +0 -102
  61. package/templates/document/docs/dsl/api-contract.md +0 -88
  62. package/templates/document/docs/dsl/extend.md +0 -311
  63. package/templates/document/docs/dsl/menu.md +0 -101
  64. package/templates/document/docs/dsl/model-project.md +0 -122
  65. package/templates/document/docs/dsl/overview.md +0 -116
  66. package/templates/document/docs/dsl/reference.md +0 -175
  67. package/templates/document/docs/dsl/schema-actions.md +0 -135
  68. package/templates/document/docs/dsl/schema.md +0 -121
  69. package/templates/document/docs/frontend/build.md +0 -118
  70. package/templates/document/docs/frontend/curl.md +0 -75
  71. package/templates/document/docs/frontend/page.md +0 -99
  72. package/templates/document/docs/frontend/widgets.md +0 -151
  73. package/templates/document/docs/guide/config.md +0 -108
  74. package/templates/document/docs/guide/deployment.md +0 -115
  75. package/templates/document/docs/guide/getting-started.md +0 -199
  76. package/templates/document/docs/guide/introduction.md +0 -55
  77. package/templates/document/docs/guide/structure.md +0 -98
  78. package/templates/document/docs/reference/commands.md +0 -70
  79. package/templates/document/docs/reference/faq.md +0 -94
  80. package/templates/document/package.json +0 -36
  81. package/templates/document/scripts/build-static.js +0 -129
  82. package/templates/document/server.js +0 -13
@@ -1,1091 +0,0 @@
1
- // 文档站布局与 markdown 排版样式。类名统一 doc- 前缀,避免与业务样式冲突。
2
-
3
- * {
4
- box-sizing: border-box;
5
- }
6
-
7
- // 注意:不要在 html 上全局设置 scroll-behavior: smooth,
8
- // 平滑滚动由 doc-layout 的锚点点击处理用 scrollIntoView 实现
9
- // (全局 smooth 会干扰自动化工具的元素稳定性检查)。
10
-
11
- body {
12
- margin: 0;
13
- background-color: var(--doc-bg);
14
- color: var(--doc-text-1);
15
- font-family:
16
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
17
- "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
18
- -webkit-font-smoothing: antialiased;
19
- }
20
-
21
- // 标题锚点跳转时给顶部导航留出空间
22
- .doc-markdown h2,
23
- .doc-markdown h3,
24
- .doc-markdown h4 {
25
- scroll-margin-top: 76px;
26
- }
27
-
28
- // ============ 布局骨架 ============
29
-
30
- .doc-shell {
31
- min-height: 100vh;
32
- }
33
-
34
- .doc-body {
35
- display: flex;
36
- align-items: flex-start;
37
- padding-top: 60px;
38
- }
39
-
40
- .doc-main {
41
- display: flex;
42
- flex: 1 1 auto;
43
- min-width: 0;
44
- justify-content: center;
45
- }
46
-
47
- .doc-content-wrap {
48
- width: 100%;
49
- max-width: 780px;
50
- padding: 32px 40px 80px;
51
- min-width: 0;
52
- }
53
-
54
- .doc-desktop-sidebar {
55
- flex: 0 0 auto;
56
- }
57
-
58
- .doc-toc-rail {
59
- flex: 0 0 auto;
60
- }
61
-
62
- // ============ 顶部导航 ============
63
-
64
- .doc-navbar {
65
- position: fixed;
66
- top: 0;
67
- left: 0;
68
- right: 0;
69
- z-index: 100;
70
- display: flex;
71
- align-items: center;
72
- justify-content: space-between;
73
- height: 60px;
74
- padding: 0 20px;
75
- background-color: var(--doc-navbar-bg);
76
- backdrop-filter: blur(10px);
77
- border-bottom: 1px solid var(--doc-border);
78
- }
79
-
80
- .doc-navbar-left {
81
- display: flex;
82
- align-items: center;
83
- gap: 4px;
84
- min-width: 0;
85
- }
86
-
87
- .doc-navbar-burger {
88
- display: none;
89
- border: none;
90
- background: none;
91
- font-size: 18px;
92
- padding: 6px 8px;
93
- cursor: pointer;
94
- color: var(--doc-text-1);
95
- }
96
-
97
- .doc-navbar-brand {
98
- display: flex;
99
- align-items: center;
100
- gap: 10px;
101
- margin-right: 20px;
102
- text-decoration: none;
103
- flex: 0 0 auto;
104
- }
105
-
106
- .doc-navbar-logo {
107
- width: 28px;
108
- height: 28px;
109
- }
110
-
111
- .doc-navbar-title {
112
- font-size: 18px;
113
- font-weight: 700;
114
- color: var(--doc-text-1);
115
- white-space: nowrap;
116
- }
117
-
118
- .doc-navbar-nav {
119
- display: flex;
120
- align-items: center;
121
- gap: 4px;
122
- overflow-x: auto;
123
- }
124
-
125
- .doc-navbar-link {
126
- padding: 6px 12px;
127
- border-radius: 8px;
128
- font-size: 14px;
129
- color: var(--doc-text-2);
130
- text-decoration: none;
131
- white-space: nowrap;
132
- transition: color 0.2s, background-color 0.2s;
133
-
134
- &:hover {
135
- color: var(--doc-text-1);
136
- background-color: var(--doc-bg-soft);
137
- }
138
-
139
- &.active {
140
- color: var(--doc-brand);
141
- font-weight: 500;
142
- }
143
- }
144
-
145
- .doc-navbar-right {
146
- display: flex;
147
- align-items: center;
148
- gap: 8px;
149
- }
150
-
151
- .doc-search-trigger {
152
- display: flex;
153
- align-items: center;
154
- gap: 8px;
155
- padding: 6px 10px;
156
- border: 1px solid var(--doc-border);
157
- border-radius: 8px;
158
- background-color: var(--doc-bg-soft);
159
- color: var(--doc-text-3);
160
- font-size: 13px;
161
- cursor: pointer;
162
- transition: border-color 0.2s, color 0.2s;
163
-
164
- &:hover {
165
- color: var(--doc-text-2);
166
- border-color: var(--doc-brand);
167
- }
168
-
169
- kbd {
170
- font-family: inherit;
171
- font-size: 11px;
172
- padding: 1px 5px;
173
- border: 1px solid var(--doc-border);
174
- border-radius: 4px;
175
- background-color: var(--doc-bg);
176
- }
177
- }
178
-
179
- .doc-icon-btn {
180
- display: inline-flex;
181
- align-items: center;
182
- justify-content: center;
183
- width: 34px;
184
- height: 34px;
185
- border: none;
186
- border-radius: 8px;
187
- background: none;
188
- color: var(--doc-text-2);
189
- font-size: 16px;
190
- cursor: pointer;
191
- text-decoration: none;
192
- transition: color 0.2s, background-color 0.2s;
193
-
194
- &:hover {
195
- color: var(--doc-text-1);
196
- background-color: var(--doc-bg-soft);
197
- }
198
- }
199
-
200
- // ============ 侧边栏 ============
201
-
202
- .doc-sidebar {
203
- width: 264px;
204
- position: sticky;
205
- top: 60px;
206
- height: calc(100vh - 60px);
207
- overflow-y: auto;
208
- padding: 24px 16px 48px;
209
- background-color: var(--doc-sidebar-bg);
210
- border-right: 1px solid var(--doc-border);
211
- }
212
-
213
- .doc-sidebar-group {
214
- margin-bottom: 24px;
215
- }
216
-
217
- .doc-sidebar-group-title {
218
- padding: 0 12px;
219
- margin-bottom: 6px;
220
- font-size: 13px;
221
- font-weight: 600;
222
- color: var(--doc-text-1);
223
- }
224
-
225
- .doc-sidebar-link {
226
- display: block;
227
- padding: 6px 12px;
228
- margin: 1px 0;
229
- border-radius: 8px;
230
- font-size: 13.5px;
231
- line-height: 1.6;
232
- color: var(--doc-text-2);
233
- text-decoration: none;
234
- transition: color 0.2s, background-color 0.2s;
235
-
236
- &:hover {
237
- color: var(--doc-text-1);
238
- background-color: var(--doc-bg-soft);
239
- }
240
-
241
- &.active {
242
- color: var(--doc-brand);
243
- background-color: var(--doc-brand-soft);
244
- font-weight: 500;
245
- }
246
- }
247
-
248
- // 移动端抽屉
249
- .doc-drawer-mask {
250
- position: fixed;
251
- inset: 0;
252
- z-index: 90;
253
- background-color: rgba(0, 0, 0, 0.4);
254
- }
255
-
256
- .doc-drawer-sidebar {
257
- position: absolute;
258
- top: 0;
259
- left: 0;
260
- bottom: 0;
261
- border-right: 1px solid var(--doc-border);
262
- box-shadow: var(--doc-shadow);
263
- }
264
-
265
- // ============ 目录(TOC) ============
266
-
267
- .doc-toc {
268
- width: 216px;
269
- position: sticky;
270
- top: 60px;
271
- max-height: calc(100vh - 60px);
272
- overflow-y: auto;
273
- padding: 32px 20px 48px 8px;
274
- }
275
-
276
- .doc-toc-title {
277
- font-size: 12px;
278
- font-weight: 600;
279
- color: var(--doc-text-3);
280
- letter-spacing: 0.04em;
281
- margin-bottom: 8px;
282
- }
283
-
284
- .doc-toc-link {
285
- display: block;
286
- padding: 4px 0 4px 12px;
287
- font-size: 13px;
288
- line-height: 1.5;
289
- color: var(--doc-text-3);
290
- text-decoration: none;
291
- border-left: 1px solid var(--doc-border);
292
- transition: color 0.2s, border-color 0.2s;
293
-
294
- &:hover {
295
- color: var(--doc-text-1);
296
- }
297
-
298
- &.active {
299
- color: var(--doc-brand);
300
- border-left-color: var(--doc-brand);
301
- }
302
-
303
- &.level-3 {
304
- padding-left: 26px;
305
- }
306
- }
307
-
308
- // ============ markdown 正文排版 ============
309
-
310
- .doc-markdown {
311
- font-size: 15px;
312
- line-height: 1.8;
313
- color: var(--doc-text-1);
314
- word-wrap: break-word;
315
-
316
- h1 {
317
- margin: 8px 0 24px;
318
- font-size: 30px;
319
- font-weight: 700;
320
- line-height: 1.3;
321
- }
322
-
323
- h2 {
324
- margin: 40px 0 16px;
325
- padding-bottom: 10px;
326
- font-size: 22px;
327
- font-weight: 600;
328
- border-bottom: 1px solid var(--doc-border);
329
- }
330
-
331
- h3 {
332
- margin: 28px 0 12px;
333
- font-size: 18px;
334
- font-weight: 600;
335
- }
336
-
337
- h4 {
338
- margin: 20px 0 10px;
339
- font-size: 16px;
340
- font-weight: 600;
341
- }
342
-
343
- p {
344
- margin: 0 0 14px;
345
- }
346
-
347
- a {
348
- color: var(--doc-brand);
349
- text-decoration: none;
350
-
351
- &:hover {
352
- text-decoration: underline;
353
- }
354
- }
355
-
356
- ul,
357
- ol {
358
- margin: 0 0 14px;
359
- padding-left: 24px;
360
-
361
- li {
362
- margin: 4px 0;
363
- }
364
- }
365
-
366
- blockquote {
367
- margin: 0 0 16px;
368
- padding: 10px 16px;
369
- border-left: 3px solid var(--doc-brand);
370
- border-radius: 0 8px 8px 0;
371
- background-color: var(--doc-bg-soft);
372
- color: var(--doc-text-2);
373
-
374
- p {
375
- margin: 0;
376
- }
377
- }
378
-
379
- table {
380
- width: 100%;
381
- margin: 0 0 18px;
382
- border-collapse: collapse;
383
- font-size: 14px;
384
- display: block;
385
- overflow-x: auto;
386
-
387
- th,
388
- td {
389
- border: 1px solid var(--doc-border);
390
- padding: 8px 14px;
391
- text-align: left;
392
- }
393
-
394
- th {
395
- background-color: var(--doc-bg-soft);
396
- font-weight: 600;
397
- white-space: nowrap;
398
- }
399
-
400
- tr:nth-child(2n) td {
401
- background-color: var(--doc-bg-soft);
402
- }
403
- }
404
-
405
- img {
406
- max-width: 100%;
407
- border-radius: 8px;
408
- }
409
-
410
- hr {
411
- margin: 28px 0;
412
- border: none;
413
- border-top: 1px solid var(--doc-border);
414
- }
415
-
416
- // 行内代码
417
- code:not(.hljs) {
418
- padding: 2px 6px;
419
- border-radius: 6px;
420
- font-size: 0.88em;
421
- background-color: var(--doc-inline-code-bg);
422
- color: var(--doc-inline-code-text);
423
- font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
424
- }
425
-
426
- h1 code,
427
- h2 code,
428
- h3 code,
429
- h4 code,
430
- td code {
431
- font-size: 0.9em;
432
- }
433
- }
434
-
435
- // 标题锚点 #
436
- .doc-header-anchor {
437
- margin-left: 6px;
438
- font-size: 0.8em;
439
- font-weight: 400;
440
- opacity: 0;
441
- transition: opacity 0.2s;
442
-
443
- &:hover {
444
- text-decoration: none !important;
445
- }
446
- }
447
-
448
- .doc-markdown h2:hover .doc-header-anchor,
449
- .doc-markdown h3:hover .doc-header-anchor,
450
- .doc-markdown h4:hover .doc-header-anchor {
451
- opacity: 1;
452
- }
453
-
454
- // ============ 代码块 ============
455
-
456
- .doc-code-block {
457
- margin: 0 0 18px;
458
- border: 1px solid var(--doc-code-border);
459
- border-radius: 10px;
460
- overflow: hidden;
461
- background-color: var(--doc-code-bg);
462
-
463
- pre {
464
- margin: 0;
465
- padding: 14px 16px;
466
- overflow-x: auto;
467
- font-size: 13.5px;
468
- line-height: 1.65;
469
- background-color: var(--doc-code-bg);
470
- }
471
-
472
- code.hljs {
473
- padding: 0;
474
- background: none;
475
- color: var(--doc-code-text);
476
- font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
477
- }
478
- }
479
-
480
- .doc-code-bar {
481
- display: flex;
482
- align-items: center;
483
- justify-content: space-between;
484
- padding: 6px 12px 6px 16px;
485
- background-color: var(--doc-code-bar-bg);
486
- border-bottom: 1px solid var(--doc-code-border);
487
- }
488
-
489
- .doc-code-lang {
490
- font-size: 12px;
491
- color: var(--doc-text-3);
492
- font-family: "SFMono-Regular", Consolas, monospace;
493
- }
494
-
495
- .doc-code-copy {
496
- border: none;
497
- background: none;
498
- padding: 2px 8px;
499
- border-radius: 6px;
500
- font-size: 12px;
501
- color: var(--doc-text-3);
502
- cursor: pointer;
503
- transition: color 0.2s, background-color 0.2s;
504
-
505
- &:hover {
506
- color: var(--doc-text-1);
507
- background-color: var(--doc-bg);
508
- }
509
- }
510
-
511
- // highlight.js 语法高亮:全部走 CSS 变量,亮暗主题自动切换
512
- .hljs-keyword,
513
- .hljs-selector-tag,
514
- .hljs-doctag {
515
- color: var(--doc-hl-keyword);
516
- }
517
-
518
- .hljs-built_in {
519
- color: var(--doc-hl-built-in);
520
- }
521
-
522
- .hljs-type,
523
- .hljs-class .hljs-title {
524
- color: var(--doc-hl-type);
525
- }
526
-
527
- .hljs-literal,
528
- .hljs-number {
529
- color: var(--doc-hl-literal);
530
- }
531
-
532
- .hljs-string,
533
- .hljs-regexp,
534
- .hljs-template-variable,
535
- .hljs-char.escape_ {
536
- color: var(--doc-hl-string);
537
- }
538
-
539
- .hljs-comment {
540
- color: var(--doc-hl-comment);
541
- font-style: italic;
542
- }
543
-
544
- .hljs-title,
545
- .hljs-title.function_,
546
- .hljs-function {
547
- color: var(--doc-hl-function);
548
- }
549
-
550
- .hljs-tag,
551
- .hljs-name {
552
- color: var(--doc-hl-tag);
553
- }
554
-
555
- .hljs-attr,
556
- .hljs-attribute,
557
- .hljs-property {
558
- color: var(--doc-hl-attr);
559
- }
560
-
561
- .hljs-variable,
562
- .hljs-params {
563
- color: var(--doc-hl-variable);
564
- }
565
-
566
- .hljs-meta,
567
- .hljs-meta .hljs-keyword,
568
- .hljs-meta .hljs-string {
569
- color: var(--doc-hl-meta);
570
- }
571
-
572
- .hljs-section,
573
- .hljs-symbol,
574
- .hljs-bullet {
575
- color: var(--doc-hl-section);
576
- }
577
-
578
- .hljs-selector-id,
579
- .hljs-selector-class,
580
- .hljs-selector-attr,
581
- .hljs-selector-pseudo {
582
- color: var(--doc-hl-selector);
583
- }
584
-
585
- .hljs-addition {
586
- background-color: var(--doc-hl-addition-bg);
587
- }
588
-
589
- .hljs-deletion {
590
- background-color: var(--doc-hl-deletion-bg);
591
- }
592
-
593
- .hljs-emphasis {
594
- font-style: italic;
595
- }
596
-
597
- .hljs-strong {
598
- font-weight: 600;
599
- }
600
-
601
- // ============ 提示块(::: tip / info / warning / danger) ============
602
-
603
- .doc-container {
604
- margin: 0 0 16px;
605
- padding: 12px 16px;
606
- border-radius: 8px;
607
- border-left: 3px solid var(--doc-border);
608
- background-color: var(--doc-bg-soft);
609
- font-size: 14px;
610
-
611
- .doc-container-title {
612
- margin: 0 0 6px;
613
- font-weight: 600;
614
- font-size: 14px;
615
- }
616
-
617
- p {
618
- margin: 0 0 8px;
619
-
620
- &:last-child {
621
- margin-bottom: 0;
622
- }
623
- }
624
- }
625
-
626
- .doc-container-tip {
627
- border-left-color: #00b42a;
628
-
629
- .doc-container-title {
630
- color: #00b42a;
631
- }
632
- }
633
-
634
- .doc-container-info {
635
- border-left-color: var(--doc-brand);
636
-
637
- .doc-container-title {
638
- color: var(--doc-brand);
639
- }
640
- }
641
-
642
- .doc-container-warning {
643
- border-left-color: #ff7d00;
644
-
645
- .doc-container-title {
646
- color: #ff7d00;
647
- }
648
- }
649
-
650
- .doc-container-danger {
651
- border-left-color: #f53f3f;
652
-
653
- .doc-container-title {
654
- color: #f53f3f;
655
- }
656
- }
657
-
658
- // ============ 上一篇 / 下一篇 ============
659
-
660
- .doc-pager {
661
- display: flex;
662
- justify-content: space-between;
663
- gap: 16px;
664
- margin-top: 48px;
665
- padding-top: 24px;
666
- border-top: 1px solid var(--doc-border);
667
- }
668
-
669
- .doc-pager-item {
670
- display: flex;
671
- flex-direction: column;
672
- gap: 4px;
673
- padding: 12px 16px;
674
- border: 1px solid var(--doc-border);
675
- border-radius: 10px;
676
- text-decoration: none;
677
- max-width: 48%;
678
- transition: border-color 0.2s, box-shadow 0.2s;
679
-
680
- &:hover {
681
- border-color: var(--doc-brand);
682
- box-shadow: var(--doc-shadow);
683
- }
684
-
685
- .doc-pager-label {
686
- font-size: 12px;
687
- color: var(--doc-text-3);
688
- }
689
-
690
- .doc-pager-title {
691
- display: flex;
692
- align-items: center;
693
- gap: 4px;
694
- font-size: 14px;
695
- font-weight: 500;
696
- color: var(--doc-brand);
697
- }
698
-
699
- &.next {
700
- margin-left: auto;
701
- text-align: right;
702
- }
703
-
704
- &.placeholder {
705
- border: none;
706
- }
707
- }
708
-
709
- .doc-content-footer {
710
- margin-top: 20px;
711
- font-size: 12.5px;
712
- color: var(--doc-text-3);
713
- text-align: center;
714
- }
715
-
716
- // ============ 404 ============
717
-
718
- .doc-not-found {
719
- padding: 80px 0;
720
- text-align: center;
721
-
722
- h1 {
723
- font-size: 64px;
724
- margin: 0 0 16px;
725
- color: var(--doc-text-2);
726
- }
727
-
728
- p {
729
- color: var(--doc-text-2);
730
- }
731
-
732
- code {
733
- padding: 2px 6px;
734
- border-radius: 6px;
735
- background-color: var(--doc-inline-code-bg);
736
- color: var(--doc-inline-code-text);
737
- }
738
-
739
- .doc-not-found-home {
740
- display: inline-block;
741
- margin-top: 12px;
742
- color: var(--doc-brand);
743
- text-decoration: none;
744
- }
745
- }
746
-
747
- // ============ 首页 ============
748
-
749
- .doc-home {
750
- width: 100%;
751
- max-width: 1080px;
752
- padding: 72px 32px 64px;
753
- }
754
-
755
- .doc-hero {
756
- text-align: center;
757
-
758
- .doc-hero-name {
759
- margin: 0 0 12px;
760
- font-size: 52px;
761
- font-weight: 800;
762
- line-height: 1.2;
763
- background: linear-gradient(120deg, var(--doc-brand) 20%, #14c9c9 80%);
764
- -webkit-background-clip: text;
765
- background-clip: text;
766
- -webkit-text-fill-color: transparent;
767
- }
768
-
769
- .doc-hero-tagline {
770
- margin: 0 0 16px;
771
- font-size: 24px;
772
- font-weight: 600;
773
- color: var(--doc-text-1);
774
- }
775
-
776
- .doc-hero-text {
777
- margin: 0 auto 32px;
778
- max-width: 640px;
779
- font-size: 15.5px;
780
- line-height: 1.8;
781
- color: var(--doc-text-2);
782
- }
783
-
784
- .doc-hero-actions {
785
- display: flex;
786
- justify-content: center;
787
- gap: 14px;
788
- }
789
-
790
- .doc-hero-btn {
791
- display: inline-flex;
792
- align-items: center;
793
- padding: 10px 26px;
794
- border-radius: 10px;
795
- border: 1px solid var(--doc-border);
796
- font-size: 15px;
797
- font-weight: 500;
798
- color: var(--doc-text-1);
799
- text-decoration: none;
800
- transition: all 0.2s;
801
-
802
- &:hover {
803
- border-color: var(--doc-brand);
804
- color: var(--doc-brand);
805
- }
806
-
807
- &.brand {
808
- background-color: var(--doc-brand);
809
- border-color: var(--doc-brand);
810
- color: #fff;
811
-
812
- &:hover {
813
- color: #fff;
814
- opacity: 0.88;
815
- }
816
- }
817
-
818
- &.brand-outline {
819
- border-color: var(--doc-brand);
820
- color: var(--doc-brand);
821
- background-color: var(--doc-brand-soft);
822
-
823
- &:hover {
824
- opacity: 0.85;
825
- }
826
- }
827
- }
828
- }
829
-
830
- .doc-features {
831
- display: grid;
832
- grid-template-columns: repeat(3, 1fr);
833
- gap: 18px;
834
- margin-top: 72px;
835
- }
836
-
837
- .doc-feature-card {
838
- padding: 22px;
839
- border: 1px solid var(--doc-border);
840
- border-radius: 12px;
841
- background-color: var(--doc-bg);
842
- transition: box-shadow 0.2s, transform 0.2s;
843
-
844
- &:hover {
845
- box-shadow: var(--doc-shadow);
846
- transform: translateY(-2px);
847
- }
848
-
849
- .doc-feature-icon {
850
- font-size: 26px;
851
- margin-bottom: 10px;
852
- }
853
-
854
- .doc-feature-title {
855
- margin: 0 0 8px;
856
- font-size: 16px;
857
- font-weight: 600;
858
- color: var(--doc-text-1);
859
- }
860
-
861
- .doc-feature-details {
862
- margin: 0;
863
- font-size: 13.5px;
864
- line-height: 1.7;
865
- color: var(--doc-text-2);
866
- }
867
- }
868
-
869
- .doc-home-footer {
870
- margin-top: 72px;
871
- text-align: center;
872
- font-size: 13px;
873
- color: var(--doc-text-3);
874
- }
875
-
876
- // ============ 搜索弹窗 ============
877
-
878
- .doc-search-mask {
879
- position: fixed;
880
- inset: 0;
881
- z-index: 200;
882
- background-color: rgba(0, 0, 0, 0.45);
883
- display: flex;
884
- justify-content: center;
885
- align-items: flex-start;
886
- padding: 12vh 16px 0;
887
- }
888
-
889
- .doc-search-panel {
890
- width: 100%;
891
- max-width: 620px;
892
- max-height: 70vh;
893
- display: flex;
894
- flex-direction: column;
895
- background-color: var(--doc-bg);
896
- border: 1px solid var(--doc-border);
897
- border-radius: 14px;
898
- box-shadow: var(--doc-shadow);
899
- overflow: hidden;
900
- }
901
-
902
- .doc-search-input-row {
903
- display: flex;
904
- align-items: center;
905
- gap: 10px;
906
- padding: 14px 16px;
907
- border-bottom: 1px solid var(--doc-border);
908
-
909
- .doc-search-icon {
910
- font-size: 16px;
911
- color: var(--doc-text-3);
912
- }
913
- }
914
-
915
- .doc-search-input {
916
- flex: 1;
917
- border: none;
918
- outline: none;
919
- background: none;
920
- font-size: 15px;
921
- color: var(--doc-text-1);
922
-
923
- &::placeholder {
924
- color: var(--doc-text-3);
925
- }
926
- }
927
-
928
- .doc-search-kbd {
929
- font-family: inherit;
930
- font-size: 11px;
931
- padding: 2px 6px;
932
- border: 1px solid var(--doc-border);
933
- border-radius: 4px;
934
- color: var(--doc-text-3);
935
- }
936
-
937
- .doc-search-results {
938
- flex: 1;
939
- overflow-y: auto;
940
- padding: 8px;
941
- }
942
-
943
- .doc-search-empty {
944
- padding: 32px 16px;
945
- text-align: center;
946
- font-size: 13.5px;
947
- color: var(--doc-text-3);
948
- }
949
-
950
- .doc-search-item {
951
- display: block;
952
- padding: 10px 12px;
953
- border-radius: 8px;
954
- cursor: pointer;
955
- text-decoration: none;
956
-
957
- &.active {
958
- background-color: var(--doc-brand-soft);
959
- }
960
-
961
- .doc-search-item-title {
962
- font-size: 14.5px;
963
- font-weight: 600;
964
- color: var(--doc-text-1);
965
-
966
- mark {
967
- background-color: var(--doc-mark-bg);
968
- color: inherit;
969
- border-radius: 2px;
970
- padding: 0 1px;
971
- }
972
- }
973
-
974
- .doc-search-item-heading {
975
- display: flex;
976
- align-items: center;
977
- gap: 4px;
978
- margin-top: 2px;
979
- font-size: 12.5px;
980
- color: var(--doc-brand);
981
- }
982
-
983
- .doc-search-item-snippet {
984
- margin-top: 4px;
985
- font-size: 12.5px;
986
- line-height: 1.6;
987
- color: var(--doc-text-3);
988
- overflow: hidden;
989
- text-overflow: ellipsis;
990
- display: -webkit-box;
991
- -webkit-line-clamp: 2;
992
- -webkit-box-orient: vertical;
993
-
994
- mark {
995
- background-color: var(--doc-mark-bg);
996
- color: inherit;
997
- border-radius: 2px;
998
- padding: 0 1px;
999
- }
1000
- }
1001
- }
1002
-
1003
- .doc-search-footer {
1004
- display: flex;
1005
- gap: 16px;
1006
- padding: 10px 16px;
1007
- border-top: 1px solid var(--doc-border);
1008
- font-size: 12px;
1009
- color: var(--doc-text-3);
1010
-
1011
- kbd {
1012
- font-family: inherit;
1013
- font-size: 11px;
1014
- padding: 1px 5px;
1015
- margin-right: 2px;
1016
- border: 1px solid var(--doc-border);
1017
- border-radius: 4px;
1018
- }
1019
- }
1020
-
1021
- // ============ 过渡动画 ============
1022
-
1023
- .doc-fade-enter-active,
1024
- .doc-fade-leave-active {
1025
- transition: opacity 0.18s ease;
1026
- }
1027
-
1028
- .doc-fade-enter-from,
1029
- .doc-fade-leave-to {
1030
- opacity: 0;
1031
- }
1032
-
1033
- // ============ 响应式 ============
1034
-
1035
- @media (max-width: 1280px) {
1036
- .doc-toc-rail {
1037
- display: none;
1038
- }
1039
- }
1040
-
1041
- @media (max-width: 960px) {
1042
- .doc-desktop-sidebar {
1043
- display: none;
1044
- }
1045
-
1046
- .doc-navbar-burger {
1047
- display: inline-flex;
1048
- }
1049
-
1050
- .doc-navbar-nav {
1051
- display: none;
1052
- }
1053
-
1054
- .doc-content-wrap {
1055
- padding: 24px 20px 64px;
1056
- }
1057
-
1058
- .doc-home {
1059
- padding: 48px 20px 48px;
1060
- }
1061
-
1062
- .doc-hero .doc-hero-name {
1063
- font-size: 40px;
1064
- }
1065
-
1066
- .doc-hero .doc-hero-tagline {
1067
- font-size: 20px;
1068
- }
1069
-
1070
- .doc-features {
1071
- grid-template-columns: repeat(2, 1fr);
1072
- }
1073
-
1074
- .doc-search-trigger-text {
1075
- display: none;
1076
- }
1077
- }
1078
-
1079
- @media (max-width: 600px) {
1080
- .doc-features {
1081
- grid-template-columns: 1fr;
1082
- }
1083
-
1084
- .doc-pager {
1085
- flex-direction: column;
1086
-
1087
- .doc-pager-item {
1088
- max-width: 100%;
1089
- }
1090
- }
1091
- }