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