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