agentgui 1.0.930 → 1.0.932

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 (128) hide show
  1. package/AGENTS.md +35 -12
  2. package/database.js +31 -2
  3. package/lib/http-handler.js +11 -25
  4. package/lib/routes-registry.js +4 -48
  5. package/lib/server-startup.js +3 -11
  6. package/lib/ws-setup.js +2 -1
  7. package/package.json +3 -3
  8. package/server.js +7 -1
  9. package/site/app/js/app.js +64 -68
  10. package/site/app/js/backend.js +1 -1
  11. package/static/lib/xstate.umd.min.js +1 -1
  12. package/lib/db-queries-chunks.js +0 -195
  13. package/lib/db-queries-chunks2.js +0 -82
  14. package/lib/db-queries-cleanup.js +0 -74
  15. package/lib/db-queries-del.js +0 -141
  16. package/lib/db-queries-events.js +0 -68
  17. package/lib/db-queries-import.js +0 -133
  18. package/lib/db-queries-messages.js +0 -102
  19. package/lib/db-queries-sessions.js +0 -112
  20. package/lib/db-queries-streams.js +0 -100
  21. package/lib/db-queries.js +0 -89
  22. package/lib/jsonl-parser.js +0 -190
  23. package/lib/jsonl-watcher.js +0 -64
  24. package/lib/routes-agent-actions.js +0 -61
  25. package/lib/routes-auth-config.js +0 -30
  26. package/lib/routes-conversations.js +0 -96
  27. package/lib/routes-debug.js +0 -119
  28. package/lib/routes-messages.js +0 -139
  29. package/lib/routes-runs.js +0 -156
  30. package/lib/routes-scripts.js +0 -135
  31. package/lib/routes-sessions.js +0 -144
  32. package/lib/routes-threads.js +0 -100
  33. package/lib/routes-util.js +0 -110
  34. package/lib/ws-handlers-conv.js +0 -138
  35. package/lib/ws-handlers-conv2.js +0 -169
  36. package/lib/ws-handlers-msg.js +0 -121
  37. package/lib/ws-handlers-queue.js +0 -56
  38. package/lib/ws-handlers-run.js +0 -182
  39. package/lib/ws-handlers-scripts.js +0 -66
  40. package/lib/ws-handlers-session.js +0 -105
  41. package/lib/ws-handlers-session2.js +0 -85
  42. package/lib/ws-legacy-handlers.js +0 -51
  43. package/static/app.js +0 -261
  44. package/static/css/app-shell.css +0 -419
  45. package/static/css/brand-bible.css +0 -591
  46. package/static/css/colors_and_type.css +0 -568
  47. package/static/css/gmail-skin.css +0 -663
  48. package/static/css/main.css +0 -4015
  49. package/static/css/tools-popup.css +0 -472
  50. package/static/index.html +0 -418
  51. package/static/js/agent-auth.js +0 -146
  52. package/static/js/app-shortcuts.js +0 -30
  53. package/static/js/audio-recorder-processor.js +0 -18
  54. package/static/js/client-agents.js +0 -155
  55. package/static/js/client-cache.js +0 -171
  56. package/static/js/client-conv.js +0 -198
  57. package/static/js/client-events.js +0 -164
  58. package/static/js/client-exec.js +0 -160
  59. package/static/js/client-helpers.js +0 -199
  60. package/static/js/client-load.js +0 -175
  61. package/static/js/client-render.js +0 -132
  62. package/static/js/client-scroll.js +0 -178
  63. package/static/js/client-status.js +0 -167
  64. package/static/js/client-streaming.js +0 -117
  65. package/static/js/client-streaming2.js +0 -116
  66. package/static/js/client-streaming3.js +0 -153
  67. package/static/js/client-streaming4.js +0 -194
  68. package/static/js/client-ui-controls.js +0 -170
  69. package/static/js/client-ui.js +0 -128
  70. package/static/js/client-ui2.js +0 -160
  71. package/static/js/client-url.js +0 -93
  72. package/static/js/client-utils.js +0 -174
  73. package/static/js/client-ws-msg.js +0 -88
  74. package/static/js/client-ws.js +0 -161
  75. package/static/js/client.js +0 -145
  76. package/static/js/codec.js +0 -4
  77. package/static/js/conv-list-machine.js +0 -145
  78. package/static/js/conv-list-renderer.js +0 -198
  79. package/static/js/conv-machine.js +0 -110
  80. package/static/js/conv-sidebar-actions.js +0 -188
  81. package/static/js/conv-sidebar-clone.js +0 -91
  82. package/static/js/conversations.js +0 -116
  83. package/static/js/dialogs-types.js +0 -111
  84. package/static/js/dialogs.js +0 -53
  85. package/static/js/event-filter-config.js +0 -36
  86. package/static/js/event-processor.js +0 -181
  87. package/static/js/features.js +0 -187
  88. package/static/js/image-loader-element.js +0 -76
  89. package/static/js/image-loader.js +0 -146
  90. package/static/js/prompt-machine.js +0 -108
  91. package/static/js/recording-machine.js +0 -49
  92. package/static/js/script-runner.js +0 -192
  93. package/static/js/state-barrier.js +0 -105
  94. package/static/js/streaming-renderer-dispatch.js +0 -144
  95. package/static/js/streaming-renderer-events.js +0 -163
  96. package/static/js/streaming-renderer-events2.js +0 -125
  97. package/static/js/streaming-renderer-params.js +0 -38
  98. package/static/js/streaming-renderer-render-misc.js +0 -107
  99. package/static/js/streaming-renderer-render.js +0 -181
  100. package/static/js/streaming-renderer-render2.js +0 -149
  101. package/static/js/streaming-renderer-render3.js +0 -142
  102. package/static/js/streaming-renderer-static.js +0 -181
  103. package/static/js/streaming-renderer-static2.js +0 -140
  104. package/static/js/streaming-renderer-stream.js +0 -170
  105. package/static/js/streaming-renderer-text.js +0 -185
  106. package/static/js/streaming-renderer-tools.js +0 -189
  107. package/static/js/streaming-renderer-tools2.js +0 -92
  108. package/static/js/streaming-renderer.js +0 -200
  109. package/static/js/syntax-highlighter-render.js +0 -72
  110. package/static/js/syntax-highlighter.js +0 -131
  111. package/static/js/terminal-machine.js +0 -51
  112. package/static/js/terminal.js +0 -178
  113. package/static/js/ui-components-rendering.js +0 -62
  114. package/static/js/ui-components.js +0 -88
  115. package/static/js/websocket-manager.js +0 -107
  116. package/static/js/ws-client.js +0 -87
  117. package/static/js/ws-core.js +0 -162
  118. package/static/js/ws-latency.js +0 -88
  119. package/static/js/ws-machine.js +0 -68
  120. package/static/lib/msgpackr.min.js +0 -2
  121. package/static/theme.js +0 -74
  122. package/static/vendor/highlight-js.css +0 -10
  123. package/static/vendor/highlight.min.js +0 -1244
  124. package/static/vendor/prism-dark.css +0 -129
  125. package/static/vendor/rippleui.css +0 -35
  126. package/static/vendor/xterm-addon-fit.min.js +0 -8
  127. package/static/vendor/xterm.css +0 -8
  128. package/static/vendor/xterm.min.js +0 -8
