kimi-code-memory-mcp-server 0.1.1 → 0.2.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 (129) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/README.en.md +349 -0
  3. package/README.md +223 -137
  4. package/assets/contextFlow.svg +144 -0
  5. package/dist/config.d.ts +13 -0
  6. package/dist/config.js +13 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/context/wire-context.d.ts +3 -0
  9. package/dist/context/wire-context.js +20 -50
  10. package/dist/context/wire-context.js.map +1 -1
  11. package/dist/dao/constants.d.ts +33 -0
  12. package/dist/dao/constants.js +17 -0
  13. package/dist/dao/constants.js.map +1 -0
  14. package/dist/dao/index-catalog.d.ts +19 -0
  15. package/dist/dao/index-catalog.js +94 -0
  16. package/dist/dao/index-catalog.js.map +1 -0
  17. package/dist/dao/index-reconciler.d.ts +13 -0
  18. package/dist/dao/index-reconciler.js +162 -0
  19. package/dist/dao/index-reconciler.js.map +1 -0
  20. package/dist/dao/index-store.d.ts +31 -0
  21. package/dist/dao/index-store.js +128 -0
  22. package/dist/dao/index-store.js.map +1 -0
  23. package/dist/dao/index.d.ts +12 -31
  24. package/dist/dao/index.js +50 -404
  25. package/dist/dao/index.js.map +1 -1
  26. package/dist/dao/memory-store.js +2 -10
  27. package/dist/dao/memory-store.js.map +1 -1
  28. package/dist/dao/memory-tree-renderer.d.ts +22 -0
  29. package/dist/dao/memory-tree-renderer.js +75 -0
  30. package/dist/dao/memory-tree-renderer.js.map +1 -0
  31. package/dist/prompts/index.d.ts +26 -0
  32. package/dist/prompts/index.js +103 -0
  33. package/dist/prompts/index.js.map +1 -0
  34. package/dist/refine/adapter.d.ts +6 -0
  35. package/dist/refine/adapter.js +28 -0
  36. package/dist/refine/adapter.js.map +1 -0
  37. package/dist/refine/constants.d.ts +35 -0
  38. package/dist/refine/constants.js +107 -0
  39. package/dist/refine/constants.js.map +1 -0
  40. package/dist/refine/extractor.d.ts +12 -0
  41. package/dist/refine/extractor.js +122 -0
  42. package/dist/refine/extractor.js.map +1 -0
  43. package/dist/refine/store.d.ts +23 -0
  44. package/dist/refine/store.js +153 -0
  45. package/dist/refine/store.js.map +1 -0
  46. package/dist/refine/types.d.ts +56 -0
  47. package/dist/refine/types.js +5 -0
  48. package/dist/refine/types.js.map +1 -0
  49. package/dist/refined-manager.d.ts +14 -56
  50. package/dist/refined-manager.js +27 -341
  51. package/dist/refined-manager.js.map +1 -1
  52. package/dist/resources/index.d.ts +15 -0
  53. package/dist/resources/index.js +134 -0
  54. package/dist/resources/index.js.map +1 -0
  55. package/dist/server.js +46 -2
  56. package/dist/server.js.map +1 -1
  57. package/dist/theme-manager.d.ts +1 -0
  58. package/dist/theme-manager.js +7 -0
  59. package/dist/theme-manager.js.map +1 -1
  60. package/dist/tools/context-tools.d.ts +16 -51
  61. package/dist/tools/context-tools.js +303 -55
  62. package/dist/tools/context-tools.js.map +1 -1
  63. package/dist/tools/index.d.ts +5 -827
  64. package/dist/tools/index.js +23 -354
  65. package/dist/tools/index.js.map +1 -1
  66. package/dist/tools/memory-tools.d.ts +4 -60
  67. package/dist/tools/memory-tools.js +129 -79
  68. package/dist/tools/memory-tools.js.map +1 -1
  69. package/dist/tools/system-tools.d.ts +3 -34
  70. package/dist/tools/system-tools.js +110 -33
  71. package/dist/tools/system-tools.js.map +1 -1
  72. package/dist/tools/theme-tools.d.ts +3 -31
  73. package/dist/tools/theme-tools.js +101 -22
  74. package/dist/tools/theme-tools.js.map +1 -1
  75. package/dist/tools/types.d.ts +21 -0
  76. package/dist/tools/types.js +13 -0
  77. package/dist/tools/types.js.map +1 -0
  78. package/dist/types.d.ts +11 -2
  79. package/dist/utils/action-entities.d.ts +16 -0
  80. package/dist/utils/action-entities.js +35 -0
  81. package/dist/utils/action-entities.js.map +1 -0
  82. package/dist/utils/date.d.ts +11 -0
  83. package/dist/utils/date.js +13 -0
  84. package/dist/utils/date.js.map +1 -0
  85. package/dist/utils/file-helpers.d.ts +10 -0
  86. package/dist/utils/file-helpers.js +28 -0
  87. package/dist/utils/file-helpers.js.map +1 -0
  88. package/dist/utils/headings.d.ts +5 -0
  89. package/dist/utils/headings.js +21 -0
  90. package/dist/utils/headings.js.map +1 -0
  91. package/dist/utils/search.d.ts +17 -0
  92. package/dist/utils/search.js +60 -0
  93. package/dist/utils/search.js.map +1 -0
  94. package/dist/utils/tools.d.ts +5 -0
  95. package/dist/utils/tools.js +10 -0
  96. package/dist/utils/tools.js.map +1 -0
  97. package/dist/version.d.ts +1 -1
  98. package/dist/version.js +1 -1
  99. package/dist/vis/api.d.ts +117 -0
  100. package/dist/vis/api.js +426 -0
  101. package/dist/vis/api.js.map +1 -0
  102. package/dist/vis/auto-start.d.ts +12 -0
  103. package/dist/vis/auto-start.js +87 -0
  104. package/dist/vis/auto-start.js.map +1 -0
  105. package/dist/vis/server.d.ts +14 -0
  106. package/dist/vis/server.js +337 -0
  107. package/dist/vis/server.js.map +1 -0
  108. package/dist/vis/static/api.js +57 -0
  109. package/dist/vis/static/app.js +1468 -0
  110. package/dist/vis/static/index.html +25 -0
  111. package/dist/vis/static/state.js +26 -0
  112. package/dist/vis/static/style.css +1553 -0
  113. package/dist/vis/static/utils/helpers.js +94 -0
  114. package/dist/vis/static/utils/markdown.js +81 -0
  115. package/dist/vis-cli.d.ts +7 -0
  116. package/dist/vis-cli.js +140 -0
  117. package/dist/vis-cli.js.map +1 -0
  118. package/docs/0.agent-memory-market-research.md +354 -0
  119. package/docs/1.memory-system-proposal-for-kimi-code.md +688 -0
  120. package/docs/2.memory-architecture-overview.md +417 -0
  121. package/docs/3.memory-skill-prompt-design.md +430 -0
  122. package/docs/4.kimi-code-native-evolution-roadmap.md +559 -0
  123. package/docs/5.decision-guard-design-notes.md +500 -0
  124. package/docs/ARCHITECTURE.md +2 -2
  125. package/docs/design-story.md +350 -0
  126. package/docs/three-layer-memory-model.md +153 -0
  127. package/docs/three-layer-memory-model.zh-CN.md +153 -0
  128. package/package.json +12 -6
  129. package/README.zh-CN.md +0 -292
