@kykiles/opencode-mem 13.10.2

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 (89) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +429 -0
  3. package/dist/npx-cli/index.js +9798 -0
  4. package/dist/opencode-plugin/index.js +70 -0
  5. package/package.json +187 -0
  6. package/plugin/.mcp.json +12 -0
  7. package/plugin/bun.lock +160 -0
  8. package/plugin/hooks/bugfixes-2026-01-10.md +92 -0
  9. package/plugin/hooks/hooks.json +87 -0
  10. package/plugin/modes/code--ar.json +24 -0
  11. package/plugin/modes/code--bn.json +24 -0
  12. package/plugin/modes/code--chill.json +8 -0
  13. package/plugin/modes/code--cs.json +24 -0
  14. package/plugin/modes/code--da.json +24 -0
  15. package/plugin/modes/code--de.json +24 -0
  16. package/plugin/modes/code--el.json +24 -0
  17. package/plugin/modes/code--es.json +24 -0
  18. package/plugin/modes/code--fi.json +24 -0
  19. package/plugin/modes/code--fr.json +24 -0
  20. package/plugin/modes/code--he.json +24 -0
  21. package/plugin/modes/code--hi.json +24 -0
  22. package/plugin/modes/code--hu.json +24 -0
  23. package/plugin/modes/code--id.json +24 -0
  24. package/plugin/modes/code--it.json +24 -0
  25. package/plugin/modes/code--ja.json +24 -0
  26. package/plugin/modes/code--ko.json +24 -0
  27. package/plugin/modes/code--nl.json +24 -0
  28. package/plugin/modes/code--no.json +24 -0
  29. package/plugin/modes/code--pl.json +24 -0
  30. package/plugin/modes/code--pt-br.json +24 -0
  31. package/plugin/modes/code--ro.json +24 -0
  32. package/plugin/modes/code--ru.json +24 -0
  33. package/plugin/modes/code--sv.json +24 -0
  34. package/plugin/modes/code--th.json +24 -0
  35. package/plugin/modes/code--tr.json +24 -0
  36. package/plugin/modes/code--uk.json +24 -0
  37. package/plugin/modes/code--ur.json +25 -0
  38. package/plugin/modes/code--vi.json +24 -0
  39. package/plugin/modes/code--zh.json +24 -0
  40. package/plugin/modes/code.json +139 -0
  41. package/plugin/modes/email-investigation.json +120 -0
  42. package/plugin/modes/law-study--chill.json +7 -0
  43. package/plugin/modes/law-study-CLAUDE.md +85 -0
  44. package/plugin/modes/law-study.json +120 -0
  45. package/plugin/modes/meme-tokens.json +125 -0
  46. package/plugin/package.json +45 -0
  47. package/plugin/scripts/bun-runner.js +238 -0
  48. package/plugin/scripts/context-generator.cjs +825 -0
  49. package/plugin/scripts/mcp-server.cjs +249 -0
  50. package/plugin/scripts/server-service.cjs +9939 -0
  51. package/plugin/scripts/statusline-counts.js +40 -0
  52. package/plugin/scripts/transcript-watcher.cjs +29 -0
  53. package/plugin/scripts/version-check.js +193 -0
  54. package/plugin/scripts/worker-service.cjs +2238 -0
  55. package/plugin/scripts/worker-wrapper.cjs +2 -0
  56. package/plugin/skills/babysit/SKILL.md +87 -0
  57. package/plugin/skills/design-is/SKILL.md +312 -0
  58. package/plugin/skills/do/SKILL.md +45 -0
  59. package/plugin/skills/how-it-works/SKILL.md +22 -0
  60. package/plugin/skills/how-it-works/onboarding-explainer.md +17 -0
  61. package/plugin/skills/knowledge-agent/SKILL.md +80 -0
  62. package/plugin/skills/learn-codebase/SKILL.md +21 -0
  63. package/plugin/skills/make-plan/SKILL.md +67 -0
  64. package/plugin/skills/mem-search/SKILL.md +131 -0
  65. package/plugin/skills/oh-my-issues/SKILL.md +226 -0
  66. package/plugin/skills/pathfinder/SKILL.md +111 -0
  67. package/plugin/skills/smart-explore/SKILL.md +193 -0
  68. package/plugin/skills/standup/SKILL.md +142 -0
  69. package/plugin/skills/standup/agent-brief.md +47 -0
  70. package/plugin/skills/standup/standup.mjs +662 -0
  71. package/plugin/skills/timeline-report/SKILL.md +211 -0
  72. package/plugin/skills/version-bump/SKILL.md +74 -0
  73. package/plugin/skills/version-bump/scripts/generate_changelog.js +34 -0
  74. package/plugin/skills/weekly-digests/SKILL.md +262 -0
  75. package/plugin/skills/what-the/SKILL.md +6 -0
  76. package/plugin/skills/wowerpoint/SKILL.md +205 -0
  77. package/plugin/sqlite/SessionStore.js +764 -0
  78. package/plugin/sqlite/observations/files.js +10 -0
  79. package/plugin/ui/assets/fonts/monaspace-radon-var.woff +0 -0
  80. package/plugin/ui/assets/fonts/monaspace-radon-var.woff2 +0 -0
  81. package/plugin/ui/claude-mem-logo-for-dark-mode.webp +0 -0
  82. package/plugin/ui/claude-mem-logo-stylized.png +0 -0
  83. package/plugin/ui/claude-mem-logomark.webp +0 -0
  84. package/plugin/ui/icon-thick-completed.svg +8 -0
  85. package/plugin/ui/icon-thick-investigated.svg +8 -0
  86. package/plugin/ui/icon-thick-learned.svg +12 -0
  87. package/plugin/ui/icon-thick-next-steps.svg +8 -0
  88. package/plugin/ui/viewer-bundle.js +65 -0
  89. package/plugin/ui/viewer.html +2402 -0
