@leji-org/leji 1.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 (68) hide show
  1. package/README.md +36 -0
  2. package/assets-manifest.json +25 -0
  3. package/cli.json +82 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +4 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/conformance.d.ts +24 -0
  8. package/dist/commands/conformance.js +111 -0
  9. package/dist/commands/conformance.js.map +1 -0
  10. package/dist/commands/docs.d.ts +32 -0
  11. package/dist/commands/docs.js +196 -0
  12. package/dist/commands/docs.js.map +1 -0
  13. package/dist/commands/freshness.d.ts +21 -0
  14. package/dist/commands/freshness.js +41 -0
  15. package/dist/commands/freshness.js.map +1 -0
  16. package/dist/commands/indexgen.d.ts +55 -0
  17. package/dist/commands/indexgen.js +256 -0
  18. package/dist/commands/indexgen.js.map +1 -0
  19. package/dist/commands/init.d.ts +28 -0
  20. package/dist/commands/init.js +378 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/validate.d.ts +25 -0
  23. package/dist/commands/validate.js +359 -0
  24. package/dist/commands/validate.js.map +1 -0
  25. package/dist/index.d.ts +17 -0
  26. package/dist/index.js +324 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/lib/findings.d.ts +17 -0
  29. package/dist/lib/findings.js +29 -0
  30. package/dist/lib/findings.js.map +1 -0
  31. package/dist/lib/frontmatter.d.ts +14 -0
  32. package/dist/lib/frontmatter.js +28 -0
  33. package/dist/lib/frontmatter.js.map +1 -0
  34. package/dist/lib/fsx.d.ts +21 -0
  35. package/dist/lib/fsx.js +100 -0
  36. package/dist/lib/fsx.js.map +1 -0
  37. package/dist/lib/git.d.ts +10 -0
  38. package/dist/lib/git.js +55 -0
  39. package/dist/lib/git.js.map +1 -0
  40. package/dist/lib/layer.d.ts +32 -0
  41. package/dist/lib/layer.js +138 -0
  42. package/dist/lib/layer.js.map +1 -0
  43. package/dist/lib/manifest.d.ts +62 -0
  44. package/dist/lib/manifest.js +54 -0
  45. package/dist/lib/manifest.js.map +1 -0
  46. package/dist/lib/schemas.d.ts +38 -0
  47. package/dist/lib/schemas.js +57 -0
  48. package/dist/lib/schemas.js.map +1 -0
  49. package/package.json +61 -0
  50. package/schemas/README.md +3 -0
  51. package/schemas/agent-profile.schema.json +129 -0
  52. package/schemas/context-changelog.schema.json +150 -0
  53. package/schemas/context-index.schema.json +137 -0
  54. package/schemas/context-manifest.schema.json +253 -0
  55. package/schemas/decision-record.schema.json +84 -0
  56. package/templates/README.md +5 -0
  57. package/templates/agent-profile.md +25 -0
  58. package/templates/agents/core.md +27 -0
  59. package/templates/boot-profile.md +39 -0
  60. package/templates/decision-record.md +28 -0
  61. package/templates/docs-viewer-assets/PROVENANCE.txt +18 -0
  62. package/templates/docs-viewer-assets/docsify-sidebar-collapse.min.css +24 -0
  63. package/templates/docs-viewer-assets/docsify-sidebar-collapse.min.js +149 -0
  64. package/templates/docs-viewer-assets/docsify.min.js +1 -0
  65. package/templates/docs-viewer-assets/search.min.js +314 -0
  66. package/templates/docs-viewer-assets/vue.css +1063 -0
  67. package/templates/docs-viewer.html +63 -0
  68. package/templates/leji.json +56 -0