@@ -0,0 +1,1553 @@
1
+ /* style.css — Kimi Code Web look-alike for Memory Vis */
2
+
3
+ * {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html,
8
+ body {
9
+ margin: 0;
10
+ padding: 0;
11
+ height: 100%;
12
+ }
13
+
14
+ body {
15
+ font-family: var(--sans, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
16
+ background: var(--bg);
17
+ color: var(--ink);
18
+ font-size: 14px;
19
+ line-height: 1.5;
20
+ -webkit-font-smoothing: antialiased;
21
+ }
22
+
23
+ ::-webkit-scrollbar {
24
+ width: 6px;
25
+ height: 6px;
26
+ }
27
+
28
+ ::-webkit-scrollbar-track {
29
+ background: transparent;
30
+ }
31
+
32
+ ::-webkit-scrollbar-thumb {
33
+ background: var(--line);
34
+ border-radius: 3px;
35
+ }
36
+
37
+ ::-webkit-scrollbar-thumb:hover {
38
+ background: var(--muted);
39
+ }
40
+
41
+ ::selection {
42
+ background: color-mix(in srgb, var(--blue) 25%, transparent);
43
+ }
44
+
45
+ .app {
46
+ display: grid;
47
+ grid-template-columns: 260px 1fr;
48
+ height: 100vh;
49
+ overflow: hidden;
50
+ }
51
+
52
+ .app.sidebar-collapsed {
53
+ grid-template-columns: 48px 1fr;
54
+ }
55
+
56
+ .sidebar {
57
+ display: flex;
58
+ flex-direction: column;
59
+ background: var(--bg);
60
+ border-right: 1px solid var(--line);
61
+ overflow: hidden;
62
+ min-width: 0;
63
+ }
64
+
65
+ .sidebar-nav {
66
+ flex: 1;
67
+ overflow-y: auto;
68
+ padding: 12px;
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: 16px;
72
+ }
73
+
74
+ .nav-group-label {
75
+ font-size: 11px;
76
+ text-transform: uppercase;
77
+ letter-spacing: 0.04em;
78
+ color: var(--dim);
79
+ margin-bottom: 6px;
80
+ padding-left: 6px;
81
+ }
82
+
83
+ .nav-item {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: 10px;
87
+ padding: 7px 12px;
88
+ border-radius: var(--r-sm);
89
+ color: var(--text);
90
+ text-decoration: none;
91
+ font-size: 14px;
92
+ position: relative;
93
+ cursor: pointer;
94
+ }
95
+
96
+ .nav-item:hover {
97
+ background: var(--soft);
98
+ color: var(--ink);
99
+ }
100
+
101
+ .nav-item.active {
102
+ background: var(--bluebg);
103
+ color: var(--ink);
104
+ }
105
+
106
+ .nav-item.active::before {
107
+ content: '';
108
+ position: absolute;
109
+ left: 0;
110
+ top: 6px;
111
+ bottom: 6px;
112
+ width: 3px;
113
+ background: var(--blue);
114
+ border-radius: 0 3px 3px 0;
115
+ }
116
+
117
+ .nav-icon {
118
+ font-size: 16px;
119
+ width: 18px;
120
+ text-align: center;
121
+ }
122
+
123
+ .sidebar-footer {
124
+ padding: 10px 12px;
125
+ border-top: 1px solid var(--line);
126
+ flex: none;
127
+ font-size: 11px;
128
+ color: var(--dim);
129
+ white-space: nowrap;
130
+ overflow: hidden;
131
+ text-overflow: ellipsis;
132
+ font-family: var(--mono);
133
+ }
134
+
135
+ .main {
136
+ display: flex;
137
+ flex-direction: column;
138
+ min-width: 0;
139
+ min-height: 0;
140
+ background: var(--bg);
141
+ overflow: hidden;
142
+ }
143
+
144
+ .topbar {
145
+ height: 50px;
146
+ padding: 0 12px;
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: space-between;
150
+ gap: 10px;
151
+ border-bottom: 1px solid var(--line);
152
+ background: var(--bg);
153
+ flex: none;
154
+ }
155
+
156
+ .topbar-left,
157
+ .topbar-right {
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 10px;
161
+ min-width: 0;
162
+ }
163
+
164
+ .menu-toggle {
165
+ display: none;
166
+ width: 28px;
167
+ height: 28px;
168
+ border-radius: 6px;
169
+ border: none;
170
+ background: transparent;
171
+ color: var(--ink);
172
+ font-size: 16px;
173
+ cursor: pointer;
174
+ place-items: center;
175
+ }
176
+
177
+ .menu-toggle:hover {
178
+ background: var(--soft);
179
+ }
180
+
181
+ .sidebar-header {
182
+ height: 50px;
183
+ padding: 0 12px;
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: space-between;
187
+ border-bottom: 1px solid var(--line);
188
+ flex: none;
189
+ gap: 8px;
190
+ }
191
+
192
+ .brand {
193
+ display: inline-flex;
194
+ align-items: center;
195
+ gap: 8px;
196
+ height: 32px;
197
+ padding: 0 4px;
198
+ border-radius: 8px;
199
+ border: none;
200
+ background: transparent;
201
+ color: var(--ink);
202
+ font-size: 15px;
203
+ font-weight: 600;
204
+ text-decoration: none;
205
+ cursor: pointer;
206
+ transition: background 0.15s ease, color 0.15s ease;
207
+ flex: 1;
208
+ min-width: 0;
209
+ overflow: hidden;
210
+ }
211
+
212
+ .brand:hover {
213
+ background: var(--soft);
214
+ color: var(--ink);
215
+ }
216
+
217
+ .brand-icon-svg {
218
+ width: 18px;
219
+ height: 18px;
220
+ flex: none;
221
+ padding: 5px;
222
+ background: var(--blue);
223
+ color: #ffffff;
224
+ border-radius: 6px;
225
+ }
226
+
227
+ .sidebar-toggle-btn {
228
+ width: 32px;
229
+ height: 32px;
230
+ border-radius: 8px;
231
+ border: 1px solid var(--line);
232
+ background: var(--bg);
233
+ color: var(--ink);
234
+ cursor: pointer;
235
+ display: inline-grid;
236
+ place-items: center;
237
+ transition: background 0.15s ease, border-color 0.15s ease;
238
+ }
239
+
240
+ .sidebar-toggle-btn:hover {
241
+ background: var(--soft);
242
+ border-color: var(--line);
243
+ }
244
+
245
+ .toggle-icon-svg {
246
+ width: 16px;
247
+ height: 16px;
248
+ }
249
+
250
+ .sidebar-collapsed-top {
251
+ display: none;
252
+ }
253
+
254
+ .app.sidebar-collapsed .sidebar-collapsed-top {
255
+ display: flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ height: 50px;
259
+ border-bottom: 1px solid var(--line);
260
+ flex: none;
261
+ }
262
+
263
+ .app.sidebar-collapsed .sidebar-header,
264
+ .app.sidebar-collapsed .sidebar-nav,
265
+ .app.sidebar-collapsed .sidebar-footer {
266
+ display: none;
267
+ }
268
+
269
+ .breadcrumb {
270
+ display: inline-flex;
271
+ align-items: center;
272
+ gap: 8px;
273
+ font-size: 14px;
274
+ color: var(--ink);
275
+ min-width: 0;
276
+ }
277
+
278
+ .breadcrumb a,
279
+ .breadcrumb span {
280
+ color: var(--muted);
281
+ text-decoration: none;
282
+ white-space: nowrap;
283
+ overflow: hidden;
284
+ text-overflow: ellipsis;
285
+ }
286
+
287
+ .breadcrumb a:hover {
288
+ color: var(--ink);
289
+ }
290
+
291
+ .breadcrumb .sep {
292
+ color: var(--dim);
293
+ flex: none;
294
+ }
295
+
296
+ .content {
297
+ flex: 1 1 0;
298
+ min-height: 0;
299
+ overflow-y: auto;
300
+ padding: 20px;
301
+ }
302
+
303
+ .view {
304
+ display: none;
305
+ animation: fadeIn 0.2s ease;
306
+ max-width: 1120px;
307
+ margin: 0 auto;
308
+ }
309
+
310
+ .view-active {
311
+ display: block;
312
+ }
313
+
314
+ .page-header {
315
+ display: flex;
316
+ align-items: center;
317
+ justify-content: space-between;
318
+ gap: 16px;
319
+ margin-bottom: 20px;
320
+ min-width: 0;
321
+ }
322
+
323
+ .page-title {
324
+ margin: 0;
325
+ font-size: 20px;
326
+ font-weight: 600;
327
+ color: var(--ink);
328
+ }
329
+
330
+ .card {
331
+ background: var(--canvas);
332
+ border: 1px solid var(--line);
333
+ border-radius: var(--r-lg);
334
+ padding: 16px;
335
+ margin-bottom: 16px;
336
+ }
337
+
338
+ .card-header {
339
+ display: flex;
340
+ align-items: center;
341
+ justify-content: space-between;
342
+ gap: 12px;
343
+ padding-bottom: 12px;
344
+ margin-bottom: 16px;
345
+ border-bottom: 1px solid var(--line);
346
+ }
347
+
348
+ .card-title {
349
+ margin: 0;
350
+ font-size: 14px;
351
+ font-weight: 600;
352
+ color: var(--ink);
353
+ }
354
+
355
+ .card-body {
356
+ color: var(--text);
357
+ }
358
+
359
+ .card-grid {
360
+ display: grid;
361
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
362
+ gap: 16px;
363
+ }
364
+
365
+ .search-card {
366
+ cursor: pointer;
367
+ transition: background 0.15s ease, border-color 0.15s ease;
368
+ }
369
+
370
+ .search-card:hover {
371
+ background: var(--soft);
372
+ border-color: var(--line);
373
+ }
374
+
375
+ .search-card .card-title {
376
+ margin-bottom: 6px;
377
+ }
378
+
379
+ .search-card .card-meta {
380
+ font-size: 12px;
381
+ color: var(--muted);
382
+ }
383
+
384
+ .composer-card {
385
+ background: var(--bg);
386
+ border: 1px solid var(--line);
387
+ border-radius: 20px;
388
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--ink) 6%, transparent), 0 0 0 1px color-mix(in srgb, var(--line) 50%, transparent);
389
+ overflow: hidden;
390
+ }
391
+
392
+ .composer-header {
393
+ display: flex;
394
+ align-items: center;
395
+ justify-content: space-between;
396
+ gap: 12px;
397
+ padding: 12px 16px;
398
+ border-bottom: 1px solid var(--line);
399
+ }
400
+
401
+ .composer-title {
402
+ margin: 0;
403
+ font-size: 14px;
404
+ font-weight: 600;
405
+ color: var(--ink);
406
+ }
407
+
408
+ .composer-body {
409
+ padding: 16px;
410
+ max-height: calc(100vh - 260px);
411
+ overflow-y: auto;
412
+ }
413
+
414
+ .composer-status {
415
+ padding: 8px 16px 12px;
416
+ font-size: 12px;
417
+ color: var(--muted);
418
+ min-height: 20px;
419
+ }
420
+
421
+ .composer-status.success {
422
+ color: var(--ok, #3fb950);
423
+ }
424
+
425
+ .composer-status.error {
426
+ color: var(--err, #f85149);
427
+ }
428
+
429
+ .btn {
430
+ display: inline-flex;
431
+ align-items: center;
432
+ justify-content: center;
433
+ gap: 6px;
434
+ padding: 6px 12px;
435
+ border-radius: var(--r-sm);
436
+ font-size: 13px;
437
+ font-weight: 500;
438
+ border: 1px solid transparent;
439
+ cursor: pointer;
440
+ transition: background 0.15s ease, border-color 0.15s ease;
441
+ background: var(--soft);
442
+ color: var(--ink);
443
+ text-decoration: none;
444
+ }
445
+
446
+ .btn:hover {
447
+ background: var(--panel2);
448
+ }
449
+
450
+ .btn-primary {
451
+ background: var(--blue);
452
+ color: var(--bg);
453
+ }
454
+
455
+ .btn-primary:hover {
456
+ background: var(--blue2);
457
+ }
458
+
459
+ .btn-secondary {
460
+ background: transparent;
461
+ border-color: var(--line);
462
+ color: var(--ink);
463
+ }
464
+
465
+ .btn-secondary:hover {
466
+ background: var(--soft);
467
+ }
468
+
469
+ .btn-danger {
470
+ background: transparent;
471
+ border-color: var(--err);
472
+ color: var(--err);
473
+ }
474
+
475
+ .btn-danger:hover {
476
+ background: color-mix(in srgb, var(--err) 10%, transparent);
477
+ }
478
+
479
+ .btn-sm {
480
+ padding: 4px 8px;
481
+ font-size: 12px;
482
+ }
483
+
484
+ .stat-grid {
485
+ display: grid;
486
+ grid-template-columns: repeat(4, 1fr);
487
+ gap: 12px;
488
+ margin-bottom: 20px;
489
+ }
490
+
491
+ .stat-card {
492
+ background: var(--canvas);
493
+ border: 1px solid var(--line);
494
+ border-radius: var(--r-lg);
495
+ padding: 16px;
496
+ }
497
+
498
+ .stat-value {
499
+ font-size: 28px;
500
+ font-weight: 700;
501
+ color: var(--ink);
502
+ margin-bottom: 4px;
503
+ letter-spacing: -0.02em;
504
+ }
505
+
506
+ .stat-label {
507
+ font-size: 12px;
508
+ color: var(--muted);
509
+ text-transform: capitalize;
510
+ }
511
+
512
+ .essence-editor {
513
+ width: 100%;
514
+ min-height: 320px;
515
+ background: transparent;
516
+ border: none;
517
+ color: var(--ink);
518
+ font-family: var(--sans);
519
+ font-size: 14px;
520
+ line-height: 1.6;
521
+ padding: 0;
522
+ resize: vertical;
523
+ outline: none;
524
+ }
525
+
526
+ .essence-editor::placeholder {
527
+ color: var(--dim);
528
+ }
529
+
530
+ .essence-content {
531
+ word-break: break-word;
532
+ color: var(--text);
533
+ }
534
+
535
+ .memory-meta {
536
+ margin-bottom: 12px;
537
+ }
538
+
539
+ .memory-title {
540
+ font-size: 16px;
541
+ font-weight: 600;
542
+ color: var(--ink);
543
+ margin-bottom: 8px;
544
+ }
545
+
546
+ .memory-content {
547
+ word-break: break-word;
548
+ color: var(--text);
549
+ }
550
+
551
+ .md-content {
552
+ color: var(--text);
553
+ line-height: 1.7;
554
+ }
555
+
556
+ .md-content h1,
557
+ .md-content h2,
558
+ .md-content h3,
559
+ .md-content h4,
560
+ .md-content h5,
561
+ .md-content h6 {
562
+ color: var(--ink);
563
+ margin: 16px 0 8px;
564
+ font-weight: 600;
565
+ }
566
+
567
+ .md-content h1 { font-size: 20px; }
568
+ .md-content h2 { font-size: 18px; }
569
+ .md-content h3 { font-size: 16px; }
570
+ .md-content h4,
571
+ .md-content h5,
572
+ .md-content h6 { font-size: 14px; }
573
+
574
+ .md-content p {
575
+ margin: 0 0 12px;
576
+ }
577
+
578
+ .md-content ul,
579
+ .md-content ol {
580
+ margin: 0 0 12px 18px;
581
+ padding: 0;
582
+ }
583
+
584
+ .md-content li {
585
+ margin-bottom: 4px;
586
+ }
587
+
588
+ .md-content blockquote {
589
+ margin: 0 0 12px;
590
+ padding: 8px 12px;
591
+ border-left: 3px solid var(--blue);
592
+ background: var(--canvas);
593
+ color: var(--muted);
594
+ }
595
+
596
+ .md-content pre {
597
+ background: var(--canvas);
598
+ border: 1px solid var(--line);
599
+ border-radius: var(--r-sm);
600
+ padding: 12px;
601
+ overflow-x: auto;
602
+ margin: 0 0 12px;
603
+ }
604
+
605
+ .md-content code {
606
+ font-family: var(--mono);
607
+ font-size: 12px;
608
+ background: var(--canvas);
609
+ padding: 2px 5px;
610
+ border-radius: 4px;
611
+ }
612
+
613
+ .md-content pre code {
614
+ background: transparent;
615
+ padding: 0;
616
+ }
617
+
618
+ .md-content a {
619
+ color: var(--blue);
620
+ text-decoration: none;
621
+ }
622
+
623
+ .md-content a:hover {
624
+ text-decoration: underline;
625
+ }
626
+
627
+ .md-content hr {
628
+ border: none;
629
+ border-top: 1px solid var(--line);
630
+ margin: 16px 0;
631
+ }
632
+
633
+ .theme-grid {
634
+ display: grid;
635
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
636
+ gap: 12px;
637
+ }
638
+
639
+ .theme-card {
640
+ background: var(--canvas);
641
+ border: 1px solid var(--line);
642
+ border-radius: var(--r-lg);
643
+ padding: 16px;
644
+ cursor: pointer;
645
+ transition: border-color 0.15s ease, background 0.15s ease;
646
+ }
647
+
648
+ .theme-card:hover {
649
+ border-color: var(--blue);
650
+ background: var(--panel);
651
+ }
652
+
653
+ .theme-name {
654
+ font-size: 14px;
655
+ font-weight: 600;
656
+ margin-bottom: 8px;
657
+ color: var(--ink);
658
+ word-break: break-word;
659
+ }
660
+
661
+ .theme-meta {
662
+ font-size: 12px;
663
+ color: var(--muted);
664
+ display: flex;
665
+ gap: 12px;
666
+ }
667
+
668
+ .search-input {
669
+ background: var(--canvas);
670
+ border: 1px solid var(--line);
671
+ border-radius: var(--r-sm);
672
+ color: var(--ink);
673
+ padding: 6px 12px;
674
+ font-size: 13px;
675
+ outline: none;
676
+ min-width: 180px;
677
+ }
678
+
679
+ .search-input:focus {
680
+ border-color: var(--blue);
681
+ }
682
+
683
+ .inline-edit {
684
+ display: flex;
685
+ align-items: center;
686
+ gap: 10px;
687
+ }
688
+
689
+ .page-header-actions {
690
+ display: flex;
691
+ align-items: center;
692
+ gap: 6px;
693
+ }
694
+
695
+ .inline-edit input {
696
+ flex: 1;
697
+ background: var(--canvas);
698
+ border: 1px solid var(--line);
699
+ border-radius: var(--r-sm);
700
+ color: var(--ink);
701
+ padding: 6px 10px;
702
+ font-size: 13px;
703
+ outline: none;
704
+ min-width: 140px;
705
+ }
706
+
707
+ .inline-edit input:focus {
708
+ border-color: var(--blue);
709
+ }
710
+
711
+ .decisions-list {
712
+ display: flex;
713
+ flex-direction: column;
714
+ gap: 8px;
715
+ }
716
+
717
+ .decision-row {
718
+ display: flex;
719
+ align-items: flex-start;
720
+ gap: 16px;
721
+ background: var(--canvas);
722
+ border: 1px solid var(--line);
723
+ border-left: 3px solid transparent;
724
+ border-radius: var(--r-md);
725
+ padding: 12px 16px;
726
+ transition: background 0.15s ease, border-color 0.15s ease;
727
+ }
728
+
729
+ .decision-row:hover {
730
+ background: var(--panel);
731
+ border-left-color: var(--blue);
732
+ }
733
+
734
+ .decision-row-main {
735
+ flex: 1;
736
+ min-width: 0;
737
+ }
738
+
739
+ .decision-row-title {
740
+ font-family: var(--mono);
741
+ font-size: 12px;
742
+ color: var(--ink);
743
+ margin-bottom: 4px;
744
+ white-space: nowrap;
745
+ overflow: hidden;
746
+ text-overflow: ellipsis;
747
+ }
748
+
749
+ .decision-row-summary {
750
+ font-size: 14px;
751
+ color: var(--text);
752
+ margin-bottom: 8px;
753
+ display: -webkit-box;
754
+ -webkit-line-clamp: 2;
755
+ -webkit-box-orient: vertical;
756
+ overflow: hidden;
757
+ }
758
+
759
+ .decision-row-meta {
760
+ flex: none;
761
+ text-align: right;
762
+ }
763
+
764
+ .decision-time {
765
+ font-family: var(--mono);
766
+ font-size: 11px;
767
+ color: var(--dim);
768
+ white-space: nowrap;
769
+ }
770
+
771
+ .decision-bullets {
772
+ margin: 0 0 12px;
773
+ padding-left: 16px;
774
+ font-size: 12px;
775
+ color: var(--muted);
776
+ }
777
+
778
+ .decision-bullets li {
779
+ margin-bottom: 4px;
780
+ }
781
+
782
+ .tag-list {
783
+ display: flex;
784
+ flex-wrap: wrap;
785
+ gap: 6px;
786
+ }
787
+
788
+ .tag,
789
+ .badge {
790
+ display: inline-flex;
791
+ align-items: center;
792
+ font-family: var(--mono);
793
+ font-size: 11px;
794
+ padding: 2px 8px;
795
+ border-radius: 99px;
796
+ background: var(--soft);
797
+ color: var(--muted);
798
+ border: 1px solid var(--line);
799
+ white-space: nowrap;
800
+ }
801
+
802
+ .tag.file {
803
+ text-transform: none;
804
+ }
805
+
806
+ .badge {
807
+ color: var(--ink);
808
+ }
809
+
810
+ .memories-layout {
811
+ display: grid;
812
+ grid-template-columns: 280px 1fr;
813
+ gap: 16px;
814
+ height: calc(100vh - 130px);
815
+ }
816
+
817
+ .memory-tree,
818
+ .memory-preview {
819
+ background: var(--canvas);
820
+ border: 1px solid var(--line);
821
+ border-radius: var(--r-lg);
822
+ overflow-y: auto;
823
+ padding: 12px;
824
+ }
825
+
826
+ .tree-node {
827
+ margin-left: 12px;
828
+ }
829
+
830
+ .tree-folder {
831
+ display: flex;
832
+ align-items: center;
833
+ gap: 6px;
834
+ padding: 2px 0;
835
+ font-size: 14px;
836
+ font-weight: 500;
837
+ color: var(--ink);
838
+ cursor: pointer;
839
+ user-select: none;
840
+ }
841
+
842
+ .tree-folder:hover {
843
+ color: var(--blue);
844
+ }
845
+
846
+ .tree-folder-icon {
847
+ color: var(--blue);
848
+ font-size: 11px;
849
+ }
850
+
851
+ .tree-file {
852
+ display: flex;
853
+ align-items: center;
854
+ gap: 6px;
855
+ padding: 4px 8px;
856
+ margin-left: 12px;
857
+ font-size: 13px;
858
+ color: var(--muted);
859
+ cursor: pointer;
860
+ border-radius: var(--r-sm);
861
+ border-left: 3px solid transparent;
862
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
863
+ }
864
+
865
+ .tree-file:hover {
866
+ background: var(--soft);
867
+ color: var(--ink);
868
+ }
869
+
870
+ .tree-file.active {
871
+ background: var(--bluebg);
872
+ color: var(--ink);
873
+ border-left-color: var(--blue);
874
+ }
875
+
876
+ .tree-comment {
877
+ font-size: 12px;
878
+ color: var(--dim);
879
+ margin: -4px 0 8px 12px;
880
+ }
881
+
882
+ .preview-header {
883
+ display: flex;
884
+ align-items: flex-start;
885
+ justify-content: space-between;
886
+ gap: 12px;
887
+ margin-bottom: 16px;
888
+ padding-bottom: 16px;
889
+ border-bottom: 1px solid var(--line);
890
+ }
891
+
892
+ .preview-title {
893
+ margin: 0;
894
+ font-size: 16px;
895
+ font-weight: 600;
896
+ color: var(--ink);
897
+ }
898
+
899
+ .preview-path {
900
+ font-family: var(--mono);
901
+ font-size: 12px;
902
+ color: var(--dim);
903
+ margin-top: 4px;
904
+ white-space: nowrap;
905
+ overflow: hidden;
906
+ text-overflow: ellipsis;
907
+ }
908
+
909
+ .preview-content {
910
+ font-size: 14px;
911
+ line-height: 1.7;
912
+ white-space: pre-wrap;
913
+ word-break: break-word;
914
+ color: var(--ink);
915
+ }
916
+
917
+ .preview-content.error {
918
+ color: var(--err, #f85149);
919
+ }
920
+
921
+ .folder-tree,
922
+ .memory-editor {
923
+ background: var(--canvas);
924
+ border: 1px solid var(--line);
925
+ border-radius: var(--r-lg);
926
+ overflow-y: auto;
927
+ padding: 8px;
928
+ }
929
+
930
+ .memory-editor {
931
+ display: flex;
932
+ flex-direction: column;
933
+ gap: 16px;
934
+ }
935
+
936
+ .folder-branch {
937
+ display: flex;
938
+ flex-direction: column;
939
+ }
940
+
941
+ .folder-row {
942
+ display: flex;
943
+ align-items: center;
944
+ justify-content: space-between;
945
+ gap: 6px;
946
+ padding: 5px 8px;
947
+ border-radius: var(--r-sm);
948
+ cursor: pointer;
949
+ user-select: none;
950
+ transition: background 0.15s ease;
951
+ }
952
+
953
+ .folder-row:hover {
954
+ background: var(--soft);
955
+ }
956
+
957
+ .folder-row.active {
958
+ background: var(--bluebg);
959
+ }
960
+
961
+ .folder-row-main {
962
+ display: flex;
963
+ align-items: center;
964
+ gap: 6px;
965
+ min-width: 0;
966
+ flex: 1;
967
+ }
968
+
969
+ .folder-icon {
970
+ flex: none;
971
+ font-size: 13px;
972
+ }
973
+
974
+ .folder-name {
975
+ font-size: 13px;
976
+ color: var(--ink);
977
+ white-space: nowrap;
978
+ overflow: hidden;
979
+ text-overflow: ellipsis;
980
+ }
981
+
982
+ .folder-count {
983
+ font-size: 11px;
984
+ color: var(--muted);
985
+ background: var(--soft);
986
+ padding: 1px 5px;
987
+ border-radius: 9px;
988
+ line-height: 1;
989
+ }
990
+
991
+ .tree-file-list {
992
+ display: flex;
993
+ flex-direction: column;
994
+ }
995
+
996
+ .tree-file-row {
997
+ display: flex;
998
+ align-items: center;
999
+ gap: 6px;
1000
+ padding: 5px 8px;
1001
+ border-radius: var(--r-sm);
1002
+ cursor: pointer;
1003
+ min-width: 0;
1004
+ }
1005
+
1006
+ .tree-file-row:hover {
1007
+ background: var(--soft);
1008
+ }
1009
+
1010
+ .tree-file-row.active {
1011
+ background: var(--bluebg);
1012
+ }
1013
+
1014
+ .tree-file-row .file-icon {
1015
+ flex: none;
1016
+ font-size: 13px;
1017
+ }
1018
+
1019
+ .tree-file-row .file-name {
1020
+ font-size: 13px;
1021
+ color: var(--ink);
1022
+ white-space: nowrap;
1023
+ overflow: hidden;
1024
+ text-overflow: ellipsis;
1025
+ flex: 1;
1026
+ }
1027
+
1028
+ .folder-actions {
1029
+ display: flex;
1030
+ align-items: center;
1031
+ gap: 2px;
1032
+ opacity: 0;
1033
+ transition: opacity 0.15s ease;
1034
+ }
1035
+
1036
+ .folder-row:hover .folder-actions {
1037
+ opacity: 1;
1038
+ }
1039
+
1040
+ .icon-btn {
1041
+ width: 22px;
1042
+ height: 22px;
1043
+ display: inline-grid;
1044
+ place-items: center;
1045
+ border: none;
1046
+ background: transparent;
1047
+ color: var(--muted);
1048
+ border-radius: var(--r-sm);
1049
+ cursor: pointer;
1050
+ font-size: 12px;
1051
+ line-height: 1;
1052
+ }
1053
+
1054
+ .icon-btn:hover {
1055
+ background: var(--panel2);
1056
+ color: var(--ink);
1057
+ }
1058
+
1059
+ .file-list-section {
1060
+ flex: 1;
1061
+ min-height: 0;
1062
+ display: flex;
1063
+ flex-direction: column;
1064
+ }
1065
+
1066
+ .file-list-header {
1067
+ font-size: 12px;
1068
+ font-weight: 600;
1069
+ color: var(--ink);
1070
+ margin-bottom: 8px;
1071
+ padding: 0 4px;
1072
+ }
1073
+
1074
+ .file-list {
1075
+ display: flex;
1076
+ flex-direction: column;
1077
+ gap: 4px;
1078
+ }
1079
+
1080
+ .file-row {
1081
+ display: flex;
1082
+ align-items: center;
1083
+ gap: 8px;
1084
+ padding: 6px 10px;
1085
+ border-radius: var(--r-sm);
1086
+ cursor: pointer;
1087
+ border-left: 3px solid transparent;
1088
+ transition: background 0.15s ease, border-color 0.15s ease;
1089
+ }
1090
+
1091
+ .file-row:hover {
1092
+ background: var(--soft);
1093
+ }
1094
+
1095
+ .file-row.active {
1096
+ background: var(--bluebg);
1097
+ border-left-color: var(--blue);
1098
+ }
1099
+
1100
+ .file-icon {
1101
+ font-size: 13px;
1102
+ }
1103
+
1104
+ .file-name {
1105
+ font-size: 13px;
1106
+ color: var(--text);
1107
+ white-space: nowrap;
1108
+ overflow: hidden;
1109
+ text-overflow: ellipsis;
1110
+ }
1111
+
1112
+ .memory-composer .composer-body {
1113
+ display: flex;
1114
+ flex-direction: column;
1115
+ gap: 12px;
1116
+ }
1117
+
1118
+ .field-label {
1119
+ font-size: 12px;
1120
+ font-weight: 500;
1121
+ color: var(--muted);
1122
+ }
1123
+
1124
+ .composer-input,
1125
+ .composer-textarea {
1126
+ width: 100%;
1127
+ background: var(--canvas);
1128
+ border: 1px solid var(--line);
1129
+ border-radius: var(--r-sm);
1130
+ color: var(--ink);
1131
+ padding: 8px 10px;
1132
+ font-size: 13px;
1133
+ outline: none;
1134
+ }
1135
+
1136
+ .composer-input:focus,
1137
+ .composer-textarea:focus {
1138
+ border-color: var(--blue);
1139
+ }
1140
+
1141
+ .composer-textarea {
1142
+ min-height: 240px;
1143
+ resize: vertical;
1144
+ font-family: var(--sans);
1145
+ line-height: 1.6;
1146
+ }
1147
+
1148
+ .composer-footer {
1149
+ display: flex;
1150
+ align-items: center;
1151
+ gap: 10px;
1152
+ padding: 12px 16px;
1153
+ border-top: 1px solid var(--line);
1154
+ }
1155
+
1156
+ .timeline {
1157
+ display: flex;
1158
+ flex-direction: column;
1159
+ gap: 16px;
1160
+ position: relative;
1161
+ padding-left: 24px;
1162
+ }
1163
+
1164
+ .timeline::before {
1165
+ content: '';
1166
+ position: absolute;
1167
+ left: 7px;
1168
+ top: 8px;
1169
+ bottom: 8px;
1170
+ width: 2px;
1171
+ background: var(--blue);
1172
+ border-radius: 1px;
1173
+ opacity: 0.4;
1174
+ }
1175
+
1176
+ .timeline-item {
1177
+ position: relative;
1178
+ }
1179
+
1180
+ .timeline-item::before {
1181
+ content: '';
1182
+ position: absolute;
1183
+ left: -21px;
1184
+ top: 8px;
1185
+ width: 10px;
1186
+ height: 10px;
1187
+ border-radius: 50%;
1188
+ background: var(--bg);
1189
+ border: 2px solid var(--blue);
1190
+ z-index: 1;
1191
+ }
1192
+
1193
+ .timeline-item.memory::before {
1194
+ border-color: var(--ok, #3fb950);
1195
+ }
1196
+
1197
+ .timeline-header {
1198
+ display: flex;
1199
+ align-items: center;
1200
+ gap: 10px;
1201
+ margin-bottom: 6px;
1202
+ }
1203
+
1204
+ .timeline-time {
1205
+ font-family: var(--mono);
1206
+ font-size: 11px;
1207
+ color: var(--dim);
1208
+ }
1209
+
1210
+ .timeline-card {
1211
+ background: var(--canvas);
1212
+ border: 1px solid var(--line);
1213
+ border-radius: var(--r-lg);
1214
+ padding: 12px;
1215
+ }
1216
+
1217
+ .timeline-card h4 {
1218
+ margin: 0 0 8px;
1219
+ font-size: 14px;
1220
+ font-weight: 600;
1221
+ color: var(--ink);
1222
+ }
1223
+
1224
+ .timeline-card p {
1225
+ margin: 0 0 12px;
1226
+ font-size: 13px;
1227
+ color: var(--muted);
1228
+ display: -webkit-box;
1229
+ -webkit-line-clamp: 3;
1230
+ -webkit-box-orient: vertical;
1231
+ overflow: hidden;
1232
+ }
1233
+
1234
+ .timeline-meta {
1235
+ font-family: var(--mono);
1236
+ font-size: 11px;
1237
+ color: var(--dim);
1238
+ }
1239
+
1240
+ .settings-grid {
1241
+ display: grid;
1242
+ grid-template-columns: repeat(2, 1fr);
1243
+ gap: 16px;
1244
+ }
1245
+
1246
+ .info-row {
1247
+ display: flex;
1248
+ flex-direction: column;
1249
+ gap: 4px;
1250
+ margin-bottom: 12px;
1251
+ }
1252
+
1253
+ .info-label {
1254
+ font-size: 12px;
1255
+ color: var(--muted);
1256
+ }
1257
+
1258
+ .info-value {
1259
+ font-family: var(--mono);
1260
+ font-size: 12px;
1261
+ color: var(--ink);
1262
+ background: var(--panel);
1263
+ padding: 6px 8px;
1264
+ border-radius: var(--r-sm);
1265
+ border: 1px solid var(--line);
1266
+ word-break: break-all;
1267
+ }
1268
+
1269
+ .toggle-row {
1270
+ display: flex;
1271
+ align-items: center;
1272
+ justify-content: space-between;
1273
+ gap: 12px;
1274
+ font-size: 14px;
1275
+ color: var(--ink);
1276
+ }
1277
+
1278
+ .toggle-row input[type='checkbox'] {
1279
+ width: 16px;
1280
+ height: 16px;
1281
+ accent-color: var(--blue);
1282
+ cursor: pointer;
1283
+ }
1284
+
1285
+ .help-text {
1286
+ font-size: 12px;
1287
+ color: var(--dim);
1288
+ margin: 8px 0 0;
1289
+ }
1290
+
1291
+ .link-list {
1292
+ display: flex;
1293
+ flex-wrap: wrap;
1294
+ gap: 10px;
1295
+ }
1296
+
1297
+ .empty-state {
1298
+ display: grid;
1299
+ place-items: center;
1300
+ height: 100%;
1301
+ color: var(--dim);
1302
+ font-size: 14px;
1303
+ text-align: center;
1304
+ background: var(--canvas);
1305
+ border: 1px dashed var(--line);
1306
+ border-radius: var(--r-lg);
1307
+ padding: 24px;
1308
+ }
1309
+
1310
+ .status-badge {
1311
+ display: inline-flex;
1312
+ align-items: center;
1313
+ gap: 6px;
1314
+ font-size: 12px;
1315
+ color: var(--muted);
1316
+ padding: 4px 10px;
1317
+ border-radius: 99px;
1318
+ border: 1px solid var(--line);
1319
+ background: var(--canvas);
1320
+ }
1321
+
1322
+ .status-dot {
1323
+ width: 7px;
1324
+ height: 7px;
1325
+ border-radius: 50%;
1326
+ background: var(--ok, #3fb950);
1327
+ }
1328
+
1329
+ @keyframes fadeIn {
1330
+ from {
1331
+ opacity: 0;
1332
+ transform: translateY(6px);
1333
+ }
1334
+ to {
1335
+ opacity: 1;
1336
+ transform: translateY(0);
1337
+ }
1338
+ }
1339
+
1340
+ @media (max-width: 1024px) {
1341
+ .stat-grid {
1342
+ grid-template-columns: repeat(2, 1fr);
1343
+ }
1344
+ .settings-grid {
1345
+ grid-template-columns: 1fr;
1346
+ }
1347
+ }
1348
+
1349
+ @media (max-width: 768px) {
1350
+ .app,
1351
+ .app.sidebar-collapsed {
1352
+ grid-template-columns: 0 1fr;
1353
+ }
1354
+
1355
+ .sidebar {
1356
+ position: fixed;
1357
+ left: 0;
1358
+ top: 0;
1359
+ bottom: 0;
1360
+ width: 260px;
1361
+ z-index: 50;
1362
+ transform: translateX(-100%);
1363
+ transition: transform 0.2s ease;
1364
+ }
1365
+
1366
+ .sidebar.open {
1367
+ transform: translateX(0);
1368
+ }
1369
+
1370
+ .sidebar-collapsed-top {
1371
+ display: none !important;
1372
+ }
1373
+
1374
+ .menu-toggle {
1375
+ display: grid;
1376
+ }
1377
+
1378
+ .stat-grid {
1379
+ grid-template-columns: 1fr;
1380
+ }
1381
+
1382
+ .memories-layout {
1383
+ grid-template-columns: 1fr;
1384
+ height: auto;
1385
+ }
1386
+
1387
+ .memory-tree,
1388
+ .memory-preview,
1389
+ .folder-tree,
1390
+ .memory-editor {
1391
+ min-height: 240px;
1392
+ }
1393
+
1394
+ .decision-row {
1395
+ flex-direction: column;
1396
+ gap: 8px;
1397
+ }
1398
+
1399
+ .decision-row-meta {
1400
+ text-align: left;
1401
+ }
1402
+
1403
+ .theme-grid {
1404
+ grid-template-columns: 1fr;
1405
+ }
1406
+
1407
+ .page-header {
1408
+ flex-wrap: wrap;
1409
+ }
1410
+ }
1411
+
1412
+ /* Search / Theme views */
1413
+ .search-table-wrap {
1414
+ overflow-x: auto;
1415
+ }
1416
+
1417
+ .theme-icon {
1418
+ color: var(--blue);
1419
+ margin-right: 8px;
1420
+ font-size: 12px;
1421
+ }
1422
+
1423
+ .search-table {
1424
+ width: 100%;
1425
+ border-collapse: collapse;
1426
+ font-size: 13px;
1427
+ }
1428
+
1429
+ .search-table th,
1430
+ .search-table td {
1431
+ padding: 10px 12px;
1432
+ text-align: left;
1433
+ border-bottom: 1px solid var(--line);
1434
+ }
1435
+
1436
+ .search-table th {
1437
+ color: var(--muted);
1438
+ font-weight: 500;
1439
+ background: var(--soft);
1440
+ }
1441
+
1442
+ .search-row {
1443
+ cursor: pointer;
1444
+ transition: background 0.12s ease;
1445
+ }
1446
+
1447
+ .search-row:hover {
1448
+ background: var(--soft);
1449
+ }
1450
+
1451
+ .search-query {
1452
+ color: var(--ink);
1453
+ font-weight: 500;
1454
+ max-width: 360px;
1455
+ white-space: nowrap;
1456
+ overflow: hidden;
1457
+ text-overflow: ellipsis;
1458
+ }
1459
+
1460
+ .search-number {
1461
+ text-align: right;
1462
+ width: 90px;
1463
+ }
1464
+
1465
+ .search-actions {
1466
+ text-align: right;
1467
+ width: 100px;
1468
+ white-space: nowrap;
1469
+ }
1470
+
1471
+ .timeline-item.hit .timeline-dot {
1472
+ background: var(--blue);
1473
+ border-color: var(--blue);
1474
+ }
1475
+
1476
+ /* Modal */
1477
+ .modal-backdrop {
1478
+ position: fixed;
1479
+ inset: 0;
1480
+ background: rgba(0, 0, 0, 0.5);
1481
+ display: grid;
1482
+ place-items: center;
1483
+ z-index: 100;
1484
+ }
1485
+
1486
+ .modal {
1487
+ background: var(--bg);
1488
+ border: 1px solid var(--line);
1489
+ border-radius: var(--r-lg);
1490
+ width: min(720px, 90vw);
1491
+ max-height: 80vh;
1492
+ display: flex;
1493
+ flex-direction: column;
1494
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
1495
+ }
1496
+
1497
+ .modal-header {
1498
+ display: flex;
1499
+ align-items: center;
1500
+ justify-content: space-between;
1501
+ padding: 14px 18px;
1502
+ border-bottom: 1px solid var(--line);
1503
+ }
1504
+
1505
+ .modal-header h3 {
1506
+ margin: 0;
1507
+ font-size: 15px;
1508
+ font-weight: 600;
1509
+ }
1510
+
1511
+ .modal-close {
1512
+ background: transparent;
1513
+ border: none;
1514
+ font-size: 22px;
1515
+ color: var(--muted);
1516
+ cursor: pointer;
1517
+ }
1518
+
1519
+ .modal-body {
1520
+ padding: 18px;
1521
+ overflow-y: auto;
1522
+ }
1523
+
1524
+ .modal-body h4 {
1525
+ margin: 18px 0 8px;
1526
+ font-size: 13px;
1527
+ color: var(--muted);
1528
+ text-transform: uppercase;
1529
+ letter-spacing: 0.5px;
1530
+ }
1531
+
1532
+ .modal-body h4:first-child {
1533
+ margin-top: 0;
1534
+ }
1535
+
1536
+ .modal-body p {
1537
+ margin: 0 0 12px;
1538
+ line-height: 1.6;
1539
+ }
1540
+
1541
+ .refined-content {
1542
+ background: var(--panel);
1543
+ border: 1px solid var(--line);
1544
+ border-radius: var(--r-sm);
1545
+ padding: 12px;
1546
+ white-space: pre-wrap;
1547
+ word-break: break-word;
1548
+ font-family: var(--mono);
1549
+ font-size: 13px;
1550
+ line-height: 1.6;
1551
+ max-height: 360px;
1552
+ overflow-y: auto;
1553
+ }