@@ -0,0 +1,2402 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>opencode-mem viewer</title>
8
+ <link rel="icon" type="image/webp" href="opencode-mem-logomark.webp">
9
+ <style>
10
+ @font-face {
11
+ font-family: 'Monaspace Radon';
12
+ src: url('assets/fonts/monaspace-radon-var.woff2') format('woff2-variations'),
13
+ url('assets/fonts/monaspace-radon-var.woff') format('woff-variations');
14
+ font-weight: 200 900;
15
+ font-display: swap;
16
+ }
17
+
18
+ /* Theme Variables - Light Mode */
19
+ :root,
20
+ [data-theme="light"] {
21
+ --color-bg-primary: #ffffff;
22
+ --color-bg-secondary: #efebe4;
23
+ --color-bg-tertiary: #f0f0f0;
24
+ --color-bg-header: #f6f8fa;
25
+ --color-bg-card: #ffffff;
26
+ --color-bg-card-hover: #f6f8fa;
27
+ --color-bg-input: #ffffff;
28
+ --color-bg-button: #0969da;
29
+ --color-bg-button-hover: #1177e6;
30
+ --color-bg-button-active: #0860ca;
31
+ --color-bg-summary: #fffbf0;
32
+ --color-bg-prompt: #f6f3fb;
33
+ --color-bg-observation: #f0f6fb;
34
+ --color-bg-stat: #f6f8fa;
35
+ --color-bg-scrollbar-track: #ffffff;
36
+ --color-bg-scrollbar-thumb: #d1d5da;
37
+ --color-bg-scrollbar-thumb-hover: #b1b5ba;
38
+
39
+ --color-border-primary: #d0d7de;
40
+ --color-border-secondary: #d8dee4;
41
+ --color-border-hover: #0969da;
42
+ --color-border-focus: #0969da;
43
+ --color-border-summary: #d4a72c;
44
+ --color-border-summary-hover: #c29d29;
45
+ --color-border-prompt: #8250df;
46
+ --color-border-prompt-hover: #6e40c9;
47
+ --color-border-observation: #0969da;
48
+ --color-border-observation-hover: #0550ae;
49
+
50
+ --color-text-primary: #2b2520;
51
+ --color-text-secondary: #5a5248;
52
+ --color-text-tertiary: #726b5f;
53
+ --color-text-muted: #8f8a7e;
54
+ --color-text-header: #2b2520;
55
+ --color-text-title: #2b2520;
56
+ --color-text-subtitle: #5a5248;
57
+ --color-text-button: #ffffff;
58
+ --color-text-summary: #8a6116;
59
+ --color-text-observation: #2b2520;
60
+ --color-text-logo: #2b2520;
61
+
62
+ --color-accent-primary: #0969da;
63
+ --color-accent-focus: #0969da;
64
+ --color-accent-success: #1a7f37;
65
+ --color-accent-error: #d1242f;
66
+ --color-accent-summary: #9a6700;
67
+ --color-accent-prompt: #8250df;
68
+ --color-accent-observation: #0550ae;
69
+
70
+ --color-type-badge-bg: rgba(9, 105, 218, 0.12);
71
+ --color-type-badge-text: #0969da;
72
+ --color-summary-badge-bg: rgba(154, 103, 0, 0.12);
73
+ --color-summary-badge-text: #9a6700;
74
+ --color-prompt-badge-bg: rgba(130, 80, 223, 0.12);
75
+ --color-prompt-badge-text: #8250df;
76
+ --color-observation-badge-bg: rgba(9, 105, 218, 0.12);
77
+ --color-observation-badge-text: #0550ae;
78
+
79
+ --color-skeleton-base: #d0d7de;
80
+ --color-skeleton-highlight: #e8ecef;
81
+
82
+ --shadow-focus: 0 0 0 2px rgba(9, 105, 218, 0.3);
83
+
84
+ /* Font families */
85
+ --font-terminal: 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
86
+ }
87
+
88
+ /* Theme Variables - Dark Mode */
89
+ [data-theme="dark"] {
90
+ --color-bg-primary: #1a1916;
91
+ --color-bg-secondary: #252320;
92
+ --color-bg-tertiary: #1f1d1a;
93
+ --color-bg-header: #1f1d1a;
94
+ --color-bg-card: #252320;
95
+ --color-bg-card-hover: #2d2a26;
96
+ --color-bg-input: #252320;
97
+ --color-bg-button: #0969da;
98
+ --color-bg-button-hover: #1177e6;
99
+ --color-bg-button-active: #0860ca;
100
+ --color-bg-summary: #2a2724;
101
+ --color-bg-prompt: #262033;
102
+ --color-bg-observation: #1a2332;
103
+ --color-bg-stat: #252320;
104
+ --color-bg-scrollbar-track: #1a1916;
105
+ --color-bg-scrollbar-thumb: #3a3834;
106
+ --color-bg-scrollbar-thumb-hover: #4a4540;
107
+
108
+ --color-border-primary: #3a3834;
109
+ --color-border-secondary: #3a3834;
110
+ --color-border-hover: #4a4540;
111
+ --color-border-focus: #58a6ff;
112
+ --color-border-summary: #7a6a50;
113
+ --color-border-summary-hover: #8b7960;
114
+ --color-border-prompt: #6e5b9e;
115
+ --color-border-prompt-hover: #7e6bae;
116
+ --color-border-observation: #527aa0;
117
+ --color-border-observation-hover: #6a8eb8;
118
+
119
+ --color-text-primary: #dcd6cc;
120
+ --color-text-secondary: #b8b0a4;
121
+ --color-text-tertiary: #938a7e;
122
+ --color-text-muted: #7a7266;
123
+ --color-text-header: #e8e2d8;
124
+ --color-text-title: #e8e2d8;
125
+ --color-text-subtitle: #b8b0a4;
126
+ --color-text-button: #ffffff;
127
+ --color-text-summary: #d4b888;
128
+ --color-text-observation: #a8b8c8;
129
+ --color-text-logo: #e0dad0;
130
+
131
+ --color-accent-primary: #58a6ff;
132
+ --color-accent-focus: #58a6ff;
133
+ --color-accent-success: #16c60c;
134
+ --color-accent-error: #e74856;
135
+ --color-accent-summary: #d4b888;
136
+ --color-accent-prompt: #8e7cbc;
137
+ --color-accent-observation: #79b8ff;
138
+
139
+ --color-type-badge-bg: rgba(88, 166, 255, 0.125);
140
+ --color-type-badge-text: #58a6ff;
141
+ --color-summary-badge-bg: rgba(212, 184, 136, 0.15);
142
+ --color-summary-badge-text: #d4b888;
143
+ --color-prompt-badge-bg: rgba(142, 124, 188, 0.15);
144
+ --color-prompt-badge-text: #9e8ccc;
145
+ --color-observation-badge-bg: rgba(121, 184, 255, 0.15);
146
+ --color-observation-badge-text: #79b8ff;
147
+
148
+ --color-skeleton-base: #3a3834;
149
+ --color-skeleton-highlight: #4a4540;
150
+
151
+ --shadow-focus: 0 0 0 2px rgba(88, 166, 255, 0.2);
152
+
153
+ /* Font families */
154
+ --font-terminal: 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
155
+ }
156
+
157
+ /* System preference default */
158
+ @media (prefers-color-scheme: light) {
159
+ :root:not([data-theme]) {
160
+ --color-bg-primary: #ffffff;
161
+ --color-bg-secondary: #f6f8fa;
162
+ --color-bg-tertiary: #f0f0f0;
163
+ --color-bg-header: #f6f8fa;
164
+ --color-bg-card: #ffffff;
165
+ --color-bg-card-hover: #f6f8fa;
166
+ --color-bg-input: #ffffff;
167
+ --color-bg-button: #0969da;
168
+ --color-bg-button-hover: #1177e6;
169
+ --color-bg-button-active: #0860ca;
170
+ --color-bg-summary: #fffbf0;
171
+ --color-bg-prompt: #f6f3fb;
172
+ --color-bg-observation: #f0f6fb;
173
+ --color-bg-stat: #f6f8fa;
174
+ --color-bg-scrollbar-track: #ffffff;
175
+ --color-bg-scrollbar-thumb: #d1d5da;
176
+ --color-bg-scrollbar-thumb-hover: #b1b5ba;
177
+
178
+ --color-border-primary: #d0d7de;
179
+ --color-border-secondary: #d8dee4;
180
+ --color-border-hover: #0969da;
181
+ --color-border-focus: #0969da;
182
+ --color-border-summary: #d4a72c;
183
+ --color-border-summary-hover: #c29d29;
184
+ --color-border-prompt: #8250df;
185
+ --color-border-prompt-hover: #6e40c9;
186
+ --color-border-observation: #0969da;
187
+ --color-border-observation-hover: #0550ae;
188
+
189
+ --color-text-primary: #24292f;
190
+ --color-text-secondary: #57606a;
191
+ --color-text-tertiary: #6e7781;
192
+ --color-text-muted: #8b949e;
193
+ --color-text-header: #24292f;
194
+ --color-text-title: #24292f;
195
+ --color-text-subtitle: #57606a;
196
+ --color-text-button: #ffffff;
197
+ --color-text-summary: #8a6116;
198
+ --color-text-observation: #24292f;
199
+ --color-text-logo: #24292f;
200
+
201
+ --color-accent-primary: #0969da;
202
+ --color-accent-focus: #0969da;
203
+ --color-accent-success: #1a7f37;
204
+ --color-accent-error: #d1242f;
205
+ --color-accent-summary: #9a6700;
206
+ --color-accent-prompt: #8250df;
207
+ --color-accent-observation: #0550ae;
208
+
209
+ --color-type-badge-bg: rgba(9, 105, 218, 0.12);
210
+ --color-type-badge-text: #0969da;
211
+ --color-summary-badge-bg: rgba(154, 103, 0, 0.12);
212
+ --color-summary-badge-text: #9a6700;
213
+ --color-prompt-badge-bg: rgba(130, 80, 223, 0.12);
214
+ --color-prompt-badge-text: #8250df;
215
+ --color-observation-badge-bg: rgba(9, 105, 218, 0.12);
216
+ --color-observation-badge-text: #0550ae;
217
+
218
+ --color-skeleton-base: #d0d7de;
219
+ --color-skeleton-highlight: #e8ecef;
220
+
221
+ --shadow-focus: 0 0 0 2px rgba(9, 105, 218, 0.3);
222
+
223
+ /* Font families */
224
+ --font-terminal: 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
225
+ }
226
+ }
227
+
228
+ @media (prefers-color-scheme: dark) {
229
+ :root:not([data-theme]) {
230
+ --color-bg-primary: #1e1e1e;
231
+ --color-bg-secondary: #2d2d2d;
232
+ --color-bg-tertiary: #252526;
233
+ --color-bg-header: #252526;
234
+ --color-bg-card: #2d2d2d;
235
+ --color-bg-card-hover: #333333;
236
+ --color-bg-input: #2d2d2d;
237
+ --color-bg-button: #0969da;
238
+ --color-bg-button-hover: #1177e6;
239
+ --color-bg-button-active: #0860ca;
240
+ --color-bg-summary: #3d2f00;
241
+ --color-bg-prompt: #2d1b4e;
242
+ --color-bg-observation: #1a2332;
243
+ --color-bg-stat: #2d2d2d;
244
+ --color-bg-scrollbar-track: #1e1e1e;
245
+ --color-bg-scrollbar-thumb: #424242;
246
+ --color-bg-scrollbar-thumb-hover: #4e4e4e;
247
+
248
+ --color-border-primary: #404040;
249
+ --color-border-secondary: #404040;
250
+ --color-border-hover: #505050;
251
+ --color-border-focus: #58a6ff;
252
+ --color-border-summary: #9e6a03;
253
+ --color-border-summary-hover: #ae7a13;
254
+ --color-border-prompt: #6e40c9;
255
+ --color-border-prompt-hover: #8e6cdb;
256
+ --color-border-observation: #527aa0;
257
+ --color-border-observation-hover: #6a8eb8;
258
+
259
+ --color-text-primary: #cccccc;
260
+ --color-text-secondary: #a0a0a0;
261
+ --color-text-tertiary: #6e7681;
262
+ --color-text-muted: #8b949e;
263
+ --color-text-header: #e0e0e0;
264
+ --color-text-title: #e0e0e0;
265
+ --color-text-subtitle: #a0a0a0;
266
+ --color-text-button: #ffffff;
267
+ --color-text-summary: #f2cc60;
268
+ --color-text-observation: #a8b8c8;
269
+ --color-text-logo: #dadada;
270
+
271
+ --color-accent-primary: #58a6ff;
272
+ --color-accent-focus: #58a6ff;
273
+ --color-accent-success: #16c60c;
274
+ --color-accent-error: #e74856;
275
+ --color-accent-summary: #f2cc60;
276
+ --color-accent-prompt: #8e6cdb;
277
+ --color-accent-observation: #79b8ff;
278
+
279
+ --color-type-badge-bg: rgba(88, 166, 255, 0.125);
280
+ --color-type-badge-text: #58a6ff;
281
+ --color-summary-badge-bg: rgba(242, 204, 96, 0.125);
282
+ --color-summary-badge-text: #f2cc60;
283
+ --color-prompt-badge-bg: rgba(110, 64, 201, 0.125);
284
+ --color-prompt-badge-text: #8e6cdb;
285
+ --color-observation-badge-bg: rgba(121, 184, 255, 0.15);
286
+ --color-observation-badge-text: #79b8ff;
287
+
288
+ --color-skeleton-base: #404040;
289
+ --color-skeleton-highlight: #505050;
290
+
291
+ --shadow-focus: 0 0 0 2px rgba(88, 166, 255, 0.2);
292
+
293
+ /* Font families */
294
+ --font-terminal: 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
295
+ }
296
+ }
297
+
298
+ * {
299
+ margin: 0;
300
+ padding: 0;
301
+ box-sizing: border-box;
302
+ }
303
+
304
+ body {
305
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif;
306
+ background: var(--color-bg-primary);
307
+ color: var(--color-text-primary);
308
+ font-size: 14px;
309
+ overflow: hidden;
310
+ }
311
+
312
+ .header {
313
+ padding: 16px 24px;
314
+ border-bottom: 1px solid var(--color-border-primary);
315
+ display: flex;
316
+ justify-content: space-between;
317
+ align-items: center;
318
+ background: linear-gradient(to bottom,
319
+ var(--color-bg-header) 0%,
320
+ var(--color-bg-primary) 100%);
321
+ backdrop-filter: blur(8px);
322
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.03);
323
+ }
324
+
325
+ .header-main {
326
+ display: flex;
327
+ align-items: center;
328
+ gap: 18px;
329
+ min-width: 0;
330
+ flex-wrap: wrap;
331
+ }
332
+
333
+ .header h1 {
334
+ font-size: 17px;
335
+ font-weight: 500;
336
+ color: var(--color-text-header);
337
+ display: flex;
338
+ align-items: center;
339
+ gap: 12px;
340
+ line-height: 1;
341
+ }
342
+
343
+ .logomark {
344
+ height: 32px;
345
+ width: auto;
346
+ }
347
+
348
+ .logomark.spinning {
349
+ animation: spin 1.5s linear infinite;
350
+ }
351
+
352
+ .queue-bubble {
353
+ position: absolute;
354
+ top: -8px;
355
+ right: -8px;
356
+ background: var(--color-accent-primary);
357
+ color: var(--color-text-button);
358
+ font-size: 10px;
359
+ font-weight: 600;
360
+ font-family: 'Monaspace Radon', monospace;
361
+ height: 18px;
362
+ border-radius: 9px;
363
+ display: flex;
364
+ align-items: center;
365
+ justify-content: center;
366
+ padding: 0 5px;
367
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
368
+ animation: pulse 2s ease-in-out infinite;
369
+ z-index: 10;
370
+ }
371
+
372
+ @keyframes pulse {
373
+ 0%, 100% {
374
+ transform: scale(1);
375
+ }
376
+ 50% {
377
+ transform: scale(1.1);
378
+ }
379
+ }
380
+
381
+ .logo-text {
382
+ font-family: 'Monaspace Radon', monospace;
383
+ font-weight: 100;
384
+ font-size: 21px;
385
+ letter-spacing: -0.03em;
386
+ color: var(--color-text-logo);
387
+ line-height: 1;
388
+ padding-top: 1px;
389
+ }
390
+
391
+ .status {
392
+ display: flex;
393
+ align-items: center;
394
+ gap: 8px;
395
+ font-size: 13px;
396
+ }
397
+
398
+ .settings-btn,
399
+ .theme-toggle-btn {
400
+ background: var(--color-bg-card);
401
+ border: 1px solid var(--color-border-primary);
402
+ border-radius: 6px;
403
+ padding: 0;
404
+ width: 36px;
405
+ height: 36px;
406
+ cursor: pointer;
407
+ display: flex;
408
+ align-items: center;
409
+ justify-content: center;
410
+ color: var(--color-text-secondary);
411
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
412
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
413
+ }
414
+
415
+ .settings-btn:hover,
416
+ .theme-toggle-btn:hover {
417
+ background: var(--color-bg-card-hover);
418
+ border-color: var(--color-border-focus);
419
+ color: var(--color-text-primary);
420
+ transform: translateY(-1px);
421
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
422
+ }
423
+
424
+ .settings-btn.active {
425
+ background: linear-gradient(135deg, var(--color-bg-button) 0%, var(--color-accent-primary) 100%);
426
+ border-color: var(--color-bg-button);
427
+ color: var(--color-text-button);
428
+ box-shadow: 0 2px 8px rgba(9, 105, 218, 0.25);
429
+ }
430
+
431
+ /* GitHub Stars Button - Similar to Community Button */
432
+ .github-stars-btn {
433
+ background: var(--color-bg-card);
434
+ border: 1px solid var(--color-border-primary);
435
+ border-radius: 6px;
436
+ padding: 0 14px;
437
+ height: 36px;
438
+ cursor: pointer;
439
+ display: flex;
440
+ align-items: center;
441
+ justify-content: center;
442
+ color: var(--color-text-secondary);
443
+ font-size: 13px;
444
+ font-weight: 500;
445
+ text-decoration: none;
446
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
447
+ white-space: nowrap;
448
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
449
+ }
450
+
451
+ .github-stars-btn:hover {
452
+ background: var(--color-bg-card-hover);
453
+ border-color: var(--color-border-focus);
454
+ color: var(--color-text-primary);
455
+ transform: translateY(-1px);
456
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
457
+ }
458
+
459
+ .github-stars-btn:active {
460
+ transform: translateY(0);
461
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
462
+ }
463
+
464
+ /* Stars count animation */
465
+ .stars-count {
466
+ animation: countUp 0.6s cubic-bezier(0.4, 0, 0.2, 1);
467
+ display: inline-block;
468
+ }
469
+
470
+ .stars-loading {
471
+ opacity: 0.5;
472
+ animation: pulse 1.5s ease-in-out infinite;
473
+ }
474
+
475
+ @keyframes countUp {
476
+ from {
477
+ opacity: 0;
478
+ transform: translateY(8px);
479
+ }
480
+ to {
481
+ opacity: 1;
482
+ transform: translateY(0);
483
+ }
484
+ }
485
+
486
+ .icon-link {
487
+ display: flex;
488
+ align-items: center;
489
+ justify-content: center;
490
+ width: 36px;
491
+ height: 36px;
492
+ color: var(--color-text-secondary);
493
+ background: var(--color-bg-card);
494
+ border: 1px solid var(--color-border-primary);
495
+ border-radius: 6px;
496
+ text-decoration: none;
497
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
498
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
499
+ }
500
+
501
+ .icon-link:hover {
502
+ background: var(--color-bg-card-hover);
503
+ border-color: var(--color-border-focus);
504
+ color: var(--color-text-primary);
505
+ transform: translateY(-1px);
506
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
507
+ }
508
+
509
+ .settings-icon,
510
+ .theme-toggle-btn svg {
511
+ width: 18px;
512
+ height: 18px;
513
+ }
514
+
515
+ @keyframes pulse {
516
+
517
+ 0%,
518
+ 100% {
519
+ opacity: 1;
520
+ }
521
+
522
+ 50% {
523
+ opacity: 0.5;
524
+ }
525
+ }
526
+
527
+ select,
528
+ input,
529
+ button {
530
+ background: var(--color-bg-input);
531
+ color: var(--color-text-primary);
532
+ border: 1px solid var(--color-border-primary);
533
+ padding: 6px 12px;
534
+ font-family: inherit;
535
+ font-size: 13px;
536
+ border-radius: 4px;
537
+ transition: all 0.15s ease;
538
+ }
539
+
540
+ .status select {
541
+ background: var(--color-bg-card);
542
+ border: 1px solid var(--color-border-primary);
543
+ border-radius: 6px;
544
+ padding: 0 32px 0 12px;
545
+ height: 36px;
546
+ font-size: 13px;
547
+ font-weight: 500;
548
+ color: var(--color-text-secondary);
549
+ cursor: pointer;
550
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
551
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
552
+ appearance: none;
553
+ background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%23666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
554
+ background-repeat: no-repeat;
555
+ background-position: right 10px center;
556
+ max-width: 180px;
557
+ }
558
+
559
+ .status select:hover {
560
+ background-color: var(--color-bg-card-hover);
561
+ border-color: var(--color-border-focus);
562
+ color: var(--color-text-primary);
563
+ transform: translateY(-1px);
564
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
565
+ }
566
+
567
+ .status select:focus {
568
+ outline: none;
569
+ border-color: var(--color-border-focus);
570
+ box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.1);
571
+ transform: translateY(-1px);
572
+ }
573
+
574
+ select:hover,
575
+ input:hover {
576
+ border-color: var(--color-border-focus);
577
+ }
578
+
579
+ select:focus,
580
+ input:focus {
581
+ outline: none;
582
+ border-color: var(--color-border-focus);
583
+ box-shadow: var(--shadow-focus);
584
+ }
585
+
586
+ button {
587
+ background: var(--color-bg-button);
588
+ color: var(--color-text-button);
589
+ border: none;
590
+ font-weight: 500;
591
+ cursor: pointer;
592
+ }
593
+
594
+ button:hover:not(:disabled) {
595
+ background: var(--color-bg-button-hover);
596
+ }
597
+
598
+ button:active:not(:disabled) {
599
+ background: var(--color-bg-button-active);
600
+ }
601
+
602
+ button:disabled {
603
+ opacity: 0.5;
604
+ cursor: not-allowed;
605
+ }
606
+
607
+ .feed {
608
+ flex: 1;
609
+ overflow-y: scroll;
610
+ height: 100vh;
611
+ padding: 24px 18px;
612
+ display: flex;
613
+ justify-content: center;
614
+ }
615
+
616
+ .feed-content {
617
+ max-width: 650px;
618
+ }
619
+
620
+ .card {
621
+ margin-bottom: 24px;
622
+ padding: 24px;
623
+ background: var(--color-bg-card);
624
+ border: 1px solid var(--color-border-primary);
625
+ border-radius: 8px;
626
+ transition: all 0.15s ease;
627
+ animation: slideIn 0.3s ease-out;
628
+ line-height: 1.7;
629
+ }
630
+
631
+ @keyframes slideIn {
632
+ from {
633
+ opacity: 0;
634
+ transform: translateY(-10px);
635
+ }
636
+
637
+ to {
638
+ opacity: 1;
639
+ transform: translateY(0);
640
+ }
641
+ }
642
+
643
+ .card:hover {
644
+ border-color: var(--color-border-hover);
645
+ }
646
+
647
+ .card-header {
648
+ display: flex;
649
+ align-items: center;
650
+ justify-content: space-between;
651
+ margin-bottom: 14px;
652
+ font-size: 12px;
653
+ color: var(--color-text-muted);
654
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
655
+ }
656
+
657
+ .card-header-left {
658
+ display: flex;
659
+ align-items: center;
660
+ gap: 10px;
661
+ }
662
+
663
+ .card-type {
664
+ padding: 2px 8px;
665
+ background: var(--color-type-badge-bg);
666
+ color: var(--color-type-badge-text);
667
+ border-radius: 3px;
668
+ font-weight: 500;
669
+ text-transform: uppercase;
670
+ font-size: 11px;
671
+ letter-spacing: 0.5px;
672
+ }
673
+
674
+ .card-source {
675
+ padding: 2px 8px;
676
+ border-radius: 999px;
677
+ font-weight: 600;
678
+ font-size: 10px;
679
+ letter-spacing: 0.04em;
680
+ text-transform: uppercase;
681
+ border: 1px solid transparent;
682
+ }
683
+
684
+ .source-claude {
685
+ background: rgba(255, 138, 61, 0.12);
686
+ color: #c25a00;
687
+ border-color: rgba(255, 138, 61, 0.22);
688
+ }
689
+
690
+ .source-codex {
691
+ background: rgba(33, 150, 243, 0.12);
692
+ color: #0f5ba7;
693
+ border-color: rgba(33, 150, 243, 0.24);
694
+ }
695
+
696
+ .source-cursor {
697
+ background: rgba(124, 58, 237, 0.12);
698
+ color: #6d28d9;
699
+ border-color: rgba(124, 58, 237, 0.24);
700
+ }
701
+
702
+ [data-theme="dark"] .source-claude {
703
+ color: #ffb067;
704
+ border-color: rgba(255, 176, 103, 0.2);
705
+ }
706
+
707
+ [data-theme="dark"] .source-codex {
708
+ color: #8fc7ff;
709
+ border-color: rgba(143, 199, 255, 0.2);
710
+ }
711
+
712
+ [data-theme="dark"] .source-cursor {
713
+ color: #c4b5fd;
714
+ border-color: rgba(196, 181, 253, 0.2);
715
+ }
716
+
717
+ .card-title {
718
+ font-size: 17px;
719
+ margin-bottom: 14px;
720
+ color: var(--color-text-title);
721
+ font-weight: 600;
722
+ line-height: 1.4;
723
+ letter-spacing: -0.01em;
724
+ }
725
+
726
+ .view-mode-toggles {
727
+ display: flex;
728
+ gap: 8px;
729
+ flex-shrink: 0;
730
+ }
731
+
732
+ .view-mode-toggle {
733
+ display: flex;
734
+ align-items: center;
735
+ gap: 4px;
736
+ background: var(--color-bg-tertiary);
737
+ border: 1px solid var(--color-border-primary);
738
+ padding: 4px 8px;
739
+ border-radius: 4px;
740
+ cursor: pointer;
741
+ color: var(--color-text-secondary);
742
+ transition: all 0.15s ease;
743
+ font-size: 11px;
744
+ font-weight: 500;
745
+ text-transform: lowercase;
746
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
747
+ }
748
+
749
+ .view-mode-toggle svg {
750
+ flex-shrink: 0;
751
+ opacity: 0.7;
752
+ transition: opacity 0.15s ease;
753
+ }
754
+
755
+ .view-mode-toggle:hover {
756
+ background: var(--color-bg-card-hover);
757
+ border-color: var(--color-border-hover);
758
+ color: var(--color-text-primary);
759
+ }
760
+
761
+ .view-mode-toggle:hover svg {
762
+ opacity: 1;
763
+ }
764
+
765
+ .view-mode-toggle.active {
766
+ background: var(--color-accent-primary);
767
+ border-color: var(--color-accent-primary);
768
+ color: var(--color-text-button);
769
+ }
770
+
771
+ .view-mode-toggle.active svg {
772
+ opacity: 1;
773
+ }
774
+
775
+ .view-mode-content {
776
+ margin-bottom: 12px;
777
+ }
778
+
779
+ .view-mode-content .card-subtitle {
780
+ margin-bottom: 0;
781
+ }
782
+
783
+ .view-mode-content .facts-list {
784
+ list-style: disc;
785
+ margin: 0;
786
+ padding-left: 20px;
787
+ color: var(--color-text-secondary);
788
+ font-size: 13px;
789
+ line-height: 1.7;
790
+ }
791
+
792
+ .view-mode-content .facts-list li {
793
+ margin-bottom: 6px;
794
+ }
795
+
796
+ .view-mode-content .narrative {
797
+ max-height: 300px;
798
+ overflow-y: auto;
799
+ white-space: pre-wrap;
800
+ word-wrap: break-word;
801
+ color: var(--color-text-secondary);
802
+ font-size: 13px;
803
+ line-height: 1.7;
804
+ }
805
+
806
+ .card-meta {
807
+ font-size: 11px;
808
+ color: var(--color-text-tertiary);
809
+ margin-top: 18px;
810
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
811
+ display: flex;
812
+ flex-wrap: wrap;
813
+ gap: 6px;
814
+ line-height: 1.5;
815
+ }
816
+
817
+ .meta-date {
818
+ color: var(--color-text-tertiary);
819
+ }
820
+
821
+ .meta-files {
822
+ color: var(--color-text-muted);
823
+ font-size: 10px;
824
+ }
825
+
826
+ .meta-files .file-label {
827
+ font-weight: 500;
828
+ color: var(--color-text-tertiary);
829
+ }
830
+
831
+ /* Stack single column on narrow screens (removed - no longer using card-files) */
832
+ @media (max-width: 600px) {}
833
+
834
+ /* Project badge styling */
835
+ .card-project {
836
+ color: var(--color-text-muted);
837
+ }
838
+
839
+ /* Merged-into-parent provenance badge */
840
+ .card-merged-badge {
841
+ padding: 1px 6px;
842
+ border-radius: 3px;
843
+ font-size: 9px;
844
+ font-weight: 500;
845
+ letter-spacing: 0.02em;
846
+ color: var(--color-text-muted);
847
+ background: var(--color-type-badge-bg);
848
+ border: 1px solid var(--color-border-primary);
849
+ opacity: 0.85;
850
+ }
851
+
852
+ .summary-card {
853
+ border-color: var(--color-border-summary);
854
+ background: var(--color-bg-summary);
855
+ }
856
+
857
+ .summary-card:hover {
858
+ border-color: var(--color-border-summary-hover);
859
+ }
860
+
861
+ .summary-card .card-type {
862
+ background: var(--color-summary-badge-bg);
863
+ color: var(--color-summary-badge-text);
864
+ }
865
+
866
+ .summary-card .card-title {
867
+ color: var(--color-text-summary);
868
+ }
869
+
870
+ /* Enhanced Summary Card Styles - Editorial/Archival Aesthetic */
871
+ .summary-card {
872
+ position: relative;
873
+ }
874
+
875
+ .summary-card-header {
876
+ margin-bottom: 24px;
877
+ padding-bottom: 20px;
878
+ border-bottom: 1px solid var(--color-border-summary);
879
+ border-bottom-style: dashed;
880
+ }
881
+
882
+ .summary-badge-row {
883
+ display: flex;
884
+ align-items: center;
885
+ gap: 10px;
886
+ margin-bottom: 16px;
887
+ flex-wrap: wrap;
888
+ }
889
+
890
+ .summary-badge {
891
+ font-family: 'Monaspace Radon', 'Monaco', 'Menlo', monospace;
892
+ font-weight: 600;
893
+ font-size: 10px;
894
+ text-transform: uppercase;
895
+ padding: 4px 10px;
896
+ border-radius: 2px;
897
+ }
898
+
899
+ .summary-project-badge {
900
+ font-family: 'Monaspace Radon', 'Monaco', 'Menlo', monospace;
901
+ font-size: 11px;
902
+ color: var(--color-text-muted);
903
+ font-weight: 400;
904
+ padding: 3px 8px;
905
+ background: rgba(0, 0, 0, 0.03);
906
+ border-radius: 2px;
907
+ border: 1px solid var(--color-border-primary);
908
+ }
909
+
910
+ [data-theme="dark"] .summary-project-badge {
911
+ background: rgba(255, 255, 255, 0.03);
912
+ }
913
+
914
+ .summary-title {
915
+ font-size: 20px;
916
+ font-weight: 600;
917
+ line-height: 1.4;
918
+ color: var(--color-text-summary);
919
+ letter-spacing: -0.02em;
920
+ margin: 0;
921
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
922
+ }
923
+
924
+ .summary-sections {
925
+ display: flex;
926
+ flex-direction: column;
927
+ gap: 20px;
928
+ margin-bottom: 24px;
929
+ }
930
+
931
+ .summary-section {
932
+ animation: summaryFadeIn 0.4s ease-out backwards;
933
+ transition: transform 0.2s ease;
934
+ }
935
+
936
+ @keyframes summaryFadeIn {
937
+ from {
938
+ opacity: 0;
939
+ transform: translateY(8px);
940
+ }
941
+
942
+ to {
943
+ opacity: 1;
944
+ transform: translateY(0);
945
+ }
946
+ }
947
+
948
+ .summary-section-header {
949
+ display: flex;
950
+ align-items: center;
951
+ gap: 10px;
952
+ margin-bottom: 10px;
953
+ }
954
+
955
+ .summary-section-icon {
956
+ position: relative;
957
+ width: auto;
958
+ font-size: 16px;
959
+ line-height: 1;
960
+ }
961
+
962
+ .summary-section-icon--investigated {
963
+ height: 16px;
964
+ }
965
+
966
+ .summary-section-icon--learned {
967
+ height: 18px;
968
+ left: -1px;
969
+ top: -3px;
970
+ }
971
+
972
+ .summary-section-icon--completed {
973
+ height: 17px;
974
+ }
975
+
976
+ .summary-section-icon--next_steps {
977
+ height: 15px;
978
+ }
979
+
980
+ .summary-section-label {
981
+ font-size: 13px;
982
+ font-weight: 600;
983
+ color: var(--color-accent-summary);
984
+ text-transform: uppercase;
985
+ margin: 0;
986
+ font-family: 'Monaspace Radon', 'Monaco', 'Menlo', monospace;
987
+ }
988
+
989
+ .summary-section-content {
990
+ margin-left: 26px;
991
+ color: var(--color-text-secondary);
992
+ font-size: 14px;
993
+ line-height: 1.6;
994
+ white-space: pre-wrap;
995
+ word-wrap: break-word;
996
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
997
+ }
998
+
999
+ .summary-card-footer {
1000
+ display: flex;
1001
+ align-items: center;
1002
+ gap: 8px;
1003
+ padding-top: 16px;
1004
+ border-top: 1px solid var(--color-border-primary);
1005
+ font-family: 'Monaspace Radon', 'Monaco', 'Menlo', monospace;
1006
+ font-size: 11px;
1007
+ color: var(--color-text-tertiary);
1008
+ }
1009
+
1010
+ .summary-meta-id {
1011
+ font-weight: 500;
1012
+ color: var(--color-accent-summary);
1013
+ }
1014
+
1015
+ .summary-meta-divider {
1016
+ opacity: 0.5;
1017
+ }
1018
+
1019
+ .summary-meta-date {
1020
+ font-weight: 400;
1021
+ }
1022
+
1023
+ /* Responsive adjustments for summary cards */
1024
+ @media (max-width: 600px) {
1025
+ .summary-title {
1026
+ font-size: 18px;
1027
+ }
1028
+
1029
+ .summary-section-content {
1030
+ margin-left: 0;
1031
+ padding-left: 12px;
1032
+ font-size: 13px;
1033
+ }
1034
+
1035
+ .summary-section-header {
1036
+ gap: 8px;
1037
+ }
1038
+ }
1039
+
1040
+ ::-webkit-scrollbar {
1041
+ width: 10px;
1042
+ }
1043
+
1044
+ ::-webkit-scrollbar-track {
1045
+ background: var(--color-bg-scrollbar-track);
1046
+ }
1047
+
1048
+ ::-webkit-scrollbar-thumb {
1049
+ background: var(--color-bg-scrollbar-thumb);
1050
+ border-radius: 5px;
1051
+ }
1052
+
1053
+ ::-webkit-scrollbar-thumb:hover {
1054
+ background: var(--color-bg-scrollbar-thumb-hover);
1055
+ }
1056
+
1057
+ .save-status {
1058
+ margin-top: 8px;
1059
+ font-size: 12px;
1060
+ color: var(--color-text-muted);
1061
+ }
1062
+
1063
+ .prompt-card {
1064
+ border-color: var(--color-border-prompt);
1065
+ background: var(--color-bg-prompt);
1066
+ }
1067
+
1068
+ .prompt-card:hover {
1069
+ border-color: var(--color-border-prompt-hover);
1070
+ }
1071
+
1072
+ .prompt-card .card-type {
1073
+ background: var(--color-prompt-badge-bg);
1074
+ color: var(--color-prompt-badge-text);
1075
+ }
1076
+
1077
+ /* Welcome modal — first-launch + reusable as help via the ? button.
1078
+ Layout strategy: desktop-first, fluid type via clamp(), and squares
1079
+ built with the padding-bottom:100% trick (percentage padding resolves
1080
+ against width, so the box is always W × W regardless of content). */
1081
+ .welcome-modal-backdrop {
1082
+ position: fixed;
1083
+ inset: 0;
1084
+ z-index: 1100;
1085
+ display: flex;
1086
+ align-items: center;
1087
+ justify-content: center;
1088
+ padding: clamp(16px, 3vw, 40px);
1089
+ background: rgba(0, 0, 0, 0.15);
1090
+ animation: fadeIn 0.18s ease-out;
1091
+ overflow-y: auto;
1092
+ }
1093
+
1094
+ .welcome-modal {
1095
+ position: relative;
1096
+ width: 100%;
1097
+ max-width: clamp(560px, 70vw, 960px);
1098
+ padding: clamp(28px, 4vw, 52px) clamp(28px, 4.5vw, 60px) clamp(24px, 3vw, 40px);
1099
+ border-radius: clamp(14px, 1.4vw, 20px);
1100
+ background: color-mix(in srgb, var(--color-bg-card) 55%, transparent);
1101
+ border: 1px solid color-mix(in srgb, var(--color-border-primary) 55%, transparent);
1102
+ box-shadow:
1103
+ 0 40px 120px rgba(0, 0, 0, 0.6),
1104
+ 0 16px 48px rgba(0, 0, 0, 0.35),
1105
+ 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
1106
+ animation: slideUp 0.28s cubic-bezier(0.4, 0, 0.2, 1);
1107
+ backdrop-filter: blur(28px) saturate(170%);
1108
+ -webkit-backdrop-filter: blur(28px) saturate(170%);
1109
+ }
1110
+
1111
+ .welcome-modal-dismiss {
1112
+ position: absolute;
1113
+ top: clamp(12px, 1.4vw, 18px);
1114
+ right: clamp(12px, 1.4vw, 18px);
1115
+ width: 36px;
1116
+ height: 36px;
1117
+ border-radius: 999px;
1118
+ background: color-mix(in srgb, var(--color-bg-card) 70%, transparent);
1119
+ border: 1px solid color-mix(in srgb, var(--color-border-primary) 70%, transparent);
1120
+ color: var(--color-text-secondary);
1121
+ cursor: pointer;
1122
+ display: flex;
1123
+ align-items: center;
1124
+ justify-content: center;
1125
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1126
+ padding: 0;
1127
+ }
1128
+
1129
+ .welcome-modal-dismiss:hover {
1130
+ background: var(--color-bg-card-hover);
1131
+ border-color: var(--color-border-focus);
1132
+ color: var(--color-text-primary);
1133
+ transform: scale(1.05);
1134
+ }
1135
+
1136
+ .welcome-modal-dismiss:active {
1137
+ transform: scale(0.95);
1138
+ }
1139
+
1140
+ .welcome-modal-header {
1141
+ display: flex;
1142
+ flex-direction: column;
1143
+ align-items: center;
1144
+ text-align: center;
1145
+ gap: clamp(8px, 0.8vw, 12px);
1146
+ margin-bottom: clamp(20px, 2.4vw, 36px);
1147
+ }
1148
+
1149
+ .welcome-modal-logo {
1150
+ width: clamp(72px, 7.5vw, 104px);
1151
+ height: clamp(72px, 7.5vw, 104px);
1152
+ object-fit: contain;
1153
+ filter: drop-shadow(0 6px 20px rgba(0, 0, 0, 0.18));
1154
+ }
1155
+
1156
+ .welcome-modal-header h2 {
1157
+ margin: clamp(4px, 0.5vw, 8px) 0 0 0;
1158
+ font-size: clamp(22px, 2.4vw, 32px);
1159
+ font-weight: 600;
1160
+ color: var(--color-text-title);
1161
+ letter-spacing: -0.02em;
1162
+ line-height: 1.2;
1163
+ }
1164
+
1165
+ .welcome-modal-header p {
1166
+ margin: 0;
1167
+ font-size: clamp(13px, 1.2vw, 17px);
1168
+ color: var(--color-text-secondary);
1169
+ line-height: 1.5;
1170
+ }
1171
+
1172
+ .welcome-modal-grid {
1173
+ display: grid;
1174
+ grid-template-columns: repeat(3, 1fr);
1175
+ gap: clamp(10px, 1.2vw, 18px);
1176
+ }
1177
+
1178
+ /* True-square shell: padding-bottom:100% resolves against parent
1179
+ width, so the box is always W × W. Content is positioned absolutely
1180
+ inside so it cannot push the box taller. */
1181
+ .welcome-modal-feature {
1182
+ position: relative;
1183
+ width: 100%;
1184
+ height: 0;
1185
+ padding-bottom: 100%;
1186
+ border-radius: clamp(10px, 1vw, 14px);
1187
+ background: color-mix(in srgb, var(--color-bg-tertiary) 35%, transparent);
1188
+ border: 1px solid color-mix(in srgb, var(--color-border-primary) 50%, transparent);
1189
+ transition: border-color 0.18s ease, transform 0.18s ease, background 0.18s ease;
1190
+ }
1191
+
1192
+ .welcome-modal-feature:hover {
1193
+ border-color: var(--color-border-focus);
1194
+ transform: translateY(-2px);
1195
+ background: color-mix(in srgb, var(--color-bg-tertiary) 55%, transparent);
1196
+ }
1197
+
1198
+ .welcome-modal-feature-inner {
1199
+ position: absolute;
1200
+ inset: 0;
1201
+ display: flex;
1202
+ flex-direction: column;
1203
+ align-items: center;
1204
+ justify-content: center;
1205
+ text-align: center;
1206
+ gap: clamp(6px, 0.7vw, 12px);
1207
+ padding: clamp(14px, 1.8vw, 26px);
1208
+ }
1209
+
1210
+ .welcome-modal-feature-art {
1211
+ width: clamp(56px, 6.5vw, 96px);
1212
+ height: clamp(56px, 6.5vw, 96px);
1213
+ color: var(--color-text-tertiary);
1214
+ flex-shrink: 0;
1215
+ }
1216
+
1217
+ .welcome-modal-feature-title {
1218
+ margin: clamp(2px, 0.3vw, 6px) 0 0 0;
1219
+ font-size: clamp(14px, 1.2vw, 17px);
1220
+ font-weight: 600;
1221
+ letter-spacing: -0.01em;
1222
+ color: var(--color-text-primary);
1223
+ line-height: 1.3;
1224
+ }
1225
+
1226
+ .welcome-modal-feature-desc {
1227
+ margin: 0;
1228
+ font-size: clamp(11px, 0.9vw, 13px);
1229
+ line-height: 1.45;
1230
+ color: var(--color-text-secondary);
1231
+ }
1232
+
1233
+ .welcome-modal-footer {
1234
+ margin-top: clamp(20px, 2.2vw, 32px);
1235
+ padding-top: clamp(14px, 1.4vw, 20px);
1236
+ border-top: 1px solid color-mix(in srgb, var(--color-border-primary) 50%, transparent);
1237
+ text-align: center;
1238
+ font-size: clamp(12px, 1vw, 14px);
1239
+ color: var(--color-text-muted);
1240
+ }
1241
+
1242
+ .welcome-modal-footer a {
1243
+ color: var(--color-accent-primary);
1244
+ text-decoration: none;
1245
+ font-weight: 500;
1246
+ }
1247
+
1248
+ .welcome-modal-footer a:hover {
1249
+ text-decoration: underline;
1250
+ }
1251
+
1252
+ .welcome-modal-footer-sep {
1253
+ margin: 0 8px;
1254
+ opacity: 0.5;
1255
+ }
1256
+
1257
+ /* Below ~600px three squares get too small to read — stack to one
1258
+ column and let each block grow to natural content height. */
1259
+ @media (max-width: 600px) {
1260
+ .welcome-modal {
1261
+ max-width: 100%;
1262
+ }
1263
+
1264
+ .welcome-modal-grid {
1265
+ grid-template-columns: 1fr;
1266
+ }
1267
+
1268
+ .welcome-modal-feature {
1269
+ height: auto;
1270
+ padding-bottom: 0;
1271
+ }
1272
+
1273
+ .welcome-modal-feature-inner {
1274
+ position: static;
1275
+ padding: 22px 18px;
1276
+ }
1277
+ }
1278
+
1279
+ .card-content {
1280
+ margin-top: 14px;
1281
+ margin-bottom: 12px;
1282
+ line-height: 1.7;
1283
+ color: var(--color-text-primary);
1284
+ white-space: pre-wrap;
1285
+ word-wrap: break-word;
1286
+ }
1287
+
1288
+ .spinner {
1289
+ width: 12px;
1290
+ height: 12px;
1291
+ border: 2px solid var(--color-border-primary);
1292
+ border-top-color: var(--color-accent-focus);
1293
+ border-radius: 50%;
1294
+ animation: spin 0.8s linear infinite;
1295
+ }
1296
+
1297
+ @keyframes spin {
1298
+ to {
1299
+ transform: rotate(360deg);
1300
+ }
1301
+ }
1302
+
1303
+ @keyframes shimmer {
1304
+ 0% {
1305
+ background-position: 200% 0;
1306
+ }
1307
+
1308
+ 100% {
1309
+ background-position: -200% 0;
1310
+ }
1311
+ }
1312
+
1313
+ /* Scroll to top button */
1314
+ .scroll-to-top {
1315
+ position: fixed;
1316
+ bottom: 24px;
1317
+ right: 24px;
1318
+ width: 48px;
1319
+ height: 48px;
1320
+ background: var(--color-bg-button);
1321
+ color: var(--color-text-button);
1322
+ border: none;
1323
+ border-radius: 24px;
1324
+ cursor: pointer;
1325
+ display: flex;
1326
+ align-items: center;
1327
+ justify-content: center;
1328
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1329
+ transition: all 0.2s ease;
1330
+ z-index: 50;
1331
+ animation: fadeInUp 0.3s ease-out;
1332
+ }
1333
+
1334
+ .scroll-to-top:hover {
1335
+ background: var(--color-bg-button-hover);
1336
+ transform: translateY(-2px);
1337
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
1338
+ }
1339
+
1340
+ .scroll-to-top:active {
1341
+ background: var(--color-bg-button-active);
1342
+ transform: translateY(0);
1343
+ }
1344
+
1345
+ @keyframes fadeInUp {
1346
+ from {
1347
+ opacity: 0;
1348
+ transform: translateY(10px);
1349
+ }
1350
+
1351
+ to {
1352
+ opacity: 1;
1353
+ transform: translateY(0);
1354
+ }
1355
+ }
1356
+
1357
+ /* Tablet Responsive Styles - 481px to 768px */
1358
+ @media (max-width: 768px) and (min-width: 481px) {
1359
+ /* Header stays on one line, hide icon links to save space */
1360
+ .header {
1361
+ padding: 14px 20px;
1362
+ }
1363
+
1364
+ .header-main {
1365
+ gap: 12px;
1366
+ }
1367
+
1368
+ .status {
1369
+ gap: 6px;
1370
+ }
1371
+
1372
+ .status select {
1373
+ max-width: 160px;
1374
+ }
1375
+
1376
+ /* Hide icon links (docs, github, twitter) on tablet */
1377
+ .icon-link {
1378
+ display: none;
1379
+ }
1380
+
1381
+ /* Feed adjustments */
1382
+ .feed {
1383
+ padding: 20px 16px;
1384
+ }
1385
+
1386
+ .feed-content {
1387
+ }
1388
+
1389
+ /* Card adjustments */
1390
+ .card {
1391
+ padding: 20px;
1392
+ }
1393
+ }
1394
+
1395
+ /* Mobile & Small Tablet - 600px and below */
1396
+ @media (max-width: 600px) {
1397
+
1398
+ /* Hide GitHub stars button on mobile */
1399
+ .github-stars-btn {
1400
+ display: none;
1401
+ }
1402
+ }
1403
+
1404
+ /* Mobile Responsive Styles - 480px and below */
1405
+ @media (max-width: 480px) {
1406
+ /* Hide project dropdown in header, will show in sidebar */
1407
+ .status select {
1408
+ display: none;
1409
+ }
1410
+
1411
+ /* Header stays on one line */
1412
+ .header {
1413
+ padding: 12px 16px;
1414
+ }
1415
+
1416
+ .header h1 {
1417
+ font-size: 15px;
1418
+ gap: 8px;
1419
+ }
1420
+
1421
+ .header-main {
1422
+ gap: 10px;
1423
+ }
1424
+
1425
+ .logomark {
1426
+ height: 28px;
1427
+ }
1428
+
1429
+ .logo-text {
1430
+ font-size: 18px;
1431
+ }
1432
+
1433
+ .status {
1434
+ display: flex;
1435
+ gap: 6px;
1436
+ overflow-x: auto;
1437
+ overflow-y: hidden;
1438
+ -webkit-overflow-scrolling: touch;
1439
+ scrollbar-width: none;
1440
+ padding-bottom: 4px;
1441
+ }
1442
+
1443
+ .status::-webkit-scrollbar {
1444
+ display: none;
1445
+ }
1446
+
1447
+ .status select {
1448
+ max-width: 140px;
1449
+ flex-shrink: 0;
1450
+ padding: 0 28px 0 10px;
1451
+ height: 32px;
1452
+ font-size: 12px;
1453
+ }
1454
+
1455
+ /* Hide icon links on mobile */
1456
+ .icon-link {
1457
+ display: none;
1458
+ }
1459
+
1460
+ .settings-btn,
1461
+ .theme-toggle-btn,
1462
+ .icon-link {
1463
+ width: 32px;
1464
+ height: 32px;
1465
+ flex-shrink: 0;
1466
+ }
1467
+
1468
+ .settings-icon,
1469
+ .theme-toggle-btn svg,
1470
+ .icon-link svg {
1471
+ width: 16px;
1472
+ height: 16px;
1473
+ }
1474
+
1475
+ /* Feed adjustments */
1476
+ .feed {
1477
+ padding: 16px 12px;
1478
+ }
1479
+
1480
+ /* Card adjustments */
1481
+ .card {
1482
+ padding: 16px;
1483
+ margin-bottom: 16px;
1484
+ }
1485
+
1486
+ .card-title {
1487
+ font-size: 15px;
1488
+ }
1489
+
1490
+ .card-header {
1491
+ flex-wrap: wrap;
1492
+ gap: 8px;
1493
+ }
1494
+
1495
+ .card-header-left {
1496
+ flex-wrap: wrap;
1497
+ }
1498
+
1499
+ /* Scroll to top button position */
1500
+ .scroll-to-top {
1501
+ bottom: 16px;
1502
+ right: 16px;
1503
+ width: 44px;
1504
+ height: 44px;
1505
+ }
1506
+ }
1507
+
1508
+ /* Context Settings Modal - Modern Clean Design */
1509
+ .modal-backdrop {
1510
+ position: fixed;
1511
+ top: 0;
1512
+ left: 0;
1513
+ right: 0;
1514
+ bottom: 0;
1515
+ background: rgba(0, 0, 0, 0.65);
1516
+ backdrop-filter: blur(4px);
1517
+ display: flex;
1518
+ align-items: center;
1519
+ justify-content: center;
1520
+ z-index: 1000;
1521
+ animation: fadeIn 0.2s ease-out;
1522
+ padding: 20px;
1523
+ }
1524
+
1525
+ .context-settings-modal {
1526
+ background: var(--color-bg-primary);
1527
+ border: 1px solid var(--color-border-primary);
1528
+ border-radius: 12px;
1529
+ width: 100%;
1530
+ max-width: 1200px;
1531
+ height: 90vh;
1532
+ max-height: 800px;
1533
+ display: flex;
1534
+ flex-direction: column;
1535
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
1536
+ animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1537
+ overflow: hidden;
1538
+ }
1539
+
1540
+ .modal-header {
1541
+ padding: 14px 20px;
1542
+ border-bottom: 1px solid var(--color-border-primary);
1543
+ background: var(--color-bg-header);
1544
+ display: flex;
1545
+ align-items: center;
1546
+ justify-content: space-between;
1547
+ gap: 16px;
1548
+ flex-shrink: 0;
1549
+ }
1550
+
1551
+ .modal-header h2 {
1552
+ margin: 0;
1553
+ font-size: 18px;
1554
+ font-weight: 600;
1555
+ color: var(--color-text-header);
1556
+ letter-spacing: -0.01em;
1557
+ flex-shrink: 0;
1558
+ }
1559
+
1560
+ .header-controls {
1561
+ display: flex;
1562
+ align-items: center;
1563
+ gap: 16px;
1564
+ flex: 1;
1565
+ justify-content: flex-end;
1566
+ }
1567
+
1568
+ .preview-selector {
1569
+ display: flex;
1570
+ align-items: center;
1571
+ gap: 8px;
1572
+ font-size: 12px;
1573
+ color: var(--color-text-secondary);
1574
+ white-space: nowrap;
1575
+ }
1576
+
1577
+ .preview-selector select:disabled {
1578
+ opacity: 0.6;
1579
+ cursor: not-allowed;
1580
+ }
1581
+
1582
+ .preview-selector select {
1583
+ background: var(--color-bg-card);
1584
+ border: 1px solid var(--color-border-primary);
1585
+ color: var(--color-text-primary);
1586
+ padding: 6px 12px;
1587
+ border-radius: 6px;
1588
+ font-size: 12px;
1589
+ font-family: inherit;
1590
+ cursor: pointer;
1591
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1592
+ }
1593
+
1594
+ .preview-selector select:hover {
1595
+ border-color: var(--color-border-focus);
1596
+ background: var(--color-bg-card-hover);
1597
+ }
1598
+
1599
+ .preview-selector select:focus {
1600
+ outline: none;
1601
+ border-color: var(--color-accent-primary);
1602
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
1603
+ }
1604
+
1605
+ .modal-close-btn {
1606
+ background: transparent;
1607
+ border: 1px solid var(--color-border-primary);
1608
+ width: 32px;
1609
+ height: 32px;
1610
+ border-radius: 6px;
1611
+ cursor: pointer;
1612
+ display: flex;
1613
+ align-items: center;
1614
+ justify-content: center;
1615
+ color: var(--color-text-secondary);
1616
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1617
+ padding: 0;
1618
+ }
1619
+
1620
+ .modal-close-btn:hover {
1621
+ background: var(--color-bg-card-hover);
1622
+ border-color: var(--color-border-focus);
1623
+ color: var(--color-text-primary);
1624
+ transform: scale(1.05);
1625
+ }
1626
+
1627
+ .modal-close-btn:active {
1628
+ transform: scale(0.95);
1629
+ }
1630
+
1631
+ .modal-body {
1632
+ flex: 1;
1633
+ display: grid;
1634
+ grid-template-columns: 70fr 30fr;
1635
+ gap: 0;
1636
+ overflow: hidden;
1637
+ min-height: 0;
1638
+ }
1639
+
1640
+ .modal-footer {
1641
+ display: flex;
1642
+ justify-content: flex-end;
1643
+ align-items: center;
1644
+ gap: 16px;
1645
+ padding: 16px 24px;
1646
+ border-top: 1px solid var(--modal-border);
1647
+ background: var(--modal-header-bg);
1648
+ }
1649
+
1650
+ .modal-footer .save-status {
1651
+ font-size: 13px;
1652
+ }
1653
+
1654
+ .modal-footer .save-status .success {
1655
+ color: var(--success-color, #22c55e);
1656
+ }
1657
+
1658
+ .modal-footer .save-status .error {
1659
+ color: var(--error-color, #ef4444);
1660
+ }
1661
+
1662
+ .modal-footer .save-btn {
1663
+ padding: 8px 24px;
1664
+ background: var(--accent-color, #3b82f6);
1665
+ color: white;
1666
+ border: none;
1667
+ border-radius: 6px;
1668
+ font-size: 14px;
1669
+ font-weight: 500;
1670
+ cursor: pointer;
1671
+ transition: background 0.15s ease;
1672
+ }
1673
+
1674
+ .modal-footer .save-btn:hover:not(:disabled) {
1675
+ background: var(--accent-hover, #2563eb);
1676
+ }
1677
+
1678
+ .modal-footer .save-btn:disabled {
1679
+ opacity: 0.6;
1680
+ cursor: not-allowed;
1681
+ }
1682
+
1683
+ /* Preview Column - Terminal Style */
1684
+ .preview-column {
1685
+ padding: 20px;
1686
+ overflow: hidden;
1687
+ border-right: none;
1688
+ background: transparent;
1689
+ display: flex;
1690
+ flex-direction: column;
1691
+ }
1692
+
1693
+ .preview-content {
1694
+ flex: 1;
1695
+ overflow-y: auto;
1696
+ padding: 20px;
1697
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
1698
+ font-size: 13px;
1699
+ line-height: 1.6;
1700
+ color: #ccc;
1701
+ }
1702
+
1703
+ .preview-content pre {
1704
+ margin: 0;
1705
+ white-space: pre-wrap;
1706
+ word-wrap: break-word;
1707
+ }
1708
+
1709
+ /* Settings Column */
1710
+ .settings-column {
1711
+ padding: 0;
1712
+ overflow-y: auto;
1713
+ background: var(--color-bg-primary);
1714
+ position: relative;
1715
+ }
1716
+
1717
+ /* Custom Scrollbar */
1718
+ .settings-column::-webkit-scrollbar {
1719
+ width: 8px;
1720
+ }
1721
+
1722
+ .settings-column::-webkit-scrollbar-track {
1723
+ background: transparent;
1724
+ }
1725
+
1726
+ .settings-column::-webkit-scrollbar-thumb {
1727
+ background: var(--color-bg-scrollbar-thumb);
1728
+ border-radius: 4px;
1729
+ }
1730
+
1731
+ .settings-column::-webkit-scrollbar-thumb:hover {
1732
+ background: var(--color-bg-scrollbar-thumb-hover);
1733
+ }
1734
+
1735
+ .preview-content::-webkit-scrollbar {
1736
+ width: 8px;
1737
+ }
1738
+
1739
+ .preview-content::-webkit-scrollbar-track {
1740
+ background: transparent;
1741
+ }
1742
+
1743
+ .preview-content::-webkit-scrollbar-thumb {
1744
+ background: rgba(255, 255, 255, 0.15);
1745
+ border-radius: 4px;
1746
+ }
1747
+
1748
+ .preview-content::-webkit-scrollbar-thumb:hover {
1749
+ background: rgba(255, 255, 255, 0.25);
1750
+ }
1751
+
1752
+ /* Animations */
1753
+ @keyframes fadeIn {
1754
+ from {
1755
+ opacity: 0;
1756
+ }
1757
+ to {
1758
+ opacity: 1;
1759
+ }
1760
+ }
1761
+
1762
+ @keyframes slideUp {
1763
+ from {
1764
+ opacity: 0;
1765
+ transform: translateY(30px) scale(0.98);
1766
+ }
1767
+ to {
1768
+ opacity: 1;
1769
+ transform: translateY(0) scale(1);
1770
+ }
1771
+ }
1772
+
1773
+ /* ============================================
1774
+ NEW: Collapsible Sections
1775
+ ============================================ */
1776
+ .settings-section-collapsible {
1777
+ border-bottom: 1px solid var(--color-border-primary);
1778
+ }
1779
+
1780
+ .settings-section-collapsible:last-child {
1781
+ border-bottom: none;
1782
+ }
1783
+
1784
+ .section-header-btn {
1785
+ width: 100%;
1786
+ display: flex;
1787
+ align-items: center;
1788
+ justify-content: space-between;
1789
+ padding: 14px 16px;
1790
+ background: transparent;
1791
+ border: none;
1792
+ cursor: pointer;
1793
+ text-align: left;
1794
+ transition: background 0.15s ease;
1795
+ }
1796
+
1797
+ .section-header-btn:hover {
1798
+ background: var(--color-bg-card-hover);
1799
+ }
1800
+
1801
+ .section-header-content {
1802
+ display: flex;
1803
+ flex-direction: column;
1804
+ gap: 2px;
1805
+ }
1806
+
1807
+ .section-title {
1808
+ font-size: 13px;
1809
+ font-weight: 600;
1810
+ color: var(--color-text-primary);
1811
+ letter-spacing: -0.01em;
1812
+ }
1813
+
1814
+ .section-description {
1815
+ font-size: 11px;
1816
+ color: var(--color-text-muted);
1817
+ font-weight: 400;
1818
+ }
1819
+
1820
+ .chevron-icon {
1821
+ color: var(--color-text-muted);
1822
+ transition: transform 0.2s ease;
1823
+ flex-shrink: 0;
1824
+ }
1825
+
1826
+ .chevron-icon.rotated {
1827
+ transform: rotate(180deg);
1828
+ }
1829
+
1830
+ .section-content {
1831
+ padding: 0 16px 16px 16px;
1832
+ }
1833
+
1834
+ /* ============================================
1835
+ NEW: Form Fields with Tooltips
1836
+ ============================================ */
1837
+ .form-field {
1838
+ margin-bottom: 12px;
1839
+ }
1840
+
1841
+ .form-field:last-child {
1842
+ margin-bottom: 0;
1843
+ }
1844
+
1845
+ .form-field-label {
1846
+ display: flex;
1847
+ align-items: center;
1848
+ gap: 6px;
1849
+ font-size: 12px;
1850
+ font-weight: 500;
1851
+ color: var(--color-text-primary);
1852
+ margin-bottom: 6px;
1853
+ }
1854
+
1855
+ .tooltip-trigger {
1856
+ display: inline-flex;
1857
+ align-items: center;
1858
+ color: var(--color-text-muted);
1859
+ cursor: help;
1860
+ transition: color 0.15s ease;
1861
+ }
1862
+
1863
+ .tooltip-trigger:hover {
1864
+ color: var(--color-accent-primary);
1865
+ }
1866
+
1867
+ .form-field input[type="number"],
1868
+ .form-field select {
1869
+ width: 100%;
1870
+ background: var(--color-bg-input);
1871
+ border: 1px solid var(--color-border-primary);
1872
+ border-radius: 6px;
1873
+ padding: 8px 12px;
1874
+ height: 36px;
1875
+ font-size: 13px;
1876
+ color: var(--color-text-primary);
1877
+ transition: all 0.15s ease;
1878
+ }
1879
+
1880
+ .form-field input[type="number"]:hover,
1881
+ .form-field select:hover {
1882
+ border-color: var(--color-border-hover);
1883
+ }
1884
+
1885
+ .form-field input[type="number"]:focus,
1886
+ .form-field select:focus {
1887
+ outline: none;
1888
+ border-color: var(--color-border-focus);
1889
+ box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.1);
1890
+ }
1891
+
1892
+ /* ============================================
1893
+ NEW: Toggle Switches
1894
+ ============================================ */
1895
+ .toggle-group {
1896
+ display: flex;
1897
+ flex-direction: column;
1898
+ gap: 2px;
1899
+ }
1900
+
1901
+ .toggle-row {
1902
+ display: flex;
1903
+ align-items: center;
1904
+ justify-content: space-between;
1905
+ padding: 10px 0;
1906
+ border-bottom: 1px solid var(--color-border-secondary);
1907
+ }
1908
+
1909
+ .toggle-row:last-child {
1910
+ border-bottom: none;
1911
+ }
1912
+
1913
+ .toggle-info {
1914
+ display: flex;
1915
+ flex-direction: column;
1916
+ gap: 2px;
1917
+ flex: 1;
1918
+ min-width: 0;
1919
+ }
1920
+
1921
+ .toggle-label {
1922
+ font-size: 12px;
1923
+ font-weight: 500;
1924
+ color: var(--color-text-primary);
1925
+ cursor: pointer;
1926
+ }
1927
+
1928
+ .toggle-description {
1929
+ font-size: 11px;
1930
+ color: var(--color-text-muted);
1931
+ line-height: 1.3;
1932
+ }
1933
+
1934
+ .toggle-switch {
1935
+ position: relative;
1936
+ width: 40px;
1937
+ height: 22px;
1938
+ background: var(--color-bg-tertiary);
1939
+ border: 1px solid var(--color-border-primary);
1940
+ border-radius: 11px;
1941
+ cursor: pointer;
1942
+ transition: all 0.2s ease;
1943
+ flex-shrink: 0;
1944
+ margin-left: 12px;
1945
+ padding: 0;
1946
+ }
1947
+
1948
+ .toggle-switch:hover:not(.disabled) {
1949
+ border-color: var(--color-border-hover);
1950
+ }
1951
+
1952
+ .toggle-switch.on {
1953
+ background: var(--color-accent-primary);
1954
+ border-color: var(--color-accent-primary);
1955
+ }
1956
+
1957
+ .toggle-switch.disabled {
1958
+ opacity: 0.5;
1959
+ cursor: not-allowed;
1960
+ }
1961
+
1962
+ .toggle-knob {
1963
+ position: absolute;
1964
+ top: 2px;
1965
+ left: 2px;
1966
+ width: 16px;
1967
+ height: 16px;
1968
+ background: white;
1969
+ border-radius: 50%;
1970
+ transition: transform 0.2s ease;
1971
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
1972
+ }
1973
+
1974
+ .toggle-switch.on .toggle-knob {
1975
+ transform: translateX(18px);
1976
+ }
1977
+
1978
+ /* ============================================
1979
+ NEW: Display Subsections
1980
+ ============================================ */
1981
+ .display-subsection {
1982
+ padding: 12px 0;
1983
+ border-bottom: 1px solid var(--color-border-secondary);
1984
+ }
1985
+
1986
+ .display-subsection:first-child {
1987
+ padding-top: 0;
1988
+ }
1989
+
1990
+ .display-subsection:last-child {
1991
+ border-bottom: none;
1992
+ padding-bottom: 0;
1993
+ }
1994
+
1995
+ .subsection-label {
1996
+ display: block;
1997
+ font-size: 11px;
1998
+ font-weight: 600;
1999
+ color: var(--color-text-muted);
2000
+ text-transform: uppercase;
2001
+ letter-spacing: 0.5px;
2002
+ margin-bottom: 10px;
2003
+ }
2004
+
2005
+ /* Console Drawer - Chrome DevTools Style */
2006
+ .console-toggle-btn {
2007
+ position: fixed;
2008
+ bottom: 20px;
2009
+ left: 20px;
2010
+ width: 48px;
2011
+ height: 48px;
2012
+ border-radius: 50%;
2013
+ background: var(--color-bg-button);
2014
+ border: none;
2015
+ color: white;
2016
+ cursor: pointer;
2017
+ display: flex;
2018
+ align-items: center;
2019
+ justify-content: center;
2020
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
2021
+ transition: all 0.2s ease;
2022
+ z-index: 999;
2023
+ }
2024
+
2025
+ .console-toggle-btn:hover {
2026
+ background: var(--color-bg-button-hover);
2027
+ transform: scale(1.05);
2028
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3);
2029
+ }
2030
+
2031
+ .console-toggle-btn svg {
2032
+ width: 20px;
2033
+ height: 20px;
2034
+ }
2035
+
2036
+ .console-drawer {
2037
+ position: fixed;
2038
+ bottom: 0;
2039
+ left: 0;
2040
+ right: 0;
2041
+ background: var(--color-bg-primary);
2042
+ border-top: 1px solid var(--color-border-primary);
2043
+ box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.1);
2044
+ z-index: 1000;
2045
+ display: flex;
2046
+ flex-direction: column;
2047
+ }
2048
+
2049
+ .console-resize-handle {
2050
+ position: absolute;
2051
+ top: 0;
2052
+ left: 0;
2053
+ right: 0;
2054
+ height: 6px;
2055
+ cursor: ns-resize;
2056
+ display: flex;
2057
+ align-items: center;
2058
+ justify-content: center;
2059
+ }
2060
+
2061
+ .console-resize-handle:hover .console-resize-bar {
2062
+ background: var(--color-bg-button);
2063
+ }
2064
+
2065
+ .console-resize-bar {
2066
+ width: 40px;
2067
+ height: 3px;
2068
+ border-radius: 2px;
2069
+ background: var(--color-border-primary);
2070
+ transition: background 0.2s ease;
2071
+ }
2072
+
2073
+ .console-header {
2074
+ display: flex;
2075
+ align-items: center;
2076
+ justify-content: space-between;
2077
+ padding: 8px 12px;
2078
+ border-bottom: 1px solid var(--color-border-primary);
2079
+ background: var(--color-bg-header);
2080
+ margin-top: 6px;
2081
+ }
2082
+
2083
+ .console-tabs {
2084
+ display: flex;
2085
+ gap: 4px;
2086
+ }
2087
+
2088
+ .console-tab {
2089
+ padding: 4px 12px;
2090
+ font-size: 12px;
2091
+ color: var(--color-text-secondary);
2092
+ background: transparent;
2093
+ border: none;
2094
+ cursor: pointer;
2095
+ border-bottom: 2px solid transparent;
2096
+ }
2097
+
2098
+ .console-tab.active {
2099
+ color: var(--color-text-primary);
2100
+ border-bottom-color: var(--color-bg-button);
2101
+ font-weight: 500;
2102
+ }
2103
+
2104
+ .console-controls {
2105
+ display: flex;
2106
+ align-items: center;
2107
+ gap: 8px;
2108
+ }
2109
+
2110
+ .console-auto-refresh {
2111
+ display: flex;
2112
+ align-items: center;
2113
+ gap: 4px;
2114
+ font-size: 11px;
2115
+ color: var(--color-text-secondary);
2116
+ cursor: pointer;
2117
+ user-select: none;
2118
+ }
2119
+
2120
+ .console-auto-refresh input[type="checkbox"] {
2121
+ cursor: pointer;
2122
+ }
2123
+
2124
+ .console-control-btn {
2125
+ background: transparent;
2126
+ border: none;
2127
+ color: var(--color-text-secondary);
2128
+ cursor: pointer;
2129
+ padding: 4px 8px;
2130
+ font-size: 14px;
2131
+ border-radius: 4px;
2132
+ transition: all 0.15s ease;
2133
+ }
2134
+
2135
+ .console-control-btn:hover {
2136
+ background: var(--color-bg-card-hover);
2137
+ color: var(--color-text-primary);
2138
+ }
2139
+
2140
+ .console-control-btn:disabled {
2141
+ opacity: 0.4;
2142
+ cursor: not-allowed;
2143
+ }
2144
+
2145
+ .console-clear-btn:hover {
2146
+ color: var(--color-accent-error);
2147
+ }
2148
+
2149
+ .console-content {
2150
+ flex: 1;
2151
+ overflow: auto;
2152
+ background: var(--color-bg-primary);
2153
+ }
2154
+
2155
+ .console-logs {
2156
+ margin: 0;
2157
+ padding: 8px 12px;
2158
+ font-family: 'SF Mono', 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
2159
+ font-size: 11px;
2160
+ line-height: 1.5;
2161
+ color: var(--color-text-primary);
2162
+ white-space: pre-wrap;
2163
+ word-wrap: break-word;
2164
+ overflow-wrap: break-word;
2165
+ }
2166
+
2167
+ .console-error {
2168
+ padding: 8px 12px;
2169
+ background: rgba(239, 68, 68, 0.08);
2170
+ border-bottom: 1px solid var(--color-accent-error);
2171
+ color: var(--color-accent-error);
2172
+ font-size: 11px;
2173
+ font-family: 'SF Mono', 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
2174
+ }
2175
+
2176
+ /* Console Filter Bar */
2177
+ .console-filters {
2178
+ display: flex;
2179
+ flex-wrap: wrap;
2180
+ gap: 12px;
2181
+ padding: 8px 12px;
2182
+ background: var(--color-bg-secondary);
2183
+ border-bottom: 1px solid var(--color-border-primary);
2184
+ }
2185
+
2186
+ .console-filter-section {
2187
+ display: flex;
2188
+ align-items: center;
2189
+ gap: 8px;
2190
+ flex-wrap: wrap;
2191
+ }
2192
+
2193
+ .console-filter-label {
2194
+ font-size: 10px;
2195
+ font-weight: 600;
2196
+ color: var(--color-text-muted);
2197
+ text-transform: uppercase;
2198
+ letter-spacing: 0.5px;
2199
+ white-space: nowrap;
2200
+ }
2201
+
2202
+ .console-filter-chips {
2203
+ display: flex;
2204
+ flex-wrap: wrap;
2205
+ gap: 4px;
2206
+ align-items: center;
2207
+ }
2208
+
2209
+ .console-filter-chip {
2210
+ display: inline-flex;
2211
+ align-items: center;
2212
+ gap: 4px;
2213
+ padding: 3px 8px;
2214
+ font-size: 11px;
2215
+ font-weight: 500;
2216
+ background: var(--color-bg-card);
2217
+ border: 1px solid var(--color-border-primary);
2218
+ border-radius: 4px;
2219
+ color: var(--color-text-secondary);
2220
+ cursor: pointer;
2221
+ transition: all 0.15s ease;
2222
+ white-space: nowrap;
2223
+ }
2224
+
2225
+ .console-filter-chip:hover {
2226
+ background: var(--color-bg-card-hover);
2227
+ border-color: var(--chip-color, var(--color-border-hover));
2228
+ color: var(--color-text-primary);
2229
+ }
2230
+
2231
+ .console-filter-chip.active {
2232
+ background: var(--chip-color, var(--color-accent-primary));
2233
+ border-color: var(--chip-color, var(--color-accent-primary));
2234
+ color: white;
2235
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
2236
+ }
2237
+
2238
+ .console-filter-chip.active:hover {
2239
+ opacity: 0.9;
2240
+ }
2241
+
2242
+ .console-filter-action {
2243
+ display: inline-flex;
2244
+ align-items: center;
2245
+ justify-content: center;
2246
+ width: 24px;
2247
+ height: 24px;
2248
+ font-size: 12px;
2249
+ background: transparent;
2250
+ border: 1px solid var(--color-border-primary);
2251
+ border-radius: 4px;
2252
+ color: var(--color-text-muted);
2253
+ cursor: pointer;
2254
+ transition: all 0.15s ease;
2255
+ }
2256
+
2257
+ .console-filter-action:hover {
2258
+ background: var(--color-bg-card-hover);
2259
+ border-color: var(--color-border-hover);
2260
+ color: var(--color-text-primary);
2261
+ }
2262
+
2263
+ /* Log Line Styles */
2264
+ .log-line {
2265
+ display: block;
2266
+ padding: 2px 0;
2267
+ font-family: 'SF Mono', 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
2268
+ font-size: 11px;
2269
+ line-height: 1.5;
2270
+ white-space: pre-wrap;
2271
+ word-wrap: break-word;
2272
+ }
2273
+
2274
+ .log-line-raw {
2275
+ color: var(--color-text-secondary);
2276
+ opacity: 0.8;
2277
+ }
2278
+
2279
+ .log-line-empty {
2280
+ color: var(--color-text-muted);
2281
+ font-style: italic;
2282
+ padding: 20px 0;
2283
+ text-align: center;
2284
+ }
2285
+
2286
+ .log-timestamp {
2287
+ color: var(--color-text-muted);
2288
+ opacity: 0.7;
2289
+ }
2290
+
2291
+ .log-level {
2292
+ font-weight: 500;
2293
+ }
2294
+
2295
+ .log-component {
2296
+ font-weight: 500;
2297
+ }
2298
+
2299
+ .log-correlation {
2300
+ color: var(--color-accent-primary);
2301
+ opacity: 0.9;
2302
+ }
2303
+
2304
+ .log-message {
2305
+ color: inherit;
2306
+ }
2307
+
2308
+ /* Log Level Colors in Dark Mode */
2309
+ [data-theme="dark"] .log-line-raw {
2310
+ color: #8b949e;
2311
+ }
2312
+
2313
+ /* Responsive adjustments for filter bar */
2314
+ @media (max-width: 600px) {
2315
+ .console-filters {
2316
+ flex-direction: column;
2317
+ gap: 8px;
2318
+ padding: 6px 10px;
2319
+ }
2320
+
2321
+ .console-filter-section {
2322
+ flex-wrap: wrap;
2323
+ }
2324
+
2325
+ .console-filter-chip {
2326
+ padding: 2px 6px;
2327
+ font-size: 10px;
2328
+ }
2329
+ }
2330
+
2331
+ /* Responsive Modal */
2332
+ @media (max-width: 900px) {
2333
+ .modal-body {
2334
+ grid-template-columns: 1fr;
2335
+ }
2336
+
2337
+ .preview-column {
2338
+ display: none;
2339
+ }
2340
+ }
2341
+
2342
+ @media (max-width: 600px) {
2343
+ .modal-backdrop {
2344
+ padding: 0;
2345
+ }
2346
+
2347
+ .context-settings-modal {
2348
+ border-radius: 0;
2349
+ height: 100vh;
2350
+ max-height: none;
2351
+ }
2352
+
2353
+ .modal-header {
2354
+ padding: 12px 16px;
2355
+ gap: 12px;
2356
+ }
2357
+
2358
+ .preview-selector {
2359
+ font-size: 11px;
2360
+ gap: 6px;
2361
+ }
2362
+
2363
+ .preview-selector select {
2364
+ padding: 5px 10px;
2365
+ font-size: 11px;
2366
+ }
2367
+
2368
+ .section-header-btn {
2369
+ padding: 12px 14px;
2370
+ }
2371
+
2372
+ .section-content {
2373
+ padding: 0 14px 14px 14px;
2374
+ }
2375
+
2376
+ .toggle-row {
2377
+ padding: 8px 0;
2378
+ }
2379
+
2380
+ .toggle-switch {
2381
+ width: 36px;
2382
+ height: 20px;
2383
+ }
2384
+
2385
+ .toggle-knob {
2386
+ width: 14px;
2387
+ height: 14px;
2388
+ }
2389
+
2390
+ .toggle-switch.on .toggle-knob {
2391
+ transform: translateX(16px);
2392
+ }
2393
+ }
2394
+ </style>
2395
+ </head>
2396
+
2397
+ <body>
2398
+ <div id="root"></div>
2399
+ <script src="viewer-bundle.js"></script>
2400
+ </body>
2401
+
2402
+ </html>