@@ -0,0 +1,1063 @@
1
+ @import url("https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600");
2
+ * {
3
+ -webkit-font-smoothing: antialiased;
4
+ -webkit-overflow-scrolling: touch;
5
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
6
+ -webkit-text-size-adjust: none;
7
+ -webkit-touch-callout: none;
8
+ box-sizing: border-box;
9
+ }
10
+ body:not(.ready) {
11
+ overflow: hidden;
12
+ }
13
+ body:not(.ready) [data-cloak],
14
+ body:not(.ready) .app-nav,
15
+ body:not(.ready) > nav {
16
+ display: none;
17
+ }
18
+ div#app {
19
+ font-size: 30px;
20
+ font-weight: lighter;
21
+ margin: 40vh auto;
22
+ text-align: center;
23
+ }
24
+ div#app:empty::before {
25
+ content: 'Loading...';
26
+ }
27
+ img.emoji {
28
+ height: 1.2em;
29
+ vertical-align: middle;
30
+ }
31
+ span.emoji {
32
+ font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
33
+ font-size: 1.2em;
34
+ vertical-align: middle;
35
+ }
36
+ .progress {
37
+ background-color: #42b983;
38
+ background-color: var(--theme-color, #42b983);
39
+ height: 2px;
40
+ left: 0px;
41
+ position: fixed;
42
+ right: 0px;
43
+ top: 0px;
44
+ transition: width 0.2s, opacity 0.4s;
45
+ width: 0%;
46
+ z-index: 999999;
47
+ }
48
+ .search a:hover {
49
+ color: #42b983;
50
+ color: var(--theme-color, #42b983);
51
+ }
52
+ .search .search-keyword {
53
+ color: #42b983;
54
+ color: var(--theme-color, #42b983);
55
+ font-style: normal;
56
+ font-weight: bold;
57
+ }
58
+ html,
59
+ body {
60
+ height: 100%;
61
+ }
62
+ body {
63
+ -moz-osx-font-smoothing: grayscale;
64
+ -webkit-font-smoothing: antialiased;
65
+ color: #34495e;
66
+ font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
67
+ font-size: 15px;
68
+ letter-spacing: 0;
69
+ margin: 0;
70
+ overflow-x: hidden;
71
+ }
72
+ img {
73
+ max-width: 100%;
74
+ }
75
+ a[disabled] {
76
+ cursor: not-allowed;
77
+ opacity: 0.6;
78
+ }
79
+ kbd {
80
+ border: solid 1px #ccc;
81
+ border-radius: 3px;
82
+ display: inline-block;
83
+ font-size: 12px !important;
84
+ line-height: 12px;
85
+ margin-bottom: 3px;
86
+ padding: 3px 5px;
87
+ vertical-align: middle;
88
+ }
89
+ li input[type='checkbox'] {
90
+ margin: 0 0.2em 0.25em 0;
91
+ vertical-align: middle;
92
+ }
93
+ .app-nav {
94
+ margin: 25px 60px 0 0;
95
+ position: absolute;
96
+ right: 0;
97
+ text-align: right;
98
+ z-index: 10;
99
+ /* navbar dropdown */
100
+ }
101
+ .app-nav.no-badge {
102
+ margin-right: 25px;
103
+ }
104
+ .app-nav p {
105
+ margin: 0;
106
+ }
107
+ .app-nav > a {
108
+ margin: 0 1rem;
109
+ padding: 5px 0;
110
+ }
111
+ .app-nav ul,
112
+ .app-nav li {
113
+ display: inline-block;
114
+ list-style: none;
115
+ margin: 0;
116
+ }
117
+ .app-nav a {
118
+ color: inherit;
119
+ font-size: 16px;
120
+ text-decoration: none;
121
+ transition: color 0.3s;
122
+ }
123
+ .app-nav a:hover {
124
+ color: #42b983;
125
+ color: var(--theme-color, #42b983);
126
+ }
127
+ .app-nav a.active {
128
+ border-bottom: 2px solid #42b983;
129
+ border-bottom: 2px solid var(--theme-color, #42b983);
130
+ color: #42b983;
131
+ color: var(--theme-color, #42b983);
132
+ }
133
+ .app-nav li {
134
+ display: inline-block;
135
+ margin: 0 1rem;
136
+ padding: 5px 0;
137
+ position: relative;
138
+ cursor: pointer;
139
+ }
140
+ .app-nav li ul {
141
+ background-color: #fff;
142
+ border: 1px solid #ddd;
143
+ border-bottom-color: #ccc;
144
+ border-radius: 4px;
145
+ box-sizing: border-box;
146
+ display: none;
147
+ max-height: calc(100vh - 61px);
148
+ overflow-y: auto;
149
+ padding: 10px 0;
150
+ position: absolute;
151
+ right: -15px;
152
+ text-align: left;
153
+ top: 100%;
154
+ white-space: nowrap;
155
+ }
156
+ .app-nav li ul li {
157
+ display: block;
158
+ font-size: 14px;
159
+ line-height: 1rem;
160
+ margin: 0;
161
+ margin: 8px 14px;
162
+ white-space: nowrap;
163
+ }
164
+ .app-nav li ul a {
165
+ display: block;
166
+ font-size: inherit;
167
+ margin: 0;
168
+ padding: 0;
169
+ }
170
+ .app-nav li ul a.active {
171
+ border-bottom: 0;
172
+ }
173
+ .app-nav li:hover ul {
174
+ display: block;
175
+ }
176
+ .github-corner {
177
+ border-bottom: 0;
178
+ position: fixed;
179
+ right: 0;
180
+ text-decoration: none;
181
+ top: 0;
182
+ z-index: 1;
183
+ }
184
+ .github-corner:hover .octo-arm {
185
+ animation: octocat-wave 560ms ease-in-out;
186
+ }
187
+ .github-corner svg {
188
+ color: #fff;
189
+ fill: #42b983;
190
+ fill: var(--theme-color, #42b983);
191
+ height: 80px;
192
+ width: 80px;
193
+ }
194
+ main {
195
+ display: block;
196
+ position: relative;
197
+ width: 100vw;
198
+ height: 100%;
199
+ z-index: 0;
200
+ }
201
+ main.hidden {
202
+ display: none;
203
+ }
204
+ .anchor {
205
+ display: inline-block;
206
+ text-decoration: none;
207
+ transition: all 0.3s;
208
+ }
209
+ .anchor span {
210
+ color: #34495e;
211
+ }
212
+ .anchor:hover {
213
+ text-decoration: underline;
214
+ }
215
+ .sidebar {
216
+ border-right: 1px solid rgba(0,0,0,0.07);
217
+ overflow-y: auto;
218
+ padding: 40px 0 0;
219
+ position: absolute;
220
+ top: 0;
221
+ bottom: 0;
222
+ left: 0;
223
+ transition: transform 250ms ease-out;
224
+ width: 300px;
225
+ z-index: 20;
226
+ }
227
+ .sidebar > h1 {
228
+ margin: 0 auto 1rem;
229
+ font-size: 1.5rem;
230
+ font-weight: 300;
231
+ text-align: center;
232
+ }
233
+ .sidebar > h1 a {
234
+ color: inherit;
235
+ text-decoration: none;
236
+ }
237
+ .sidebar > h1 .app-nav {
238
+ display: block;
239
+ position: static;
240
+ }
241
+ .sidebar .sidebar-nav {
242
+ line-height: 2em;
243
+ padding-bottom: 40px;
244
+ }
245
+ .sidebar li.collapse .app-sub-sidebar {
246
+ display: none;
247
+ }
248
+ .sidebar ul {
249
+ margin: 0 0 0 15px;
250
+ padding: 0;
251
+ }
252
+ .sidebar li > p {
253
+ font-weight: 700;
254
+ margin: 0;
255
+ }
256
+ .sidebar ul,
257
+ .sidebar ul li {
258
+ list-style: none;
259
+ }
260
+ .sidebar ul li a {
261
+ border-bottom: none;
262
+ display: block;
263
+ }
264
+ .sidebar ul li ul {
265
+ padding-left: 20px;
266
+ }
267
+ .sidebar::-webkit-scrollbar {
268
+ width: 4px;
269
+ }
270
+ .sidebar::-webkit-scrollbar-thumb {
271
+ background: transparent;
272
+ border-radius: 4px;
273
+ }
274
+ .sidebar:hover::-webkit-scrollbar-thumb {
275
+ background: rgba(136,136,136,0.4);
276
+ }
277
+ .sidebar:hover::-webkit-scrollbar-track {
278
+ background: rgba(136,136,136,0.1);
279
+ }
280
+ .sidebar-toggle {
281
+ background-color: transparent;
282
+ background-color: rgba(255,255,255,0.8);
283
+ border: 0;
284
+ outline: none;
285
+ padding: 10px;
286
+ position: absolute;
287
+ bottom: 0;
288
+ left: 0;
289
+ text-align: center;
290
+ transition: opacity 0.3s;
291
+ width: 284px;
292
+ z-index: 30;
293
+ cursor: pointer;
294
+ }
295
+ .sidebar-toggle:hover .sidebar-toggle-button {
296
+ opacity: 0.4;
297
+ }
298
+ .sidebar-toggle span {
299
+ background-color: #42b983;
300
+ background-color: var(--theme-color, #42b983);
301
+ display: block;
302
+ margin-bottom: 4px;
303
+ width: 16px;
304
+ height: 2px;
305
+ }
306
+ body.sticky .sidebar,
307
+ body.sticky .sidebar-toggle {
308
+ position: fixed;
309
+ }
310
+ .content {
311
+ padding-top: 60px;
312
+ position: absolute;
313
+ top: 0;
314
+ right: 0;
315
+ bottom: 0;
316
+ left: 300px;
317
+ transition: left 250ms ease;
318
+ }
319
+ .markdown-section {
320
+ margin: 0 auto;
321
+ max-width: 80%;
322
+ padding: 30px 15px 40px 15px;
323
+ position: relative;
324
+ }
325
+ .markdown-section > * {
326
+ box-sizing: border-box;
327
+ font-size: inherit;
328
+ }
329
+ .markdown-section > :first-child {
330
+ margin-top: 0 !important;
331
+ }
332
+ .markdown-section hr {
333
+ border: none;
334
+ border-bottom: 1px solid #eee;
335
+ margin: 2em 0;
336
+ }
337
+ .markdown-section iframe {
338
+ border: 1px solid #eee;
339
+ /* fix horizontal overflow on iOS Safari */
340
+ width: 1px;
341
+ min-width: 100%;
342
+ }
343
+ .markdown-section table {
344
+ border-collapse: collapse;
345
+ border-spacing: 0;
346
+ display: block;
347
+ margin-bottom: 1rem;
348
+ overflow: auto;
349
+ width: 100%;
350
+ }
351
+ .markdown-section th {
352
+ border: 1px solid #ddd;
353
+ font-weight: bold;
354
+ padding: 6px 13px;
355
+ }
356
+ .markdown-section td {
357
+ border: 1px solid #ddd;
358
+ padding: 6px 13px;
359
+ }
360
+ .markdown-section tr {
361
+ border-top: 1px solid #ccc;
362
+ }
363
+ .markdown-section tr:nth-child(2n) {
364
+ background-color: #f8f8f8;
365
+ }
366
+ .markdown-section p.tip {
367
+ background-color: #f8f8f8;
368
+ border-bottom-right-radius: 2px;
369
+ border-left: 4px solid #f66;
370
+ border-top-right-radius: 2px;
371
+ margin: 2em 0;
372
+ padding: 12px 24px 12px 30px;
373
+ position: relative;
374
+ }
375
+ .markdown-section p.tip:before {
376
+ background-color: #f66;
377
+ border-radius: 100%;
378
+ color: #fff;
379
+ content: '!';
380
+ font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
381
+ font-size: 14px;
382
+ font-weight: bold;
383
+ left: -12px;
384
+ line-height: 20px;
385
+ position: absolute;
386
+ height: 20px;
387
+ width: 20px;
388
+ text-align: center;
389
+ top: 14px;
390
+ }
391
+ .markdown-section p.tip code {
392
+ background-color: #efefef;
393
+ }
394
+ .markdown-section p.tip em {
395
+ color: #34495e;
396
+ }
397
+ .markdown-section p.warn {
398
+ background: rgba(66,185,131,0.1);
399
+ border-radius: 2px;
400
+ padding: 1rem;
401
+ }
402
+ .markdown-section ul.task-list > li {
403
+ list-style-type: none;
404
+ }
405
+ body.close .sidebar {
406
+ transform: translateX(-300px);
407
+ }
408
+ body.close .sidebar-toggle {
409
+ width: auto;
410
+ }
411
+ body.close .content {
412
+ left: 0;
413
+ }
414
+ @media print {
415
+ .github-corner,
416
+ .sidebar-toggle,
417
+ .sidebar,
418
+ .app-nav {
419
+ display: none;
420
+ }
421
+ }
422
+ @media screen and (max-width: 768px) {
423
+ .github-corner,
424
+ .sidebar-toggle,
425
+ .sidebar {
426
+ position: fixed;
427
+ }
428
+ .app-nav {
429
+ margin-top: 16px;
430
+ }
431
+ .app-nav li ul {
432
+ top: 30px;
433
+ }
434
+ main {
435
+ height: auto;
436
+ min-height: 100vh;
437
+ overflow-x: hidden;
438
+ }
439
+ .sidebar {
440
+ left: -300px;
441
+ transition: transform 250ms ease-out;
442
+ }
443
+ .content {
444
+ left: 0;
445
+ max-width: 100vw;
446
+ position: static;
447
+ padding-top: 20px;
448
+ transition: transform 250ms ease;
449
+ }
450
+ .app-nav,
451
+ .github-corner {
452
+ transition: transform 250ms ease-out;
453
+ }
454
+ .sidebar-toggle {
455
+ background-color: transparent;
456
+ width: auto;
457
+ padding: 30px 30px 10px 10px;
458
+ }
459
+ body.close .sidebar {
460
+ transform: translateX(300px);
461
+ }
462
+ body.close .sidebar-toggle {
463
+ background-color: rgba(255,255,255,0.8);
464
+ transition: 1s background-color;
465
+ width: 284px;
466
+ padding: 10px;
467
+ }
468
+ body.close .content {
469
+ transform: translateX(300px);
470
+ }
471
+ body.close .app-nav,
472
+ body.close .github-corner {
473
+ display: none;
474
+ }
475
+ .github-corner:hover .octo-arm {
476
+ animation: none;
477
+ }
478
+ .github-corner .octo-arm {
479
+ animation: octocat-wave 560ms ease-in-out;
480
+ }
481
+ }
482
+ @keyframes octocat-wave {
483
+ 0%, 100% {
484
+ transform: rotate(0);
485
+ }
486
+ 20%, 60% {
487
+ transform: rotate(-25deg);
488
+ }
489
+ 40%, 80% {
490
+ transform: rotate(10deg);
491
+ }
492
+ }
493
+ section.cover {
494
+ position: relative;
495
+ align-items: center;
496
+ background-position: center center;
497
+ background-repeat: no-repeat;
498
+ background-size: cover;
499
+ min-height: 100vh;
500
+ width: 100%;
501
+ display: none;
502
+ }
503
+ section.cover.show {
504
+ display: flex;
505
+ }
506
+ section.cover.has-mask .mask {
507
+ background-color: #fff;
508
+ opacity: 0.8;
509
+ position: absolute;
510
+ top: 0;
511
+ bottom: 0;
512
+ width: 100%;
513
+ }
514
+ section.cover .cover-main {
515
+ flex: 1;
516
+ margin: 0 16px;
517
+ text-align: center;
518
+ position: relative;
519
+ }
520
+ section.cover a {
521
+ color: inherit;
522
+ text-decoration: none;
523
+ }
524
+ section.cover a:hover {
525
+ text-decoration: none;
526
+ }
527
+ section.cover p {
528
+ line-height: 1.5rem;
529
+ margin: 1em 0;
530
+ }
531
+ section.cover h1 {
532
+ color: inherit;
533
+ font-size: 2.5rem;
534
+ font-weight: 300;
535
+ margin: 0.625rem 0 2.5rem;
536
+ position: relative;
537
+ text-align: center;
538
+ }
539
+ section.cover h1 a {
540
+ display: block;
541
+ }
542
+ section.cover h1 small {
543
+ bottom: -0.4375rem;
544
+ font-size: 1rem;
545
+ position: absolute;
546
+ }
547
+ section.cover blockquote {
548
+ font-size: 1.5rem;
549
+ text-align: center;
550
+ }
551
+ section.cover ul {
552
+ line-height: 1.8;
553
+ list-style-type: none;
554
+ margin: 1em auto;
555
+ max-width: 500px;
556
+ padding: 0;
557
+ }
558
+ section.cover .cover-main > p:last-child a {
559
+ border-color: #42b983;
560
+ border-color: var(--theme-color, #42b983);
561
+ border-radius: 2rem;
562
+ border-style: solid;
563
+ border-width: 1px;
564
+ box-sizing: border-box;
565
+ color: #42b983;
566
+ color: var(--theme-color, #42b983);
567
+ display: inline-block;
568
+ font-size: 1.05rem;
569
+ letter-spacing: 0.1rem;
570
+ margin: 0.5rem 1rem;
571
+ padding: 0.75em 2rem;
572
+ text-decoration: none;
573
+ transition: all 0.15s ease;
574
+ }
575
+ section.cover .cover-main > p:last-child a:last-child {
576
+ background-color: #42b983;
577
+ background-color: var(--theme-color, #42b983);
578
+ color: #fff;
579
+ }
580
+ section.cover .cover-main > p:last-child a:last-child:hover {
581
+ color: inherit;
582
+ opacity: 0.8;
583
+ }
584
+ section.cover .cover-main > p:last-child a:hover {
585
+ color: inherit;
586
+ }
587
+ section.cover blockquote > p > a {
588
+ border-bottom: 2px solid #42b983;
589
+ border-bottom: 2px solid var(--theme-color, #42b983);
590
+ transition: color 0.3s;
591
+ }
592
+ section.cover blockquote > p > a:hover {
593
+ color: #42b983;
594
+ color: var(--theme-color, #42b983);
595
+ }
596
+ body {
597
+ background-color: #fff;
598
+ }
599
+ /* sidebar */
600
+ .sidebar {
601
+ background-color: #fff;
602
+ color: #364149;
603
+ }
604
+ .sidebar li {
605
+ margin: 6px 0 6px 0;
606
+ }
607
+ .sidebar ul li a {
608
+ color: #505d6b;
609
+ font-size: 14px;
610
+ font-weight: normal;
611
+ overflow: hidden;
612
+ text-decoration: none;
613
+ text-overflow: ellipsis;
614
+ white-space: nowrap;
615
+ }
616
+ .sidebar ul li a:hover {
617
+ text-decoration: underline;
618
+ }
619
+ .sidebar ul li ul {
620
+ padding: 0;
621
+ }
622
+ .sidebar ul li.active > a {
623
+ border-right: 2px solid;
624
+ color: #42b983;
625
+ color: var(--theme-color, #42b983);
626
+ font-weight: 600;
627
+ }
628
+ .app-sub-sidebar li::before {
629
+ content: '-';
630
+ padding-right: 4px;
631
+ float: left;
632
+ }
633
+ /* markdown content found on pages */
634
+ .markdown-section h1,
635
+ .markdown-section h2,
636
+ .markdown-section h3,
637
+ .markdown-section h4,
638
+ .markdown-section strong {
639
+ color: #2c3e50;
640
+ font-weight: 600;
641
+ }
642
+ .markdown-section a {
643
+ color: #42b983;
644
+ color: var(--theme-color, #42b983);
645
+ font-weight: 600;
646
+ }
647
+ .markdown-section h1 {
648
+ font-size: 2rem;
649
+ margin: 0 0 1rem;
650
+ }
651
+ .markdown-section h2 {
652
+ font-size: 1.75rem;
653
+ margin: 45px 0 0.8rem;
654
+ }
655
+ .markdown-section h3 {
656
+ font-size: 1.5rem;
657
+ margin: 40px 0 0.6rem;
658
+ }
659
+ .markdown-section h4 {
660
+ font-size: 1.25rem;
661
+ }
662
+ .markdown-section h5 {
663
+ font-size: 1rem;
664
+ }
665
+ .markdown-section h6 {
666
+ color: #777;
667
+ font-size: 1rem;
668
+ }
669
+ .markdown-section figure,
670
+ .markdown-section p {
671
+ margin: 1.2em 0;
672
+ }
673
+ .markdown-section p,
674
+ .markdown-section ul,
675
+ .markdown-section ol {
676
+ line-height: 1.6rem;
677
+ word-spacing: 0.05rem;
678
+ }
679
+ .markdown-section ul,
680
+ .markdown-section ol {
681
+ padding-left: 1.5rem;
682
+ }
683
+ .markdown-section blockquote {
684
+ border-left: 4px solid #42b983;
685
+ border-left: 4px solid var(--theme-color, #42b983);
686
+ color: #858585;
687
+ margin: 2em 0;
688
+ padding-left: 20px;
689
+ }
690
+ .markdown-section blockquote p {
691
+ font-weight: 600;
692
+ margin-left: 0;
693
+ }
694
+ .markdown-section iframe {
695
+ margin: 1em 0;
696
+ }
697
+ .markdown-section em {
698
+ color: #7f8c8d;
699
+ }
700
+ .markdown-section code,
701
+ .markdown-section pre,
702
+ .markdown-section output::after {
703
+ font-family: 'Roboto Mono', Monaco, courier, monospace;
704
+ }
705
+ .markdown-section code,
706
+ .markdown-section pre {
707
+ background-color: #f8f8f8;
708
+ }
709
+ .markdown-section pre,
710
+ .markdown-section output {
711
+ margin: 1.2em 0;
712
+ position: relative;
713
+ }
714
+ .markdown-section pre > code,
715
+ .markdown-section output {
716
+ border-radius: 2px;
717
+ display: block;
718
+ }
719
+ .markdown-section pre > code,
720
+ .markdown-section output::after {
721
+ -moz-osx-font-smoothing: initial;
722
+ -webkit-font-smoothing: initial;
723
+ }
724
+ .markdown-section code {
725
+ border-radius: 2px;
726
+ color: #e96900;
727
+ margin: 0 2px;
728
+ padding: 3px 5px;
729
+ white-space: pre-wrap;
730
+ }
731
+ .markdown-section > :not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) code {
732
+ font-size: 0.8rem;
733
+ }
734
+ .markdown-section pre {
735
+ padding: 0 1.4rem;
736
+ line-height: 1.5rem;
737
+ overflow: auto;
738
+ word-wrap: normal;
739
+ }
740
+ .markdown-section pre > code {
741
+ color: #525252;
742
+ font-size: 0.8rem;
743
+ padding: 2.2em 5px;
744
+ line-height: inherit;
745
+ margin: 0 2px;
746
+ max-width: inherit;
747
+ overflow: inherit;
748
+ white-space: inherit;
749
+ }
750
+ .markdown-section output {
751
+ padding: 1.7rem 1.4rem;
752
+ border: 1px dotted #ccc;
753
+ }
754
+ .markdown-section output > :first-child {
755
+ margin-top: 0;
756
+ }
757
+ .markdown-section output > :last-child {
758
+ margin-bottom: 0;
759
+ }
760
+ .markdown-section code::after,
761
+ .markdown-section code::before,
762
+ .markdown-section output::after,
763
+ .markdown-section output::before {
764
+ letter-spacing: 0.05rem;
765
+ }
766
+ .markdown-section pre::after,
767
+ .markdown-section output::after {
768
+ color: #ccc;
769
+ font-size: 0.6rem;
770
+ font-weight: 600;
771
+ height: 15px;
772
+ line-height: 15px;
773
+ padding: 5px 10px 0;
774
+ position: absolute;
775
+ right: 0;
776
+ text-align: right;
777
+ top: 0;
778
+ }
779
+ .markdown-section pre::after,
780
+ .markdown-section output::after {
781
+ content: attr(data-lang);
782
+ }
783
+ /* code highlight */
784
+ .token.comment,
785
+ .token.prolog,
786
+ .token.doctype,
787
+ .token.cdata {
788
+ color: #8e908c;
789
+ }
790
+ .token.namespace {
791
+ opacity: 0.7;
792
+ }
793
+ .token.boolean,
794
+ .token.number {
795
+ color: #c76b29;
796
+ }
797
+ .token.punctuation {
798
+ color: #525252;
799
+ }
800
+ .token.property {
801
+ color: #c08b30;
802
+ }
803
+ .token.tag {
804
+ color: #2973b7;
805
+ }
806
+ .token.string {
807
+ color: #42b983;
808
+ color: var(--theme-color, #42b983);
809
+ }
810
+ .token.selector {
811
+ color: #6679cc;
812
+ }
813
+ .token.attr-name {
814
+ color: #2973b7;
815
+ }
816
+ .token.entity,
817
+ .token.url,
818
+ .language-css .token.string,
819
+ .style .token.string {
820
+ color: #22a2c9;
821
+ }
822
+ .token.attr-value,
823
+ .token.control,
824
+ .token.directive,
825
+ .token.unit {
826
+ color: #42b983;
827
+ color: var(--theme-color, #42b983);
828
+ }
829
+ .token.keyword,
830
+ .token.function {
831
+ color: #e96900;
832
+ }
833
+ .token.statement,
834
+ .token.regex,
835
+ .token.atrule {
836
+ color: #22a2c9;
837
+ }
838
+ .token.placeholder,
839
+ .token.variable {
840
+ color: #3d8fd1;
841
+ }
842
+ .token.deleted {
843
+ text-decoration: line-through;
844
+ }
845
+ .token.inserted {
846
+ border-bottom: 1px dotted #202746;
847
+ text-decoration: none;
848
+ }
849
+ .token.italic {
850
+ font-style: italic;
851
+ }
852
+ .token.important,
853
+ .token.bold {
854
+ font-weight: bold;
855
+ }
856
+ .token.important {
857
+ color: #c94922;
858
+ }
859
+ .token.entity {
860
+ cursor: help;
861
+ }
862
+ code .token {
863
+ -moz-osx-font-smoothing: initial;
864
+ -webkit-font-smoothing: initial;
865
+ min-height: 1.5rem;
866
+ position: relative;
867
+ left: auto;
868
+ }
869
+
870
+ /* ============================================================================
871
+ Leji brand theme
872
+ Recolors the stock Docsify "vue" theme with the Leji palette and swaps in
873
+ Meteor Dreams-style ▶/▼ group triangles + the search box. Typography stays
874
+ the theme default on purpose; this block only touches colors and the sidebar
875
+ group/active treatment. CDN-free: no @import, no web fonts.
876
+ ========================================================================== */
877
+ :root {
878
+ --theme-color: #223f93; /* recolors every var(--theme-color) rule above */
879
+ --leji-blue-deep: #162960;
880
+ --leji-blue: #223f93;
881
+ --leji-gold: #ffbd6e;
882
+ --leji-paper: #faf6ef;
883
+ --leji-ink: #20242f;
884
+ --leji-ink-soft: #555b6e;
885
+ --leji-line: #d9d0c0;
886
+ color-scheme: light;
887
+ }
888
+
889
+ body {
890
+ background: var(--leji-paper);
891
+ color: var(--leji-ink);
892
+ }
893
+
894
+ /* --- sidebar shell --- */
895
+ .sidebar {
896
+ background: var(--leji-paper);
897
+ border-right: 1px solid var(--leji-line);
898
+ padding-bottom: 4rem;
899
+ }
900
+ .sidebar .app-name {
901
+ margin: 1.6rem 0 1.3rem;
902
+ text-align: left;
903
+ padding-left: 15px;
904
+ }
905
+ .sidebar .app-name-link {
906
+ color: var(--leji-blue);
907
+ font-weight: 600;
908
+ }
909
+ /* divider between the ungrouped top items (Boot profile) and the groups */
910
+ .sidebar-nav hr {
911
+ margin: 0.9rem 0;
912
+ border: none;
913
+ border-top: 1px solid var(--leji-line);
914
+ }
915
+ .sidebar ul li a {
916
+ color: var(--leji-ink-soft);
917
+ transition: color 0.12s;
918
+ }
919
+ .sidebar ul li a:hover {
920
+ color: var(--leji-blue);
921
+ text-decoration: none;
922
+ }
923
+ /* Active document: a plain blue text change, nothing else. */
924
+ .sidebar ul li.active > a {
925
+ color: var(--leji-blue) !important;
926
+ border-right: none;
927
+ font-weight: 600;
928
+ }
929
+
930
+ /* --- collapsible groups (docsify-sidebar-collapse) ---
931
+ Replace the plugin's rotating border-caret with Meteor Dreams' ▶/▼ triangle
932
+ glyphs. The plugin toggles .folder / .open / .collapse on each group <li>. */
933
+ .sidebar-nav > ul {
934
+ padding-left: 14px;
935
+ }
936
+ .sidebar-nav li.folder::before {
937
+ content: '▶' !important;
938
+ border: none !important;
939
+ height: auto !important;
940
+ width: auto !important;
941
+ transform: none !important;
942
+ transition: none !important;
943
+ font-size: 8px;
944
+ line-height: 1;
945
+ color: var(--leji-ink-soft);
946
+ /* The plugin anchors ::before at top:11px; with the theme's 30px line-height
947
+ a zero margin centers the glyph on the label's first line. */
948
+ margin-top: 0;
949
+ }
950
+ .sidebar-nav li.folder.open:not(.collapse)::before {
951
+ content: '▼' !important;
952
+ }
953
+ .sidebar-nav li.folder.collapse::before {
954
+ content: '▶' !important;
955
+ }
956
+ /* in-page heading TOC under the active document (Docsify subMaxLevel): a flat,
957
+ muted list with no bullet markers (drop the theme's floated "-"). */
958
+ .sidebar-nav .app-sub-sidebar {
959
+ padding-left: 0.3rem;
960
+ }
961
+ .sidebar-nav .app-sub-sidebar li {
962
+ margin: 0;
963
+ }
964
+ .sidebar-nav .app-sub-sidebar li::before {
965
+ content: none !important;
966
+ }
967
+ .sidebar-nav .app-sub-sidebar li a {
968
+ color: var(--leji-ink-soft);
969
+ }
970
+ .sidebar-nav .app-sub-sidebar li.active > a,
971
+ .sidebar-nav .app-sub-sidebar li a:hover {
972
+ color: var(--leji-blue) !important;
973
+ }
974
+
975
+ /* --- search box --- */
976
+ .search {
977
+ border-bottom: 1px solid var(--leji-line);
978
+ }
979
+ .search input {
980
+ background: #fff;
981
+ border: 1px solid var(--leji-line);
982
+ border-radius: 6px;
983
+ color: var(--leji-ink);
984
+ }
985
+ .search input::placeholder {
986
+ color: var(--leji-ink-soft);
987
+ }
988
+ .search input:focus {
989
+ outline: none;
990
+ border-color: var(--leji-blue);
991
+ box-shadow: 0 0 0 2px rgba(34, 63, 147, 0.12);
992
+ }
993
+ .search .results-panel {
994
+ background: var(--leji-paper);
995
+ }
996
+ .search .matching-post {
997
+ border-bottom: 1px solid var(--leji-line);
998
+ }
999
+ .search .matching-post a,
1000
+ .search p.search-keyword {
1001
+ color: var(--leji-blue);
1002
+ }
1003
+ .search .matching-post a:hover {
1004
+ color: var(--leji-blue-deep);
1005
+ }
1006
+ .search .clear-button {
1007
+ cursor: pointer;
1008
+ }
1009
+
1010
+ /* --- "Powered by Leji" footer --- */
1011
+ /* Sits just above Docsify's sidebar-toggle grip (absolute, bottom:0) so the two
1012
+ never overlap. The toggle is re-skinned to the paper background below. */
1013
+ .leji-powered {
1014
+ position: absolute;
1015
+ bottom: 2.9rem;
1016
+ left: 0;
1017
+ right: 0;
1018
+ padding: 0.8rem 1.5rem;
1019
+ background: var(--leji-paper);
1020
+ border-top: 1px solid var(--leji-line);
1021
+ font-size: 0.66rem;
1022
+ letter-spacing: 0.1em;
1023
+ text-transform: uppercase;
1024
+ color: var(--leji-ink-soft);
1025
+ }
1026
+ .sidebar-toggle {
1027
+ background-color: var(--leji-paper) !important;
1028
+ }
1029
+ .leji-powered a {
1030
+ color: var(--leji-blue) !important;
1031
+ text-decoration: none;
1032
+ }
1033
+ .leji-powered a:hover {
1034
+ color: var(--leji-blue-deep) !important;
1035
+ }
1036
+ .leji-powered .spark {
1037
+ color: var(--leji-gold);
1038
+ }
1039
+ .leji-powered strong {
1040
+ font-weight: 600;
1041
+ }
1042
+
1043
+ /* --- prose (color only; typography stays the theme default) --- */
1044
+ .markdown-section h1,
1045
+ .markdown-section h2,
1046
+ .markdown-section h3,
1047
+ .markdown-section h4 {
1048
+ color: var(--leji-blue-deep);
1049
+ }
1050
+ .markdown-section a {
1051
+ color: var(--leji-blue);
1052
+ }
1053
+ /* brand-tinted inline code, replacing the stock orange */
1054
+ .markdown-section code,
1055
+ .markdown-section p code,
1056
+ .markdown-section li code {
1057
+ color: var(--leji-blue-deep);
1058
+ background: rgba(34, 63, 147, 0.07);
1059
+ }
1060
+ .markdown-section blockquote {
1061
+ border-left: 3px solid var(--leji-gold);
1062
+ color: var(--leji-ink-soft);
1063
+ }