@@ -1,4015 +0,0 @@
1
- *, *::before, *::after { box-sizing: border-box; }
2
-
3
- :root {
4
- --color-primary: #3b82f6;
5
- --color-primary-dark: #1e40af;
6
- --color-bg-primary: #ffffff;
7
- --color-bg-secondary: #f9fafb;
8
- --color-bg-code: #f1f5f9;
9
- --color-code-text: #1e293b;
10
- --color-code-border: #cbd5e1;
11
- --color-thinking-bg: #f5f3ff;
12
- --color-text-primary: #111827;
13
- --color-text-secondary: #6b7280;
14
- --color-border: #e5e7eb;
15
- --color-success: #10b981;
16
- --color-error: #ef4444;
17
- --color-warning: #f59e0b;
18
- --color-info: #0891b2;
19
- --sidebar-width: 300px;
20
- --header-height: 52px;
21
- --msg-max-width: 800px;
22
- }
23
-
24
- html.dark {
25
- --color-bg-primary: #1a1a1a;
26
- --color-bg-secondary: #242424;
27
- --color-text-primary: #e5e5e5;
28
- --color-text-secondary: #a3a3a3;
29
- --color-border: #333333;
30
- --color-primary: #737373;
31
- --color-primary-dark: #525252;
32
- --color-bg-code: #1e293b;
33
- --color-code-text: #e2e8f0;
34
- --color-code-border: #334155;
35
- --color-thinking-bg: #1e1a2e;
36
- }
37
-
38
- html, body {
39
- margin: 0;
40
- padding: 0;
41
- height: 100%;
42
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
43
- background-color: var(--color-bg-primary);
44
- color: var(--color-text-primary);
45
- }
46
-
47
- /* ===== ROOT LAYOUT: sidebar + main, full viewport ===== */
48
- .app-shell {
49
- display: flex;
50
- height: 100dvh;
51
- overflow: hidden;
52
- padding-top: env(safe-area-inset-top);
53
- padding-bottom: env(safe-area-inset-bottom);
54
- padding-left: env(safe-area-inset-left);
55
- padding-right: env(safe-area-inset-right);
56
- }
57
-
58
- /* ===== SIDEBAR ===== */
59
- .sidebar {
60
- width: var(--sidebar-width);
61
- flex-shrink: 0;
62
- display: flex;
63
- flex-direction: column;
64
- background-color: var(--color-bg-secondary);
65
- overflow: hidden;
66
- transition: none !important;
67
- animation: none !important;
68
- }
69
-
70
- .sidebar.collapsed {
71
- width: 0;
72
- min-width: 0;
73
- border-right: none;
74
- transition: none !important;
75
- animation: none !important;
76
- }
77
-
78
- .sidebar-header {
79
- padding: 0.75rem 1rem;
80
- display: flex;
81
- justify-content: space-between;
82
- align-items: center;
83
- flex-shrink: 0;
84
- min-height: var(--header-height);
85
- }
86
-
87
- .sidebar-header h2 {
88
- margin: 0;
89
- font-size: 0.875rem;
90
- font-weight: 600;
91
- text-transform: uppercase;
92
- letter-spacing: 0.05em;
93
- color: var(--color-text-secondary);
94
- white-space: nowrap;
95
- overflow: hidden;
96
- }
97
-
98
- .sidebar-new-btn {
99
- padding: 0.375rem 0.625rem;
100
- font-size: 0.75rem;
101
- background-color: var(--color-primary);
102
- color: white;
103
- border: none;
104
- border-radius: 0.375rem;
105
- cursor: pointer;
106
- transition: background-color 0.2s;
107
- white-space: nowrap;
108
- flex-shrink: 0;
109
- }
110
-
111
- .sidebar-new-btn:hover { background-color: var(--color-primary-dark); }
112
-
113
- .sidebar-header-actions {
114
- display: flex;
115
- gap: 0.375rem;
116
- align-items: center;
117
- flex-shrink: 0;
118
- }
119
-
120
- .sidebar-clone-btn {
121
- padding: 0.375rem 0.625rem;
122
- font-size: 0.75rem;
123
- background-color: var(--color-bg-primary);
124
- color: var(--color-text-primary);
125
- border: 1px solid var(--color-border);
126
- border-radius: 0.375rem;
127
- cursor: pointer;
128
- transition: all 0.2s;
129
- white-space: nowrap;
130
- flex-shrink: 0;
131
- }
132
-
133
- .sidebar-clone-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
134
-
135
- .clone-input-bar {
136
- display: flex;
137
- align-items: center;
138
- gap: 0.375rem;
139
- padding: 0.375rem 0.75rem;
140
- background: var(--color-bg-primary);
141
- border-bottom: 1px solid var(--color-border);
142
- flex-shrink: 0;
143
- }
144
-
145
- .clone-input {
146
- flex: 1;
147
- min-width: 0;
148
- padding: 0.375rem 0.5rem;
149
- font-size: 0.8rem;
150
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
151
- border: 1px solid var(--color-border);
152
- border-radius: 0.25rem;
153
- background: var(--color-bg-secondary);
154
- color: var(--color-text-primary);
155
- outline: none;
156
- }
157
-
158
- .clone-input:focus { border-color: var(--color-primary); }
159
-
160
- .clone-go-btn {
161
- padding: 0.375rem 0.625rem;
162
- font-size: 0.75rem;
163
- font-weight: 600;
164
- background: var(--color-primary);
165
- color: white;
166
- border: none;
167
- border-radius: 0.25rem;
168
- cursor: pointer;
169
- flex-shrink: 0;
170
- transition: background-color 0.15s;
171
- }
172
-
173
- .clone-go-btn:hover { background-color: var(--color-primary-dark); }
174
- .clone-go-btn:disabled { opacity: 0.5; cursor: not-allowed; }
175
-
176
- .clone-cancel-btn {
177
- padding: 0.25rem 0.5rem;
178
- font-size: 1rem;
179
- background: none;
180
- border: none;
181
- cursor: pointer;
182
- color: var(--color-text-secondary);
183
- flex-shrink: 0;
184
- line-height: 1;
185
- }
186
-
187
- .clone-cancel-btn:hover { color: var(--color-text-primary); }
188
-
189
- .clone-status {
190
- padding: 0.375rem 0.75rem;
191
- font-size: 0.75rem;
192
- background: var(--color-bg-primary);
193
- border-bottom: 1px solid var(--color-border);
194
- flex-shrink: 0;
195
- display: flex;
196
- align-items: center;
197
- gap: 0.5rem;
198
- }
199
-
200
- .clone-status.cloning { color: var(--color-primary); }
201
- .clone-status.clone-error { color: var(--color-error); }
202
- .clone-status.clone-success { color: var(--color-success); }
203
-
204
- .sidebar-list {
205
- flex: 1;
206
- overflow-y: auto;
207
- overflow-x: hidden;
208
- list-style: none;
209
- margin: 0;
210
- padding: 0.5rem 0;
211
- -webkit-overflow-scrolling: touch;
212
- }
213
-
214
- .conversation-item {
215
- padding: 0.75rem 0.75rem;
216
- margin: 0.125rem 0.5rem;
217
- border-radius: 0.375rem;
218
- cursor: pointer;
219
- transition: background-color 0.15s;
220
- border-left: 3px solid transparent;
221
- user-select: none;
222
- }
223
-
224
- .conversation-item:hover { background-color: var(--color-bg-primary); }
225
-
226
- .conversation-item.active {
227
- background-color: var(--color-primary);
228
- color: white;
229
- border-left-color: var(--color-primary-dark);
230
- }
231
-
232
- .conversation-item-title {
233
- font-weight: 500;
234
- font-size: 0.875rem;
235
- margin: 0;
236
- white-space: nowrap;
237
- overflow: hidden;
238
- text-overflow: ellipsis;
239
- }
240
-
241
- .conversation-item-meta {
242
- font-size: 0.75rem;
243
- color: var(--color-text-secondary);
244
- margin-top: 0.125rem;
245
- white-space: nowrap;
246
- overflow: hidden;
247
- text-overflow: ellipsis;
248
- }
249
-
250
- .conversation-item.active .conversation-item-meta { color: rgba(255,255,255,0.7); }
251
-
252
- .conversation-streaming-badge {
253
- display: inline-flex;
254
- align-items: center;
255
- margin-right: 0.375rem;
256
- vertical-align: middle;
257
- }
258
-
259
- .streaming-dot {
260
- display: inline-block;
261
- width: 0.5rem;
262
- height: 0.5rem;
263
- border-radius: 50%;
264
- background-color: var(--color-success);
265
- animation: pulse 1.5s ease-in-out infinite;
266
- }
267
-
268
- .conversation-item.active .streaming-dot {
269
- background-color: #fff;
270
- }
271
-
272
- .conversation-item {
273
- display: flex;
274
- align-items: center;
275
- justify-content: space-between;
276
- gap: 0.5rem;
277
- }
278
-
279
- .conversation-item-content {
280
- flex: 1;
281
- min-width: 0;
282
- overflow: hidden;
283
- }
284
-
285
- .conversation-item.pinned { cursor: grab; }
286
- .conversation-item.pinned:active { cursor: grabbing; }
287
- .conversation-item-checkbox {
288
- flex-shrink: 0;
289
- width: 16px;
290
- height: 16px;
291
- opacity: 0;
292
- cursor: pointer;
293
- margin: 0;
294
- }
295
- .conversation-item:hover .conversation-item-checkbox,
296
- .conversation-item-checkbox:checked {
297
- opacity: 1;
298
- }
299
- .conversation-item-delete,
300
- .conversation-item-archive,
301
- .conversation-item-export {
302
- flex-shrink: 0;
303
- width: 28px;
304
- height: 28px;
305
- padding: 0;
306
- display: flex;
307
- align-items: center;
308
- justify-content: center;
309
- background: transparent;
310
- border: none;
311
- border-radius: 0.25rem;
312
- cursor: pointer;
313
- color: var(--color-text-secondary);
314
- opacity: 0;
315
- transition: all 0.15s;
316
- }
317
-
318
- .conversation-item:hover .conversation-item-delete,
319
- .conversation-item:hover .conversation-item-archive,
320
- .conversation-item:hover .conversation-item-export {
321
- opacity: 1;
322
- }
323
-
324
- .conversation-item-delete:hover {
325
- background-color: var(--color-error);
326
- color: white;
327
- }
328
-
329
- .conversation-item-export:hover {
330
- background-color: #3b82f6;
331
- color: white;
332
- }
333
-
334
- .conversation-item-archive:hover {
335
- background-color: #f59e0b;
336
- color: white;
337
- }
338
-
339
- .conversation-item.active .conversation-item-delete,
340
- .conversation-item.active .conversation-item-archive,
341
- .conversation-item.active .conversation-item-export {
342
- color: rgba(255,255,255,0.8);
343
- }
344
-
345
- .conversation-item.active .conversation-item-delete:hover,
346
- .conversation-item.active .conversation-item-archive:hover,
347
- .conversation-item.active .conversation-item-export:hover {
348
- background-color: rgba(255,255,255,0.2);
349
- color: white;
350
- }
351
-
352
- .sidebar-empty {
353
- padding: 2rem 1rem;
354
- text-align: center;
355
- color: var(--color-text-secondary);
356
- font-size: 0.875rem;
357
- }
358
-
359
- /* ===== MAIN PANEL: header + messages + input ===== */
360
- .main-panel {
361
- flex: 1;
362
- display: flex;
363
- flex-direction: column;
364
- overflow: hidden;
365
- min-width: 0;
366
- background-color: var(--color-bg-primary);
367
- }
368
-
369
- /* --- Header bar --- */
370
- .main-header {
371
- display: flex;
372
- align-items: center;
373
- gap: 0.75rem;
374
- padding: 0 1rem;
375
- height: var(--header-height);
376
- min-height: var(--header-height);
377
- flex-shrink: 0;
378
- background-color: var(--color-bg-secondary);
379
- }
380
-
381
- .sidebar-toggle-btn {
382
- display: flex;
383
- align-items: center;
384
- justify-content: center;
385
- width: 36px;
386
- height: 36px;
387
- background: none;
388
- border: none;
389
- border-radius: 0.375rem;
390
- cursor: pointer;
391
- color: var(--color-text-secondary);
392
- flex-shrink: 0;
393
- transition: none;
394
- }
395
-
396
- .sidebar-toggle-btn:hover {
397
- background-color: var(--color-bg-primary);
398
- color: var(--color-text-primary);
399
- transition: none;
400
- }
401
-
402
- .sidebar-toggle-btn svg {
403
- width: 18px;
404
- height: 18px;
405
- }
406
-
407
- .header-title {
408
- font-size: 1.125rem;
409
- font-weight: 600;
410
- margin: 0;
411
- flex: 1;
412
- min-width: 0;
413
- overflow: hidden;
414
- text-overflow: ellipsis;
415
- white-space: nowrap;
416
- }
417
-
418
- .header-controls {
419
- display: flex;
420
- gap: 0.5rem;
421
- align-items: center;
422
- flex-shrink: 0;
423
- }
424
-
425
- .status-badge {
426
- display: inline-flex;
427
- align-items: center;
428
- gap: 0.375rem;
429
- padding: 0.25rem 0.625rem;
430
- border-radius: 1rem;
431
- font-size: 0.75rem;
432
- font-weight: 500;
433
- background-color: var(--color-bg-primary);
434
- }
435
-
436
- .status-indicator {
437
- width: 0.5rem;
438
- height: 0.5rem;
439
- border-radius: 50%;
440
- background-color: var(--color-error);
441
- animation: pulse 2s infinite;
442
- }
443
-
444
- .status-indicator[data-status="connected"] { background-color: var(--color-success); }
445
- .status-indicator[data-status="reconnecting"],
446
- .status-indicator[data-status="connecting"] { background-color: var(--color-warning); animation: pulse 1s infinite; }
447
-
448
- @keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.5; } }
449
-
450
- .theme-toggle-btn {
451
- display: flex;
452
- align-items: center;
453
- justify-content: center;
454
- width: 36px;
455
- height: 36px;
456
- background: none;
457
- border: none;
458
- border-radius: 0.375rem;
459
- cursor: pointer;
460
- color: var(--color-text-secondary);
461
- transition: background-color 0.15s;
462
- }
463
-
464
- .theme-toggle-btn:hover {
465
- background-color: var(--color-bg-primary);
466
- color: var(--color-text-primary);
467
- }
468
-
469
- .script-buttons { display: flex; gap: 0.25rem; align-items: center; }
470
- .header-icon-btn {
471
- display: flex; align-items: center; justify-content: center;
472
- width: 36px; height: 36px; background: none; border: none;
473
- border-radius: 0.375rem; cursor: pointer; color: var(--color-text-secondary);
474
- transition: background-color 0.15s, color 0.15s;
475
- }
476
- .header-icon-btn:hover { background-color: var(--color-bg-primary); color: var(--color-text-primary); }
477
- .header-icon-btn svg { width: 20px; height: 20px; }
478
- #scriptStartBtn { color: var(--color-success); }
479
- #scriptStartBtn:hover { background-color: rgba(16,185,129,0.1); color: var(--color-success); }
480
- .script-dev-btn { color: var(--color-info); }
481
- .script-dev-btn:hover { background-color: rgba(8,145,178,0.1); color: var(--color-info); }
482
- .script-stop-btn { color: var(--color-error); }
483
- .script-stop-btn:hover { background-color: rgba(239,68,68,0.1); color: var(--color-error); }
484
-
485
- .agent-auth-btn { color: var(--color-text-secondary); position: relative; }
486
- .agent-auth-btn.auth-ok { color: var(--color-success); }
487
- .agent-auth-btn.auth-warn { color: var(--color-warning); }
488
- .agent-auth-btn:hover { background-color: var(--color-bg-primary); }
489
- .agent-auth-dropdown {
490
- position: absolute; top: 100%; right: 0; z-index: 100;
491
- min-width: 260px; padding: 0.25rem 0;
492
- background: var(--color-bg-secondary); border: 1px solid var(--color-border);
493
- border-radius: 0.5rem; box-shadow: 0 4px 12px rgba(0,0,0,0.15);
494
- display: none;
495
- }
496
- .agent-auth-dropdown.open { display: block; }
497
- .agent-auth-item {
498
- display: flex; align-items: center; gap: 0.5rem;
499
- padding: 0.5rem 0.75rem; cursor: pointer; font-size: 0.8125rem;
500
- color: var(--color-text-primary); border: none; background: none; width: 100%;
501
- text-align: left;
502
- }
503
- .agent-auth-item:hover { background: var(--color-bg-primary); }
504
- .agent-auth-dot {
505
- width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
506
- }
507
- .agent-auth-dot.ok { background: var(--color-success); }
508
- .agent-auth-dot.missing { background: var(--color-warning); }
509
- .agent-auth-dot.unknown { background: var(--color-text-secondary); }
510
- .agent-auth-section-header {
511
- padding: 0.375rem 0.75rem; font-size: 0.6875rem; font-weight: 600;
512
- text-transform: uppercase; letter-spacing: 0.05em;
513
- color: var(--color-text-secondary); user-select: none;
514
- }
515
-
516
- .terminal-container {
517
- flex: 1; display: flex; flex-direction: column; overflow: hidden; background: #1e1e1e; min-height: 0;
518
- }
519
- .terminal-output { flex: 1; overflow: hidden; position: relative; min-height: 0; }
520
-
521
- /* --- View toggle bar --- */
522
- .view-toggle-bar {
523
- display: flex;
524
- gap: 0;
525
- background: var(--color-bg-secondary);
526
- flex-shrink: 0;
527
- padding: 0 1rem;
528
- }
529
-
530
- .view-toggle-btn {
531
- padding: 0.5rem 1rem;
532
- border: none;
533
- background: none;
534
- cursor: pointer;
535
- font-size: 0.875rem;
536
- font-weight: 500;
537
- color: var(--color-text-secondary);
538
- border-bottom: 2px solid transparent;
539
- transition: all 0.2s;
540
- min-height: 40px;
541
- }
542
-
543
- .view-toggle-btn:hover { color: var(--color-text-primary); }
544
- .view-toggle-btn.active { color: var(--color-primary); border-bottom-color: var(--color-primary); }
545
-
546
- .view-toggle-btn svg {
547
- width: 1.2rem;
548
- height: 1.2rem;
549
- display: block;
550
- margin: 0 auto;
551
- }
552
-
553
- /* --- Messages scroll area --- */
554
- #output-scroll {
555
- flex: 1;
556
- overflow-y: auto;
557
- overflow-x: hidden;
558
- min-height: 0;
559
- -webkit-overflow-scrolling: touch;
560
- position: relative;
561
- }
562
-
563
- .messages-wrapper {
564
- max-width: 100%;
565
- margin: 0;
566
- width: 100%;
567
- padding: 0.75rem 2rem;
568
- display: flex;
569
- flex-direction: column;
570
- }
571
-
572
- #output {
573
- display: flex;
574
- flex-direction: column;
575
- gap: 0;
576
- flex: 1;
577
- }
578
-
579
- /* --- Conversation display --- */
580
- .conversation-header {
581
- padding: 0.5rem 0;
582
- margin-bottom: 0.5rem;
583
- }
584
-
585
- .conversation-header h2 { margin: 0 0 0.25rem 0; font-size: 1.25rem; }
586
- .conversation-header p { margin: 0; font-size: 0.8rem; color: var(--color-text-secondary); }
587
-
588
- .conversation-messages { padding: 0; }
589
-
590
- /* --- Messages --- */
591
- .message {
592
- margin-bottom: 0;
593
- padding: 0.5rem 0.75rem;
594
- border-radius: 0.75rem;
595
- max-width: 85%;
596
- word-break: break-word;
597
- }
598
-
599
- .message-user {
600
- margin-left: auto;
601
- border-bottom-right-radius: 0.25rem;
602
- color: var(--color-text-primary);
603
- }
604
-
605
- .message-assistant {
606
- margin-right: auto;
607
- border-bottom-left-radius: 0.25rem;
608
- color: var(--color-text-primary);
609
- }
610
-
611
- /* Consecutive assistant messages: join them visually */
612
- .message-assistant + .message-assistant {
613
- border-top-left-radius: 0;
614
- border-top-right-radius: 0;
615
- margin-top: -0.125rem;
616
- padding-top: 0.25rem;
617
- }
618
- .message-assistant:has(+ .message-assistant) {
619
- border-bottom-left-radius: 0;
620
- border-bottom-right-radius: 0;
621
- padding-bottom: 0.25rem;
622
- }
623
-
624
- .message-role {
625
- font-weight: 600;
626
- font-size: 0.7rem;
627
- text-transform: uppercase;
628
- letter-spacing: 0.04em;
629
- margin-bottom: 0.125rem;
630
- }
631
-
632
- .message-user .message-role { color: #7a9abf; }
633
- .message-assistant .message-role { color: #8a9a7a; }
634
-
635
- .message-content {
636
- font-size: 0.9rem;
637
- line-height: 1.6;
638
- white-space: pre-wrap;
639
- word-break: break-word;
640
- }
641
-
642
- .message-timestamp {
643
- font-size: 0.7rem;
644
- margin-top: 0.25rem;
645
- opacity: 0.5;
646
- }
647
-
648
- .message-user .message-timestamp { color: var(--color-text-secondary); }
649
- .message-assistant .message-timestamp { color: var(--color-text-secondary); }
650
-
651
- .message-blocks {
652
- display: flex;
653
- flex-direction: column;
654
- gap: 0.125rem;
655
- }
656
-
657
- .message-text {
658
- line-height: 1.6;
659
- word-break: break-word;
660
- white-space: pre-wrap;
661
- }
662
-
663
- .message-code {
664
- background-color: var(--color-bg-code);
665
- border-radius: 0.375rem;
666
- padding: 0.5rem;
667
- overflow-x: auto;
668
- margin: 0.25rem 0;
669
- }
670
-
671
- .message-code pre {
672
- margin: 0;
673
- font-family: 'Courier New', monospace;
674
- font-size: 0.85rem;
675
- color: #e0e0e0;
676
- }
677
-
678
- .message-tool {
679
- background-color: var(--color-primary);
680
- color: white;
681
- padding: 0.25rem 0.5rem;
682
- border-radius: 0.25rem;
683
- font-size: 0.75rem;
684
- display: inline-block;
685
- margin: 0.25rem 0;
686
- }
687
-
688
- /* --- Streaming block types --- */
689
- .streaming-block-system {
690
- padding: 0.375rem 0.75rem;
691
- margin: 0;
692
- background: rgba(59,130,246,0.08);
693
- border-radius: 0.375rem;
694
- font-size: 0.8rem;
695
- display: flex;
696
- align-items: center;
697
- gap: 0.5rem;
698
- }
699
-
700
- .system-model-badge {
701
- background: var(--color-primary);
702
- color: white;
703
- padding: 0.125rem 0.5rem;
704
- border-radius: 1rem;
705
- font-size: 0.7rem;
706
- font-weight: 600;
707
- white-space: nowrap;
708
- }
709
-
710
- .system-info {
711
- color: var(--color-text-secondary);
712
- font-size: 0.75rem;
713
- }
714
-
715
- .tool-input-details {
716
- }
717
-
718
- .tool-input-summary {
719
- padding: 0.375rem 0.75rem;
720
- font-size: 0.75rem;
721
- color: var(--color-text-secondary);
722
- cursor: pointer;
723
- user-select: none;
724
- }
725
-
726
- .tool-input-summary:hover {
727
- background: rgba(6,182,212,0.08);
728
- }
729
-
730
- .tool-input-pre {
731
- margin: 0;
732
- padding: 0.5rem 0.75rem;
733
- font-size: 0.75rem;
734
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
735
- background: rgba(0,0,0,0.03);
736
- overflow-x: auto;
737
- max-height: 200px;
738
- overflow-y: auto;
739
- white-space: pre-wrap;
740
- word-break: break-all;
741
- }
742
-
743
- html.dark .tool-input-pre { background: rgba(255,255,255,0.03); }
744
-
745
- .streaming-block-tool-result {
746
- margin: 0;
747
- border-radius: 0.375rem;
748
- background: var(--color-bg-code);
749
- overflow: hidden;
750
- }
751
-
752
- .tool-result-header {
753
- padding: 0.375rem 0.75rem;
754
- font-size: 0.7rem;
755
- }
756
-
757
- .tool-result-ok-badge {
758
- color: #10b981;
759
- font-weight: 600;
760
- text-transform: uppercase;
761
- letter-spacing: 0.05em;
762
- }
763
-
764
- .tool-result-error-badge {
765
- color: #ef4444;
766
- font-weight: 600;
767
- text-transform: uppercase;
768
- letter-spacing: 0.05em;
769
- }
770
-
771
- .tool-result-pre {
772
- margin: 0;
773
- padding: 0.5rem 0.75rem;
774
- font-size: 0.75rem;
775
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
776
- color: var(--color-code-text);
777
- overflow-x: auto;
778
- max-height: 300px;
779
- overflow-y: auto;
780
- white-space: pre-wrap;
781
- word-break: break-all;
782
- }
783
-
784
- .streaming-block-tool-result.tool-result-error {
785
- }
786
-
787
- .streaming-block-result {
788
- padding: 0.375rem 0.75rem;
789
- margin: 0;
790
- border-radius: 0.375rem;
791
- background: rgba(16,185,129,0.08);
792
- font-size: 0.8rem;
793
- display: flex;
794
- align-items: center;
795
- gap: 0.5rem;
796
- }
797
-
798
- .streaming-block-result.result-error {
799
- background: rgba(239,68,68,0.08);
800
- }
801
-
802
- .result-status {
803
- font-weight: 600;
804
- color: #10b981;
805
- }
806
-
807
- .result-error .result-status { color: #ef4444; }
808
-
809
- .result-stats {
810
- color: var(--color-text-secondary);
811
- font-size: 0.75rem;
812
- }
813
-
814
- .streaming-indicator-label {
815
- white-space: nowrap;
816
- }
817
-
818
- /* --- Input area: fixed at bottom --- */
819
- .input-section {
820
- flex-shrink: 0;
821
- background-color: var(--color-bg-primary);
822
- padding: 0.75rem 1rem;
823
- }
824
-
825
- .input-wrapper {
826
- max-width: var(--msg-max-width);
827
- margin: 0 auto;
828
- width: 100%;
829
- display: flex;
830
- gap: 0.5rem;
831
- align-items: flex-end;
832
- }
833
-
834
- .agent-selector {
835
- padding: 0.5rem;
836
- border: none;
837
- border-radius: 0.375rem;
838
- background-color: var(--color-bg-secondary);
839
- color: var(--color-text-primary);
840
- font-size: 0.8rem;
841
- cursor: pointer;
842
- flex-shrink: 0;
843
- width: auto;
844
- min-width: 80px;
845
- max-width: 200px;
846
- }
847
-
848
-
849
-
850
-
851
-
852
- .agent-selector:disabled, .model-selector:disabled {
853
- opacity: 0.5;
854
- cursor: not-allowed;
855
- background-color: var(--color-bg-secondary);
856
- }
857
-
858
- .agent-selector[data-streaming="true"], .model-selector[data-streaming="true"] {
859
- opacity: 0.6;
860
- cursor: not-allowed;
861
- background-color: var(--color-bg-secondary);
862
- }
863
-
864
- .message-textarea[data-streaming="true"] {
865
- opacity: 0.7;
866
- cursor: not-allowed;
867
- background-color: var(--color-bg-secondary);
868
- }
869
-
870
- .model-selector {
871
- padding: 0.5rem;
872
- border: none;
873
- border-radius: 0.375rem;
874
- background-color: var(--color-bg-secondary);
875
- color: var(--color-text-primary);
876
- font-size: 0.8rem;
877
- cursor: pointer;
878
- flex-shrink: 0;
879
- width: auto;
880
- min-width: 80px;
881
- max-width: 220px;
882
- }
883
-
884
- .model-selector:empty, .model-selector[data-empty="true"] {
885
- display: none;
886
- }
887
-
888
- .cli-selector {
889
- display: inline-block;
890
- }
891
-
892
- .sub-agent-selector {
893
- display: inline-block;
894
- }
895
-
896
- .message-input-container {
897
- position: relative;
898
- flex: 1;
899
- display: flex;
900
- }
901
-
902
- .message-textarea {
903
- flex: 1;
904
- padding: 0.625rem 2.75rem 0.625rem 0.875rem;
905
- border: none;
906
- border-radius: 0.75rem;
907
- background-color: var(--color-bg-secondary);
908
- color: var(--color-text-primary);
909
- font-family: inherit;
910
- font-size: 0.9375rem;
911
- resize: none;
912
- min-height: 44px;
913
- max-height: 150px;
914
- line-height: 1.5;
915
- transition: border-color 0.15s;
916
- }
917
-
918
- .message-textarea:focus {
919
- outline: none;
920
- box-shadow: 0 0 0 2px rgba(59,130,246,0.15);
921
- }
922
-
923
- .send-btn {
924
- display: flex;
925
- align-items: center;
926
- justify-content: center;
927
- width: 40px;
928
- height: 40px;
929
- background-color: var(--color-primary);
930
- color: white;
931
- border: none;
932
- border-radius: 0.5rem;
933
- cursor: pointer;
934
- flex-shrink: 0;
935
- transition: background-color 0.15s;
936
- }
937
-
938
- .send-btn:hover:not(:disabled) { background-color: var(--color-primary-dark); }
939
- .send-btn:disabled { opacity: 0.4; cursor: not-allowed; }
940
- .send-btn[data-streaming="true"] { opacity: 0.5; cursor: not-allowed; background-color: var(--color-primary); }
941
-
942
- /* ===== Data-streaming state styling for all prompt controls ===== */
943
- .input-section[data-streaming="true"] {
944
- opacity: 0.85;
945
- }
946
-
947
- .input-section[data-streaming="true"] .message-textarea {
948
- opacity: 0.7;
949
- cursor: not-allowed;
950
- background-color: var(--color-bg-secondary);
951
- }
952
-
953
- .input-section[data-streaming="true"] .agent-selector,
954
- .input-section[data-streaming="true"] .model-selector {
955
- opacity: 0.6;
956
- cursor: not-allowed;
957
- }
958
-
959
- .input-section[data-streaming="true"] .send-btn {
960
- opacity: 0.5;
961
- cursor: not-allowed;
962
- }
963
-
964
- .send-btn svg { width: 18px; height: 18px; }
965
-
966
- .stop-btn {
967
- display: none;
968
- align-items: center;
969
- justify-content: center;
970
- width: 40px;
971
- height: 40px;
972
- background-color: #dc2626;
973
- color: white;
974
- border: none;
975
- border-radius: 0.5rem;
976
- cursor: pointer;
977
- flex-shrink: 0;
978
- transition: background-color 0.15s;
979
- }
980
-
981
- .stop-btn:hover:not(:disabled) { background-color: #b91c1c; }
982
- .stop-btn:disabled { opacity: 0.4; cursor: not-allowed; }
983
- .stop-btn.visible { display: flex; }
984
-
985
- .inject-btn {
986
- display: none;
987
- align-items: center;
988
- justify-content: center;
989
- width: 40px;
990
- height: 40px;
991
- background-color: #f59e0b;
992
- color: white;
993
- border: none;
994
- border-radius: 0.5rem;
995
- cursor: pointer;
996
- flex-shrink: 0;
997
- transition: background-color 0.15s;
998
- margin-right: 0.25rem;
999
- }
1000
-
1001
- .inject-btn:hover:not(:disabled) { background-color: #d97706; }
1002
- .inject-btn:disabled { opacity: 0.4; cursor: not-allowed; }
1003
- .inject-btn.visible { display: flex; }
1004
-
1005
- .queue-btn {
1006
- display: none;
1007
- align-items: center;
1008
- justify-content: center;
1009
- width: 40px;
1010
- height: 40px;
1011
- background-color: #8b5cf6;
1012
- color: white;
1013
- border: none;
1014
- border-radius: 0.5rem;
1015
- cursor: pointer;
1016
- flex-shrink: 0;
1017
- transition: background-color 0.15s;
1018
- margin-right: 0.25rem;
1019
- }
1020
-
1021
- .queue-btn:hover:not(:disabled) { background-color: #7c3aed; }
1022
- .queue-btn:disabled { opacity: 0.4; cursor: not-allowed; }
1023
- .queue-btn.visible { display: flex; }
1024
-
1025
-
1026
- /* ===== OVERLAY for mobile sidebar ===== */
1027
- .sidebar-overlay {
1028
- display: none;
1029
- position: fixed;
1030
- top: 0; left: 0; width: 100%; height: 100%;
1031
- background: rgba(0,0,0,0.4);
1032
- z-index: 999;
1033
- transition: none;
1034
- animation: none;
1035
- }
1036
-
1037
- .sidebar-overlay.visible { display: block; transition: none; animation: none; }
1038
-
1039
- /* ===== UTILITIES ===== */
1040
- .text-secondary { color: var(--color-text-secondary); }
1041
- .animate-spin { animation: spin 1s linear infinite; }
1042
- @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
1043
-
1044
- /* ===== HTML rendered content ===== */
1045
- .html-rendered-label {
1046
- padding: 0.25rem 0.5rem;
1047
- background: #eff6ff;
1048
- border-radius: 0.25rem;
1049
- font-size: 0.75rem;
1050
- font-weight: 600;
1051
- color: #1d4ed8;
1052
- text-transform: uppercase;
1053
- letter-spacing: 0.05em;
1054
- margin-bottom: 0.25rem;
1055
- }
1056
-
1057
- html.dark .html-rendered-label { background: #1e3a5f; color: #93c5fd; }
1058
-
1059
- .html-content {
1060
- background: #ffffff;
1061
- padding: 0.5rem 0.75rem;
1062
- border-radius: 0.375rem;
1063
- overflow-x: auto;
1064
- }
1065
-
1066
- html.dark .html-content { background: #262626; }
1067
-
1068
- .html-content table { border-collapse: collapse; width: 100%; margin: 0.5rem 0; }
1069
- .html-content th, .html-content td { padding: 0.5rem 0.75rem; text-align: left; font-size: 0.875rem; }
1070
- .html-content th { background: var(--color-bg-secondary); font-weight: 600; }
1071
- .html-content ul, .html-content ol { padding-left: 1.5rem; margin: 0.5rem 0; }
1072
- .html-content li { margin: 0.25rem 0; }
1073
- .html-content h1, .html-content h2, .html-content h3, .html-content h4 { margin: 0.75rem 0 0.5rem; }
1074
- .html-content p { margin: 0.5rem 0; }
1075
-
1076
- pre { margin: 0; overflow-x: auto; }
1077
- code { font-family: 'Monaco','Menlo','Ubuntu Mono', monospace; font-size: 0.875rem; }
1078
- details { margin: 0.25rem 0; }
1079
- summary { cursor: pointer; user-select: none; padding: 0.375rem; border-radius: 0.25rem; transition: background-color 0.2s; }
1080
- summary:hover { background-color: var(--color-bg-secondary); }
1081
- .permanently-expanded > summary { cursor: default; }
1082
- .permanently-expanded > summary::before { display: none; }
1083
- .permanently-expanded > summary::-webkit-details-marker { display: none; }
1084
- .permanently-expanded > summary::marker { display: none; content: ''; }
1085
-
1086
- /* ===== Folder Browser Modal ===== */
1087
- .folder-modal-overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); z-index:2000; align-items:center; justify-content:center; }
1088
- .folder-modal-overlay.visible { display:flex; }
1089
- .folder-modal { background:var(--color-bg-primary); border-radius:0.5rem; width:500px; max-width:90vw; max-height:80vh; display:flex; flex-direction:column; box-shadow:0 20px 60px rgba(0,0,0,0.3); }
1090
- .folder-modal-header { padding:1rem; display:flex; justify-content:space-between; align-items:center; flex-shrink:0; }
1091
- .folder-modal-header h3 { margin:0; font-size:1rem; font-weight:600; }
1092
- .folder-modal-close { background:none; border:none; font-size:1.25rem; cursor:pointer; color:var(--color-text-secondary); padding:0.25rem; line-height:1; }
1093
- .folder-modal-close:hover { color:var(--color-text-primary); }
1094
- .folder-breadcrumb { padding:0.75rem 1rem; font-size:0.8rem; font-family:'Monaco','Menlo',monospace; color:var(--color-text-secondary); background:var(--color-bg-secondary); display:flex; align-items:center; gap:0.25rem; flex-shrink:0; overflow-x:auto; white-space:nowrap; }
1095
- .folder-breadcrumb-segment { cursor:pointer; color:var(--color-primary); padding:0.125rem 0.25rem; border-radius:0.25rem; }
1096
- .folder-breadcrumb-segment:hover { background:var(--color-bg-primary); text-decoration:underline; }
1097
- .folder-breadcrumb-separator { color:var(--color-text-secondary); }
1098
- .folder-list { flex:1; overflow-y:auto; min-height:200px; max-height:400px; list-style:none; margin:0; padding:0; }
1099
- .folder-list-item { padding:0.5rem 1rem; cursor:pointer; display:flex; align-items:center; gap:0.5rem; font-size:0.875rem; transition:background-color 0.15s; }
1100
- .folder-list-item:hover { background:var(--color-bg-secondary); }
1101
- .folder-list-item-icon { font-size:1rem; flex-shrink:0; width:1.25rem; text-align:center; }
1102
- .folder-list-item-name { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
1103
- .folder-list-empty { padding:2rem 1rem; text-align:center; color:var(--color-text-secondary); font-size:0.875rem; }
1104
- .folder-list-loading { padding:2rem 1rem; text-align:center; color:var(--color-text-secondary); font-size:0.875rem; }
1105
- .folder-list-error { padding:1rem; text-align:center; color:var(--color-error); font-size:0.875rem; }
1106
- .folder-modal-footer { padding:0.75rem 1rem; display:flex; justify-content:flex-end; gap:0.5rem; flex-shrink:0; }
1107
- .folder-modal-footer .btn { padding:0.5rem 1rem; font-size:0.8rem; }
1108
-
1109
- .btn { padding:0.5rem 1rem; border:none; border-radius:0.375rem; font-weight:500; cursor:pointer; transition:all 0.15s; font-size:0.875rem; }
1110
- .btn-primary { background-color:var(--color-primary); color:white; }
1111
- .btn-primary:hover:not(:disabled) { background-color:var(--color-primary-dark); }
1112
- .btn:disabled { opacity:0.5; cursor:not-allowed; }
1113
- .btn-secondary { background:var(--color-bg-secondary); color:var(--color-text-primary); border:none; }
1114
- .btn-secondary:hover { background:var(--color-border); }
1115
-
1116
- /* ===== Drop zone ===== */
1117
- .drop-zone-overlay { display:none; position:absolute; top:0; left:0; right:0; bottom:0; background:rgba(59,130,246,0.1); border:3px dashed var(--color-primary); border-radius:0.5rem; z-index:100; align-items:center; justify-content:center; }
1118
- .drop-zone-overlay.visible { display:flex; }
1119
- .drop-zone-content { text-align:center; color:var(--color-primary); pointer-events:none; }
1120
- .drop-zone-icon { font-size:3rem; font-weight:300; line-height:1; margin-bottom:0.5rem; }
1121
- .drop-zone-text { font-size:1rem; font-weight:500; }
1122
-
1123
- /* ===== Upload toast ===== */
1124
- .upload-toast { position:fixed; bottom:100px; left:50%; transform:translateX(-50%); padding:0.75rem 1.5rem; border-radius:0.5rem; font-size:0.875rem; font-weight:500; z-index:2000; box-shadow:0 4px 12px rgba(0,0,0,0.15); transition:opacity 0.3s; }
1125
- .upload-toast.success { background:var(--color-success); color:white; }
1126
- .upload-toast.error { background:var(--color-error); color:white; }
1127
- .upload-toast.info { background:var(--color-primary); color:white; }
1128
-
1129
- /* ===== File browser ===== */
1130
- .file-browser-container { flex:1; min-height:0; overflow:hidden; }
1131
- .file-browser-iframe { width:100%; height:100%; border:none; }
1132
- .voice-iframe { width:100%; height:100%; border:none; }
1133
-
1134
- /* ===== RESPONSIVE: MOBILE ===== */
1135
- @media (max-width: 768px) {
1136
- :root { --sidebar-width: 280px; }
1137
-
1138
- .sidebar {
1139
- position: fixed;
1140
- top: 0; left: 0;
1141
- height: 100%;
1142
- z-index: 1000;
1143
- transform: translateX(-100%);
1144
- box-shadow: none;
1145
- width: var(--sidebar-width);
1146
- transition: none !important;
1147
- animation: none !important;
1148
- }
1149
-
1150
- .sidebar.collapsed { transform: translateX(-100%); width: var(--sidebar-width); transition: none !important; animation: none !important; }
1151
- .sidebar.mobile-visible { transform: translateX(0); box-shadow: 4px 0 20px rgba(0,0,0,0.2); transition: none !important; animation: none !important; }
1152
-
1153
- .main-header { padding: 0 0.75rem; }
1154
- .header-title { font-size: 1rem; }
1155
-
1156
- .messages-wrapper { padding: 0.5rem 0.75rem; }
1157
-
1158
- .message { max-width: 90%; }
1159
-
1160
- .input-section {
1161
- padding: 0.5rem 0.75rem;
1162
- padding-bottom: calc(0.5rem + env(safe-area-inset-bottom));
1163
- }
1164
-
1165
- .message-textarea { font-size: 16px; }
1166
-
1167
- .conversation-item { padding: 0.875rem 0.75rem; min-height: 44px; }
1168
- .sidebar-new-btn { min-height: 44px; min-width: 44px; padding: 0.5rem 0.75rem; }
1169
-
1170
- .status-badge { padding: 0.25rem 0.5rem; font-size: 0.7rem; }
1171
-
1172
- .view-toggle-btn { flex: 1; text-align: center; }
1173
- }
1174
-
1175
- @media (max-width: 480px) {
1176
- .sidebar { width: calc(100% - 3rem); max-width: 320px; }
1177
- .message { max-width: 95%; }
1178
- .messages-wrapper { padding: 0.375rem 0.5rem; }
1179
- .input-section { padding: 0.5rem; padding-bottom: calc(0.5rem + env(safe-area-inset-bottom)); }
1180
- .sidebar-header-actions { gap: 0.25rem; }
1181
- .sidebar-clone-btn { font-size: 0.7rem; padding: 0.25rem 0.375rem; }
1182
- .conversation-item-export,
1183
- .conversation-item-archive { display: none; }
1184
- .conversation-header h2 { font-size: 1.125rem; }
1185
- .shortcuts-panel { padding: 1rem; }
1186
- }
1187
-
1188
- /* ===== SCROLLBAR STYLING ===== */
1189
- ::-webkit-scrollbar {
1190
- width: 10px;
1191
- height: 10px;
1192
- }
1193
-
1194
- ::-webkit-scrollbar-track {
1195
- background: transparent;
1196
- }
1197
-
1198
- ::-webkit-scrollbar-thumb {
1199
- background: #cbd5e1;
1200
- border-radius: 8px;
1201
- border: 3px solid transparent;
1202
- background-clip: padding-box;
1203
- transition: background-color 0.2s;
1204
- }
1205
-
1206
- ::-webkit-scrollbar-thumb:hover {
1207
- background-color: #94a3b8;
1208
- background-clip: padding-box;
1209
- }
1210
-
1211
- html.dark ::-webkit-scrollbar-thumb {
1212
- background: #475569;
1213
- background-clip: padding-box;
1214
- }
1215
-
1216
- html.dark ::-webkit-scrollbar-thumb:hover {
1217
- background-color: #64748b;
1218
- background-clip: padding-box;
1219
- }
1220
-
1221
- /* Firefox scrollbar */
1222
- * {
1223
- scrollbar-width: thin;
1224
- scrollbar-color: #cbd5e1 transparent;
1225
- }
1226
-
1227
- html.dark * {
1228
- scrollbar-color: #475569 transparent;
1229
- }
1230
-
1231
- .voice-mic-btn {
1232
- display: flex;
1233
- align-items: center;
1234
- justify-content: center;
1235
- width: 36px;
1236
- height: 36px;
1237
- background: var(--color-bg-secondary);
1238
- color: var(--color-text-secondary);
1239
- border: 2px solid var(--color-border);
1240
- border-radius: 50%;
1241
- cursor: pointer;
1242
- flex-shrink: 0;
1243
- transition: all 0.2s;
1244
- }
1245
-
1246
- .voice-mic-btn:hover {
1247
- border-color: var(--color-primary);
1248
- color: var(--color-primary);
1249
- }
1250
-
1251
- .voice-mic-btn.loading {
1252
- opacity: 0.5;
1253
- cursor: wait;
1254
- animation: mic-loading-spin 2s linear infinite;
1255
- }
1256
-
1257
- @keyframes mic-loading-spin {
1258
- 0% { border-color: var(--color-border); }
1259
- 50% { border-color: var(--color-primary); }
1260
- 100% { border-color: var(--color-border); }
1261
- }
1262
-
1263
- /* ===== TOOLS VIEW ===== */
1264
- .tools-container {
1265
- flex: 1;
1266
- min-height: 0;
1267
- overflow-y: auto;
1268
- overflow-x: hidden;
1269
- padding: 1.5rem 2rem;
1270
- -webkit-overflow-scrolling: touch;
1271
- }
1272
-
1273
- .voice-mic-btn.recording {
1274
- background: var(--color-error);
1275
- border-color: var(--color-error);
1276
- color: white;
1277
- animation: pulse 1s ease-in-out infinite;
1278
- }
1279
-
1280
- .voice-mic-btn svg {
1281
- width: 20px;
1282
- height: 20px;
1283
- }
1284
-
1285
- .conversation-messages { contain: content; }
1286
- .streaming-blocks { contain: content; }
1287
- .sidebar-list { contain: strict; content-visibility: auto; }
1288
- .message { contain: layout style; content-visibility: auto; contain-intrinsic-size: auto 80px; }
1289
-
1290
- /* PM2 Monitor Panel */
1291
- .pm2-monitor-panel {
1292
- border-top: 1px solid var(--color-border);
1293
- background: var(--color-bg-secondary);
1294
- display: flex;
1295
- flex-direction: column;
1296
- max-height: 35vh;
1297
- }
1298
- .pm2-monitor-header {
1299
- padding: 0.5rem 0.75rem;
1300
- font-size: 0.75rem;
1301
- font-weight: 600;
1302
- text-transform: uppercase;
1303
- letter-spacing: 0.05em;
1304
- color: var(--color-text-secondary);
1305
- display: flex;
1306
- justify-content: space-between;
1307
- align-items: center;
1308
- background: var(--color-bg-primary);
1309
- border-bottom: 1px solid var(--color-border);
1310
- flex-shrink: 0;
1311
- }
1312
- .pm2-monitor-actions { display: flex; gap: 0.25rem; }
1313
- .pm2-action-btn {
1314
- background: none;
1315
- border: none;
1316
- color: var(--color-text-secondary);
1317
- cursor: pointer;
1318
- padding: 0.125rem 0.375rem;
1319
- font-size: 0.875rem;
1320
- line-height: 1;
1321
- border-radius: 0.25rem;
1322
- }
1323
- .pm2-action-btn:hover { background: var(--color-bg-secondary); color: var(--color-text-primary); }
1324
- .pm2-process-list { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 0.25rem 0; }
1325
- .pm2-process-item {
1326
- padding: 0.375rem 0.75rem;
1327
- margin: 0.125rem 0.5rem;
1328
- border-radius: 0.375rem;
1329
- background: var(--color-bg-primary);
1330
- border-left: 3px solid var(--color-border);
1331
- font-size: 0.75rem;
1332
- transition: background-color 0.15s;
1333
- }
1334
- .pm2-process-item:hover { background: var(--color-bg-secondary); }
1335
- .pm2-process-item.online { border-left-color: var(--color-success); }
1336
- .pm2-process-item.launching { border-left-color: var(--color-primary); }
1337
- .pm2-process-item.stopping { border-left-color: var(--color-warning); }
1338
- .pm2-process-item.stopped { border-left-color: var(--color-text-muted, #888); opacity: 0.7; }
1339
- .pm2-process-item.errored { border-left-color: var(--color-error); }
1340
- .pm2-process-item.waiting\ restart { border-left-color: var(--color-warning); }
1341
- .pm2-status-dot {
1342
- display: inline-block;
1343
- width: 6px; height: 6px;
1344
- border-radius: 50%;
1345
- background: var(--color-text-secondary);
1346
- vertical-align: middle;
1347
- margin-left: 4px;
1348
- }
1349
- .pm2-status-online .pm2-status-dot,
1350
- .pm2-process-item.online .pm2-status-dot { background: var(--color-success); }
1351
- .pm2-status-launching .pm2-status-dot,
1352
- .pm2-process-item.launching .pm2-status-dot { background: var(--color-primary); }
1353
- .pm2-status-stopping .pm2-status-dot,
1354
- .pm2-status-errored .pm2-status-dot,
1355
- .pm2-process-item.errored .pm2-status-dot { background: var(--color-error); }
1356
- .pm2-process-name {
1357
- font-weight: 600;
1358
- margin-bottom: 0.125rem;
1359
- white-space: nowrap;
1360
- overflow: hidden;
1361
- text-overflow: ellipsis;
1362
- }
1363
- .pm2-process-meta {
1364
- display: flex;
1365
- gap: 0.5rem;
1366
- font-size: 0.7rem;
1367
- color: var(--color-text-secondary);
1368
- flex-wrap: wrap;
1369
- }
1370
- .pm2-process-meta span {
1371
- display: inline-flex;
1372
- align-items: center;
1373
- gap: 0.125rem;
1374
- }
1375
- .pm2-process-actions {
1376
- margin-top: 0.25rem;
1377
- display: flex;
1378
- gap: 0.25rem;
1379
- }
1380
- .pm2-btn {
1381
- padding: 0.125rem 0.375rem;
1382
- font-size: 0.7rem;
1383
- border-radius: 0.25rem;
1384
- border: 1px solid var(--color-border);
1385
- background: var(--color-bg-primary);
1386
- color: var(--color-text-primary);
1387
- cursor: pointer;
1388
- transition: all 0.15s;
1389
- }
1390
- .pm2-btn:hover {
1391
- background: var(--color-primary);
1392
- color: white;
1393
- border-color: var(--color-primary);
1394
- }
1395
- .pm2-btn.danger:hover {
1396
- background: var(--color-error);
1397
- border-color: var(--color-error);
1398
- }
1399
- .pm2-loading, .pm2-empty, .pm2-error {
1400
- padding: 0.75rem;
1401
- text-align: center;
1402
- color: var(--color-text-secondary);
1403
- font-size: 0.8rem;
1404
- }
1405
- @keyframes slideIn {
1406
- from { transform: translateX(100%); opacity: 0; }
1407
- to { transform: translateX(0); opacity: 1; }
1408
- }
1409
- @keyframes fadeOut {
1410
- from { opacity: 1; }
1411
- to { opacity: 0; }
1412
- }
1413
- .pm2-logs-modal {
1414
- position: fixed;
1415
- top: 0; left: 0; right: 0; bottom: 0;
1416
- background: rgba(0,0,0,0.5);
1417
- display: flex;
1418
- align-items: center;
1419
- justify-content: center;
1420
- z-index: 1000;
1421
- padding: 1rem;
1422
- }
1423
- .pm2-logs-content {
1424
- background: var(--color-bg-primary);
1425
- border-radius: 0.5rem;
1426
- width: 100%;
1427
- max-width: 800px;
1428
- max-height: 80vh;
1429
- display: flex;
1430
- flex-direction: column;
1431
- box-shadow: 0 4px 12px rgba(0,0,0,0.3);
1432
- }
1433
- .pm2-logs-header {
1434
- padding: 0.75rem 1rem;
1435
- border-bottom: 1px solid var(--color-border);
1436
- display: flex;
1437
- justify-content: space-between;
1438
- align-items: center;
1439
- font-weight: 600;
1440
- }
1441
- .pm2-logs-body {
1442
- flex: 1;
1443
- overflow-y: auto;
1444
- padding: 0.75rem 1rem;
1445
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1446
- font-size: 0.75rem;
1447
- white-space: pre-wrap;
1448
- background: var(--color-bg-code);
1449
- color: #e6edf3;
1450
- }
1451
- .pm2-logs-footer {
1452
- padding: 0.5rem 1rem;
1453
- border-top: 1px solid var(--color-border);
1454
- display: flex;
1455
- justify-content: flex-end;
1456
- gap: 0.5rem;
1457
- }
1458
-
1459
- /* ===== RESPONSIVE: TABLET ===== */
1460
- @media (min-width: 769px) and (max-width: 1024px) {
1461
- :root { --sidebar-width: 260px; }
1462
- .messages-wrapper { padding: 0.5rem 1rem; }
1463
- .input-section { padding: 0.5rem; }
1464
- }
1465
-
1466
- /* ===== SVG ICON SIZING (Tailwind utilities not loaded) ===== */
1467
- .block-text svg, .block-code svg, .block-thinking svg,
1468
- .block-tool-use svg, .block-tool-result svg, .block-image svg,
1469
- .block-bash svg, .block-system svg, .block-generic svg,
1470
- .block-error svg, .block-result svg,
1471
- .event-streaming-start svg, .event-streaming-complete svg,
1472
- .event-file-read svg, .event-file-write svg,
1473
- .event-git-status svg, .event-command svg, .event-error svg,
1474
- .event-tool-use svg, .event-generic svg {
1475
- width: 1.25rem;
1476
- height: 1.25rem;
1477
- flex-shrink: 0;
1478
- }
1479
-
1480
- .icon-sm svg { width: 1rem !important; height: 1rem !important; }
1481
- .icon-lg svg { width: 1.5rem !important; height: 1.5rem !important; }
1482
-
1483
- /* ===== STREAMING BLOCK STYLES ===== */
1484
- .block-text {
1485
- margin-bottom: 0;
1486
- padding: 0.5rem 0.75rem;
1487
- border-radius: 0.5rem;
1488
- line-height: 1.5;
1489
- font-size: 0.9rem;
1490
- }
1491
-
1492
- .block-text + .block-text {
1493
- margin-top: -0.25rem;
1494
- padding-top: 0;
1495
- border-top-left-radius: 0;
1496
- border-top-right-radius: 0;
1497
- }
1498
-
1499
- .block-text:has(+ .block-text) {
1500
- margin-bottom: 0;
1501
- border-bottom-left-radius: 0;
1502
- border-bottom-right-radius: 0;
1503
- }
1504
-
1505
- .block-code {
1506
- margin-bottom: 0;
1507
- border-radius: 0.5rem;
1508
- overflow: hidden;
1509
- }
1510
-
1511
- .block-code .code-header {
1512
- display: flex;
1513
- align-items: center;
1514
- justify-content: space-between;
1515
- gap: 0.5rem;
1516
- padding: 0.5rem 1rem;
1517
- }
1518
-
1519
- .block-code .code-header .lang-badge {
1520
- font-size: 0.7rem;
1521
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1522
- color: #9ca3af;
1523
- text-transform: uppercase;
1524
- letter-spacing: 0.05em;
1525
- }
1526
-
1527
- .block-code .copy-code-btn {
1528
- background: none;
1529
- border: none;
1530
- color: #9ca3af;
1531
- cursor: pointer;
1532
- padding: 0.25rem;
1533
- border-radius: 0.25rem;
1534
- display: flex;
1535
- align-items: center;
1536
- transition: all 0.15s;
1537
- }
1538
-
1539
- .block-code .copy-code-btn:hover { color: #e5e7eb; background: #374151; }
1540
-
1541
- .block-code pre {
1542
- margin: 0;
1543
- padding: 0.625rem 0.75rem;
1544
- background: #111827;
1545
- color: #e5e7eb;
1546
- overflow-x: auto;
1547
- font-size: 0.8rem;
1548
- line-height: 1.5;
1549
- }
1550
-
1551
- .block-thinking {
1552
- margin-bottom: 0;
1553
- border-radius: 0.5rem;
1554
- background: var(--color-thinking-bg);
1555
- overflow: hidden;
1556
- }
1557
-
1558
- html.dark .block-thinking { background: var(--color-thinking-bg); }
1559
-
1560
- .block-thinking summary {
1561
- padding: 0.375rem 0.75rem;
1562
- cursor: pointer;
1563
- display: flex;
1564
- align-items: center;
1565
- gap: 0.5rem;
1566
- font-weight: 600;
1567
- font-size: 0.85rem;
1568
- color: #5b21b6;
1569
- user-select: none;
1570
- background: none;
1571
- border-radius: 0;
1572
- }
1573
-
1574
- html.dark .block-thinking summary { color: #c4b5fd; }
1575
- .block-thinking summary:hover { }
1576
-
1577
- .block-thinking .thinking-content {
1578
- padding: 0.375rem 0.75rem 0.75rem;
1579
- font-size: 0.85rem;
1580
- color: #5b21b6;
1581
- line-height: 1.6;
1582
- }
1583
- .block-thinking .thinking-content p { margin: 0.25rem 0; }
1584
- .block-thinking .thinking-content br { display: block; margin: 0.125rem 0; }
1585
- .block-thinking .thinking-content code { background: rgba(91,33,182,0.1); padding: 0.1rem 0.3rem; border-radius: 0.2rem; font-family: 'Monaco','Menlo','Ubuntu Mono',monospace; font-size: 0.8rem; }
1586
- .block-thinking .thinking-content strong { font-weight: 700; }
1587
- .block-thinking .thinking-content em { font-style: italic; opacity: 0.85; }
1588
- .block-thinking .thinking-content h2, .block-thinking .thinking-content h3 { margin: 0.5rem 0 0.25rem; font-size: 0.9rem; font-weight: 700; }
1589
- .block-thinking .thinking-content ul, .block-thinking .thinking-content ol { margin: 0.25rem 0 0.25rem 1.25rem; padding: 0; }
1590
- .block-thinking .thinking-content li { margin: 0.125rem 0; }
1591
- .block-thinking .thinking-content blockquote { margin: 0.25rem 0 0.25rem 0; padding: 0.25rem 0.75rem; border-left: 3px solid #a78bfa; opacity: 0.85; }
1592
-
1593
- html.dark .block-thinking .thinking-content { color: #c4b5fd; }
1594
- html.dark .block-thinking .thinking-content code { background: rgba(196,181,253,0.15); }
1595
- html.dark .block-thinking .thinking-content blockquote { border-left-color: #7c3aed; }
1596
-
1597
- /* --- Tool Use Block --- */
1598
- .block-tool-use {
1599
- margin-bottom: 0;
1600
- border-radius: 0.5rem;
1601
- overflow: hidden;
1602
- }
1603
-
1604
- html.dark .block-tool-use { }
1605
-
1606
- .block-tool-use .tool-header {
1607
- padding: 0.375rem 0.75rem;
1608
- display: flex;
1609
- align-items: center;
1610
- gap: 0.375rem;
1611
- }
1612
-
1613
- html.dark .block-tool-use .tool-header { }
1614
-
1615
- .block-tool-use .tool-header .tool-icon {
1616
- display: flex;
1617
- align-items: center;
1618
- color: #0891b2;
1619
- }
1620
-
1621
- html.dark .block-tool-use .tool-header .tool-icon { color: #22d3ee; }
1622
-
1623
- .block-tool-use .tool-header .tool-name {
1624
- font-weight: 600;
1625
- font-size: 0.85rem;
1626
- color: #155e75;
1627
- }
1628
-
1629
- html.dark .block-tool-use .tool-header .tool-name { color: #67e8f9; }
1630
-
1631
- .block-tool-use .tool-header .tool-name code {
1632
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1633
- padding: 0.125rem 0.5rem;
1634
- border-radius: 0.25rem;
1635
- font-size: 0.8rem;
1636
- }
1637
-
1638
- html.dark .block-tool-use .tool-header .tool-name code { }
1639
-
1640
- .block-tool-use .tool-params {
1641
- padding: 0.5rem 0.75rem;
1642
- }
1643
-
1644
- .block-tool-use .tool-params .param-label {
1645
- font-size: 0.7rem;
1646
- text-transform: uppercase;
1647
- letter-spacing: 0.05em;
1648
- color: #0e7490;
1649
- font-weight: 600;
1650
- margin-bottom: 0.375rem;
1651
- }
1652
-
1653
- html.dark .block-tool-use .tool-params .param-label { color: #22d3ee; }
1654
-
1655
- /* Tool parameter display styles */
1656
- .tool-param-file {
1657
- display: flex;
1658
- align-items: center;
1659
- gap: 0.5rem;
1660
- padding: 0.5rem 0.75rem;
1661
- background: var(--color-bg-primary);
1662
- border-radius: 0.375rem;
1663
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1664
- font-size: 0.8rem;
1665
- color: var(--color-text-primary);
1666
- overflow-x: auto;
1667
- }
1668
-
1669
- .tool-param-file .file-icon { color: #0891b2; flex-shrink: 0; font-size: 1rem; }
1670
- .tool-param-file .file-dir { color: var(--color-text-secondary); }
1671
- .tool-param-file .file-name { font-weight: 600; color: var(--color-text-primary); }
1672
-
1673
- .tool-param-command {
1674
- background: #111827;
1675
- border-radius: 0.375rem;
1676
- padding: 0.625rem 0.875rem;
1677
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1678
- font-size: 0.8rem;
1679
- color: #e5e7eb;
1680
- overflow-x: auto;
1681
- display: flex;
1682
- align-items: flex-start;
1683
- gap: 0.5rem;
1684
- }
1685
-
1686
- .tool-param-command .prompt-char { color: #34d399; font-weight: 700; flex-shrink: 0; }
1687
- .tool-param-command .command-text { white-space: pre-wrap; word-break: break-all; }
1688
-
1689
- .tool-param-diff {
1690
- border-radius: 0.375rem;
1691
- overflow: hidden;
1692
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1693
- font-size: 0.75rem;
1694
- }
1695
-
1696
- .tool-param-diff .diff-header {
1697
- padding: 0.375rem 0.75rem;
1698
- background: var(--color-bg-secondary);
1699
- font-weight: 600;
1700
- font-size: 0.7rem;
1701
- text-transform: uppercase;
1702
- letter-spacing: 0.03em;
1703
- color: var(--color-text-secondary);
1704
- }
1705
-
1706
- .tool-param-diff .diff-old {
1707
- padding: 0.5rem 0.75rem;
1708
- background: #fef2f2;
1709
- color: #991b1b;
1710
- white-space: pre-wrap;
1711
- word-break: break-all;
1712
- max-height: 200px;
1713
- overflow-y: auto;
1714
- }
1715
-
1716
- html.dark .tool-param-diff .diff-old { background: #1c0f0f; color: #fca5a5; }
1717
-
1718
- .tool-param-diff .diff-new {
1719
- padding: 0.5rem 0.75rem;
1720
- background: #f0fdf4;
1721
- color: #166534;
1722
- white-space: pre-wrap;
1723
- word-break: break-all;
1724
- max-height: 200px;
1725
- overflow-y: auto;
1726
- }
1727
-
1728
- html.dark .tool-param-diff .diff-new { background: #0a1f0f; color: #86efac; }
1729
-
1730
- .tool-param-query {
1731
- display: flex;
1732
- align-items: center;
1733
- gap: 0.5rem;
1734
- padding: 0.5rem 0.75rem;
1735
- background: var(--color-bg-primary);
1736
- border-radius: 0.375rem;
1737
- font-size: 0.85rem;
1738
- }
1739
- .tool-param-query .query-icon { flex-shrink: 0; font-size: 1rem; }
1740
-
1741
- .tool-param-url {
1742
- display: flex;
1743
- align-items: center;
1744
- gap: 0.5rem;
1745
- padding: 0.5rem 0.75rem;
1746
- background: var(--color-bg-primary);
1747
- border-radius: 0.375rem;
1748
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1749
- font-size: 0.8rem;
1750
- color: #2563eb;
1751
- word-break: break-all;
1752
- }
1753
-
1754
- html.dark .tool-param-url { color: #60a5fa; }
1755
- .tool-param-url .url-icon { flex-shrink: 0; font-size: 1rem; }
1756
-
1757
- .tool-param-todos {
1758
- display: flex;
1759
- flex-direction: column;
1760
- gap: 0.25rem;
1761
- }
1762
-
1763
- .tool-param-todos .todo-item {
1764
- display: flex;
1765
- align-items: flex-start;
1766
- gap: 0.5rem;
1767
- padding: 0.375rem 0.5rem;
1768
- border-radius: 0.25rem;
1769
- font-size: 0.8rem;
1770
- background: var(--color-bg-primary);
1771
- }
1772
-
1773
- .tool-param-todos .todo-status {
1774
- flex-shrink: 0;
1775
- font-size: 0.85rem;
1776
- margin-top: 0.05rem;
1777
- }
1778
-
1779
- .tool-param-todos .todo-text { flex: 1; line-height: 1.4; }
1780
-
1781
- .tool-param-json {
1782
- background: var(--color-bg-primary);
1783
- border-radius: 0.375rem;
1784
- overflow: hidden;
1785
- }
1786
-
1787
- .tool-param-json pre {
1788
- margin: 0;
1789
- padding: 0.625rem 0.875rem;
1790
- font-size: 0.75rem;
1791
- overflow-x: auto;
1792
- max-height: 200px;
1793
- overflow-y: auto;
1794
- white-space: pre-wrap;
1795
- word-break: break-all;
1796
- }
1797
-
1798
- .tool-param-content-preview {
1799
- border-radius: 0.375rem;
1800
- overflow: hidden;
1801
- }
1802
-
1803
- .tool-param-content-preview .preview-header {
1804
- padding: 0.375rem 0.75rem;
1805
- background: var(--color-bg-secondary);
1806
- font-size: 0.7rem;
1807
- font-weight: 600;
1808
- text-transform: uppercase;
1809
- letter-spacing: 0.03em;
1810
- color: var(--color-text-secondary);
1811
- display: flex;
1812
- justify-content: space-between;
1813
- align-items: center;
1814
- }
1815
-
1816
- .tool-param-content-preview .preview-body {
1817
- padding: 0.5rem 0.75rem;
1818
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1819
- font-size: 0.75rem;
1820
- max-height: 200px;
1821
- overflow-y: auto;
1822
- white-space: pre-wrap;
1823
- word-break: break-all;
1824
- background: var(--color-bg-code);
1825
- color: #d1d5db;
1826
- }
1827
-
1828
- .tool-param-content-preview .preview-truncated {
1829
- padding: 0.25rem 0.75rem;
1830
- font-size: 0.7rem;
1831
- color: var(--color-text-secondary);
1832
- background: var(--color-bg-secondary);
1833
- text-align: center;
1834
- }
1835
-
1836
- /* --- Folded Tool Use (neutral base, colored by block-type-* classes) --- */
1837
- .folded-tool {
1838
- margin: 0;
1839
- border-radius: 0.375rem;
1840
- overflow: hidden;
1841
- }
1842
- html.dark .folded-tool {
1843
- }
1844
- .folded-tool-bar {
1845
- display: flex;
1846
- align-items: center;
1847
- gap: 0.375rem;
1848
- padding: 0.4rem 0.75rem;
1849
- cursor: pointer;
1850
- user-select: none;
1851
- list-style: none;
1852
- font-size: 0.85rem;
1853
- line-height: 1.3;
1854
- transition: background 0.15s;
1855
- }
1856
- html.dark .folded-tool-bar {
1857
- }
1858
- .folded-tool-bar::-webkit-details-marker { display: none; }
1859
- .folded-tool-bar::marker { display: none; content: ''; }
1860
- .folded-tool-bar::before {
1861
- content: '\25b6';
1862
- font-size: 0.5rem;
1863
- margin-right: 0.125rem;
1864
- display: inline-block;
1865
- transition: transform 0.15s;
1866
- color: #6b7280;
1867
- flex-shrink: 0;
1868
- }
1869
- html.dark .folded-tool-bar::before { color: #a3a3a3; }
1870
- .folded-tool[open] > .folded-tool-bar::before { transform: rotate(90deg); }
1871
- .folded-tool-bar:hover { background: #d1d5db; }
1872
- html.dark .folded-tool-bar:hover { background: #525252; }
1873
- .folded-tool-icon {
1874
- display: flex;
1875
- align-items: center;
1876
- color: #6b7280;
1877
- width: 1rem;
1878
- height: 1rem;
1879
- flex-shrink: 0;
1880
- }
1881
- html.dark .folded-tool-icon { color: #a3a3a3; }
1882
- .folded-tool-icon svg { width: 1rem; height: 1rem; }
1883
- .folded-tool-name {
1884
- font-weight: 600;
1885
- color: #374151;
1886
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1887
- font-size: 0.8rem;
1888
- flex-shrink: 0;
1889
- }
1890
- html.dark .folded-tool-name { color: #d4d4d4; }
1891
- .folded-tool-desc {
1892
- color: #6b7280;
1893
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1894
- font-size: 0.8rem;
1895
- overflow: hidden;
1896
- text-overflow: ellipsis;
1897
- white-space: nowrap;
1898
- flex: 1;
1899
- min-width: 0;
1900
- opacity: 0.8;
1901
- }
1902
- html.dark .folded-tool-desc { color: #a3a3a3; }
1903
- .folded-tool-body {
1904
- padding: 0.5rem 0.75rem;
1905
- font-size: 0.75rem;
1906
- border-top: 1px solid #d1d5db;
1907
- }
1908
- html.dark .folded-tool-body { border-top-color: #525252; }
1909
- .folded-tool-body .tool-input-pre {
1910
- margin: 0;
1911
- padding: 0.375rem 0.5rem;
1912
- font-size: 0.7rem;
1913
- }
1914
-
1915
- /* --- Error variant of folded-tool --- */
1916
- .folded-tool.folded-tool-error {
1917
- background: #fef2f2;
1918
- }
1919
- html.dark .folded-tool.folded-tool-error {
1920
- background: #1c0f0f;
1921
- }
1922
- .folded-tool-error > .folded-tool-bar {
1923
- background: #fee2e2;
1924
- }
1925
- html.dark .folded-tool-error > .folded-tool-bar {
1926
- background: #2c1010;
1927
- }
1928
- .folded-tool-error > .folded-tool-bar::before { color: #ef4444; }
1929
- html.dark .folded-tool-error > .folded-tool-bar::before { color: #f87171; }
1930
- .folded-tool-error > .folded-tool-bar:hover { background: #fecaca; }
1931
- html.dark .folded-tool-error > .folded-tool-bar:hover { background: #451a1a; }
1932
- .folded-tool-error .folded-tool-icon { color: #ef4444; }
1933
- html.dark .folded-tool-error .folded-tool-icon { color: #f87171; }
1934
- .folded-tool-error .folded-tool-name { color: #991b1b; }
1935
- html.dark .folded-tool-error .folded-tool-name { color: #fca5a5; }
1936
- .folded-tool-error .folded-tool-desc { color: #b91c1c; }
1937
- html.dark .folded-tool-error .folded-tool-desc { color: #f87171; }
1938
- .folded-tool-error > .folded-tool-body { border-top-color: #fecaca; }
1939
- html.dark .folded-tool-error > .folded-tool-body { border-top-color: #7f1d1d; }
1940
-
1941
- /* --- Info variant of folded-tool (system blocks) --- */
1942
- .folded-tool.folded-tool-info {
1943
- background: #eef2ff;
1944
- }
1945
- html.dark .folded-tool.folded-tool-info {
1946
- background: #15103a;
1947
- }
1948
- .folded-tool-info > .folded-tool-bar {
1949
- background: #e0e7ff;
1950
- }
1951
- html.dark .folded-tool-info > .folded-tool-bar {
1952
- background: #1e1b4b;
1953
- }
1954
- .folded-tool-info > .folded-tool-bar::before { color: #6366f1; }
1955
- html.dark .folded-tool-info > .folded-tool-bar::before { color: #a5b4fc; }
1956
- .folded-tool-info > .folded-tool-bar:hover { background: #c7d2fe; }
1957
- html.dark .folded-tool-info > .folded-tool-bar:hover { background: #312e81; }
1958
- .folded-tool-info .folded-tool-icon { color: #6366f1; }
1959
- html.dark .folded-tool-info .folded-tool-icon { color: #a5b4fc; }
1960
- .folded-tool-info .folded-tool-name { color: #3730a3; }
1961
- html.dark .folded-tool-info .folded-tool-name { color: #c7d2fe; }
1962
- .folded-tool-info .folded-tool-desc { color: #4f46e5; }
1963
- html.dark .folded-tool-info .folded-tool-desc { color: #a5b4fc; }
1964
- .folded-tool-info > .folded-tool-body { border-top-color: #c7d2fe; }
1965
- html.dark .folded-tool-info > .folded-tool-body { border-top-color: #3730a3; }
1966
-
1967
- /* --- Per-block-type unique colored backgrounds (removed) --- */
1968
-
1969
- /* --- Per-tool-name header colors (tool-color-*) --- */
1970
- .tool-color-read.folded-tool > .folded-tool-bar { }
1971
- html.dark .tool-color-read.folded-tool > .folded-tool-bar { }
1972
- .tool-color-read.folded-tool > .folded-tool-bar:hover { }
1973
- html.dark .tool-color-read.folded-tool > .folded-tool-bar:hover { }
1974
- .tool-color-read.folded-tool > .folded-tool-bar::before { color: #2563eb; }
1975
- html.dark .tool-color-read.folded-tool > .folded-tool-bar::before { color: #60a5fa; }
1976
- .tool-color-read .folded-tool-icon { color: #2563eb; }
1977
- html.dark .tool-color-read .folded-tool-icon { color: #60a5fa; }
1978
- .tool-color-read .folded-tool-name { color: #1e40af; }
1979
- html.dark .tool-color-read .folded-tool-name { color: #93bbfd; }
1980
- .tool-color-read .folded-tool-desc { color: #1d4ed8; }
1981
- html.dark .tool-color-read .folded-tool-desc { color: #60a5fa; }
1982
- .tool-color-read > .folded-tool-body { border-top-color: #bfdbfe; }
1983
- html.dark .tool-color-read > .folded-tool-body { border-top-color: #1e3a5f; }
1984
-
1985
- .tool-color-write.folded-tool > .folded-tool-bar { }
1986
- html.dark .tool-color-write.folded-tool > .folded-tool-bar { }
1987
- .tool-color-write.folded-tool > .folded-tool-bar:hover { }
1988
- html.dark .tool-color-write.folded-tool > .folded-tool-bar:hover { }
1989
- .tool-color-write.folded-tool > .folded-tool-bar::before { color: #d97706; }
1990
- html.dark .tool-color-write.folded-tool > .folded-tool-bar::before { color: #fbbf24; }
1991
- .tool-color-write .folded-tool-icon { color: #d97706; }
1992
- html.dark .tool-color-write .folded-tool-icon { color: #fbbf24; }
1993
- .tool-color-write .folded-tool-name { color: #92400e; }
1994
- html.dark .tool-color-write .folded-tool-name { color: #fcd34d; }
1995
- .tool-color-write .folded-tool-desc { color: #b45309; }
1996
- html.dark .tool-color-write .folded-tool-desc { color: #fbbf24; }
1997
- .tool-color-write > .folded-tool-body { border-top-color: #fde68a; }
1998
- html.dark .tool-color-write > .folded-tool-body { border-top-color: #422006; }
1999
-
2000
- .tool-color-edit.folded-tool > .folded-tool-bar { }
2001
- html.dark .tool-color-edit.folded-tool > .folded-tool-bar { }
2002
- .tool-color-edit.folded-tool > .folded-tool-bar:hover { }
2003
- html.dark .tool-color-edit.folded-tool > .folded-tool-bar:hover { }
2004
- .tool-color-edit.folded-tool > .folded-tool-bar::before { color: #7c3aed; }
2005
- html.dark .tool-color-edit.folded-tool > .folded-tool-bar::before { color: #a78bfa; }
2006
- .tool-color-edit .folded-tool-icon { color: #7c3aed; }
2007
- html.dark .tool-color-edit .folded-tool-icon { color: #a78bfa; }
2008
- .tool-color-edit .folded-tool-name { color: #5b21b6; }
2009
- html.dark .tool-color-edit .folded-tool-name { color: #c4b5fd; }
2010
- .tool-color-edit .folded-tool-desc { color: #6d28d9; }
2011
- html.dark .tool-color-edit .folded-tool-desc { color: #a78bfa; }
2012
- .tool-color-edit > .folded-tool-body { border-top-color: #ddd6fe; }
2013
- html.dark .tool-color-edit > .folded-tool-body { border-top-color: #2e1065; }
2014
-
2015
- .tool-color-bash.folded-tool > .folded-tool-bar { }
2016
- html.dark .tool-color-bash.folded-tool > .folded-tool-bar { }
2017
- .tool-color-bash.folded-tool > .folded-tool-bar:hover { }
2018
- html.dark .tool-color-bash.folded-tool > .folded-tool-bar:hover { }
2019
- .tool-color-bash.folded-tool > .folded-tool-bar::before { color: #475569; }
2020
- html.dark .tool-color-bash.folded-tool > .folded-tool-bar::before { color: #94a3b8; }
2021
- .tool-color-bash .folded-tool-icon { color: #475569; }
2022
- html.dark .tool-color-bash .folded-tool-icon { color: #94a3b8; }
2023
- .tool-color-bash .folded-tool-name { color: #334155; }
2024
- html.dark .tool-color-bash .folded-tool-name { color: #cbd5e1; }
2025
- .tool-color-bash .folded-tool-desc { color: #475569; }
2026
- html.dark .tool-color-bash .folded-tool-desc { color: #94a3b8; }
2027
- .tool-color-bash > .folded-tool-body { border-top-color: #cbd5e1; }
2028
- html.dark .tool-color-bash > .folded-tool-body { border-top-color: #334155; }
2029
-
2030
- .tool-color-glob.folded-tool > .folded-tool-bar { }
2031
- html.dark .tool-color-glob.folded-tool > .folded-tool-bar { }
2032
- .tool-color-glob.folded-tool > .folded-tool-bar:hover { }
2033
- html.dark .tool-color-glob.folded-tool > .folded-tool-bar:hover { }
2034
- .tool-color-glob.folded-tool > .folded-tool-bar::before { color: #059669; }
2035
- html.dark .tool-color-glob.folded-tool > .folded-tool-bar::before { color: #34d399; }
2036
- .tool-color-glob .folded-tool-icon { color: #059669; }
2037
- html.dark .tool-color-glob .folded-tool-icon { color: #34d399; }
2038
- .tool-color-glob .folded-tool-name { color: #065f46; }
2039
- html.dark .tool-color-glob .folded-tool-name { color: #6ee7b7; }
2040
- .tool-color-glob .folded-tool-desc { color: #047857; }
2041
- html.dark .tool-color-glob .folded-tool-desc { color: #34d399; }
2042
- .tool-color-glob > .folded-tool-body { border-top-color: #a7f3d0; }
2043
- html.dark .tool-color-glob > .folded-tool-body { border-top-color: #064e3b; }
2044
-
2045
- .tool-color-grep.folded-tool > .folded-tool-bar { }
2046
- html.dark .tool-color-grep.folded-tool > .folded-tool-bar { }
2047
- .tool-color-grep.folded-tool > .folded-tool-bar:hover { }
2048
- html.dark .tool-color-grep.folded-tool > .folded-tool-bar:hover { }
2049
- .tool-color-grep.folded-tool > .folded-tool-bar::before { color: #e11d48; }
2050
- html.dark .tool-color-grep.folded-tool > .folded-tool-bar::before { color: #fb7185; }
2051
- .tool-color-grep .folded-tool-icon { color: #e11d48; }
2052
- html.dark .tool-color-grep .folded-tool-icon { color: #fb7185; }
2053
- .tool-color-grep .folded-tool-name { color: #9f1239; }
2054
- html.dark .tool-color-grep .folded-tool-name { color: #fda4af; }
2055
- .tool-color-grep .folded-tool-desc { color: #be123c; }
2056
- html.dark .tool-color-grep .folded-tool-desc { color: #fb7185; }
2057
- .tool-color-grep > .folded-tool-body { border-top-color: #fecdd3; }
2058
- html.dark .tool-color-grep > .folded-tool-body { border-top-color: #4c0519; }
2059
-
2060
- .tool-color-web.folded-tool > .folded-tool-bar { }
2061
- html.dark .tool-color-web.folded-tool > .folded-tool-bar { }
2062
- .tool-color-web.folded-tool > .folded-tool-bar:hover { }
2063
- html.dark .tool-color-web.folded-tool > .folded-tool-bar:hover { }
2064
- .tool-color-web.folded-tool > .folded-tool-bar::before { color: #0284c7; }
2065
- html.dark .tool-color-web.folded-tool > .folded-tool-bar::before { color: #38bdf8; }
2066
- .tool-color-web .folded-tool-icon { color: #0284c7; }
2067
- html.dark .tool-color-web .folded-tool-icon { color: #38bdf8; }
2068
- .tool-color-web .folded-tool-name { color: #075985; }
2069
- html.dark .tool-color-web .folded-tool-name { color: #7dd3fc; }
2070
- .tool-color-web .folded-tool-desc { color: #0369a1; }
2071
- html.dark .tool-color-web .folded-tool-desc { color: #38bdf8; }
2072
- .tool-color-web > .folded-tool-body { border-top-color: #bae6fd; }
2073
- html.dark .tool-color-web > .folded-tool-body { border-top-color: #0c4a6e; }
2074
-
2075
- .tool-color-todo.folded-tool > .folded-tool-bar { }
2076
- html.dark .tool-color-todo.folded-tool > .folded-tool-bar { }
2077
- .tool-color-todo.folded-tool > .folded-tool-bar:hover { }
2078
- html.dark .tool-color-todo.folded-tool > .folded-tool-bar:hover { }
2079
- .tool-color-todo.folded-tool > .folded-tool-bar::before { color: #ea580c; }
2080
- html.dark .tool-color-todo.folded-tool > .folded-tool-bar::before { color: #fb923c; }
2081
- .tool-color-todo .folded-tool-icon { color: #ea580c; }
2082
- html.dark .tool-color-todo .folded-tool-icon { color: #fb923c; }
2083
- .tool-color-todo .folded-tool-name { color: #9a3412; }
2084
- html.dark .tool-color-todo .folded-tool-name { color: #fdba74; }
2085
- .tool-color-todo .folded-tool-desc { color: #c2410c; }
2086
- html.dark .tool-color-todo .folded-tool-desc { color: #fb923c; }
2087
- .tool-color-todo > .folded-tool-body { border-top-color: #fed7aa; }
2088
- html.dark .tool-color-todo > .folded-tool-body { border-top-color: #431407; }
2089
-
2090
- .tool-color-task.folded-tool > .folded-tool-bar { }
2091
- html.dark .tool-color-task.folded-tool > .folded-tool-bar { }
2092
- .tool-color-task.folded-tool > .folded-tool-bar:hover { }
2093
- html.dark .tool-color-task.folded-tool > .folded-tool-bar:hover { }
2094
- .tool-color-task.folded-tool > .folded-tool-bar::before { color: #4f46e5; }
2095
- html.dark .tool-color-task.folded-tool > .folded-tool-bar::before { color: #818cf8; }
2096
- .tool-color-task .folded-tool-icon { color: #4f46e5; }
2097
- html.dark .tool-color-task .folded-tool-icon { color: #818cf8; }
2098
- .tool-color-task .folded-tool-name { color: #3730a3; }
2099
- html.dark .tool-color-task .folded-tool-name { color: #a5b4fc; }
2100
- .tool-color-task .folded-tool-desc { color: #4338ca; }
2101
- html.dark .tool-color-task .folded-tool-desc { color: #818cf8; }
2102
- .tool-color-task > .folded-tool-body { border-top-color: #c7d2fe; }
2103
- html.dark .tool-color-task > .folded-tool-body { border-top-color: #1e1b4b; }
2104
-
2105
- .tool-color-default.folded-tool > .folded-tool-bar { }
2106
- html.dark .tool-color-default.folded-tool > .folded-tool-bar { }
2107
- .tool-color-default.folded-tool > .folded-tool-bar:hover { }
2108
- html.dark .tool-color-default.folded-tool > .folded-tool-bar:hover { }
2109
- .tool-color-default.folded-tool > .folded-tool-bar::before { color: #0891b2; }
2110
- html.dark .tool-color-default.folded-tool > .folded-tool-bar::before { color: #22d3ee; }
2111
- .tool-color-default .folded-tool-icon { color: #0891b2; }
2112
- html.dark .tool-color-default .folded-tool-icon { color: #22d3ee; }
2113
- .tool-color-default .folded-tool-name { color: #155e75; }
2114
- html.dark .tool-color-default .folded-tool-name { color: #67e8f9; }
2115
- .tool-color-default .folded-tool-desc { color: #0e7490; }
2116
- html.dark .tool-color-default .folded-tool-desc { color: #22d3ee; }
2117
- .tool-color-default > .folded-tool-body { border-top-color: #a5f3fc; }
2118
- html.dark .tool-color-default > .folded-tool-body { border-top-color: #164e63; }
2119
-
2120
- /* Execute - Purple */
2121
- .tool-color-execute.folded-tool > .folded-tool-bar { }
2122
- html.dark .tool-color-execute.folded-tool > .folded-tool-bar { }
2123
- .tool-color-execute.folded-tool > .folded-tool-bar:hover { }
2124
- html.dark .tool-color-execute.folded-tool > .folded-tool-bar:hover { }
2125
- .tool-color-execute.folded-tool > .folded-tool-bar::before { color: #a855f7; }
2126
- html.dark .tool-color-execute.folded-tool > .folded-tool-bar::before { color: #d8b4fe; }
2127
- .tool-color-execute .folded-tool-icon { color: #a855f7; }
2128
- html.dark .tool-color-execute .folded-tool-icon { color: #d8b4fe; }
2129
- .tool-color-execute .folded-tool-name { color: #6b21a8; }
2130
- html.dark .tool-color-execute .folded-tool-name { color: #e879f9; }
2131
- .tool-color-execute .folded-tool-desc { color: #7e22ce; }
2132
- html.dark .tool-color-execute .folded-tool-desc { color: #d8b4fe; }
2133
- .tool-color-execute > .folded-tool-body { border-top-color: #e9d5ff; }
2134
- html.dark .tool-color-execute > .folded-tool-body { border-top-color: #4c1d95; }
2135
-
2136
- /* Sleep - Orange */
2137
- .tool-color-sleep.folded-tool > .folded-tool-bar { }
2138
- html.dark .tool-color-sleep.folded-tool > .folded-tool-bar { }
2139
- .tool-color-sleep.folded-tool > .folded-tool-bar:hover { }
2140
- html.dark .tool-color-sleep.folded-tool > .folded-tool-bar:hover { }
2141
- .tool-color-sleep.folded-tool > .folded-tool-bar::before { color: #f97316; }
2142
- html.dark .tool-color-sleep.folded-tool > .folded-tool-bar::before { color: #fb923c; }
2143
- .tool-color-sleep .folded-tool-icon { color: #f97316; }
2144
- html.dark .tool-color-sleep .folded-tool-icon { color: #fb923c; }
2145
- .tool-color-sleep .folded-tool-name { color: #7c2d12; }
2146
- html.dark .tool-color-sleep .folded-tool-name { color: #fed7aa; }
2147
- .tool-color-sleep .folded-tool-desc { color: #b45309; }
2148
- html.dark .tool-color-sleep .folded-tool-desc { color: #fb923c; }
2149
- .tool-color-sleep > .folded-tool-body { border-top-color: #fdba74; }
2150
- html.dark .tool-color-sleep > .folded-tool-body { border-top-color: #7c2d12; }
2151
-
2152
- /* Search - Green */
2153
- .tool-color-search.folded-tool > .folded-tool-bar { }
2154
- html.dark .tool-color-search.folded-tool > .folded-tool-bar { }
2155
- .tool-color-search.folded-tool > .folded-tool-bar:hover { }
2156
- html.dark .tool-color-search.folded-tool > .folded-tool-bar:hover { }
2157
- .tool-color-search.folded-tool > .folded-tool-bar::before { color: #16a34a; }
2158
- html.dark .tool-color-search.folded-tool > .folded-tool-bar::before { color: #86efac; }
2159
- .tool-color-search .folded-tool-icon { color: #16a34a; }
2160
- html.dark .tool-color-search .folded-tool-icon { color: #86efac; }
2161
- .tool-color-search .folded-tool-name { color: #15803d; }
2162
- html.dark .tool-color-search .folded-tool-name { color: #bbf7d0; }
2163
- .tool-color-search .folded-tool-desc { color: #166534; }
2164
- html.dark .tool-color-search .folded-tool-desc { color: #86efac; }
2165
- .tool-color-search > .folded-tool-body { border-top-color: #bbf7d0; }
2166
- html.dark .tool-color-search > .folded-tool-body { border-top-color: #16a34a; }
2167
-
2168
- /* Skill - Yellow/Amber */
2169
- .tool-color-skill.folded-tool > .folded-tool-bar { }
2170
- html.dark .tool-color-skill.folded-tool > .folded-tool-bar { }
2171
- .tool-color-skill.folded-tool > .folded-tool-bar:hover { }
2172
- html.dark .tool-color-skill.folded-tool > .folded-tool-bar:hover { }
2173
- .tool-color-skill.folded-tool > .folded-tool-bar::before { color: #d97706; }
2174
- html.dark .tool-color-skill.folded-tool > .folded-tool-bar::before { color: #fbbf24; }
2175
- .tool-color-skill .folded-tool-icon { color: #d97706; }
2176
- html.dark .tool-color-skill .folded-tool-icon { color: #fbbf24; }
2177
- .tool-color-skill .folded-tool-name { color: #92400e; }
2178
- html.dark .tool-color-skill .folded-tool-name { color: #fcd34d; }
2179
- .tool-color-skill .folded-tool-desc { color: #b45309; }
2180
- html.dark .tool-color-skill .folded-tool-desc { color: #fbbf24; }
2181
- .tool-color-skill > .folded-tool-body { border-top-color: #fde68a; }
2182
- html.dark .tool-color-skill > .folded-tool-body { border-top-color: #78350f; }
2183
-
2184
- .block-type-tool_result .tool-result-status { }
2185
- html.dark .block-type-tool_result .tool-result-status { }
2186
- .block-type-tool_result .folded-tool-icon { color: #16a34a; }
2187
- html.dark .block-type-tool_result .folded-tool-icon { color: #4ade80; }
2188
- .block-type-tool_result .folded-tool-name { color: #374151; }
2189
- html.dark .block-type-tool_result .folded-tool-name { color: #d4d4d4; }
2190
- .block-type-tool_result > .folded-tool-body { border-top-color: #d1d5db; }
2191
- html.dark .block-type-tool_result > .folded-tool-body { border-top-color: #525252; }
2192
- .block-type-tool_result.tool-result-error { }
2193
- html.dark .block-type-tool_result.tool-result-error { }
2194
- .block-type-tool_result.tool-result-error .tool-result-status { }
2195
- html.dark .block-type-tool_result.tool-result-error .tool-result-status { }
2196
- .block-type-tool_result.tool-result-error .folded-tool-icon { color: #dc2626; }
2197
- html.dark .block-type-tool_result.tool-result-error .folded-tool-icon { color: #f87171; }
2198
- .block-type-tool_result.tool-result-error .folded-tool-name { color: #374151; }
2199
- html.dark .block-type-tool_result.tool-result-error .folded-tool-name { color: #d4d4d4; }
2200
-
2201
-
2202
-
2203
-
2204
- .block-type-system { }
2205
- html.dark .block-type-system { }
2206
- .block-type-system.folded-tool > .folded-tool-bar { }
2207
- html.dark .block-type-system.folded-tool > .folded-tool-bar { }
2208
- .block-type-system.folded-tool > .folded-tool-bar:hover { }
2209
- html.dark .block-type-system.folded-tool > .folded-tool-bar:hover { }
2210
- .block-type-system.folded-tool > .folded-tool-bar::before { color: #6366f1; }
2211
- html.dark .block-type-system.folded-tool > .folded-tool-bar::before { color: #a5b4fc; }
2212
- .block-type-system .folded-tool-icon { color: #6366f1; }
2213
- html.dark .block-type-system .folded-tool-icon { color: #a5b4fc; }
2214
- .block-type-system .folded-tool-name { color: #3730a3; }
2215
- html.dark .block-type-system .folded-tool-name { color: #c7d2fe; }
2216
- .block-type-system .folded-tool-desc { color: #4f46e5; }
2217
- html.dark .block-type-system .folded-tool-desc { color: #a5b4fc; }
2218
- .block-type-system > .folded-tool-body { border-top-color: #c7d2fe; }
2219
- html.dark .block-type-system > .folded-tool-body { border-top-color: #3730a3; }
2220
-
2221
- .block-type-result { }
2222
- html.dark .block-type-result { }
2223
- .block-type-result.folded-tool > .folded-tool-bar { }
2224
- html.dark .block-type-result.folded-tool > .folded-tool-bar { }
2225
- .block-type-result.folded-tool > .folded-tool-bar:hover { }
2226
- html.dark .block-type-result.folded-tool > .folded-tool-bar:hover { }
2227
- .block-type-result.folded-tool > .folded-tool-bar::before { color: #16a34a; }
2228
- html.dark .block-type-result.folded-tool > .folded-tool-bar::before { color: #4ade80; }
2229
- .block-type-result .folded-tool-icon { color: #16a34a; }
2230
- html.dark .block-type-result .folded-tool-icon { color: #4ade80; }
2231
- .block-type-result .folded-tool-name { color: #166534; }
2232
- html.dark .block-type-result .folded-tool-name { color: #86efac; }
2233
- .block-type-result .folded-tool-desc { color: #15803d; }
2234
- html.dark .block-type-result .folded-tool-desc { color: #4ade80; }
2235
- .block-type-result > .folded-tool-body { border-top-color: #bbf7d0; }
2236
- html.dark .block-type-result > .folded-tool-body { border-top-color: #166534; }
2237
-
2238
- .block-type-error { }
2239
- html.dark .block-type-error { }
2240
- .block-type-error.folded-tool > .folded-tool-bar { }
2241
- html.dark .block-type-error.folded-tool > .folded-tool-bar { }
2242
- .block-type-error.folded-tool > .folded-tool-bar:hover { }
2243
- html.dark .block-type-error.folded-tool > .folded-tool-bar:hover { }
2244
- .block-type-error.folded-tool > .folded-tool-bar::before { color: #ef4444; }
2245
- html.dark .block-type-error.folded-tool > .folded-tool-bar::before { color: #f87171; }
2246
- .block-type-error .folded-tool-icon { color: #ef4444; }
2247
- html.dark .block-type-error .folded-tool-icon { color: #f87171; }
2248
- .block-type-error .folded-tool-name { color: #991b1b; }
2249
- html.dark .block-type-error .folded-tool-name { color: #fca5a5; }
2250
- .block-type-error .folded-tool-desc { color: #b91c1c; }
2251
- html.dark .block-type-error .folded-tool-desc { color: #f87171; }
2252
- .block-type-error > .folded-tool-body { border-top-color: #fecaca; }
2253
- html.dark .block-type-error > .folded-tool-body { border-top-color: #7f1d1d; }
2254
-
2255
-
2256
-
2257
-
2258
-
2259
-
2260
-
2261
- /* --- Code block header (non-collapsible) --- */
2262
- .code-block-header {
2263
- display: flex;
2264
- align-items: center;
2265
- gap: 0.5rem;
2266
- padding: 0.3rem 0.75rem;
2267
- background: #1f2937;
2268
- color: #9ca3af;
2269
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2270
- font-size: 0.75rem;
2271
- }
2272
- .code-block-header .copy-code-btn {
2273
- margin-left: auto;
2274
- background: none;
2275
- border: none;
2276
- color: #6b7280;
2277
- cursor: pointer;
2278
- padding: 0.125rem;
2279
- border-radius: 0.25rem;
2280
- display: flex;
2281
- align-items: center;
2282
- transition: all 0.15s;
2283
- }
2284
- .code-block-header .copy-code-btn:hover { color: #e5e7eb; background: #4b5563; }
2285
- .code-block-header .copy-code-btn svg { width: 0.875rem; height: 0.875rem; }
2286
-
2287
- /* --- Tool result success styling in body --- */
2288
- .tool-result-success .tool-result-status {
2289
- background: #e5e7eb;
2290
- padding: 0.4rem 0.75rem;
2291
- }
2292
- html.dark .tool-result-success .tool-result-status {
2293
- background: #404040;
2294
- }
2295
- .tool-result-success .folded-tool-icon { color: #16a34a; }
2296
- html.dark .tool-result-success .folded-tool-icon { color: #4ade80; }
2297
- .tool-result-success .folded-tool-name { color: #374151; font-weight: 600; }
2298
- html.dark .tool-result-success .folded-tool-name { color: #d4d4d4; }
2299
-
2300
- /* --- Tool_use parent: has-success / has-error indicators (icon/arrow only, preserves tool colors) --- */
2301
- .folded-tool.has-success > .folded-tool-bar::before { color: #16a34a; }
2302
- html.dark .folded-tool.has-success > .folded-tool-bar::before { color: #4ade80; }
2303
-
2304
- .folded-tool.has-error > .folded-tool-bar::before { color: #ef4444; }
2305
- html.dark .folded-tool.has-error > .folded-tool-bar::before { color: #f87171; }
2306
-
2307
- /* --- Success/Error status icons in header --- */
2308
- .folded-tool.has-success > .folded-tool-bar .folded-tool-icon::after,
2309
- .folded-tool.has-error > .folded-tool-bar .folded-tool-icon::after {
2310
- content: '';
2311
- display: inline-block;
2312
- width: 1rem;
2313
- height: 1rem;
2314
- margin-left: 0.375rem;
2315
- background-size: contain;
2316
- background-repeat: no-repeat;
2317
- flex-shrink: 0;
2318
- }
2319
- .folded-tool.has-success > .folded-tool-bar .folded-tool-icon::after {
2320
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 20 20' fill='%2316a34a'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z' clip-rule='evenodd'/%3E%3C/svg%3E");
2321
- }
2322
- html.dark .folded-tool.has-success > .folded-tool-bar .folded-tool-icon::after {
2323
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 20 20' fill='%234ade80'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z' clip-rule='evenodd'/%3E%3C/svg%3E");
2324
- }
2325
- .folded-tool.has-error > .folded-tool-bar .folded-tool-icon::after {
2326
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 20 20' fill='%23ef4444'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z' clip-rule='evenodd'/%3E%3C/svg%3E");
2327
- }
2328
- html.dark .folded-tool.has-error > .folded-tool-bar .folded-tool-icon::after {
2329
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 20 20' fill='%23f87171'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z' clip-rule='evenodd'/%3E%3C/svg%3E");
2330
- }
2331
- .folded-tool-icon {
2332
- display: inline-flex;
2333
- align-items: center;
2334
- }
2335
-
2336
- /* --- Consecutive block joining --- */
2337
- .folded-tool + .folded-tool,
2338
- .block-tool-use + .block-tool-use {
2339
- margin-top: -1px;
2340
- border-radius: 0;
2341
- }
2342
- .folded-tool + .folded-tool > .folded-tool-bar,
2343
- .block-tool-use + .block-tool-use > .folded-tool-bar {
2344
- border-top: 1px solid rgba(0,0,0,0.06);
2345
- }
2346
- html.dark .folded-tool + .folded-tool > .folded-tool-bar,
2347
- html.dark .block-tool-use + .block-tool-use > .folded-tool-bar {
2348
- border-top: 1px solid rgba(255,255,255,0.06);
2349
- }
2350
- .folded-tool:first-child,
2351
- .block-tool-use:first-child {
2352
- border-radius: 0.375rem 0.375rem 0 0;
2353
- }
2354
- .folded-tool:last-child,
2355
- .block-tool-use:last-child {
2356
- border-radius: 0 0 0.375rem 0.375rem;
2357
- }
2358
- .folded-tool:only-child,
2359
- .block-tool-use:only-child {
2360
- border-radius: 0.375rem;
2361
- }
2362
-
2363
- /* --- Inline Tool Result (nested inside tool_use) --- */
2364
- /* Tool Result Blocks - Folded by default with status icons */
2365
- .folded-tool.block-type-tool_result {
2366
- margin-bottom: 0.375rem;
2367
- }
2368
- .folded-tool.folded-tool-success {
2369
- background: #f0fdf4;
2370
- }
2371
- html.dark .folded-tool.folded-tool-success {
2372
- background: #0a1f0f;
2373
- }
2374
- .folded-tool.folded-tool-success > .folded-tool-bar {
2375
- background: #dcfce7;
2376
- }
2377
- html.dark .folded-tool.folded-tool-success > .folded-tool-bar {
2378
- background: #0f2b1a;
2379
- }
2380
- .folded-tool.folded-tool-success > .folded-tool-bar::before {
2381
- color: #16a34a;
2382
- }
2383
- html.dark .folded-tool.folded-tool-success > .folded-tool-bar::before {
2384
- color: #4ade80;
2385
- }
2386
-
2387
- /* --- Tool Result Inlined into Tool Use --- */
2388
- .folded-tool-status {
2389
- display: flex;
2390
- align-items: center;
2391
- flex-shrink: 0;
2392
- margin-left: auto;
2393
- width: 1rem;
2394
- height: 1rem;
2395
- }
2396
- .folded-tool-status svg { width: 1rem; height: 1rem; }
2397
- .block-tool-use.tool-result-success .folded-tool-status { color: #16a34a; }
2398
- html.dark .block-tool-use.tool-result-success .folded-tool-status { color: #4ade80; }
2399
- .block-tool-use.tool-result-error .folded-tool-status { color: #ef4444; }
2400
- html.dark .block-tool-use.tool-result-error .folded-tool-status { color: #f87171; }
2401
- .folded-tool-result-content {
2402
- border-top: 1px solid #e5e7eb;
2403
- padding-top: 0.5rem;
2404
- margin-top: 0.5rem;
2405
- }
2406
- html.dark .folded-tool-result-content { border-top-color: #374151; }
2407
-
2408
- /* --- Consecutive Block Joining --- */
2409
- .streaming-blocks > * + *,
2410
- .message-blocks > * + * {
2411
- margin-top: 0;
2412
- }
2413
- .streaming-blocks > *,
2414
- .message-blocks > * {
2415
- border-radius: 0;
2416
- }
2417
- .streaming-blocks > *:first-child,
2418
- .message-blocks > *:first-child {
2419
- border-top-left-radius: 0.375rem;
2420
- border-top-right-radius: 0.375rem;
2421
- }
2422
- .streaming-blocks > *:last-child,
2423
- .message-blocks > *:last-child {
2424
- border-bottom-left-radius: 0.375rem;
2425
- border-bottom-right-radius: 0.375rem;
2426
- }
2427
- .streaming-blocks > *:only-child,
2428
- .message-blocks > *:only-child {
2429
- border-radius: 0.375rem;
2430
- }
2431
-
2432
- /* --- Collapsible Code Summary --- */
2433
- .collapsible-code {
2434
- margin: 0;
2435
- border-radius: 0.375rem;
2436
- overflow: hidden;
2437
- background: #1e293b;
2438
- }
2439
- .collapsible-code-summary {
2440
- display: flex;
2441
- align-items: center;
2442
- gap: 0.5rem;
2443
- padding: 0.3rem 0.75rem;
2444
- cursor: pointer;
2445
- user-select: none;
2446
- list-style: none;
2447
- font-size: 0.75rem;
2448
- line-height: 1.3;
2449
- background: #1f2937;
2450
- color: #9ca3af;
2451
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2452
- transition: background 0.15s;
2453
- }
2454
- .collapsible-code-summary::-webkit-details-marker { display: none; }
2455
- .collapsible-code-summary::marker { display: none; content: ''; }
2456
- .collapsible-code-summary::before {
2457
- content: '\25b6';
2458
- font-size: 0.5rem;
2459
- margin-right: 0.125rem;
2460
- display: inline-block;
2461
- transition: transform 0.15s;
2462
- color: #6b7280;
2463
- flex-shrink: 0;
2464
- }
2465
- .collapsible-code[open] > .collapsible-code-summary::before { transform: rotate(90deg); }
2466
- .collapsible-code-summary:hover { background: #374151; }
2467
- .collapsible-code-summary .copy-code-btn {
2468
- margin-left: auto;
2469
- background: none;
2470
- border: none;
2471
- color: #6b7280;
2472
- cursor: pointer;
2473
- padding: 0.125rem;
2474
- border-radius: 0.25rem;
2475
- display: flex;
2476
- align-items: center;
2477
- transition: all 0.15s;
2478
- }
2479
- .collapsible-code-summary .copy-code-btn:hover { color: #e5e7eb; background: #4b5563; }
2480
- .collapsible-code-summary .copy-code-btn svg { width: 0.875rem; height: 0.875rem; }
2481
- .collapsible-code-label {
2482
- font-size: 0.7rem;
2483
- text-transform: uppercase;
2484
- letter-spacing: 0.05em;
2485
- }
2486
-
2487
- /* --- Tool Result Block --- */
2488
- .block-tool-result {
2489
- margin-bottom: 0;
2490
- border-radius: 0.5rem;
2491
- overflow: hidden;
2492
- }
2493
-
2494
- .block-tool-result.result-success { }
2495
- .block-tool-result.result-error { }
2496
- html.dark .block-tool-result.result-success { }
2497
- html.dark .block-tool-result.result-error { }
2498
-
2499
- .block-tool-result .result-header {
2500
- padding: 0.3rem 0.75rem;
2501
- display: flex;
2502
- align-items: center;
2503
- justify-content: space-between;
2504
- }
2505
-
2506
- .block-tool-result.result-success .result-header { }
2507
- .block-tool-result.result-error .result-header { }
2508
- html.dark .block-tool-result.result-success .result-header { }
2509
- html.dark .block-tool-result.result-error .result-header { }
2510
-
2511
- .block-tool-result .result-header .status-label {
2512
- display: flex;
2513
- align-items: center;
2514
- gap: 0.375rem;
2515
- font-weight: 600;
2516
- font-size: 0.8rem;
2517
- }
2518
-
2519
- .block-tool-result.result-success .status-label { color: #166534; }
2520
- .block-tool-result.result-error .status-label { color: #991b1b; }
2521
- html.dark .block-tool-result.result-success .status-label { color: #86efac; }
2522
- html.dark .block-tool-result.result-error .status-label { color: #fca5a5; }
2523
-
2524
- .block-tool-result .result-body {
2525
- padding: 0.375rem 0.75rem;
2526
- font-size: 0.8rem;
2527
- white-space: pre-wrap;
2528
- word-break: break-all;
2529
- overflow-x: auto;
2530
- max-height: 400px;
2531
- overflow-y: auto;
2532
- line-height: 1.5;
2533
- }
2534
-
2535
- .block-tool-result.result-success .result-body { color: #14532d; }
2536
- .block-tool-result.result-error .result-body { color: #7f1d1d; }
2537
- html.dark .block-tool-result.result-success .result-body { color: #bbf7d0; }
2538
- html.dark .block-tool-result.result-error .result-body { color: #fecaca; }
2539
-
2540
- .block-tool-result .result-body.collapsed { max-height: 150px; position: relative; }
2541
- .block-tool-result .result-body.collapsed::after {
2542
- content: '';
2543
- position: absolute;
2544
- bottom: 0;
2545
- left: 0;
2546
- right: 0;
2547
- height: 3rem;
2548
- background: linear-gradient(transparent, var(--color-bg-primary));
2549
- pointer-events: none;
2550
- }
2551
-
2552
- .block-tool-result .expand-btn {
2553
- display: block;
2554
- width: 100%;
2555
- padding: 0.375rem;
2556
- background: var(--color-bg-secondary);
2557
- border: none;
2558
- cursor: pointer;
2559
- font-size: 0.75rem;
2560
- color: var(--color-primary);
2561
- font-weight: 500;
2562
- text-align: center;
2563
- }
2564
-
2565
- .block-tool-result .expand-btn:hover { background: var(--color-border); }
2566
-
2567
- .block-tool-result .result-id {
2568
- font-size: 0.65rem;
2569
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2570
- opacity: 0.6;
2571
- }
2572
-
2573
- /* --- Result Summary Block --- */
2574
- .block-result {
2575
- margin-bottom: 0;
2576
- border-radius: 0.5rem;
2577
- overflow: hidden;
2578
- }
2579
-
2580
- .block-result.result-ok {
2581
- }
2582
-
2583
- .block-result.result-err {
2584
- }
2585
-
2586
- html.dark .block-result.result-ok { }
2587
- html.dark .block-result.result-err { }
2588
-
2589
- .block-result .result-summary-header {
2590
- padding: 0.375rem 0.75rem;
2591
- display: flex;
2592
- align-items: center;
2593
- gap: 0.5rem;
2594
- }
2595
-
2596
- .block-result.result-ok .result-summary-header { color: #166534; }
2597
- .block-result.result-err .result-summary-header { color: #991b1b; }
2598
- html.dark .block-result.result-ok .result-summary-header { color: #86efac; }
2599
- html.dark .block-result.result-err .result-summary-header { color: #fca5a5; }
2600
-
2601
- .block-result .result-summary-header .result-title { font-weight: 700; font-size: 0.9rem; }
2602
-
2603
- .block-result .result-stats {
2604
- display: flex;
2605
- gap: 1.5rem;
2606
- padding: 0 0.75rem 0.375rem;
2607
- font-size: 0.8rem;
2608
- flex-wrap: wrap;
2609
- }
2610
-
2611
- .block-result .result-stat {
2612
- display: flex;
2613
- align-items: center;
2614
- gap: 0.375rem;
2615
- }
2616
-
2617
- .block-result .result-stat .stat-icon { font-size: 0.9rem; opacity: 0.7; }
2618
- .block-result .result-stat .stat-value { font-weight: 600; }
2619
- .block-result .result-stat .stat-label { color: var(--color-text-secondary); font-size: 0.75rem; }
2620
-
2621
- .block-result .result-content {
2622
- padding: 0.375rem 0.75rem;
2623
- font-size: 0.85rem;
2624
- white-space: pre-wrap;
2625
- word-break: break-word;
2626
- max-height: 300px;
2627
- overflow-y: auto;
2628
- line-height: 1.5;
2629
- }
2630
-
2631
- /* --- System Block --- */
2632
- .block-system {
2633
- margin-bottom: 0;
2634
- border-radius: 0.5rem;
2635
- overflow: hidden;
2636
- }
2637
-
2638
- html.dark .block-system { }
2639
-
2640
- .block-system .system-header {
2641
- padding: 0.375rem 0.75rem;
2642
- font-weight: 600;
2643
- font-size: 0.85rem;
2644
- color: #3730a3;
2645
- }
2646
-
2647
- html.dark .block-system .system-header { color: #a5b4fc; }
2648
-
2649
- .block-system .system-body {
2650
- padding: 0.375rem 0.75rem;
2651
- font-size: 0.8rem;
2652
- color: #3730a3;
2653
- display: flex;
2654
- flex-direction: column;
2655
- gap: 0.25rem;
2656
- }
2657
-
2658
- html.dark .block-system .system-body { color: #c7d2fe; }
2659
-
2660
- .block-system .system-body .sys-field { display: flex; align-items: baseline; gap: 0.5rem; }
2661
- .block-system .system-body .sys-label { font-weight: 600; flex-shrink: 0; min-width: 5rem; }
2662
- .block-system .system-body .sys-value { font-family: 'Monaco','Menlo','Ubuntu Mono', monospace; font-size: 0.75rem; }
2663
- .block-system .system-body .sys-value code { background: #c7d2fe; padding: 0.0625rem 0.375rem; border-radius: 0.25rem; }
2664
- html.dark .block-system .system-body .sys-value code { background: #312e81; }
2665
-
2666
- .block-system .tools-list {
2667
- display: flex;
2668
- flex-wrap: wrap;
2669
- gap: 0.25rem;
2670
- margin-top: 0.25rem;
2671
- }
2672
-
2673
- .block-system .tools-list .tool-badge {
2674
- display: inline-block;
2675
- padding: 0.125rem 0.5rem;
2676
- background: #c7d2fe;
2677
- color: #3730a3;
2678
- border-radius: 1rem;
2679
- font-size: 0.65rem;
2680
- font-weight: 500;
2681
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2682
- }
2683
-
2684
- html.dark .block-system .tools-list .tool-badge { background: #312e81; color: #a5b4fc; }
2685
-
2686
- /* --- Bash Block --- */
2687
- .block-bash {
2688
- margin-bottom: 0;
2689
- border-radius: 0.5rem;
2690
- overflow: hidden;
2691
- }
2692
-
2693
- .block-bash .bash-command {
2694
- padding: 0.375rem 0.75rem;
2695
- display: flex;
2696
- align-items: flex-start;
2697
- gap: 0.5rem;
2698
- }
2699
-
2700
- .block-bash .bash-command .prompt { color: #34d399; font-weight: 700; flex-shrink: 0; }
2701
- .block-bash .bash-command code {
2702
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2703
- color: #e5e7eb;
2704
- font-size: 0.8rem;
2705
- overflow-x: auto;
2706
- flex: 1;
2707
- }
2708
-
2709
- .block-bash .bash-output {
2710
- padding: 0.375rem 0.75rem;
2711
- color: #9ca3af;
2712
- font-size: 0.75rem;
2713
- overflow-x: auto;
2714
- white-space: pre-wrap;
2715
- max-height: 300px;
2716
- overflow-y: auto;
2717
- }
2718
-
2719
- /* --- Generic Block --- */
2720
- .block-generic {
2721
- margin-bottom: 0;
2722
- padding: 0.5rem 0.75rem;
2723
- border-radius: 0.5rem;
2724
- background: var(--color-bg-secondary);
2725
- }
2726
-
2727
- .block-generic .generic-type {
2728
- font-size: 0.7rem;
2729
- text-transform: uppercase;
2730
- letter-spacing: 0.05em;
2731
- color: var(--color-text-secondary);
2732
- font-weight: 600;
2733
- margin-bottom: 0.375rem;
2734
- }
2735
-
2736
- .block-generic .generic-fields {
2737
- display: flex;
2738
- flex-direction: column;
2739
- gap: 0.25rem;
2740
- font-size: 0.8rem;
2741
- }
2742
-
2743
- .block-generic .generic-field {
2744
- display: flex;
2745
- gap: 0.5rem;
2746
- }
2747
-
2748
- .block-generic .generic-field .field-key {
2749
- font-weight: 600;
2750
- color: var(--color-text-secondary);
2751
- flex-shrink: 0;
2752
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2753
- font-size: 0.75rem;
2754
- }
2755
-
2756
- .block-generic .generic-field .field-value {
2757
- font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2758
- font-size: 0.75rem;
2759
- word-break: break-all;
2760
- }
2761
-
2762
- /* --- Error Block --- */
2763
- .block-error {
2764
- margin-bottom: 0;
2765
- padding: 0.5rem 0.75rem;
2766
- border-radius: 0.5rem;
2767
- }
2768
-
2769
- html.dark .block-error { }
2770
-
2771
- /* --- Image Block --- */
2772
- .block-image {
2773
- margin-bottom: 0;
2774
- border-radius: 0.5rem;
2775
- overflow: hidden;
2776
- }
2777
-
2778
- .block-image img { max-width: 100%; height: auto; max-height: 24rem; object-fit: contain; display: block; }
2779
- .block-image .image-caption { padding: 0.5rem 0.75rem; background: var(--color-bg-secondary); font-size: 0.8rem; color: var(--color-text-secondary); }
2780
-
2781
- /* ===== STREAMING EVENTS ===== */
2782
- .event-streaming-start {
2783
- margin-bottom: 0;
2784
- padding: 0.375rem 0.75rem;
2785
- background: #eff6ff;
2786
- border-radius: 0.5rem;
2787
- display: flex;
2788
- align-items: center;
2789
- gap: 0.625rem;
2790
- }
2791
-
2792
- html.dark .event-streaming-start { background: #0c1a2e; }
2793
-
2794
- .event-streaming-complete {
2795
- margin-bottom: 0;
2796
- padding: 0.375rem 0.75rem;
2797
- background: linear-gradient(135deg, #ecfdf5, #f0fdf4);
2798
- border-radius: 0.5rem;
2799
- }
2800
-
2801
- html.dark .event-streaming-complete { background: linear-gradient(135deg, #0a1f0f, #0f2b1a); }
2802
-
2803
- @keyframes skeleton-pulse {
2804
- 0%, 100% { opacity: 0.4; }
2805
- 50% { opacity: 0.15; }
2806
- }
2807
- .skeleton-pulse { animation: skeleton-pulse 1.5s ease-in-out infinite; }
2808
- .skeleton-loading { padding: 1rem; }
2809
-
2810
- .message-sending { opacity: 0.6; transition: opacity 0.3s ease; }
2811
- .message-send-failed { border-left: 3px solid var(--color-error); }
2812
-
2813
- .connection-indicator {
2814
- display: inline-flex;
2815
- align-items: center;
2816
- gap: 0.375rem;
2817
- padding: 0.25rem 0.5rem;
2818
- border-radius: 1rem;
2819
- font-size: 0.75rem;
2820
- cursor: pointer;
2821
- transition: all 0.3s ease;
2822
- }
2823
- .connection-dot {
2824
- width: 8px;
2825
- height: 8px;
2826
- border-radius: 50%;
2827
- transition: background-color 0.5s ease;
2828
- }
2829
- .connection-dot.excellent { background: #10b981; }
2830
- .connection-dot.good { background: #10b981; }
2831
- .connection-dot.fair { background: #f59e0b; }
2832
- .connection-dot.poor { background: #f97316; }
2833
- .connection-dot.bad { background: #ef4444; }
2834
- .connection-dot.unknown { background: #6b7280; }
2835
- .connection-dot.disconnected { background: #ef4444; animation: pulse 1.5s ease-in-out infinite; }
2836
- .connection-dot.reconnecting { background: #f59e0b; animation: pulse 1s ease-in-out infinite; }
2837
- .connection-dot.downloading { background: #3b82f6; animation: pulse 1s ease-in-out infinite; }
2838
-
2839
- .model-dl-indicator {
2840
- display: none;
2841
- position: relative;
2842
- width: 24px;
2843
- height: 24px;
2844
- cursor: pointer;
2845
- }
2846
- .model-dl-indicator.active { display: inline-flex; align-items: center; justify-content: center; }
2847
- .model-dl-indicator svg { width: 24px; height: 24px; transform: rotate(-90deg); }
2848
- .model-dl-indicator .track { fill: none; stroke: var(--color-bg-secondary); stroke-width: 3; }
2849
- .model-dl-indicator .progress { fill: none; stroke: var(--color-primary); stroke-width: 3; stroke-linecap: round; transition: stroke-dashoffset 0.3s ease; }
2850
- .model-dl-indicator .icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
2851
- .model-dl-indicator .icon svg { width: 12px; height: 12px; transform: none; }
2852
- .model-dl-indicator-tooltip {
2853
- display: none; position: absolute; top: calc(100% + 6px); right: 0; background: var(--color-bg-primary);
2854
- border: 1px solid var(--color-border); border-radius: 6px; padding: 8px 12px; font-size: 0.75rem;
2855
- white-space: nowrap; z-index: 1000; box-shadow: 0 2px 8px rgba(0,0,0,0.15);
2856
- }
2857
- .model-dl-indicator:hover .model-dl-indicator-tooltip { display: block; }
2858
-
2859
- .connection-tooltip {
2860
- position: absolute;
2861
- top: 100%;
2862
- right: 0;
2863
- margin-top: 0.5rem;
2864
- padding: 0.75rem;
2865
- background: var(--color-bg-secondary);
2866
- border: 1px solid var(--color-border);
2867
- border-radius: 0.5rem;
2868
- font-size: 0.75rem;
2869
- white-space: nowrap;
2870
- z-index: 100;
2871
- box-shadow: 0 4px 12px rgba(0,0,0,0.15);
2872
- }
2873
-
2874
- .new-content-pill {
2875
- position: sticky;
2876
- bottom: 0.5rem;
2877
- left: 50%;
2878
- transform: translateX(-50%);
2879
- padding: 0.375rem 1rem;
2880
- background: var(--color-primary);
2881
- color: white;
2882
- border: none;
2883
- border-radius: 1rem;
2884
- font-size: 0.8rem;
2885
- cursor: pointer;
2886
- z-index: 50;
2887
- box-shadow: 0 2px 8px rgba(0,0,0,0.2);
2888
- transition: opacity 0.2s ease;
2889
- }
2890
- .new-content-pill:hover { opacity: 0.9; }
2891
-
2892
- @keyframes block-appear {
2893
- from { opacity: 0; transform: translateY(6px); }
2894
- to { opacity: 1; transform: translateY(0); }
2895
- }
2896
- .streaming-blocks > * {
2897
- animation: block-appear 0.2s ease-out both;
2898
- }
2899
- .streaming-blocks > details.block-tool-use {
2900
- transition: max-height 0.3s ease;
2901
- }
2902
- @keyframes chunk-placeholder-pulse {
2903
- 0%, 100% { opacity: 0.3; }
2904
- 50% { opacity: 0.6; }
2905
- }
2906
- .chunk-placeholder {
2907
- height: 2rem;
2908
- border-radius: 0.375rem;
2909
- background: var(--color-bg-secondary);
2910
- animation: chunk-placeholder-pulse 1s ease-in-out infinite;
2911
- margin: 0.25rem 0;
2912
- }
2913
- .connection-dot.degrading {
2914
- animation: pulse 1s ease-in-out infinite;
2915
- background-color: var(--color-warning) !important;
2916
- }
2917
-
2918
- /* ===== IN-UI DIALOGS ===== */
2919
- .dialog-overlay {
2920
- position: fixed;
2921
- top: 0;
2922
- left: 0;
2923
- right: 0;
2924
- bottom: 0;
2925
- z-index: 10000;
2926
- display: flex;
2927
- align-items: center;
2928
- justify-content: center;
2929
- opacity: 0;
2930
- transition: opacity 0.2s ease;
2931
- }
2932
- .dialog-overlay.visible { opacity: 1; }
2933
- .dialog-backdrop {
2934
- position: absolute;
2935
- top: 0;
2936
- left: 0;
2937
- right: 0;
2938
- bottom: 0;
2939
- background: rgba(0, 0, 0, 0.5);
2940
- backdrop-filter: blur(2px);
2941
- }
2942
- .dialog-container {
2943
- position: fixed;
2944
- top: 0;
2945
- left: 0;
2946
- right: 0;
2947
- bottom: 0;
2948
- display: flex;
2949
- align-items: center;
2950
- justify-content: center;
2951
- z-index: 10001;
2952
- opacity: 0;
2953
- transition: opacity 0.2s ease;
2954
- }
2955
- .dialog-container.visible { opacity: 1; }
2956
- .dialog-box {
2957
- background: var(--color-bg-primary);
2958
- border-radius: 0.75rem;
2959
- box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
2960
- max-width: 90vw;
2961
- width: 400px;
2962
- overflow: hidden;
2963
- transform: scale(0.95) translateY(-10px);
2964
- transition: transform 0.2s ease;
2965
- }
2966
- .dialog-container.visible .dialog-box {
2967
- transform: scale(1) translateY(0);
2968
- }
2969
- .dialog-box-progress { width: 450px; }
2970
- .dialog-header {
2971
- padding: 1rem 1.25rem;
2972
- border-bottom: 1px solid var(--color-border);
2973
- }
2974
- .dialog-title {
2975
- margin: 0;
2976
- font-size: 1.1rem;
2977
- font-weight: 600;
2978
- }
2979
- .dialog-body {
2980
- padding: 1.25rem;
2981
- }
2982
- .dialog-message {
2983
- margin: 0;
2984
- font-size: 0.9rem;
2985
- line-height: 1.5;
2986
- color: var(--color-text-primary);
2987
- }
2988
- .dialog-label {
2989
- display: block;
2990
- margin-bottom: 0.5rem;
2991
- font-size: 0.9rem;
2992
- color: var(--color-text-primary);
2993
- }
2994
- .dialog-input {
2995
- width: 100%;
2996
- padding: 0.625rem 0.875rem;
2997
- border: 1px solid var(--color-border);
2998
- border-radius: 0.5rem;
2999
- background: var(--color-bg-secondary);
3000
- color: var(--color-text-primary);
3001
- font-size: 0.9rem;
3002
- outline: none;
3003
- transition: border-color 0.15s, box-shadow 0.15s;
3004
- }
3005
- .dialog-input:focus {
3006
- border-color: var(--color-primary);
3007
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
3008
- }
3009
- .dialog-footer {
3010
- padding: 0.75rem 1.25rem;
3011
- display: flex;
3012
- justify-content: flex-end;
3013
- gap: 0.5rem;
3014
- border-top: 1px solid var(--color-border);
3015
- background: var(--color-bg-secondary);
3016
- }
3017
- .dialog-btn {
3018
- padding: 0.5rem 1.25rem;
3019
- border: none;
3020
- border-radius: 0.5rem;
3021
- font-size: 0.875rem;
3022
- font-weight: 500;
3023
- cursor: pointer;
3024
- transition: all 0.15s;
3025
- }
3026
- .dialog-btn-primary {
3027
- background: var(--color-primary);
3028
- color: white;
3029
- }
3030
- .dialog-btn-primary:hover { background: var(--color-primary-dark); }
3031
- .dialog-btn-secondary {
3032
- background: var(--color-bg-primary);
3033
- color: var(--color-text-primary);
3034
- border: 1px solid var(--color-border);
3035
- }
3036
- .dialog-btn-secondary:hover { background: var(--color-bg-secondary); }
3037
- .dialog-btn-danger { background: var(--color-error); }
3038
- .dialog-btn-danger:hover { background: #dc2626; }
3039
- .dialog-progress-bar {
3040
- height: 8px;
3041
- background: var(--color-bg-secondary);
3042
- border-radius: 4px;
3043
- overflow: hidden;
3044
- margin: 1rem 0 0.5rem;
3045
- }
3046
- .dialog-progress-fill {
3047
- height: 100%;
3048
- background: var(--color-primary);
3049
- border-radius: 4px;
3050
- transition: width 0.3s ease;
3051
- }
3052
- .dialog-progress-percent {
3053
- margin: 0;
3054
- text-align: center;
3055
- font-size: 0.8rem;
3056
- color: var(--color-text-secondary);
3057
- }
3058
-
3059
- /* ===== TOAST NOTIFICATIONS ===== */
3060
- .toast-notification {
3061
- position: fixed;
3062
- bottom: 100px;
3063
- left: 50%;
3064
- transform: translateX(-50%) translateY(20px);
3065
- padding: 0.75rem 1.5rem;
3066
- border-radius: 0.5rem;
3067
- font-size: 0.875rem;
3068
- font-weight: 500;
3069
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
3070
- z-index: 20000;
3071
- opacity: 0;
3072
- transition: all 0.3s ease;
3073
- display: flex;
3074
- align-items: center;
3075
- gap: 0.5rem;
3076
- }
3077
- .toast-notification.visible {
3078
- opacity: 1;
3079
- transform: translateX(-50%) translateY(0);
3080
- }
3081
- .toast-info { background: var(--color-primary); color: white; }
3082
- .toast-success { background: var(--color-success); color: white; }
3083
- .toast-error { background: var(--color-error); color: white; }
3084
- .toast-warning { background: var(--color-warning); color: white; }
3085
-
3086
- .inline-code {
3087
- background: #f3f4f6;
3088
- padding: 0.125rem 0.375rem;
3089
- border-radius: 0.25rem;
3090
- font-size: 0.875rem;
3091
- font-family: ui-monospace, monospace;
3092
- color: #dc2626;
3093
- }
3094
-
3095
- html.dark .inline-code {
3096
- background: #262626;
3097
- color: #f87171;
3098
- }
3099
-
3100
- .html-rendered-container {
3101
- border-radius: 0.5rem;
3102
- overflow: hidden;
3103
- border: 1px solid #e5e7eb;
3104
- }
3105
-
3106
- html.dark .html-rendered-container {
3107
- border-color: #262626;
3108
- }
3109
-
3110
- .sidebar-search-bar {
3111
- padding: 0.25rem 0.75rem 0.5rem;
3112
- }
3113
- .sidebar-search-input {
3114
- width: 100%;
3115
- padding: 0.375rem 0.5rem;
3116
- border: 1px solid #d1d5db;
3117
- border-radius: 0.375rem;
3118
- background: #f9fafb;
3119
- color: #111827;
3120
- font-size: 0.8125rem;
3121
- outline: none;
3122
- box-sizing: border-box;
3123
- }
3124
- .sidebar-search-input:focus {
3125
- border-color: #3b82f6;
3126
- box-shadow: 0 0 0 2px rgba(59,130,246,0.15);
3127
- }
3128
- html.dark .sidebar-search-input {
3129
- background: #1f2937;
3130
- border-color: #374151;
3131
- color: #e5e7eb;
3132
- }
3133
-
3134
- .shortcuts-overlay {
3135
- position: fixed;
3136
- inset: 0;
3137
- background: rgba(0,0,0,0.5);
3138
- display: flex;
3139
- align-items: center;
3140
- justify-content: center;
3141
- z-index: 9999;
3142
- }
3143
- .shortcuts-panel {
3144
- background: white;
3145
- border-radius: 0.75rem;
3146
- padding: 1.5rem;
3147
- max-width: 400px;
3148
- width: 90%;
3149
- box-shadow: 0 25px 50px rgba(0,0,0,0.25);
3150
- }
3151
- html.dark .shortcuts-panel {
3152
- background: #1f2937;
3153
- color: #e5e7eb;
3154
- }
3155
- .shortcuts-panel h3 {
3156
- margin: 0 0 1rem;
3157
- font-size: 1.125rem;
3158
- }
3159
- .shortcuts-panel table {
3160
- width: 100%;
3161
- border-collapse: collapse;
3162
- }
3163
- .shortcuts-panel td {
3164
- padding: 0.375rem 0;
3165
- font-size: 0.875rem;
3166
- }
3167
- .shortcuts-panel td:first-child {
3168
- font-weight: 600;
3169
- white-space: nowrap;
3170
- padding-right: 1rem;
3171
- }
3172
- .shortcuts-panel kbd {
3173
- background: #f3f4f6;
3174
- border: 1px solid #d1d5db;
3175
- border-radius: 0.25rem;
3176
- padding: 0.125rem 0.375rem;
3177
- font-size: 0.75rem;
3178
- font-family: inherit;
3179
- }
3180
- html.dark .shortcuts-panel kbd {
3181
- background: #374151;
3182
- border-color: #4b5563;
3183
- }
3184
-
3185
- .error-toast {
3186
- position: fixed;
3187
- bottom: 1rem;
3188
- right: 1rem;
3189
- background: #dc2626;
3190
- color: white;
3191
- padding: 0.75rem 1rem;
3192
- border-radius: 0.5rem;
3193
- font-size: 0.875rem;
3194
- max-width: 400px;
3195
- z-index: 9998;
3196
- box-shadow: 0 10px 25px rgba(0,0,0,0.2);
3197
- cursor: pointer;
3198
- animation: slideInRight 0.2s ease-out;
3199
- }
3200
- .error-toast-title {
3201
- font-weight: 600;
3202
- margin-bottom: 0.25rem;
3203
- }
3204
- .error-toast-detail {
3205
- opacity: 0.85;
3206
- font-size: 0.8125rem;
3207
- word-break: break-word;
3208
- }
3209
- @keyframes slideInRight {
3210
- from { transform: translateX(100%); opacity: 0; }
3211
- to { transform: translateX(0); opacity: 1; }
3212
- }
3213
-
3214
- .msg-edit-btn {
3215
- background: transparent;
3216
- border: none;
3217
- cursor: pointer;
3218
- color: var(--color-text-secondary);
3219
- font-size: 0.75rem;
3220
- padding: 0 0.25rem;
3221
- opacity: 0;
3222
- transition: opacity 0.15s;
3223
- margin-left: 0.5rem;
3224
- }
3225
- .message-user:hover .msg-edit-btn { opacity: 0.7; }
3226
- .msg-edit-btn:hover { opacity: 1 !important; color: var(--color-primary); }
3227
-
3228
- .preset-btn {
3229
- background: transparent;
3230
- border: 1px solid var(--color-border);
3231
- border-radius: 0.25rem;
3232
- cursor: pointer;
3233
- color: var(--color-text-secondary);
3234
- font-size: 0.875rem;
3235
- padding: 0.25rem 0.5rem;
3236
- line-height: 1;
3237
- }
3238
- .preset-btn:hover { color: #f59e0b; }
3239
- .preset-selector {
3240
- font-size: 0.75rem;
3241
- padding: 0.25rem;
3242
- border: 1px solid var(--color-border);
3243
- border-radius: 0.25rem;
3244
- background: var(--color-bg);
3245
- color: var(--color-text);
3246
- max-width: 120px;
3247
- }
3248
-
3249
-
3250
- .skip-link {
3251
- position: absolute;
3252
- top: -40px;
3253
- left: 0;
3254
- background: var(--color-primary, #3b82f6);
3255
- color: #fff;
3256
- padding: 8px 16px;
3257
- z-index: 10000;
3258
- text-decoration: none;
3259
- border-radius: 0 0 4px 0;
3260
- font-weight: 600;
3261
- }
3262
- .skip-link:focus {
3263
- top: 0;
3264
- }
3265
-
3266
- :focus-visible {
3267
- outline: 2px solid var(--color-primary, #3b82f6);
3268
- outline-offset: 2px;
3269
- border-radius: 2px;
3270
- }
3271
-
3272
- @media (prefers-reduced-motion: reduce) {
3273
- *,
3274
- *::before,
3275
- *::after {
3276
- animation-duration: 0.01ms !important;
3277
- animation-iteration-count: 1 !important;
3278
- transition-duration: 0.01ms !important;
3279
- scroll-behavior: auto !important;
3280
- }
3281
- }
3282
-
3283
- /* ==========================================================================
3284
- Legacy ui-fixes*.css (merged into main.css on 2026-04-20).
3285
- Loaded last so they still win over earlier main.css rules; intentionally
3286
- left as a recognisable block so future cleanups can prune systematically.
3287
- ========================================================================== */
3288
-
3289
- /* ========== merged from ui-fixes.css ========== */
3290
- /* =====================================================================
3291
- ui-fixes.css — Design corrections layered on top of main.css
3292
- Targets styles missing or broken for current markup (index.html).
3293
- Loaded AFTER main.css so selectors here win on ties.
3294
- ===================================================================== */
3295
-
3296
- /* ---------- Design tokens: richer spacing + elevation ---------- */
3297
- :root {
3298
- --radius-sm: 0.375rem;
3299
- --radius-md: 0.5rem;
3300
- --radius-lg: 0.75rem;
3301
- --radius-xl: 1rem;
3302
- --shadow-sm: 0 1px 2px rgba(15,23,42,0.06);
3303
- --shadow-md: 0 4px 12px rgba(15,23,42,0.08);
3304
- --shadow-lg: 0 12px 32px rgba(15,23,42,0.12);
3305
- --color-bg-raised: #ffffff;
3306
- --color-bg-hover: rgba(15,23,42,0.04);
3307
- --color-focus-ring: rgba(59,130,246,0.35);
3308
- --sidebar-width: 272px;
3309
- }
3310
- html.dark {
3311
- --color-bg-raised: #202020;
3312
- --color-bg-hover: rgba(255,255,255,0.05);
3313
- --shadow-sm: 0 1px 2px rgba(0,0,0,0.4);
3314
- --shadow-md: 0 4px 12px rgba(0,0,0,0.45);
3315
- --shadow-lg: 0 12px 32px rgba(0,0,0,0.55);
3316
- --color-focus-ring: rgba(96,165,250,0.45);
3317
- }
3318
-
3319
- /* ---------- Sidebar header: two rows, fix 422px overflow ---------- */
3320
- .sidebar-header {
3321
- flex-direction: row;
3322
- align-items: center;
3323
- justify-content: space-between;
3324
- gap: 0.5rem;
3325
- padding: 0.625rem 0.75rem;
3326
- min-height: var(--header-height);
3327
- border-bottom: 1px solid var(--color-border);
3328
- }
3329
- .sidebar-header h2 {
3330
- font-size: 0.75rem;
3331
- font-weight: 700;
3332
- letter-spacing: 0.08em;
3333
- color: var(--color-text-secondary);
3334
- flex: 1;
3335
- min-width: 0;
3336
- overflow: hidden;
3337
- text-overflow: ellipsis;
3338
- }
3339
- .sidebar-header-actions {
3340
- display: flex;
3341
- gap: 0.25rem;
3342
- align-items: center;
3343
- flex-shrink: 0;
3344
- }
3345
-
3346
- /* ---------- Sidebar overflow menu: hidden by default, floating panel ---------- */
3347
- .sidebar-overflow-menu-wrapper {
3348
- position: relative;
3349
- display: inline-block;
3350
- }
3351
- .sidebar-overflow-btn {
3352
- display: inline-flex;
3353
- align-items: center;
3354
- justify-content: center;
3355
- width: 30px;
3356
- height: 30px;
3357
- padding: 0;
3358
- background: transparent;
3359
- border: 1px solid transparent;
3360
- border-radius: var(--radius-sm);
3361
- color: var(--color-text-secondary);
3362
- cursor: pointer;
3363
- font-size: 1rem;
3364
- line-height: 1;
3365
- }
3366
- .sidebar-overflow-btn:hover {
3367
- background: var(--color-bg-hover);
3368
- color: var(--color-text-primary);
3369
- }
3370
- .sidebar-overflow-menu {
3371
- display: none;
3372
- position: absolute;
3373
- top: calc(100% + 4px);
3374
- right: 0;
3375
- min-width: 200px;
3376
- z-index: 60;
3377
- padding: 0.25rem;
3378
- background: var(--color-bg-raised);
3379
- border: 1px solid var(--color-border);
3380
- border-radius: var(--radius-md);
3381
- box-shadow: var(--shadow-md);
3382
- }
3383
- .sidebar-overflow-menu.open { display: block; }
3384
- .sidebar-overflow-menu-item {
3385
- display: flex;
3386
- align-items: center;
3387
- gap: 0.5rem;
3388
- width: 100%;
3389
- padding: 0.5rem 0.625rem;
3390
- background: transparent;
3391
- border: none;
3392
- border-radius: var(--radius-sm);
3393
- color: var(--color-text-primary);
3394
- font-size: 0.8125rem;
3395
- text-align: left;
3396
- cursor: pointer;
3397
- }
3398
- .sidebar-overflow-menu-item:hover { background: var(--color-bg-hover); }
3399
- .sidebar-overflow-menu-item.danger { color: var(--color-error); }
3400
- .sidebar-overflow-menu-item.danger:hover { background: rgba(239,68,68,0.1); }
3401
- .sidebar-overflow-menu-item svg { flex-shrink: 0; }
3402
-
3403
- /* ---------- Sidebar new-conversation button ---------- */
3404
- .sidebar-new-btn {
3405
- padding: 0.375rem 0.75rem;
3406
- font-size: 0.8125rem;
3407
- font-weight: 600;
3408
- line-height: 1.2;
3409
- height: 30px;
3410
- }
3411
-
3412
- /* ---------- Sidebar search ---------- */
3413
- .sidebar-search-bar {
3414
- padding: 0.5rem 0.75rem;
3415
- flex-shrink: 0;
3416
- }
3417
- .sidebar-search-input {
3418
- width: 100%;
3419
- padding: 0.5rem 0.75rem;
3420
- font-size: 0.8125rem;
3421
- background: var(--color-bg-primary);
3422
- border: 1px solid var(--color-border);
3423
- border-radius: var(--radius-md);
3424
- color: var(--color-text-primary);
3425
- outline: none;
3426
- transition: border-color 0.15s, box-shadow 0.15s;
3427
- }
3428
- .sidebar-search-input:focus {
3429
- border-color: var(--color-primary);
3430
- box-shadow: 0 0 0 3px var(--color-focus-ring);
3431
- }
3432
- .sidebar-search-input::placeholder { color: var(--color-text-secondary); }
3433
-
3434
- /* ---------- Sidebar list items: cards ---------- */
3435
- .sidebar-list {
3436
- list-style: none;
3437
- padding: 0.25rem 0.5rem 1rem;
3438
- margin: 0;
3439
- overflow-y: auto;
3440
- flex: 1;
3441
- min-height: 0;
3442
- }
3443
- .conversation-item {
3444
- display: flex;
3445
- align-items: center;
3446
- gap: 0.375rem;
3447
- padding: 0.5rem 0.625rem;
3448
- margin: 0.125rem 0;
3449
- border-radius: var(--radius-md);
3450
- cursor: pointer;
3451
- color: var(--color-text-primary);
3452
- transition: background-color 0.12s;
3453
- position: relative;
3454
- border-left: none;
3455
- }
3456
- .conversation-item-content {
3457
- flex: 1;
3458
- min-width: 0;
3459
- overflow: hidden;
3460
- }
3461
- .conversation-item:hover { background: var(--color-bg-hover); }
3462
- .conversation-item.active {
3463
- background: var(--color-primary);
3464
- color: #fff;
3465
- }
3466
- .conversation-item.active .conversation-item-meta { color: rgba(255,255,255,0.85); }
3467
- .conversation-item-title {
3468
- font-size: 0.8125rem;
3469
- font-weight: 500;
3470
- line-height: 1.3;
3471
- overflow: hidden;
3472
- text-overflow: ellipsis;
3473
- white-space: nowrap;
3474
- margin-bottom: 0.125rem;
3475
- }
3476
- .conversation-item-meta {
3477
- font-size: 0.6875rem;
3478
- color: var(--color-text-secondary);
3479
- overflow: hidden;
3480
- text-overflow: ellipsis;
3481
- white-space: nowrap;
3482
- }
3483
-
3484
- /* ========== merged from ui-fixes-2.css ========== */
3485
- /* =====================================================================
3486
- ui-fixes-2.css — Main panel, welcome screen, messages, input card
3487
- ===================================================================== */
3488
-
3489
- /* ---------- Main header: cleaner separation ---------- */
3490
- .main-header {
3491
- gap: 0.5rem;
3492
- padding: 0 0.75rem;
3493
- border-bottom: 1px solid var(--color-border);
3494
- }
3495
- .header-title {
3496
- font-size: 0.9375rem;
3497
- font-weight: 600;
3498
- color: var(--color-text-primary);
3499
- }
3500
-
3501
- /* ---------- View toggle bar: pill tabs, not underline-in-void ---------- */
3502
- .view-toggle-bar {
3503
- gap: 0.25rem;
3504
- padding: 0.375rem 0.75rem;
3505
- background: var(--color-bg-primary);
3506
- border-bottom: 1px solid var(--color-border);
3507
- }
3508
- .view-toggle-btn {
3509
- padding: 0.375rem 0.625rem;
3510
- border-radius: var(--radius-sm);
3511
- border: none;
3512
- background: transparent;
3513
- color: var(--color-text-secondary);
3514
- min-height: 32px;
3515
- display: inline-flex;
3516
- align-items: center;
3517
- justify-content: center;
3518
- gap: 0.375rem;
3519
- }
3520
- .view-toggle-btn:hover {
3521
- background: var(--color-bg-hover);
3522
- color: var(--color-text-primary);
3523
- }
3524
- .view-toggle-btn.active {
3525
- background: rgba(59,130,246,0.1);
3526
- color: var(--color-primary);
3527
- border-bottom-color: transparent;
3528
- }
3529
-
3530
- /* ---------- Welcome screen ---------- */
3531
- .main-panel >
3532
-
3533
- /* Hide welcome when empty / conversation active */
3534
- .main-panel > .welcome-screen.hidden { display: none; }
3535
-
3536
- /* #output-scroll needs to take remaining flex space */
3537
- .main-panel > #output-scroll {
3538
- display: flex;
3539
- flex-direction: column;
3540
- flex: 1;
3541
- min-height: 0;
3542
- }
3543
-
3544
- /* ---------- Messages scroll: breathing room ---------- */
3545
- #output-scroll {
3546
- background: var(--color-bg-primary);
3547
- }
3548
- .messages-wrapper {
3549
- max-width: 860px;
3550
- margin: 0 auto;
3551
- padding: 1rem 1.25rem 1.5rem;
3552
- width: 100%;
3553
- }
3554
-
3555
- /* ---------- Streaming status bar: hidden by default, floating chip ---------- */
3556
- body .streaming-status-bar {
3557
- display: none !important;
3558
- align-items: center;
3559
- gap: 0.5rem;
3560
- padding: 0.5rem 0.875rem;
3561
- margin: 0 auto;
3562
- max-width: 860px;
3563
- background: var(--color-bg-secondary);
3564
- border: 1px solid var(--color-border);
3565
- border-radius: var(--radius-lg);
3566
- font-size: 0.8125rem;
3567
- color: var(--color-text-primary);
3568
- box-shadow: var(--shadow-sm);
3569
- }
3570
- body .streaming-status-bar.visible { display: flex !important; }
3571
- .streaming-status-bar .typing-dots {
3572
- display: inline-flex;
3573
- gap: 3px;
3574
- align-items: center;
3575
- }
3576
- .streaming-status-bar .typing-dots span {
3577
- width: 5px; height: 5px;
3578
- background: var(--color-primary);
3579
- border-radius: 50%;
3580
- animation: typingBlink 1.2s infinite ease-in-out both;
3581
- }
3582
- .streaming-status-bar .typing-dots span:nth-child(2) { animation-delay: 0.15s; }
3583
- .streaming-status-bar .typing-dots span:nth-child(3) { animation-delay: 0.3s; }
3584
- @keyframes typingBlink {
3585
- 0%,80%,100% { opacity: 0.3; transform: scale(0.8); }
3586
- 40% { opacity: 1; transform: scale(1); }
3587
- }
3588
- .status-agent-name { font-weight: 600; }
3589
- .status-cancel-btn {
3590
- margin-left: auto;
3591
- padding: 0.25rem 0.625rem;
3592
- background: transparent;
3593
- border: 1px solid var(--color-border);
3594
- border-radius: var(--radius-sm);
3595
- color: var(--color-text-secondary);
3596
- font-size: 0.75rem;
3597
- cursor: pointer;
3598
- }
3599
- .status-cancel-btn:hover {
3600
- border-color: var(--color-error);
3601
- color: var(--color-error);
3602
- }
3603
-
3604
- /* ---------- Drop zone overlay ---------- */
3605
- .drop-zone-overlay {
3606
- position: absolute;
3607
- inset: 0;
3608
- display: none;
3609
- align-items: center;
3610
- justify-content: center;
3611
- background: rgba(59,130,246,0.1);
3612
- border: 2px dashed var(--color-primary);
3613
- border-radius: var(--radius-lg);
3614
- pointer-events: none;
3615
- z-index: 10;
3616
- }
3617
- .drop-zone-overlay.active { display: flex; }
3618
- .drop-zone-content { text-align: center; color: var(--color-primary); }
3619
- .drop-zone-icon { font-size: 3rem; font-weight: 300; }
3620
- .drop-zone-text { font-size: 0.9375rem; font-weight: 500; }
3621
-
3622
- /* ========== merged from ui-fixes-3.css ========== */
3623
- /* =====================================================================
3624
- ui-fixes-3.css — Input card (modern bottom composer), mobile, tools popup
3625
- ===================================================================== */
3626
-
3627
- /* ---------- Input section: holds the card, proper bottom padding ---------- */
3628
- .input-section {
3629
- padding: 0.75rem 1rem calc(0.75rem + env(safe-area-inset-bottom));
3630
- background: var(--color-bg-primary);
3631
- border-top: 1px solid var(--color-border);
3632
- }
3633
-
3634
- /* ---------- Input card: pill-shaped composer with toolbar ---------- */
3635
- .input-card {
3636
- max-width: 860px;
3637
- margin: 0 auto;
3638
- background: var(--color-bg-secondary);
3639
- border: 1px solid var(--color-border);
3640
- border-radius: var(--radius-lg);
3641
- padding: 0.5rem 0.625rem;
3642
- display: flex;
3643
- flex-direction: column;
3644
- gap: 0.375rem;
3645
- transition: border-color 0.15s, box-shadow 0.15s;
3646
- }
3647
- .input-card:focus-within {
3648
- border-color: var(--color-primary);
3649
- box-shadow: 0 0 0 3px var(--color-focus-ring);
3650
- }
3651
- .input-card-textarea {
3652
- width: 100%;
3653
- min-height: 36px;
3654
- max-height: 180px;
3655
- padding: 0.375rem 0.5rem;
3656
- background: transparent;
3657
- border: none;
3658
- outline: none;
3659
- resize: none;
3660
- color: var(--color-text-primary);
3661
- font-family: inherit;
3662
- font-size: 0.9375rem;
3663
- line-height: 1.5;
3664
- }
3665
- .input-card-textarea::placeholder { color: var(--color-text-secondary); }
3666
-
3667
- /* toolbar: selectors on the left, action buttons on the right */
3668
- .input-card-toolbar {
3669
- display: flex;
3670
- align-items: center;
3671
- gap: 0.375rem;
3672
- flex-wrap: wrap;
3673
- }
3674
- .input-card-selectors {
3675
- display: flex;
3676
- gap: 0.375rem;
3677
- align-items: center;
3678
- flex-wrap: wrap;
3679
- flex: 1;
3680
- min-width: 0;
3681
- }
3682
- .input-card-actions {
3683
- display: flex;
3684
- gap: 0.25rem;
3685
- align-items: center;
3686
- margin-left: auto;
3687
- flex-shrink: 0;
3688
- }
3689
-
3690
- .input-chip-select {
3691
- height: 28px;
3692
- padding: 0 0.5rem;
3693
- font-size: 0.75rem;
3694
- background: var(--color-bg-primary);
3695
- color: var(--color-text-primary);
3696
- border: 1px solid var(--color-border);
3697
- border-radius: 999px;
3698
- cursor: pointer;
3699
- max-width: 180px;
3700
- transition: border-color 0.12s;
3701
- }
3702
- .input-chip-select:hover { border-color: var(--color-primary); }
3703
- .input-chip-select:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px var(--color-focus-ring); }
3704
- .input-chip-select:empty,
3705
- .input-chip-select[data-empty="true"] { display: none; }
3706
-
3707
- /* When chip selects are empty and only star remains, compact layout */
3708
- #savePresetBtn { width: 28px !important; height: 28px !important; font-size: 0.875rem; }
3709
-
3710
- /* Input card: if selectors row is empty (no visible chips), hide whole row */
3711
- .input-card-selectors:not(:has(select:not([style*="display: none"]):not(:empty):not([data-empty="true"]))):not(:has(#savePresetBtn + *)) {
3712
- /* do nothing: keep preset visible */
3713
- }
3714
-
3715
- .input-icon-btn {
3716
- display: inline-flex;
3717
- align-items: center;
3718
- justify-content: center;
3719
- width: 32px;
3720
- height: 32px;
3721
- padding: 0;
3722
- background: transparent;
3723
- border: 1px solid transparent;
3724
- border-radius: var(--radius-sm);
3725
- color: var(--color-text-secondary);
3726
- cursor: pointer;
3727
- transition: background 0.12s, color 0.12s;
3728
- }
3729
- .input-icon-btn:hover {
3730
- background: var(--color-bg-hover);
3731
- color: var(--color-text-primary);
3732
- }
3733
- .input-icon-btn svg { width: 16px; height: 16px; }
3734
-
3735
- .input-send-btn {
3736
- background: var(--color-primary);
3737
- color: #fff;
3738
- width: 34px;
3739
- height: 34px;
3740
- border-radius: var(--radius-md);
3741
- }
3742
- .input-send-btn:hover { background: var(--color-primary-dark); color: #fff; }
3743
- .input-send-btn svg { width: 16px; height: 16px; }
3744
- .input-send-btn:disabled { opacity: 0.5; cursor: not-allowed; }
3745
-
3746
- /* When streaming: dim the card slightly */
3747
- .input-card[data-streaming="true"] {
3748
- opacity: 0.75;
3749
- }
3750
- .input-card[data-streaming="true"] .input-card-textarea {
3751
- cursor: not-allowed;
3752
- }
3753
-
3754
- /* ---------- Tools popup: centered modal ---------- */
3755
- body .tools-popup {
3756
- display: none !important;
3757
- position: fixed;
3758
- inset: 0;
3759
- z-index: 200;
3760
- background: rgba(15,23,42,0.45);
3761
- align-items: center;
3762
- justify-content: center;
3763
- padding: 1rem;
3764
- }
3765
- body .tools-popup.open { display: flex !important; }
3766
- .tools-popup-content {
3767
- width: 100%;
3768
- max-width: 720px;
3769
- max-height: 85vh;
3770
- background: var(--color-bg-raised);
3771
- border: 1px solid var(--color-border);
3772
- border-radius: var(--radius-lg);
3773
- box-shadow: var(--shadow-lg);
3774
- display: flex;
3775
- flex-direction: column;
3776
- overflow: hidden;
3777
- }
3778
- .tools-popup-header {
3779
- display: flex;
3780
- align-items: center;
3781
- justify-content: space-between;
3782
- gap: 0.75rem;
3783
- padding: 0.75rem 1rem;
3784
- border-bottom: 1px solid var(--color-border);
3785
- background: var(--color-bg-secondary);
3786
- }
3787
- .tools-popup-scroll {
3788
- flex: 1;
3789
- overflow-y: auto;
3790
- padding: 0.75rem 1rem;
3791
- }
3792
- .tools-popup-footer {
3793
- display: flex;
3794
- gap: 0.5rem;
3795
- justify-content: flex-end;
3796
- padding: 0.75rem 1rem;
3797
- border-top: 1px solid var(--color-border);
3798
- background: var(--color-bg-secondary);
3799
- }
3800
- .tools-popup-refresh-btn,
3801
- .tools-popup-update-btn {
3802
- padding: 0.5rem 1rem;
3803
- font-size: 0.8125rem;
3804
- font-weight: 500;
3805
- border-radius: var(--radius-md);
3806
- border: 1px solid var(--color-border);
3807
- background: var(--color-bg-primary);
3808
- color: var(--color-text-primary);
3809
- cursor: pointer;
3810
- }
3811
- .tools-popup-refresh-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
3812
- .tools-popup-update-btn {
3813
- background: var(--color-primary);
3814
- color: #fff;
3815
- border-color: var(--color-primary);
3816
- }
3817
- .tools-popup-update-btn:hover { background: var(--color-primary-dark); }
3818
-
3819
- /* ---------- Folder modal (if opened) ---------- */
3820
- body .folder-modal-overlay {
3821
- display: none !important;
3822
- position: fixed;
3823
- inset: 0;
3824
- z-index: 200;
3825
- background: rgba(15,23,42,0.45);
3826
- align-items: center;
3827
- justify-content: center;
3828
- padding: 1rem;
3829
- }
3830
- body .folder-modal-overlay.open { display: flex !important; }
3831
- .folder-modal {
3832
- width: 100%;
3833
- max-width: 560px;
3834
- max-height: 80vh;
3835
- background: var(--color-bg-raised);
3836
- border: 1px solid var(--color-border);
3837
- border-radius: var(--radius-lg);
3838
- box-shadow: var(--shadow-lg);
3839
- display: flex;
3840
- flex-direction: column;
3841
- overflow: hidden;
3842
- }
3843
- .folder-modal-header {
3844
- display: flex; justify-content: space-between; align-items: center;
3845
- padding: 0.75rem 1rem;
3846
- border-bottom: 1px solid var(--color-border);
3847
- }
3848
- .folder-modal-header h3 { margin: 0; font-size: 1rem; }
3849
- .folder-modal-close {
3850
- background: none; border: none; font-size: 1.5rem;
3851
- color: var(--color-text-secondary); cursor: pointer; line-height: 1;
3852
- }
3853
- .folder-modal-footer {
3854
- display: flex; gap: 0.5rem; justify-content: flex-end;
3855
- padding: 0.75rem 1rem;
3856
- border-top: 1px solid var(--color-border);
3857
- }
3858
-
3859
- /* ========== merged from ui-fixes-4.css ========== */
3860
- /* =====================================================================
3861
- ui-fixes-4.css — Responsive (mobile/tablet) + dark-theme polish
3862
- ===================================================================== */
3863
-
3864
- /* ---------- Tablet (≤ 1024px): narrower sidebar ---------- */
3865
- @media (max-width: 1024px) {
3866
- :root { --sidebar-width: 240px; }
3867
- .messages-wrapper { padding: 0.875rem 1rem; }
3868
- }
3869
-
3870
- /* ---------- Mobile (≤ 768px): sidebar becomes drawer ---------- */
3871
- @media (max-width: 768px) {
3872
- .app-shell { flex-direction: row; }
3873
-
3874
- .sidebar {
3875
- position: fixed;
3876
- top: 0; left: 0;
3877
- height: 100dvh;
3878
- width: 280px;
3879
- max-width: 85vw;
3880
- transform: translateX(-100%);
3881
- z-index: 80;
3882
- box-shadow: var(--shadow-lg);
3883
- transition: transform 0.2s ease-out !important;
3884
- }
3885
- .sidebar.open { transform: translateX(0); }
3886
-
3887
- .sidebar-overlay {
3888
- display: none;
3889
- position: fixed;
3890
- inset: 0;
3891
- background: rgba(15,23,42,0.5);
3892
- z-index: 70;
3893
- }
3894
- .sidebar-overlay.open { display: block; }
3895
-
3896
- .main-panel { width: 100%; }
3897
- .main-header { padding: 0 0.5rem; }
3898
- .header-title { font-size: 0.875rem; }
3899
- .header-controls { gap: 0.25rem; }
3900
-
3901
- /* hide tertiary chips in very tight space */
3902
- .status-badge span { display: none; }
3903
- .status-badge { padding: 0.25rem; }
3904
-
3905
- /* input card on mobile */
3906
- .input-section { padding: 0.5rem 0.5rem calc(0.5rem + env(safe-area-inset-bottom)); }
3907
- .input-card { padding: 0.375rem 0.5rem; border-radius: var(--radius-md); }
3908
- .input-card-textarea { font-size: 1rem; /* prevent iOS zoom */ }
3909
- .input-chip-select { max-width: 140px; }
3910
-
3911
- .welcome-title { font-size: 1.375rem; }
3912
- .welcome-logo { width: 56px; height: 56px; font-size: 1.75rem; }
3913
- .messages-wrapper { padding: 0.75rem 0.75rem 1rem; }
3914
- }
3915
-
3916
- /* ---------- Small mobile (≤ 480px): hide noncritical header buttons ---------- */
3917
- @media (max-width: 480px) {
3918
- .model-dl-indicator { display: none; }
3919
- .sidebar-header h2 { display: none; }
3920
- .input-card-actions .input-icon-btn:not(.input-send-btn):not(.voice-mic-btn) { display: none; }
3921
- }
3922
-
3923
- /* ---------- Touch targets: ensure 40px minimum on pointer:coarse ---------- */
3924
- @media (pointer: coarse) {
3925
- .sidebar-toggle-btn,
3926
- .theme-toggle-btn,
3927
- .header-icon-btn,
3928
- .input-icon-btn,
3929
- .sidebar-overflow-btn,
3930
- .view-toggle-btn,
3931
- .status-cancel-btn {
3932
- min-width: 40px;
3933
- min-height: 40px;
3934
- }
3935
- .conversation-item { padding: 0.625rem 0.625rem; }
3936
- }
3937
-
3938
- /* ---------- Focus-visible ring: accessibility, non-intrusive ---------- */
3939
- button:focus-visible,
3940
- select:focus-visible,
3941
- input:focus-visible,
3942
- textarea:focus-visible {
3943
- outline: 2px solid var(--color-primary);
3944
- outline-offset: 2px;
3945
- }
3946
-
3947
- /* ---------- Dark mode: neutral grey palette ---------- */
3948
- html.dark {
3949
- --color-primary: #3b82f6;
3950
- --color-primary-dark: #2563eb;
3951
- --color-bg-primary: #1a1a1a;
3952
- --color-bg-secondary: #212121;
3953
- --color-bg-raised: #2a2a2a;
3954
- --color-bg-hover: rgba(255,255,255,0.06);
3955
- --color-text-primary: #e5e5e5;
3956
- --color-text-secondary: #a3a3a3;
3957
- --color-border: #333333;
3958
- --color-focus-ring: rgba(163,163,163,0.35);
3959
- }
3960
- html.dark body { background: var(--color-bg-primary); color: var(--color-text-primary); }
3961
- html.dark .sidebar { background: #161616; border-right: 1px solid var(--color-border); }
3962
- html.dark .main-header,
3963
- html.dark .view-toggle-bar,
3964
- html.dark .input-section { background: var(--color-bg-primary); }
3965
- html.dark .input-card { background: #161616; border-color: var(--color-border); }
3966
- html.dark .input-chip-select { background: #161616; }
3967
- html.dark .status-badge { background: #161616; }
3968
- html.dark .sidebar-search-input { background: #161616; }
3969
- html.dark .conversation-item.active { background: #2f2f2f; color: var(--color-text-primary); }
3970
- html.dark .tools-popup,
3971
- html.dark .folder-modal-overlay { background: rgba(0,0,0,0.65); }
3972
-
3973
- /* Light mode polish: softer sidebar separation */
3974
- html:not(.dark) .sidebar { border-right: 1px solid var(--color-border); }
3975
- html:not(.dark) .main-header { background: var(--color-bg-primary); }
3976
-
3977
- /* ---------- Scrollbar styling (subtle) ---------- */
3978
- .sidebar-list,
3979
- #output-scroll,
3980
- .tools-popup-scroll {
3981
- scrollbar-width: thin;
3982
- scrollbar-color: var(--color-border) transparent;
3983
- }
3984
- .sidebar-list::-webkit-scrollbar,
3985
- #output-scroll::-webkit-scrollbar,
3986
- .tools-popup-scroll::-webkit-scrollbar {
3987
- width: 8px;
3988
- }
3989
- .sidebar-list::-webkit-scrollbar-thumb,
3990
- #output-scroll::-webkit-scrollbar-thumb,
3991
- .tools-popup-scroll::-webkit-scrollbar-thumb {
3992
- background: var(--color-border);
3993
- border-radius: 4px;
3994
- border: 2px solid transparent;
3995
- background-clip: padding-box;
3996
- }
3997
- .sidebar-list::-webkit-scrollbar-thumb:hover,
3998
- #output-scroll::-webkit-scrollbar-thumb:hover {
3999
- background: var(--color-text-secondary);
4000
- background-clip: padding-box;
4001
- border: 2px solid transparent;
4002
- }
4003
-
4004
- /* ---------- Reduced motion ---------- */
4005
- @media (prefers-reduced-motion: reduce) {
4006
- *, *::before, *::after {
4007
- animation-duration: 0.01ms !important;
4008
- transition-duration: 0.01ms !important;
4009
- }
4010
- }
4011
-
4012
- /* ---------- Hide legacy selectors leftovers if present ---------- */
4013
- .agent-selector:empty,
4014
- .model-selector:empty,
4015
- .preset-selector:empty { display: none; }