agentgui 1.0.749 → 1.0.751

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.
@@ -0,0 +1,3057 @@
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: #1f2937;
9
+ --color-text-primary: #111827;
10
+ --color-text-secondary: #6b7280;
11
+ --color-border: #e5e7eb;
12
+ --color-success: #10b981;
13
+ --color-error: #ef4444;
14
+ --color-warning: #f59e0b;
15
+ --color-info: #0891b2;
16
+ --sidebar-width: 300px;
17
+ --header-height: 52px;
18
+ --msg-max-width: 800px;
19
+ }
20
+
21
+ html.dark {
22
+ --color-bg-primary: #1a1a1a;
23
+ --color-bg-secondary: #242424;
24
+ --color-text-primary: #e5e5e5;
25
+ --color-text-secondary: #a3a3a3;
26
+ --color-border: #333333;
27
+ --color-primary: #737373;
28
+ --color-primary-dark: #525252;
29
+ }
30
+
31
+ html, body {
32
+ margin: 0;
33
+ padding: 0;
34
+ height: 100%;
35
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
36
+ background-color: var(--color-bg-primary);
37
+ color: var(--color-text-primary);
38
+ }
39
+
40
+ /* ===== ROOT LAYOUT: sidebar + main, full viewport ===== */
41
+ .app-shell {
42
+ display: flex;
43
+ height: 100dvh;
44
+ overflow: hidden;
45
+ padding-top: env(safe-area-inset-top);
46
+ padding-bottom: env(safe-area-inset-bottom);
47
+ padding-left: env(safe-area-inset-left);
48
+ padding-right: env(safe-area-inset-right);
49
+ }
50
+
51
+ /* ===== SIDEBAR ===== */
52
+ .sidebar {
53
+ width: var(--sidebar-width);
54
+ flex-shrink: 0;
55
+ display: flex;
56
+ flex-direction: column;
57
+ background-color: var(--color-bg-secondary);
58
+ overflow: hidden;
59
+ transition: none !important;
60
+ animation: none !important;
61
+ }
62
+
63
+ .sidebar.collapsed {
64
+ width: 0;
65
+ min-width: 0;
66
+ border-right: none;
67
+ transition: none !important;
68
+ animation: none !important;
69
+ }
70
+
71
+ .sidebar-header {
72
+ padding: 0.75rem 1rem;
73
+ display: flex;
74
+ justify-content: space-between;
75
+ align-items: center;
76
+ flex-shrink: 0;
77
+ min-height: var(--header-height);
78
+ }
79
+
80
+ .sidebar-header h2 {
81
+ margin: 0;
82
+ font-size: 0.875rem;
83
+ font-weight: 600;
84
+ text-transform: uppercase;
85
+ letter-spacing: 0.05em;
86
+ color: var(--color-text-secondary);
87
+ white-space: nowrap;
88
+ overflow: hidden;
89
+ }
90
+
91
+ .sidebar-new-btn {
92
+ padding: 0.375rem 0.625rem;
93
+ font-size: 0.75rem;
94
+ background-color: var(--color-primary);
95
+ color: white;
96
+ border: none;
97
+ border-radius: 0.375rem;
98
+ cursor: pointer;
99
+ transition: background-color 0.2s;
100
+ white-space: nowrap;
101
+ flex-shrink: 0;
102
+ }
103
+
104
+ .sidebar-new-btn:hover { background-color: var(--color-primary-dark); }
105
+
106
+ .sidebar-header-actions {
107
+ display: flex;
108
+ gap: 0.375rem;
109
+ align-items: center;
110
+ flex-shrink: 0;
111
+ }
112
+
113
+ .sidebar-clone-btn {
114
+ padding: 0.375rem 0.625rem;
115
+ font-size: 0.75rem;
116
+ background-color: var(--color-bg-primary);
117
+ color: var(--color-text-primary);
118
+ border: 1px solid var(--color-border);
119
+ border-radius: 0.375rem;
120
+ cursor: pointer;
121
+ transition: all 0.2s;
122
+ white-space: nowrap;
123
+ flex-shrink: 0;
124
+ }
125
+
126
+ .sidebar-clone-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
127
+
128
+ .clone-input-bar {
129
+ display: flex;
130
+ align-items: center;
131
+ gap: 0.375rem;
132
+ padding: 0.375rem 0.75rem;
133
+ background: var(--color-bg-primary);
134
+ border-bottom: 1px solid var(--color-border);
135
+ flex-shrink: 0;
136
+ }
137
+
138
+ .clone-input {
139
+ flex: 1;
140
+ min-width: 0;
141
+ padding: 0.375rem 0.5rem;
142
+ font-size: 0.8rem;
143
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
144
+ border: 1px solid var(--color-border);
145
+ border-radius: 0.25rem;
146
+ background: var(--color-bg-secondary);
147
+ color: var(--color-text-primary);
148
+ outline: none;
149
+ }
150
+
151
+ .clone-input:focus { border-color: var(--color-primary); }
152
+
153
+ .clone-go-btn {
154
+ padding: 0.375rem 0.625rem;
155
+ font-size: 0.75rem;
156
+ font-weight: 600;
157
+ background: var(--color-primary);
158
+ color: white;
159
+ border: none;
160
+ border-radius: 0.25rem;
161
+ cursor: pointer;
162
+ flex-shrink: 0;
163
+ transition: background-color 0.15s;
164
+ }
165
+
166
+ .clone-go-btn:hover { background-color: var(--color-primary-dark); }
167
+ .clone-go-btn:disabled { opacity: 0.5; cursor: not-allowed; }
168
+
169
+ .clone-cancel-btn {
170
+ padding: 0.25rem 0.5rem;
171
+ font-size: 1rem;
172
+ background: none;
173
+ border: none;
174
+ cursor: pointer;
175
+ color: var(--color-text-secondary);
176
+ flex-shrink: 0;
177
+ line-height: 1;
178
+ }
179
+
180
+ .clone-cancel-btn:hover { color: var(--color-text-primary); }
181
+
182
+ .clone-status {
183
+ padding: 0.375rem 0.75rem;
184
+ font-size: 0.75rem;
185
+ background: var(--color-bg-primary);
186
+ border-bottom: 1px solid var(--color-border);
187
+ flex-shrink: 0;
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 0.5rem;
191
+ }
192
+
193
+ .clone-status.cloning { color: var(--color-primary); }
194
+ .clone-status.clone-error { color: var(--color-error); }
195
+ .clone-status.clone-success { color: var(--color-success); }
196
+
197
+ .sidebar-list {
198
+ flex: 1;
199
+ overflow-y: auto;
200
+ overflow-x: hidden;
201
+ list-style: none;
202
+ margin: 0;
203
+ padding: 0.5rem 0;
204
+ -webkit-overflow-scrolling: touch;
205
+ }
206
+
207
+ .conversation-item {
208
+ padding: 0.75rem 0.75rem;
209
+ margin: 0.125rem 0.5rem;
210
+ border-radius: 0.375rem;
211
+ cursor: pointer;
212
+ transition: background-color 0.15s;
213
+ border-left: 3px solid transparent;
214
+ user-select: none;
215
+ }
216
+
217
+ .conversation-item:hover { background-color: var(--color-bg-primary); }
218
+
219
+ .conversation-item.active {
220
+ background-color: var(--color-primary);
221
+ color: white;
222
+ border-left-color: var(--color-primary-dark);
223
+ }
224
+
225
+ .conversation-item-title {
226
+ font-weight: 500;
227
+ font-size: 0.875rem;
228
+ margin: 0;
229
+ white-space: nowrap;
230
+ overflow: hidden;
231
+ text-overflow: ellipsis;
232
+ }
233
+
234
+ .conversation-item-meta {
235
+ font-size: 0.75rem;
236
+ color: var(--color-text-secondary);
237
+ margin-top: 0.125rem;
238
+ white-space: nowrap;
239
+ overflow: hidden;
240
+ text-overflow: ellipsis;
241
+ }
242
+
243
+ .conversation-item.active .conversation-item-meta { color: rgba(255,255,255,0.7); }
244
+
245
+ .conversation-streaming-badge {
246
+ display: inline-flex;
247
+ align-items: center;
248
+ margin-right: 0.375rem;
249
+ vertical-align: middle;
250
+ }
251
+
252
+ .streaming-dot {
253
+ display: inline-block;
254
+ width: 0.5rem;
255
+ height: 0.5rem;
256
+ border-radius: 50%;
257
+ background-color: var(--color-success);
258
+ animation: pulse 1.5s ease-in-out infinite;
259
+ }
260
+
261
+ .conversation-item.active .streaming-dot {
262
+ background-color: #fff;
263
+ }
264
+
265
+ .conversation-item {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: space-between;
269
+ gap: 0.5rem;
270
+ }
271
+
272
+ .conversation-item-content {
273
+ flex: 1;
274
+ min-width: 0;
275
+ overflow: hidden;
276
+ }
277
+
278
+ .conversation-item-delete {
279
+ flex-shrink: 0;
280
+ width: 28px;
281
+ height: 28px;
282
+ padding: 0;
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ background: transparent;
287
+ border: none;
288
+ border-radius: 0.25rem;
289
+ cursor: pointer;
290
+ color: var(--color-text-secondary);
291
+ opacity: 0;
292
+ transition: all 0.15s;
293
+ }
294
+
295
+ .conversation-item:hover .conversation-item-delete {
296
+ opacity: 1;
297
+ }
298
+
299
+ .conversation-item-delete:hover {
300
+ background-color: var(--color-error);
301
+ color: white;
302
+ }
303
+
304
+ .conversation-item.active .conversation-item-delete {
305
+ color: rgba(255,255,255,0.8);
306
+ }
307
+
308
+ .conversation-item.active .conversation-item-delete:hover {
309
+ background-color: rgba(255,255,255,0.2);
310
+ color: white;
311
+ }
312
+
313
+ .sidebar-empty {
314
+ padding: 2rem 1rem;
315
+ text-align: center;
316
+ color: var(--color-text-secondary);
317
+ font-size: 0.875rem;
318
+ }
319
+
320
+ /* ===== MAIN PANEL: header + messages + input ===== */
321
+ .main-panel {
322
+ flex: 1;
323
+ display: flex;
324
+ flex-direction: column;
325
+ overflow: hidden;
326
+ min-width: 0;
327
+ background-color: var(--color-bg-primary);
328
+ }
329
+
330
+ /* --- Header bar --- */
331
+ .main-header {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 0.75rem;
335
+ padding: 0 1rem;
336
+ height: var(--header-height);
337
+ min-height: var(--header-height);
338
+ flex-shrink: 0;
339
+ background-color: var(--color-bg-secondary);
340
+ }
341
+
342
+ .sidebar-toggle-btn {
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: center;
346
+ width: 36px;
347
+ height: 36px;
348
+ background: none;
349
+ border: none;
350
+ border-radius: 0.375rem;
351
+ cursor: pointer;
352
+ color: var(--color-text-secondary);
353
+ flex-shrink: 0;
354
+ transition: none;
355
+ }
356
+
357
+ .sidebar-toggle-btn:hover {
358
+ background-color: var(--color-bg-primary);
359
+ color: var(--color-text-primary);
360
+ transition: none;
361
+ }
362
+
363
+ .sidebar-toggle-btn svg {
364
+ width: 18px;
365
+ height: 18px;
366
+ }
367
+
368
+ .header-title {
369
+ font-size: 1.125rem;
370
+ font-weight: 600;
371
+ margin: 0;
372
+ flex: 1;
373
+ min-width: 0;
374
+ overflow: hidden;
375
+ text-overflow: ellipsis;
376
+ white-space: nowrap;
377
+ }
378
+
379
+ .header-controls {
380
+ display: flex;
381
+ gap: 0.5rem;
382
+ align-items: center;
383
+ flex-shrink: 0;
384
+ }
385
+
386
+ .status-badge {
387
+ display: inline-flex;
388
+ align-items: center;
389
+ gap: 0.375rem;
390
+ padding: 0.25rem 0.625rem;
391
+ border-radius: 1rem;
392
+ font-size: 0.75rem;
393
+ font-weight: 500;
394
+ background-color: var(--color-bg-primary);
395
+ }
396
+
397
+ .status-indicator {
398
+ width: 0.5rem;
399
+ height: 0.5rem;
400
+ border-radius: 50%;
401
+ background-color: var(--color-error);
402
+ animation: pulse 2s infinite;
403
+ }
404
+
405
+ .status-indicator[data-status="connected"] { background-color: var(--color-success); }
406
+ .status-indicator[data-status="reconnecting"],
407
+ .status-indicator[data-status="connecting"] { background-color: var(--color-warning); animation: pulse 1s infinite; }
408
+
409
+ @keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.5; } }
410
+
411
+ .theme-toggle-btn {
412
+ display: flex;
413
+ align-items: center;
414
+ justify-content: center;
415
+ width: 36px;
416
+ height: 36px;
417
+ background: none;
418
+ border: none;
419
+ border-radius: 0.375rem;
420
+ cursor: pointer;
421
+ color: var(--color-text-secondary);
422
+ transition: background-color 0.15s;
423
+ }
424
+
425
+ .theme-toggle-btn:hover {
426
+ background-color: var(--color-bg-primary);
427
+ color: var(--color-text-primary);
428
+ }
429
+
430
+ .script-buttons { display: flex; gap: 0.25rem; align-items: center; }
431
+ .header-icon-btn {
432
+ display: flex; align-items: center; justify-content: center;
433
+ width: 36px; height: 36px; background: none; border: none;
434
+ border-radius: 0.375rem; cursor: pointer; color: var(--color-text-secondary);
435
+ transition: background-color 0.15s, color 0.15s;
436
+ }
437
+ .header-icon-btn:hover { background-color: var(--color-bg-primary); color: var(--color-text-primary); }
438
+ .header-icon-btn svg { width: 20px; height: 20px; }
439
+ #scriptStartBtn { color: var(--color-success); }
440
+ #scriptStartBtn:hover { background-color: rgba(16,185,129,0.1); color: var(--color-success); }
441
+ .script-dev-btn { color: var(--color-info); }
442
+ .script-dev-btn:hover { background-color: rgba(8,145,178,0.1); color: var(--color-info); }
443
+ .script-stop-btn { color: var(--color-error); }
444
+ .script-stop-btn:hover { background-color: rgba(239,68,68,0.1); color: var(--color-error); }
445
+
446
+ .agent-auth-btn { color: var(--color-text-secondary); position: relative; }
447
+ .agent-auth-btn.auth-ok { color: var(--color-success); }
448
+ .agent-auth-btn.auth-warn { color: var(--color-warning); }
449
+ .agent-auth-btn:hover { background-color: var(--color-bg-primary); }
450
+ .agent-auth-dropdown {
451
+ position: absolute; top: 100%; right: 0; z-index: 100;
452
+ min-width: 260px; padding: 0.25rem 0;
453
+ background: var(--color-bg-secondary); border: 1px solid var(--color-border);
454
+ border-radius: 0.5rem; box-shadow: 0 4px 12px rgba(0,0,0,0.15);
455
+ display: none;
456
+ }
457
+ .agent-auth-dropdown.open { display: block; }
458
+ .agent-auth-item {
459
+ display: flex; align-items: center; gap: 0.5rem;
460
+ padding: 0.5rem 0.75rem; cursor: pointer; font-size: 0.8125rem;
461
+ color: var(--color-text-primary); border: none; background: none; width: 100%;
462
+ text-align: left;
463
+ }
464
+ .agent-auth-item:hover { background: var(--color-bg-primary); }
465
+ .agent-auth-dot {
466
+ width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
467
+ }
468
+ .agent-auth-dot.ok { background: var(--color-success); }
469
+ .agent-auth-dot.missing { background: var(--color-warning); }
470
+ .agent-auth-dot.unknown { background: var(--color-text-secondary); }
471
+ .agent-auth-section-header {
472
+ padding: 0.375rem 0.75rem; font-size: 0.6875rem; font-weight: 600;
473
+ text-transform: uppercase; letter-spacing: 0.05em;
474
+ color: var(--color-text-secondary); user-select: none;
475
+ }
476
+
477
+ .terminal-container {
478
+ flex: 1; display: flex; flex-direction: column; overflow: hidden; background: #1e1e1e; min-height: 0;
479
+ }
480
+ .terminal-output { flex: 1; overflow: hidden; position: relative; min-height: 0; }
481
+
482
+ /* --- View toggle bar --- */
483
+ .view-toggle-bar {
484
+ display: flex;
485
+ gap: 0;
486
+ background: var(--color-bg-secondary);
487
+ flex-shrink: 0;
488
+ padding: 0 1rem;
489
+ }
490
+
491
+ .view-toggle-btn {
492
+ padding: 0.5rem 1rem;
493
+ border: none;
494
+ background: none;
495
+ cursor: pointer;
496
+ font-size: 0.875rem;
497
+ font-weight: 500;
498
+ color: var(--color-text-secondary);
499
+ border-bottom: 2px solid transparent;
500
+ transition: all 0.2s;
501
+ min-height: 40px;
502
+ }
503
+
504
+ .view-toggle-btn:hover { color: var(--color-text-primary); }
505
+ .view-toggle-btn.active { color: var(--color-primary); border-bottom-color: var(--color-primary); }
506
+
507
+ .view-toggle-btn svg {
508
+ width: 1.2rem;
509
+ height: 1.2rem;
510
+ display: block;
511
+ margin: 0 auto;
512
+ }
513
+
514
+ /* --- Messages scroll area --- */
515
+ #output-scroll {
516
+ flex: 1;
517
+ overflow-y: auto;
518
+ overflow-x: hidden;
519
+ min-height: 0;
520
+ -webkit-overflow-scrolling: touch;
521
+ position: relative;
522
+ }
523
+
524
+ .messages-wrapper {
525
+ max-width: 100%;
526
+ margin: 0;
527
+ width: 100%;
528
+ padding: 0.75rem 2rem;
529
+ display: flex;
530
+ flex-direction: column;
531
+ }
532
+
533
+ #output {
534
+ display: flex;
535
+ flex-direction: column;
536
+ gap: 0;
537
+ flex: 1;
538
+ }
539
+
540
+ /* --- Conversation display --- */
541
+ .conversation-header {
542
+ padding: 0.5rem 0;
543
+ margin-bottom: 0.5rem;
544
+ }
545
+
546
+ .conversation-header h2 { margin: 0 0 0.25rem 0; font-size: 1.25rem; }
547
+ .conversation-header p { margin: 0; font-size: 0.8rem; color: var(--color-text-secondary); }
548
+
549
+ .conversation-messages { padding: 0; }
550
+
551
+ /* --- Messages --- */
552
+ .message {
553
+ margin-bottom: 0;
554
+ padding: 0.5rem 0.75rem;
555
+ border-radius: 0.75rem;
556
+ max-width: 85%;
557
+ word-break: break-word;
558
+ }
559
+
560
+ .message-user {
561
+ margin-left: auto;
562
+ border-bottom-right-radius: 0.25rem;
563
+ color: var(--color-text-primary);
564
+ }
565
+
566
+ .message-assistant {
567
+ margin-right: auto;
568
+ border-bottom-left-radius: 0.25rem;
569
+ color: var(--color-text-primary);
570
+ }
571
+
572
+ /* Consecutive assistant messages: join them visually */
573
+ .message-assistant + .message-assistant {
574
+ border-top-left-radius: 0;
575
+ border-top-right-radius: 0;
576
+ margin-top: -0.125rem;
577
+ padding-top: 0.25rem;
578
+ }
579
+ .message-assistant:has(+ .message-assistant) {
580
+ border-bottom-left-radius: 0;
581
+ border-bottom-right-radius: 0;
582
+ padding-bottom: 0.25rem;
583
+ }
584
+
585
+ .message-role {
586
+ font-weight: 600;
587
+ font-size: 0.7rem;
588
+ text-transform: uppercase;
589
+ letter-spacing: 0.04em;
590
+ margin-bottom: 0.125rem;
591
+ }
592
+
593
+ .message-user .message-role { color: #7a9abf; }
594
+ .message-assistant .message-role { color: #8a9a7a; }
595
+
596
+ .message-content {
597
+ font-size: 0.9rem;
598
+ line-height: 1.6;
599
+ white-space: pre-wrap;
600
+ word-break: break-word;
601
+ }
602
+
603
+ .message-timestamp {
604
+ font-size: 0.7rem;
605
+ margin-top: 0.25rem;
606
+ opacity: 0.5;
607
+ }
608
+
609
+ .message-user .message-timestamp { color: var(--color-text-secondary); }
610
+ .message-assistant .message-timestamp { color: var(--color-text-secondary); }
611
+
612
+ .message-blocks {
613
+ display: flex;
614
+ flex-direction: column;
615
+ gap: 0.125rem;
616
+ }
617
+
618
+ .message-text {
619
+ line-height: 1.6;
620
+ word-break: break-word;
621
+ white-space: pre-wrap;
622
+ }
623
+
624
+ .message-code {
625
+ background-color: var(--color-bg-code);
626
+ border-radius: 0.375rem;
627
+ padding: 0.5rem;
628
+ overflow-x: auto;
629
+ margin: 0.25rem 0;
630
+ }
631
+
632
+ .message-code pre {
633
+ margin: 0;
634
+ font-family: 'Courier New', monospace;
635
+ font-size: 0.85rem;
636
+ color: #e0e0e0;
637
+ }
638
+
639
+ .message-tool {
640
+ background-color: var(--color-primary);
641
+ color: white;
642
+ padding: 0.25rem 0.5rem;
643
+ border-radius: 0.25rem;
644
+ font-size: 0.75rem;
645
+ display: inline-block;
646
+ margin: 0.25rem 0;
647
+ }
648
+
649
+ /* --- Streaming block types --- */
650
+ .streaming-block-system {
651
+ padding: 0.375rem 0.75rem;
652
+ margin: 0;
653
+ background: rgba(59,130,246,0.08);
654
+ border-radius: 0.375rem;
655
+ font-size: 0.8rem;
656
+ display: flex;
657
+ align-items: center;
658
+ gap: 0.5rem;
659
+ }
660
+
661
+ .system-model-badge {
662
+ background: var(--color-primary);
663
+ color: white;
664
+ padding: 0.125rem 0.5rem;
665
+ border-radius: 1rem;
666
+ font-size: 0.7rem;
667
+ font-weight: 600;
668
+ white-space: nowrap;
669
+ }
670
+
671
+ .system-info {
672
+ color: var(--color-text-secondary);
673
+ font-size: 0.75rem;
674
+ }
675
+
676
+ .tool-input-details {
677
+ }
678
+
679
+ .tool-input-summary {
680
+ padding: 0.375rem 0.75rem;
681
+ font-size: 0.75rem;
682
+ color: var(--color-text-secondary);
683
+ cursor: pointer;
684
+ user-select: none;
685
+ }
686
+
687
+ .tool-input-summary:hover {
688
+ background: rgba(6,182,212,0.08);
689
+ }
690
+
691
+ .tool-input-pre {
692
+ margin: 0;
693
+ padding: 0.5rem 0.75rem;
694
+ font-size: 0.75rem;
695
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
696
+ background: rgba(0,0,0,0.03);
697
+ overflow-x: auto;
698
+ max-height: 200px;
699
+ overflow-y: auto;
700
+ white-space: pre-wrap;
701
+ word-break: break-all;
702
+ }
703
+
704
+ html.dark .tool-input-pre { background: rgba(255,255,255,0.03); }
705
+
706
+ .streaming-block-tool-result {
707
+ margin: 0;
708
+ border-radius: 0.375rem;
709
+ background: var(--color-bg-code);
710
+ overflow: hidden;
711
+ }
712
+
713
+ .tool-result-header {
714
+ padding: 0.375rem 0.75rem;
715
+ font-size: 0.7rem;
716
+ }
717
+
718
+ .tool-result-ok-badge {
719
+ color: #10b981;
720
+ font-weight: 600;
721
+ text-transform: uppercase;
722
+ letter-spacing: 0.05em;
723
+ }
724
+
725
+ .tool-result-error-badge {
726
+ color: #ef4444;
727
+ font-weight: 600;
728
+ text-transform: uppercase;
729
+ letter-spacing: 0.05em;
730
+ }
731
+
732
+ .tool-result-pre {
733
+ margin: 0;
734
+ padding: 0.5rem 0.75rem;
735
+ font-size: 0.75rem;
736
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
737
+ color: #d1d5db;
738
+ overflow-x: auto;
739
+ max-height: 300px;
740
+ overflow-y: auto;
741
+ white-space: pre-wrap;
742
+ word-break: break-all;
743
+ }
744
+
745
+ .streaming-block-tool-result.tool-result-error {
746
+ }
747
+
748
+ .streaming-block-result {
749
+ padding: 0.375rem 0.75rem;
750
+ margin: 0;
751
+ border-radius: 0.375rem;
752
+ background: rgba(16,185,129,0.08);
753
+ font-size: 0.8rem;
754
+ display: flex;
755
+ align-items: center;
756
+ gap: 0.5rem;
757
+ }
758
+
759
+ .streaming-block-result.result-error {
760
+ background: rgba(239,68,68,0.08);
761
+ }
762
+
763
+ .result-status {
764
+ font-weight: 600;
765
+ color: #10b981;
766
+ }
767
+
768
+ .result-error .result-status { color: #ef4444; }
769
+
770
+ .result-stats {
771
+ color: var(--color-text-secondary);
772
+ font-size: 0.75rem;
773
+ }
774
+
775
+ .streaming-indicator-label {
776
+ white-space: nowrap;
777
+ }
778
+
779
+ /* --- Input area: fixed at bottom --- */
780
+ .input-section {
781
+ flex-shrink: 0;
782
+ background-color: var(--color-bg-primary);
783
+ padding: 0.75rem 1rem;
784
+ }
785
+
786
+ .input-wrapper {
787
+ max-width: var(--msg-max-width);
788
+ margin: 0 auto;
789
+ width: 100%;
790
+ display: flex;
791
+ gap: 0.5rem;
792
+ align-items: flex-end;
793
+ }
794
+
795
+ .agent-selector {
796
+ padding: 0.5rem;
797
+ border: none;
798
+ border-radius: 0.375rem;
799
+ background-color: var(--color-bg-secondary);
800
+ color: var(--color-text-primary);
801
+ font-size: 0.8rem;
802
+ cursor: pointer;
803
+ flex-shrink: 0;
804
+ width: auto;
805
+ min-width: 80px;
806
+ max-width: 200px;
807
+ }
808
+
809
+
810
+
811
+
812
+
813
+ .agent-selector:disabled, .model-selector:disabled {
814
+ opacity: 0.5;
815
+ cursor: not-allowed;
816
+ background-color: var(--color-bg-secondary);
817
+ }
818
+
819
+ .agent-selector[data-streaming="true"], .model-selector[data-streaming="true"] {
820
+ opacity: 0.6;
821
+ cursor: not-allowed;
822
+ background-color: var(--color-bg-secondary);
823
+ }
824
+
825
+ .message-textarea[data-streaming="true"] {
826
+ opacity: 0.7;
827
+ cursor: not-allowed;
828
+ background-color: var(--color-bg-secondary);
829
+ }
830
+
831
+ .model-selector {
832
+ padding: 0.5rem;
833
+ border: none;
834
+ border-radius: 0.375rem;
835
+ background-color: var(--color-bg-secondary);
836
+ color: var(--color-text-primary);
837
+ font-size: 0.8rem;
838
+ cursor: pointer;
839
+ flex-shrink: 0;
840
+ width: auto;
841
+ min-width: 80px;
842
+ max-width: 220px;
843
+ }
844
+
845
+ .model-selector:empty, .model-selector[data-empty="true"] {
846
+ display: none;
847
+ }
848
+
849
+ .cli-selector {
850
+ display: inline-block;
851
+ }
852
+
853
+ .sub-agent-selector {
854
+ display: inline-block;
855
+ }
856
+
857
+ .message-input-container {
858
+ position: relative;
859
+ flex: 1;
860
+ display: flex;
861
+ }
862
+
863
+ .message-textarea {
864
+ flex: 1;
865
+ padding: 0.625rem 2.75rem 0.625rem 0.875rem;
866
+ border: none;
867
+ border-radius: 0.75rem;
868
+ background-color: var(--color-bg-secondary);
869
+ color: var(--color-text-primary);
870
+ font-family: inherit;
871
+ font-size: 0.9375rem;
872
+ resize: none;
873
+ min-height: 44px;
874
+ max-height: 150px;
875
+ line-height: 1.5;
876
+ transition: border-color 0.15s;
877
+ }
878
+
879
+ .message-textarea:focus {
880
+ outline: none;
881
+ box-shadow: 0 0 0 2px rgba(59,130,246,0.15);
882
+ }
883
+
884
+ .send-btn {
885
+ display: flex;
886
+ align-items: center;
887
+ justify-content: center;
888
+ width: 40px;
889
+ height: 40px;
890
+ background-color: var(--color-primary);
891
+ color: white;
892
+ border: none;
893
+ border-radius: 0.5rem;
894
+ cursor: pointer;
895
+ flex-shrink: 0;
896
+ transition: background-color 0.15s;
897
+ }
898
+
899
+ .send-btn:hover:not(:disabled) { background-color: var(--color-primary-dark); }
900
+ .send-btn:disabled { opacity: 0.4; cursor: not-allowed; }
901
+ .send-btn[data-streaming="true"] { opacity: 0.5; cursor: not-allowed; background-color: var(--color-primary); }
902
+
903
+ /* ===== Data-streaming state styling for all prompt controls ===== */
904
+ .input-section[data-streaming="true"] {
905
+ opacity: 0.85;
906
+ }
907
+
908
+ .input-section[data-streaming="true"] .message-textarea {
909
+ opacity: 0.7;
910
+ cursor: not-allowed;
911
+ background-color: var(--color-bg-secondary);
912
+ }
913
+
914
+ .input-section[data-streaming="true"] .agent-selector,
915
+ .input-section[data-streaming="true"] .model-selector {
916
+ opacity: 0.6;
917
+ cursor: not-allowed;
918
+ }
919
+
920
+ .input-section[data-streaming="true"] .send-btn {
921
+ opacity: 0.5;
922
+ cursor: not-allowed;
923
+ }
924
+
925
+ .send-btn svg { width: 18px; height: 18px; }
926
+
927
+ .stop-btn {
928
+ display: none;
929
+ align-items: center;
930
+ justify-content: center;
931
+ width: 40px;
932
+ height: 40px;
933
+ background-color: #dc2626;
934
+ color: white;
935
+ border: none;
936
+ border-radius: 0.5rem;
937
+ cursor: pointer;
938
+ flex-shrink: 0;
939
+ transition: background-color 0.15s;
940
+ }
941
+
942
+ .stop-btn:hover:not(:disabled) { background-color: #b91c1c; }
943
+ .stop-btn:disabled { opacity: 0.4; cursor: not-allowed; }
944
+ .stop-btn.visible { display: flex; }
945
+
946
+ .inject-btn {
947
+ display: none;
948
+ align-items: center;
949
+ justify-content: center;
950
+ width: 40px;
951
+ height: 40px;
952
+ background-color: #f59e0b;
953
+ color: white;
954
+ border: none;
955
+ border-radius: 0.5rem;
956
+ cursor: pointer;
957
+ flex-shrink: 0;
958
+ transition: background-color 0.15s;
959
+ margin-right: 0.25rem;
960
+ }
961
+
962
+ .inject-btn:hover:not(:disabled) { background-color: #d97706; }
963
+ .inject-btn:disabled { opacity: 0.4; cursor: not-allowed; }
964
+ .inject-btn.visible { display: flex; }
965
+
966
+ .queue-btn {
967
+ display: none;
968
+ align-items: center;
969
+ justify-content: center;
970
+ width: 40px;
971
+ height: 40px;
972
+ background-color: #8b5cf6;
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
+ margin-right: 0.25rem;
980
+ }
981
+
982
+ .queue-btn:hover:not(:disabled) { background-color: #7c3aed; }
983
+ .queue-btn:disabled { opacity: 0.4; cursor: not-allowed; }
984
+ .queue-btn.visible { display: flex; }
985
+
986
+
987
+ /* ===== OVERLAY for mobile sidebar ===== */
988
+ .sidebar-overlay {
989
+ display: none;
990
+ position: fixed;
991
+ top: 0; left: 0; width: 100%; height: 100%;
992
+ background: rgba(0,0,0,0.4);
993
+ z-index: 999;
994
+ transition: none;
995
+ animation: none;
996
+ }
997
+
998
+ .sidebar-overlay.visible { display: block; transition: none; animation: none; }
999
+
1000
+ /* ===== UTILITIES ===== */
1001
+ .text-secondary { color: var(--color-text-secondary); }
1002
+ .animate-spin { animation: spin 1s linear infinite; }
1003
+ @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
1004
+
1005
+ /* ===== HTML rendered content ===== */
1006
+ .html-rendered-label {
1007
+ padding: 0.25rem 0.5rem;
1008
+ background: #eff6ff;
1009
+ border-radius: 0.25rem;
1010
+ font-size: 0.75rem;
1011
+ font-weight: 600;
1012
+ color: #1d4ed8;
1013
+ text-transform: uppercase;
1014
+ letter-spacing: 0.05em;
1015
+ margin-bottom: 0.25rem;
1016
+ }
1017
+
1018
+ html.dark .html-rendered-label { background: #1e3a5f; color: #93c5fd; }
1019
+
1020
+ .html-content {
1021
+ background: #ffffff;
1022
+ padding: 0.5rem 0.75rem;
1023
+ border-radius: 0.375rem;
1024
+ overflow-x: auto;
1025
+ }
1026
+
1027
+ html.dark .html-content { background: #262626; }
1028
+
1029
+ .html-content table { border-collapse: collapse; width: 100%; margin: 0.5rem 0; }
1030
+ .html-content th, .html-content td { padding: 0.5rem 0.75rem; text-align: left; font-size: 0.875rem; }
1031
+ .html-content th { background: var(--color-bg-secondary); font-weight: 600; }
1032
+ .html-content ul, .html-content ol { padding-left: 1.5rem; margin: 0.5rem 0; }
1033
+ .html-content li { margin: 0.25rem 0; }
1034
+ .html-content h1, .html-content h2, .html-content h3, .html-content h4 { margin: 0.75rem 0 0.5rem; }
1035
+ .html-content p { margin: 0.5rem 0; }
1036
+
1037
+ pre { margin: 0; overflow-x: auto; }
1038
+ code { font-family: 'Monaco','Menlo','Ubuntu Mono', monospace; font-size: 0.875rem; }
1039
+ details { margin: 0.25rem 0; }
1040
+ summary { cursor: pointer; user-select: none; padding: 0.375rem; border-radius: 0.25rem; transition: background-color 0.2s; }
1041
+ summary:hover { background-color: var(--color-bg-secondary); }
1042
+ .permanently-expanded > summary { cursor: default; }
1043
+ .permanently-expanded > summary::before { display: none; }
1044
+ .permanently-expanded > summary::-webkit-details-marker { display: none; }
1045
+ .permanently-expanded > summary::marker { display: none; content: ''; }
1046
+
1047
+ /* ===== Folder Browser Modal ===== */
1048
+ .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; }
1049
+ .folder-modal-overlay.visible { display:flex; }
1050
+ .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); }
1051
+ .folder-modal-header { padding:1rem; display:flex; justify-content:space-between; align-items:center; flex-shrink:0; }
1052
+ .folder-modal-header h3 { margin:0; font-size:1rem; font-weight:600; }
1053
+ .folder-modal-close { background:none; border:none; font-size:1.25rem; cursor:pointer; color:var(--color-text-secondary); padding:0.25rem; line-height:1; }
1054
+ .folder-modal-close:hover { color:var(--color-text-primary); }
1055
+ .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; }
1056
+ .folder-breadcrumb-segment { cursor:pointer; color:var(--color-primary); padding:0.125rem 0.25rem; border-radius:0.25rem; }
1057
+ .folder-breadcrumb-segment:hover { background:var(--color-bg-primary); text-decoration:underline; }
1058
+ .folder-breadcrumb-separator { color:var(--color-text-secondary); }
1059
+ .folder-list { flex:1; overflow-y:auto; min-height:200px; max-height:400px; list-style:none; margin:0; padding:0; }
1060
+ .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; }
1061
+ .folder-list-item:hover { background:var(--color-bg-secondary); }
1062
+ .folder-list-item-icon { font-size:1rem; flex-shrink:0; width:1.25rem; text-align:center; }
1063
+ .folder-list-item-name { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
1064
+ .folder-list-empty { padding:2rem 1rem; text-align:center; color:var(--color-text-secondary); font-size:0.875rem; }
1065
+ .folder-list-loading { padding:2rem 1rem; text-align:center; color:var(--color-text-secondary); font-size:0.875rem; }
1066
+ .folder-list-error { padding:1rem; text-align:center; color:var(--color-error); font-size:0.875rem; }
1067
+ .folder-modal-footer { padding:0.75rem 1rem; display:flex; justify-content:flex-end; gap:0.5rem; flex-shrink:0; }
1068
+ .folder-modal-footer .btn { padding:0.5rem 1rem; font-size:0.8rem; }
1069
+
1070
+ .btn { padding:0.5rem 1rem; border:none; border-radius:0.375rem; font-weight:500; cursor:pointer; transition:all 0.15s; font-size:0.875rem; }
1071
+ .btn-primary { background-color:var(--color-primary); color:white; }
1072
+ .btn-primary:hover:not(:disabled) { background-color:var(--color-primary-dark); }
1073
+ .btn:disabled { opacity:0.5; cursor:not-allowed; }
1074
+ .btn-secondary { background:var(--color-bg-secondary); color:var(--color-text-primary); border:none; }
1075
+ .btn-secondary:hover { background:var(--color-border); }
1076
+
1077
+ /* ===== Drop zone ===== */
1078
+ .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; }
1079
+ .drop-zone-overlay.visible { display:flex; }
1080
+ .drop-zone-content { text-align:center; color:var(--color-primary); pointer-events:none; }
1081
+ .drop-zone-icon { font-size:3rem; font-weight:300; line-height:1; margin-bottom:0.5rem; }
1082
+ .drop-zone-text { font-size:1rem; font-weight:500; }
1083
+
1084
+ /* ===== Upload toast ===== */
1085
+ .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; }
1086
+ .upload-toast.success { background:var(--color-success); color:white; }
1087
+ .upload-toast.error { background:var(--color-error); color:white; }
1088
+ .upload-toast.info { background:var(--color-primary); color:white; }
1089
+
1090
+ /* ===== File browser ===== */
1091
+ .file-browser-container { flex:1; min-height:0; overflow:hidden; }
1092
+ .file-browser-iframe { width:100%; height:100%; border:none; }
1093
+ .voice-iframe { width:100%; height:100%; border:none; }
1094
+
1095
+ /* ===== RESPONSIVE: MOBILE ===== */
1096
+ @media (max-width: 768px) {
1097
+ :root { --sidebar-width: 280px; }
1098
+
1099
+ .sidebar {
1100
+ position: fixed;
1101
+ top: 0; left: 0;
1102
+ height: 100%;
1103
+ z-index: 1000;
1104
+ transform: translateX(-100%);
1105
+ box-shadow: none;
1106
+ width: var(--sidebar-width);
1107
+ transition: none !important;
1108
+ animation: none !important;
1109
+ }
1110
+
1111
+ .sidebar.collapsed { transform: translateX(-100%); width: var(--sidebar-width); transition: none !important; animation: none !important; }
1112
+ .sidebar.mobile-visible { transform: translateX(0); box-shadow: 4px 0 20px rgba(0,0,0,0.2); transition: none !important; animation: none !important; }
1113
+
1114
+ .main-header { padding: 0 0.75rem; }
1115
+ .header-title { font-size: 1rem; }
1116
+
1117
+ .messages-wrapper { padding: 0.5rem 0.75rem; }
1118
+
1119
+ .message { max-width: 90%; }
1120
+
1121
+ .input-section {
1122
+ padding: 0.5rem 0.75rem;
1123
+ padding-bottom: calc(0.5rem + env(safe-area-inset-bottom));
1124
+ }
1125
+
1126
+ .message-textarea { font-size: 16px; }
1127
+
1128
+ .conversation-item { padding: 0.875rem 0.75rem; min-height: 44px; }
1129
+ .sidebar-new-btn { min-height: 44px; min-width: 44px; padding: 0.5rem 0.75rem; }
1130
+
1131
+ .status-badge { padding: 0.25rem 0.5rem; font-size: 0.7rem; }
1132
+
1133
+ .view-toggle-btn { flex: 1; text-align: center; }
1134
+ }
1135
+
1136
+ @media (max-width: 480px) {
1137
+ .sidebar { width: calc(100% - 3rem); max-width: 320px; }
1138
+ .message { max-width: 95%; }
1139
+ .messages-wrapper { padding: 0.375rem 0.5rem; }
1140
+ .input-section { padding: 0.5rem; padding-bottom: calc(0.5rem + env(safe-area-inset-bottom)); }
1141
+ }
1142
+
1143
+ /* ===== SCROLLBAR STYLING ===== */
1144
+ ::-webkit-scrollbar {
1145
+ width: 10px;
1146
+ height: 10px;
1147
+ }
1148
+
1149
+ ::-webkit-scrollbar-track {
1150
+ background: transparent;
1151
+ }
1152
+
1153
+ ::-webkit-scrollbar-thumb {
1154
+ background: #cbd5e1;
1155
+ border-radius: 8px;
1156
+ border: 3px solid transparent;
1157
+ background-clip: padding-box;
1158
+ transition: background-color 0.2s;
1159
+ }
1160
+
1161
+ ::-webkit-scrollbar-thumb:hover {
1162
+ background-color: #94a3b8;
1163
+ background-clip: padding-box;
1164
+ }
1165
+
1166
+ html.dark ::-webkit-scrollbar-thumb {
1167
+ background: #475569;
1168
+ background-clip: padding-box;
1169
+ }
1170
+
1171
+ html.dark ::-webkit-scrollbar-thumb:hover {
1172
+ background-color: #64748b;
1173
+ background-clip: padding-box;
1174
+ }
1175
+
1176
+ /* Firefox scrollbar */
1177
+ * {
1178
+ scrollbar-width: thin;
1179
+ scrollbar-color: #cbd5e1 transparent;
1180
+ }
1181
+
1182
+ html.dark * {
1183
+ scrollbar-color: #475569 transparent;
1184
+ }
1185
+
1186
+ .voice-mic-btn {
1187
+ position: absolute;
1188
+ top: 4px;
1189
+ right: 4px;
1190
+ display: flex;
1191
+ align-items: center;
1192
+ justify-content: center;
1193
+ width: 36px;
1194
+ height: 36px;
1195
+ background: var(--color-bg-secondary);
1196
+ color: var(--color-text-secondary);
1197
+ border: 2px solid var(--color-border);
1198
+ border-radius: 50%;
1199
+ cursor: pointer;
1200
+ flex-shrink: 0;
1201
+ transition: all 0.2s;
1202
+ }
1203
+
1204
+ .voice-mic-btn:hover {
1205
+ border-color: var(--color-primary);
1206
+ color: var(--color-primary);
1207
+ }
1208
+
1209
+ .voice-mic-btn.loading {
1210
+ opacity: 0.5;
1211
+ cursor: wait;
1212
+ animation: mic-loading-spin 2s linear infinite;
1213
+ }
1214
+
1215
+ @keyframes mic-loading-spin {
1216
+ 0% { border-color: var(--color-border); }
1217
+ 50% { border-color: var(--color-primary); }
1218
+ 100% { border-color: var(--color-border); }
1219
+ }
1220
+
1221
+ /* ===== TOOLS VIEW ===== */
1222
+ .tools-container {
1223
+ flex: 1;
1224
+ min-height: 0;
1225
+ overflow-y: auto;
1226
+ overflow-x: hidden;
1227
+ padding: 1.5rem 2rem;
1228
+ -webkit-overflow-scrolling: touch;
1229
+ }
1230
+
1231
+ .voice-mic-btn.recording {
1232
+ background: var(--color-error);
1233
+ border-color: var(--color-error);
1234
+ color: white;
1235
+ animation: pulse 1s ease-in-out infinite;
1236
+ }
1237
+
1238
+ .voice-mic-btn svg {
1239
+ width: 20px;
1240
+ height: 20px;
1241
+ }
1242
+
1243
+ .conversation-messages { contain: content; }
1244
+ .streaming-blocks { contain: content; }
1245
+ .sidebar-list { contain: strict; content-visibility: auto; }
1246
+ .message { contain: layout style; content-visibility: auto; contain-intrinsic-size: auto 80px; }
1247
+
1248
+ /* PM2 Monitor Panel */
1249
+ .pm2-monitor-panel {
1250
+ border-top: 1px solid var(--color-border);
1251
+ background: var(--color-bg-secondary);
1252
+ display: flex;
1253
+ flex-direction: column;
1254
+ max-height: 35vh;
1255
+ }
1256
+ .pm2-monitor-header {
1257
+ padding: 0.5rem 0.75rem;
1258
+ font-size: 0.75rem;
1259
+ font-weight: 600;
1260
+ text-transform: uppercase;
1261
+ letter-spacing: 0.05em;
1262
+ color: var(--color-text-secondary);
1263
+ display: flex;
1264
+ justify-content: space-between;
1265
+ align-items: center;
1266
+ background: var(--color-bg-primary);
1267
+ border-bottom: 1px solid var(--color-border);
1268
+ flex-shrink: 0;
1269
+ }
1270
+ .pm2-monitor-actions { display: flex; gap: 0.25rem; }
1271
+ .pm2-action-btn {
1272
+ background: none;
1273
+ border: none;
1274
+ color: var(--color-text-secondary);
1275
+ cursor: pointer;
1276
+ padding: 0.125rem 0.375rem;
1277
+ font-size: 0.875rem;
1278
+ line-height: 1;
1279
+ border-radius: 0.25rem;
1280
+ }
1281
+ .pm2-action-btn:hover { background: var(--color-bg-secondary); color: var(--color-text-primary); }
1282
+ .pm2-process-list { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 0.25rem 0; }
1283
+ .pm2-process-item {
1284
+ padding: 0.375rem 0.75rem;
1285
+ margin: 0.125rem 0.5rem;
1286
+ border-radius: 0.375rem;
1287
+ background: var(--color-bg-primary);
1288
+ border-left: 3px solid var(--color-border);
1289
+ font-size: 0.75rem;
1290
+ transition: background-color 0.15s;
1291
+ }
1292
+ .pm2-process-item:hover { background: var(--color-bg-secondary); }
1293
+ .pm2-process-item.online { border-left-color: var(--color-success); }
1294
+ .pm2-process-item.launching { border-left-color: var(--color-primary); }
1295
+ .pm2-process-item.stopping { border-left-color: var(--color-warning); }
1296
+ .pm2-process-item.stopped { border-left-color: var(--color-text-muted, #888); opacity: 0.7; }
1297
+ .pm2-process-item.errored { border-left-color: var(--color-error); }
1298
+ .pm2-process-item.waiting\ restart { border-left-color: var(--color-warning); }
1299
+ .pm2-status-dot {
1300
+ display: inline-block;
1301
+ width: 6px; height: 6px;
1302
+ border-radius: 50%;
1303
+ background: var(--color-text-secondary);
1304
+ vertical-align: middle;
1305
+ margin-left: 4px;
1306
+ }
1307
+ .pm2-status-online .pm2-status-dot,
1308
+ .pm2-process-item.online .pm2-status-dot { background: var(--color-success); }
1309
+ .pm2-status-launching .pm2-status-dot,
1310
+ .pm2-process-item.launching .pm2-status-dot { background: var(--color-primary); }
1311
+ .pm2-status-stopping .pm2-status-dot,
1312
+ .pm2-status-errored .pm2-status-dot,
1313
+ .pm2-process-item.errored .pm2-status-dot { background: var(--color-error); }
1314
+ .pm2-process-name {
1315
+ font-weight: 600;
1316
+ margin-bottom: 0.125rem;
1317
+ white-space: nowrap;
1318
+ overflow: hidden;
1319
+ text-overflow: ellipsis;
1320
+ }
1321
+ .pm2-process-meta {
1322
+ display: flex;
1323
+ gap: 0.5rem;
1324
+ font-size: 0.7rem;
1325
+ color: var(--color-text-secondary);
1326
+ flex-wrap: wrap;
1327
+ }
1328
+ .pm2-process-meta span {
1329
+ display: inline-flex;
1330
+ align-items: center;
1331
+ gap: 0.125rem;
1332
+ }
1333
+ .pm2-process-actions {
1334
+ margin-top: 0.25rem;
1335
+ display: flex;
1336
+ gap: 0.25rem;
1337
+ }
1338
+ .pm2-btn {
1339
+ padding: 0.125rem 0.375rem;
1340
+ font-size: 0.7rem;
1341
+ border-radius: 0.25rem;
1342
+ border: 1px solid var(--color-border);
1343
+ background: var(--color-bg-primary);
1344
+ color: var(--color-text-primary);
1345
+ cursor: pointer;
1346
+ transition: all 0.15s;
1347
+ }
1348
+ .pm2-btn:hover {
1349
+ background: var(--color-primary);
1350
+ color: white;
1351
+ border-color: var(--color-primary);
1352
+ }
1353
+ .pm2-btn.danger:hover {
1354
+ background: var(--color-error);
1355
+ border-color: var(--color-error);
1356
+ }
1357
+ .pm2-loading, .pm2-empty, .pm2-error {
1358
+ padding: 0.75rem;
1359
+ text-align: center;
1360
+ color: var(--color-text-secondary);
1361
+ font-size: 0.8rem;
1362
+ }
1363
+ @keyframes slideIn {
1364
+ from { transform: translateX(100%); opacity: 0; }
1365
+ to { transform: translateX(0); opacity: 1; }
1366
+ }
1367
+ @keyframes fadeOut {
1368
+ from { opacity: 1; }
1369
+ to { opacity: 0; }
1370
+ }
1371
+ .pm2-logs-modal {
1372
+ position: fixed;
1373
+ top: 0; left: 0; right: 0; bottom: 0;
1374
+ background: rgba(0,0,0,0.5);
1375
+ display: flex;
1376
+ align-items: center;
1377
+ justify-content: center;
1378
+ z-index: 1000;
1379
+ padding: 1rem;
1380
+ }
1381
+ .pm2-logs-content {
1382
+ background: var(--color-bg-primary);
1383
+ border-radius: 0.5rem;
1384
+ width: 100%;
1385
+ max-width: 800px;
1386
+ max-height: 80vh;
1387
+ display: flex;
1388
+ flex-direction: column;
1389
+ box-shadow: 0 4px 12px rgba(0,0,0,0.3);
1390
+ }
1391
+ .pm2-logs-header {
1392
+ padding: 0.75rem 1rem;
1393
+ border-bottom: 1px solid var(--color-border);
1394
+ display: flex;
1395
+ justify-content: space-between;
1396
+ align-items: center;
1397
+ font-weight: 600;
1398
+ }
1399
+ .pm2-logs-body {
1400
+ flex: 1;
1401
+ overflow-y: auto;
1402
+ padding: 0.75rem 1rem;
1403
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1404
+ font-size: 0.75rem;
1405
+ white-space: pre-wrap;
1406
+ background: var(--color-bg-code);
1407
+ color: #e6edf3;
1408
+ }
1409
+ .pm2-logs-footer {
1410
+ padding: 0.5rem 1rem;
1411
+ border-top: 1px solid var(--color-border);
1412
+ display: flex;
1413
+ justify-content: flex-end;
1414
+ gap: 0.5rem;
1415
+ }
1416
+
1417
+ /* ===== RESPONSIVE: TABLET ===== */
1418
+ @media (min-width: 769px) and (max-width: 1024px) {
1419
+ :root { --sidebar-width: 260px; }
1420
+ .messages-wrapper { padding: 0.5rem 1rem; }
1421
+ .input-section { padding: 0.5rem; }
1422
+ }
1423
+
1424
+ /* ===== SVG ICON SIZING (Tailwind utilities not loaded) ===== */
1425
+ .block-text svg, .block-code svg, .block-thinking svg,
1426
+ .block-tool-use svg, .block-tool-result svg, .block-image svg,
1427
+ .block-bash svg, .block-system svg, .block-generic svg,
1428
+ .block-error svg, .block-result svg,
1429
+ .event-streaming-start svg, .event-streaming-complete svg,
1430
+ .event-file-read svg, .event-file-write svg,
1431
+ .event-git-status svg, .event-command svg, .event-error svg,
1432
+ .event-tool-use svg, .event-generic svg {
1433
+ width: 1.25rem;
1434
+ height: 1.25rem;
1435
+ flex-shrink: 0;
1436
+ }
1437
+
1438
+ .icon-sm svg { width: 1rem !important; height: 1rem !important; }
1439
+ .icon-lg svg { width: 1.5rem !important; height: 1.5rem !important; }
1440
+
1441
+ /* ===== STREAMING BLOCK STYLES ===== */
1442
+ .block-text {
1443
+ margin-bottom: 0;
1444
+ padding: 0.5rem 0.75rem;
1445
+ border-radius: 0.5rem;
1446
+ line-height: 1.5;
1447
+ font-size: 0.9rem;
1448
+ }
1449
+
1450
+ .block-text + .block-text {
1451
+ margin-top: -0.25rem;
1452
+ padding-top: 0;
1453
+ border-top-left-radius: 0;
1454
+ border-top-right-radius: 0;
1455
+ }
1456
+
1457
+ .block-text:has(+ .block-text) {
1458
+ margin-bottom: 0;
1459
+ border-bottom-left-radius: 0;
1460
+ border-bottom-right-radius: 0;
1461
+ }
1462
+
1463
+ .block-code {
1464
+ margin-bottom: 0;
1465
+ border-radius: 0.5rem;
1466
+ overflow: hidden;
1467
+ }
1468
+
1469
+ .block-code .code-header {
1470
+ display: flex;
1471
+ align-items: center;
1472
+ justify-content: space-between;
1473
+ gap: 0.5rem;
1474
+ padding: 0.5rem 1rem;
1475
+ }
1476
+
1477
+ .block-code .code-header .lang-badge {
1478
+ font-size: 0.7rem;
1479
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1480
+ color: #9ca3af;
1481
+ text-transform: uppercase;
1482
+ letter-spacing: 0.05em;
1483
+ }
1484
+
1485
+ .block-code .copy-code-btn {
1486
+ background: none;
1487
+ border: none;
1488
+ color: #9ca3af;
1489
+ cursor: pointer;
1490
+ padding: 0.25rem;
1491
+ border-radius: 0.25rem;
1492
+ display: flex;
1493
+ align-items: center;
1494
+ transition: all 0.15s;
1495
+ }
1496
+
1497
+ .block-code .copy-code-btn:hover { color: #e5e7eb; background: #374151; }
1498
+
1499
+ .block-code pre {
1500
+ margin: 0;
1501
+ padding: 0.625rem 0.75rem;
1502
+ background: #111827;
1503
+ color: #e5e7eb;
1504
+ overflow-x: auto;
1505
+ font-size: 0.8rem;
1506
+ line-height: 1.5;
1507
+ }
1508
+
1509
+ .block-thinking {
1510
+ margin-bottom: 0;
1511
+ border-radius: 0.5rem;
1512
+ background: #f5f3ff;
1513
+ overflow: hidden;
1514
+ }
1515
+
1516
+ html.dark .block-thinking { }
1517
+
1518
+ .block-thinking summary {
1519
+ padding: 0.375rem 0.75rem;
1520
+ cursor: pointer;
1521
+ display: flex;
1522
+ align-items: center;
1523
+ gap: 0.5rem;
1524
+ font-weight: 600;
1525
+ font-size: 0.85rem;
1526
+ color: #5b21b6;
1527
+ user-select: none;
1528
+ background: none;
1529
+ border-radius: 0;
1530
+ }
1531
+
1532
+ html.dark .block-thinking summary { color: #c4b5fd; }
1533
+ .block-thinking summary:hover { }
1534
+
1535
+ .block-thinking .thinking-content {
1536
+ padding: 0.375rem 0.75rem;
1537
+ font-size: 0.85rem;
1538
+ color: #5b21b6;
1539
+ white-space: pre-wrap;
1540
+ line-height: 1.5;
1541
+ }
1542
+
1543
+ html.dark .block-thinking .thinking-content { color: #c4b5fd; }
1544
+
1545
+ /* --- Tool Use Block --- */
1546
+ .block-tool-use {
1547
+ margin-bottom: 0;
1548
+ border-radius: 0.5rem;
1549
+ overflow: hidden;
1550
+ }
1551
+
1552
+ html.dark .block-tool-use { }
1553
+
1554
+ .block-tool-use .tool-header {
1555
+ padding: 0.375rem 0.75rem;
1556
+ display: flex;
1557
+ align-items: center;
1558
+ gap: 0.375rem;
1559
+ }
1560
+
1561
+ html.dark .block-tool-use .tool-header { }
1562
+
1563
+ .block-tool-use .tool-header .tool-icon {
1564
+ display: flex;
1565
+ align-items: center;
1566
+ color: #0891b2;
1567
+ }
1568
+
1569
+ html.dark .block-tool-use .tool-header .tool-icon { color: #22d3ee; }
1570
+
1571
+ .block-tool-use .tool-header .tool-name {
1572
+ font-weight: 600;
1573
+ font-size: 0.85rem;
1574
+ color: #155e75;
1575
+ }
1576
+
1577
+ html.dark .block-tool-use .tool-header .tool-name { color: #67e8f9; }
1578
+
1579
+ .block-tool-use .tool-header .tool-name code {
1580
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1581
+ padding: 0.125rem 0.5rem;
1582
+ border-radius: 0.25rem;
1583
+ font-size: 0.8rem;
1584
+ }
1585
+
1586
+ html.dark .block-tool-use .tool-header .tool-name code { }
1587
+
1588
+ .block-tool-use .tool-params {
1589
+ padding: 0.5rem 0.75rem;
1590
+ }
1591
+
1592
+ .block-tool-use .tool-params .param-label {
1593
+ font-size: 0.7rem;
1594
+ text-transform: uppercase;
1595
+ letter-spacing: 0.05em;
1596
+ color: #0e7490;
1597
+ font-weight: 600;
1598
+ margin-bottom: 0.375rem;
1599
+ }
1600
+
1601
+ html.dark .block-tool-use .tool-params .param-label { color: #22d3ee; }
1602
+
1603
+ /* Tool parameter display styles */
1604
+ .tool-param-file {
1605
+ display: flex;
1606
+ align-items: center;
1607
+ gap: 0.5rem;
1608
+ padding: 0.5rem 0.75rem;
1609
+ background: var(--color-bg-primary);
1610
+ border-radius: 0.375rem;
1611
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1612
+ font-size: 0.8rem;
1613
+ color: var(--color-text-primary);
1614
+ overflow-x: auto;
1615
+ }
1616
+
1617
+ .tool-param-file .file-icon { color: #0891b2; flex-shrink: 0; font-size: 1rem; }
1618
+ .tool-param-file .file-dir { color: var(--color-text-secondary); }
1619
+ .tool-param-file .file-name { font-weight: 600; color: var(--color-text-primary); }
1620
+
1621
+ .tool-param-command {
1622
+ background: #111827;
1623
+ border-radius: 0.375rem;
1624
+ padding: 0.625rem 0.875rem;
1625
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1626
+ font-size: 0.8rem;
1627
+ color: #e5e7eb;
1628
+ overflow-x: auto;
1629
+ display: flex;
1630
+ align-items: flex-start;
1631
+ gap: 0.5rem;
1632
+ }
1633
+
1634
+ .tool-param-command .prompt-char { color: #34d399; font-weight: 700; flex-shrink: 0; }
1635
+ .tool-param-command .command-text { white-space: pre-wrap; word-break: break-all; }
1636
+
1637
+ .tool-param-diff {
1638
+ border-radius: 0.375rem;
1639
+ overflow: hidden;
1640
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1641
+ font-size: 0.75rem;
1642
+ }
1643
+
1644
+ .tool-param-diff .diff-header {
1645
+ padding: 0.375rem 0.75rem;
1646
+ background: var(--color-bg-secondary);
1647
+ font-weight: 600;
1648
+ font-size: 0.7rem;
1649
+ text-transform: uppercase;
1650
+ letter-spacing: 0.03em;
1651
+ color: var(--color-text-secondary);
1652
+ }
1653
+
1654
+ .tool-param-diff .diff-old {
1655
+ padding: 0.5rem 0.75rem;
1656
+ background: #fef2f2;
1657
+ color: #991b1b;
1658
+ white-space: pre-wrap;
1659
+ word-break: break-all;
1660
+ max-height: 200px;
1661
+ overflow-y: auto;
1662
+ }
1663
+
1664
+ html.dark .tool-param-diff .diff-old { background: #1c0f0f; color: #fca5a5; }
1665
+
1666
+ .tool-param-diff .diff-new {
1667
+ padding: 0.5rem 0.75rem;
1668
+ background: #f0fdf4;
1669
+ color: #166534;
1670
+ white-space: pre-wrap;
1671
+ word-break: break-all;
1672
+ max-height: 200px;
1673
+ overflow-y: auto;
1674
+ }
1675
+
1676
+ html.dark .tool-param-diff .diff-new { background: #0a1f0f; color: #86efac; }
1677
+
1678
+ .tool-param-query {
1679
+ display: flex;
1680
+ align-items: center;
1681
+ gap: 0.5rem;
1682
+ padding: 0.5rem 0.75rem;
1683
+ background: var(--color-bg-primary);
1684
+ border-radius: 0.375rem;
1685
+ font-size: 0.85rem;
1686
+ }
1687
+ .tool-param-query .query-icon { flex-shrink: 0; font-size: 1rem; }
1688
+
1689
+ .tool-param-url {
1690
+ display: flex;
1691
+ align-items: center;
1692
+ gap: 0.5rem;
1693
+ padding: 0.5rem 0.75rem;
1694
+ background: var(--color-bg-primary);
1695
+ border-radius: 0.375rem;
1696
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1697
+ font-size: 0.8rem;
1698
+ color: #2563eb;
1699
+ word-break: break-all;
1700
+ }
1701
+
1702
+ html.dark .tool-param-url { color: #60a5fa; }
1703
+ .tool-param-url .url-icon { flex-shrink: 0; font-size: 1rem; }
1704
+
1705
+ .tool-param-todos {
1706
+ display: flex;
1707
+ flex-direction: column;
1708
+ gap: 0.25rem;
1709
+ }
1710
+
1711
+ .tool-param-todos .todo-item {
1712
+ display: flex;
1713
+ align-items: flex-start;
1714
+ gap: 0.5rem;
1715
+ padding: 0.375rem 0.5rem;
1716
+ border-radius: 0.25rem;
1717
+ font-size: 0.8rem;
1718
+ background: var(--color-bg-primary);
1719
+ }
1720
+
1721
+ .tool-param-todos .todo-status {
1722
+ flex-shrink: 0;
1723
+ font-size: 0.85rem;
1724
+ margin-top: 0.05rem;
1725
+ }
1726
+
1727
+ .tool-param-todos .todo-text { flex: 1; line-height: 1.4; }
1728
+
1729
+ .tool-param-json {
1730
+ background: var(--color-bg-primary);
1731
+ border-radius: 0.375rem;
1732
+ overflow: hidden;
1733
+ }
1734
+
1735
+ .tool-param-json pre {
1736
+ margin: 0;
1737
+ padding: 0.625rem 0.875rem;
1738
+ font-size: 0.75rem;
1739
+ overflow-x: auto;
1740
+ max-height: 200px;
1741
+ overflow-y: auto;
1742
+ white-space: pre-wrap;
1743
+ word-break: break-all;
1744
+ }
1745
+
1746
+ .tool-param-content-preview {
1747
+ border-radius: 0.375rem;
1748
+ overflow: hidden;
1749
+ }
1750
+
1751
+ .tool-param-content-preview .preview-header {
1752
+ padding: 0.375rem 0.75rem;
1753
+ background: var(--color-bg-secondary);
1754
+ font-size: 0.7rem;
1755
+ font-weight: 600;
1756
+ text-transform: uppercase;
1757
+ letter-spacing: 0.03em;
1758
+ color: var(--color-text-secondary);
1759
+ display: flex;
1760
+ justify-content: space-between;
1761
+ align-items: center;
1762
+ }
1763
+
1764
+ .tool-param-content-preview .preview-body {
1765
+ padding: 0.5rem 0.75rem;
1766
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1767
+ font-size: 0.75rem;
1768
+ max-height: 200px;
1769
+ overflow-y: auto;
1770
+ white-space: pre-wrap;
1771
+ word-break: break-all;
1772
+ background: var(--color-bg-code);
1773
+ color: #d1d5db;
1774
+ }
1775
+
1776
+ .tool-param-content-preview .preview-truncated {
1777
+ padding: 0.25rem 0.75rem;
1778
+ font-size: 0.7rem;
1779
+ color: var(--color-text-secondary);
1780
+ background: var(--color-bg-secondary);
1781
+ text-align: center;
1782
+ }
1783
+
1784
+ /* --- Folded Tool Use (neutral base, colored by block-type-* classes) --- */
1785
+ .folded-tool {
1786
+ margin: 0;
1787
+ border-radius: 0.375rem;
1788
+ overflow: hidden;
1789
+ }
1790
+ html.dark .folded-tool {
1791
+ }
1792
+ .folded-tool-bar {
1793
+ display: flex;
1794
+ align-items: center;
1795
+ gap: 0.375rem;
1796
+ padding: 0.4rem 0.75rem;
1797
+ cursor: pointer;
1798
+ user-select: none;
1799
+ list-style: none;
1800
+ font-size: 0.85rem;
1801
+ line-height: 1.3;
1802
+ transition: background 0.15s;
1803
+ }
1804
+ html.dark .folded-tool-bar {
1805
+ }
1806
+ .folded-tool-bar::-webkit-details-marker { display: none; }
1807
+ .folded-tool-bar::marker { display: none; content: ''; }
1808
+ .folded-tool-bar::before {
1809
+ content: '\25b6';
1810
+ font-size: 0.5rem;
1811
+ margin-right: 0.125rem;
1812
+ display: inline-block;
1813
+ transition: transform 0.15s;
1814
+ color: #6b7280;
1815
+ flex-shrink: 0;
1816
+ }
1817
+ html.dark .folded-tool-bar::before { color: #a3a3a3; }
1818
+ .folded-tool[open] > .folded-tool-bar::before { transform: rotate(90deg); }
1819
+ .folded-tool-bar:hover { background: #d1d5db; }
1820
+ html.dark .folded-tool-bar:hover { background: #525252; }
1821
+ .folded-tool-icon {
1822
+ display: flex;
1823
+ align-items: center;
1824
+ color: #6b7280;
1825
+ width: 1rem;
1826
+ height: 1rem;
1827
+ flex-shrink: 0;
1828
+ }
1829
+ html.dark .folded-tool-icon { color: #a3a3a3; }
1830
+ .folded-tool-icon svg { width: 1rem; height: 1rem; }
1831
+ .folded-tool-name {
1832
+ font-weight: 600;
1833
+ color: #374151;
1834
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1835
+ font-size: 0.8rem;
1836
+ flex-shrink: 0;
1837
+ }
1838
+ html.dark .folded-tool-name { color: #d4d4d4; }
1839
+ .folded-tool-desc {
1840
+ color: #6b7280;
1841
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1842
+ font-size: 0.8rem;
1843
+ overflow: hidden;
1844
+ text-overflow: ellipsis;
1845
+ white-space: nowrap;
1846
+ flex: 1;
1847
+ min-width: 0;
1848
+ opacity: 0.8;
1849
+ }
1850
+ html.dark .folded-tool-desc { color: #a3a3a3; }
1851
+ .folded-tool-body {
1852
+ padding: 0.5rem 0.75rem;
1853
+ font-size: 0.75rem;
1854
+ border-top: 1px solid #d1d5db;
1855
+ }
1856
+ html.dark .folded-tool-body { border-top-color: #525252; }
1857
+ .folded-tool-body .tool-input-pre {
1858
+ margin: 0;
1859
+ padding: 0.375rem 0.5rem;
1860
+ font-size: 0.7rem;
1861
+ }
1862
+
1863
+ /* --- Error variant of folded-tool --- */
1864
+ .folded-tool.folded-tool-error {
1865
+ background: #fef2f2;
1866
+ }
1867
+ html.dark .folded-tool.folded-tool-error {
1868
+ background: #1c0f0f;
1869
+ }
1870
+ .folded-tool-error > .folded-tool-bar {
1871
+ background: #fee2e2;
1872
+ }
1873
+ html.dark .folded-tool-error > .folded-tool-bar {
1874
+ background: #2c1010;
1875
+ }
1876
+ .folded-tool-error > .folded-tool-bar::before { color: #ef4444; }
1877
+ html.dark .folded-tool-error > .folded-tool-bar::before { color: #f87171; }
1878
+ .folded-tool-error > .folded-tool-bar:hover { background: #fecaca; }
1879
+ html.dark .folded-tool-error > .folded-tool-bar:hover { background: #451a1a; }
1880
+ .folded-tool-error .folded-tool-icon { color: #ef4444; }
1881
+ html.dark .folded-tool-error .folded-tool-icon { color: #f87171; }
1882
+ .folded-tool-error .folded-tool-name { color: #991b1b; }
1883
+ html.dark .folded-tool-error .folded-tool-name { color: #fca5a5; }
1884
+ .folded-tool-error .folded-tool-desc { color: #b91c1c; }
1885
+ html.dark .folded-tool-error .folded-tool-desc { color: #f87171; }
1886
+ .folded-tool-error > .folded-tool-body { border-top-color: #fecaca; }
1887
+ html.dark .folded-tool-error > .folded-tool-body { border-top-color: #7f1d1d; }
1888
+
1889
+ /* --- Info variant of folded-tool (system blocks) --- */
1890
+ .folded-tool.folded-tool-info {
1891
+ background: #eef2ff;
1892
+ }
1893
+ html.dark .folded-tool.folded-tool-info {
1894
+ background: #15103a;
1895
+ }
1896
+ .folded-tool-info > .folded-tool-bar {
1897
+ background: #e0e7ff;
1898
+ }
1899
+ html.dark .folded-tool-info > .folded-tool-bar {
1900
+ background: #1e1b4b;
1901
+ }
1902
+ .folded-tool-info > .folded-tool-bar::before { color: #6366f1; }
1903
+ html.dark .folded-tool-info > .folded-tool-bar::before { color: #a5b4fc; }
1904
+ .folded-tool-info > .folded-tool-bar:hover { background: #c7d2fe; }
1905
+ html.dark .folded-tool-info > .folded-tool-bar:hover { background: #312e81; }
1906
+ .folded-tool-info .folded-tool-icon { color: #6366f1; }
1907
+ html.dark .folded-tool-info .folded-tool-icon { color: #a5b4fc; }
1908
+ .folded-tool-info .folded-tool-name { color: #3730a3; }
1909
+ html.dark .folded-tool-info .folded-tool-name { color: #c7d2fe; }
1910
+ .folded-tool-info .folded-tool-desc { color: #4f46e5; }
1911
+ html.dark .folded-tool-info .folded-tool-desc { color: #a5b4fc; }
1912
+ .folded-tool-info > .folded-tool-body { border-top-color: #c7d2fe; }
1913
+ html.dark .folded-tool-info > .folded-tool-body { border-top-color: #3730a3; }
1914
+
1915
+ /* --- Per-block-type unique colored backgrounds (removed) --- */
1916
+
1917
+ /* --- Per-tool-name header colors (tool-color-*) --- */
1918
+ .tool-color-read.folded-tool > .folded-tool-bar { }
1919
+ html.dark .tool-color-read.folded-tool > .folded-tool-bar { }
1920
+ .tool-color-read.folded-tool > .folded-tool-bar:hover { }
1921
+ html.dark .tool-color-read.folded-tool > .folded-tool-bar:hover { }
1922
+ .tool-color-read.folded-tool > .folded-tool-bar::before { color: #2563eb; }
1923
+ html.dark .tool-color-read.folded-tool > .folded-tool-bar::before { color: #60a5fa; }
1924
+ .tool-color-read .folded-tool-icon { color: #2563eb; }
1925
+ html.dark .tool-color-read .folded-tool-icon { color: #60a5fa; }
1926
+ .tool-color-read .folded-tool-name { color: #1e40af; }
1927
+ html.dark .tool-color-read .folded-tool-name { color: #93bbfd; }
1928
+ .tool-color-read .folded-tool-desc { color: #1d4ed8; }
1929
+ html.dark .tool-color-read .folded-tool-desc { color: #60a5fa; }
1930
+ .tool-color-read > .folded-tool-body { border-top-color: #bfdbfe; }
1931
+ html.dark .tool-color-read > .folded-tool-body { border-top-color: #1e3a5f; }
1932
+
1933
+ .tool-color-write.folded-tool > .folded-tool-bar { }
1934
+ html.dark .tool-color-write.folded-tool > .folded-tool-bar { }
1935
+ .tool-color-write.folded-tool > .folded-tool-bar:hover { }
1936
+ html.dark .tool-color-write.folded-tool > .folded-tool-bar:hover { }
1937
+ .tool-color-write.folded-tool > .folded-tool-bar::before { color: #d97706; }
1938
+ html.dark .tool-color-write.folded-tool > .folded-tool-bar::before { color: #fbbf24; }
1939
+ .tool-color-write .folded-tool-icon { color: #d97706; }
1940
+ html.dark .tool-color-write .folded-tool-icon { color: #fbbf24; }
1941
+ .tool-color-write .folded-tool-name { color: #92400e; }
1942
+ html.dark .tool-color-write .folded-tool-name { color: #fcd34d; }
1943
+ .tool-color-write .folded-tool-desc { color: #b45309; }
1944
+ html.dark .tool-color-write .folded-tool-desc { color: #fbbf24; }
1945
+ .tool-color-write > .folded-tool-body { border-top-color: #fde68a; }
1946
+ html.dark .tool-color-write > .folded-tool-body { border-top-color: #422006; }
1947
+
1948
+ .tool-color-edit.folded-tool > .folded-tool-bar { }
1949
+ html.dark .tool-color-edit.folded-tool > .folded-tool-bar { }
1950
+ .tool-color-edit.folded-tool > .folded-tool-bar:hover { }
1951
+ html.dark .tool-color-edit.folded-tool > .folded-tool-bar:hover { }
1952
+ .tool-color-edit.folded-tool > .folded-tool-bar::before { color: #7c3aed; }
1953
+ html.dark .tool-color-edit.folded-tool > .folded-tool-bar::before { color: #a78bfa; }
1954
+ .tool-color-edit .folded-tool-icon { color: #7c3aed; }
1955
+ html.dark .tool-color-edit .folded-tool-icon { color: #a78bfa; }
1956
+ .tool-color-edit .folded-tool-name { color: #5b21b6; }
1957
+ html.dark .tool-color-edit .folded-tool-name { color: #c4b5fd; }
1958
+ .tool-color-edit .folded-tool-desc { color: #6d28d9; }
1959
+ html.dark .tool-color-edit .folded-tool-desc { color: #a78bfa; }
1960
+ .tool-color-edit > .folded-tool-body { border-top-color: #ddd6fe; }
1961
+ html.dark .tool-color-edit > .folded-tool-body { border-top-color: #2e1065; }
1962
+
1963
+ .tool-color-bash.folded-tool > .folded-tool-bar { }
1964
+ html.dark .tool-color-bash.folded-tool > .folded-tool-bar { }
1965
+ .tool-color-bash.folded-tool > .folded-tool-bar:hover { }
1966
+ html.dark .tool-color-bash.folded-tool > .folded-tool-bar:hover { }
1967
+ .tool-color-bash.folded-tool > .folded-tool-bar::before { color: #475569; }
1968
+ html.dark .tool-color-bash.folded-tool > .folded-tool-bar::before { color: #94a3b8; }
1969
+ .tool-color-bash .folded-tool-icon { color: #475569; }
1970
+ html.dark .tool-color-bash .folded-tool-icon { color: #94a3b8; }
1971
+ .tool-color-bash .folded-tool-name { color: #334155; }
1972
+ html.dark .tool-color-bash .folded-tool-name { color: #cbd5e1; }
1973
+ .tool-color-bash .folded-tool-desc { color: #475569; }
1974
+ html.dark .tool-color-bash .folded-tool-desc { color: #94a3b8; }
1975
+ .tool-color-bash > .folded-tool-body { border-top-color: #cbd5e1; }
1976
+ html.dark .tool-color-bash > .folded-tool-body { border-top-color: #334155; }
1977
+
1978
+ .tool-color-glob.folded-tool > .folded-tool-bar { }
1979
+ html.dark .tool-color-glob.folded-tool > .folded-tool-bar { }
1980
+ .tool-color-glob.folded-tool > .folded-tool-bar:hover { }
1981
+ html.dark .tool-color-glob.folded-tool > .folded-tool-bar:hover { }
1982
+ .tool-color-glob.folded-tool > .folded-tool-bar::before { color: #059669; }
1983
+ html.dark .tool-color-glob.folded-tool > .folded-tool-bar::before { color: #34d399; }
1984
+ .tool-color-glob .folded-tool-icon { color: #059669; }
1985
+ html.dark .tool-color-glob .folded-tool-icon { color: #34d399; }
1986
+ .tool-color-glob .folded-tool-name { color: #065f46; }
1987
+ html.dark .tool-color-glob .folded-tool-name { color: #6ee7b7; }
1988
+ .tool-color-glob .folded-tool-desc { color: #047857; }
1989
+ html.dark .tool-color-glob .folded-tool-desc { color: #34d399; }
1990
+ .tool-color-glob > .folded-tool-body { border-top-color: #a7f3d0; }
1991
+ html.dark .tool-color-glob > .folded-tool-body { border-top-color: #064e3b; }
1992
+
1993
+ .tool-color-grep.folded-tool > .folded-tool-bar { }
1994
+ html.dark .tool-color-grep.folded-tool > .folded-tool-bar { }
1995
+ .tool-color-grep.folded-tool > .folded-tool-bar:hover { }
1996
+ html.dark .tool-color-grep.folded-tool > .folded-tool-bar:hover { }
1997
+ .tool-color-grep.folded-tool > .folded-tool-bar::before { color: #e11d48; }
1998
+ html.dark .tool-color-grep.folded-tool > .folded-tool-bar::before { color: #fb7185; }
1999
+ .tool-color-grep .folded-tool-icon { color: #e11d48; }
2000
+ html.dark .tool-color-grep .folded-tool-icon { color: #fb7185; }
2001
+ .tool-color-grep .folded-tool-name { color: #9f1239; }
2002
+ html.dark .tool-color-grep .folded-tool-name { color: #fda4af; }
2003
+ .tool-color-grep .folded-tool-desc { color: #be123c; }
2004
+ html.dark .tool-color-grep .folded-tool-desc { color: #fb7185; }
2005
+ .tool-color-grep > .folded-tool-body { border-top-color: #fecdd3; }
2006
+ html.dark .tool-color-grep > .folded-tool-body { border-top-color: #4c0519; }
2007
+
2008
+ .tool-color-web.folded-tool > .folded-tool-bar { }
2009
+ html.dark .tool-color-web.folded-tool > .folded-tool-bar { }
2010
+ .tool-color-web.folded-tool > .folded-tool-bar:hover { }
2011
+ html.dark .tool-color-web.folded-tool > .folded-tool-bar:hover { }
2012
+ .tool-color-web.folded-tool > .folded-tool-bar::before { color: #0284c7; }
2013
+ html.dark .tool-color-web.folded-tool > .folded-tool-bar::before { color: #38bdf8; }
2014
+ .tool-color-web .folded-tool-icon { color: #0284c7; }
2015
+ html.dark .tool-color-web .folded-tool-icon { color: #38bdf8; }
2016
+ .tool-color-web .folded-tool-name { color: #075985; }
2017
+ html.dark .tool-color-web .folded-tool-name { color: #7dd3fc; }
2018
+ .tool-color-web .folded-tool-desc { color: #0369a1; }
2019
+ html.dark .tool-color-web .folded-tool-desc { color: #38bdf8; }
2020
+ .tool-color-web > .folded-tool-body { border-top-color: #bae6fd; }
2021
+ html.dark .tool-color-web > .folded-tool-body { border-top-color: #0c4a6e; }
2022
+
2023
+ .tool-color-todo.folded-tool > .folded-tool-bar { }
2024
+ html.dark .tool-color-todo.folded-tool > .folded-tool-bar { }
2025
+ .tool-color-todo.folded-tool > .folded-tool-bar:hover { }
2026
+ html.dark .tool-color-todo.folded-tool > .folded-tool-bar:hover { }
2027
+ .tool-color-todo.folded-tool > .folded-tool-bar::before { color: #ea580c; }
2028
+ html.dark .tool-color-todo.folded-tool > .folded-tool-bar::before { color: #fb923c; }
2029
+ .tool-color-todo .folded-tool-icon { color: #ea580c; }
2030
+ html.dark .tool-color-todo .folded-tool-icon { color: #fb923c; }
2031
+ .tool-color-todo .folded-tool-name { color: #9a3412; }
2032
+ html.dark .tool-color-todo .folded-tool-name { color: #fdba74; }
2033
+ .tool-color-todo .folded-tool-desc { color: #c2410c; }
2034
+ html.dark .tool-color-todo .folded-tool-desc { color: #fb923c; }
2035
+ .tool-color-todo > .folded-tool-body { border-top-color: #fed7aa; }
2036
+ html.dark .tool-color-todo > .folded-tool-body { border-top-color: #431407; }
2037
+
2038
+ .tool-color-task.folded-tool > .folded-tool-bar { }
2039
+ html.dark .tool-color-task.folded-tool > .folded-tool-bar { }
2040
+ .tool-color-task.folded-tool > .folded-tool-bar:hover { }
2041
+ html.dark .tool-color-task.folded-tool > .folded-tool-bar:hover { }
2042
+ .tool-color-task.folded-tool > .folded-tool-bar::before { color: #4f46e5; }
2043
+ html.dark .tool-color-task.folded-tool > .folded-tool-bar::before { color: #818cf8; }
2044
+ .tool-color-task .folded-tool-icon { color: #4f46e5; }
2045
+ html.dark .tool-color-task .folded-tool-icon { color: #818cf8; }
2046
+ .tool-color-task .folded-tool-name { color: #3730a3; }
2047
+ html.dark .tool-color-task .folded-tool-name { color: #a5b4fc; }
2048
+ .tool-color-task .folded-tool-desc { color: #4338ca; }
2049
+ html.dark .tool-color-task .folded-tool-desc { color: #818cf8; }
2050
+ .tool-color-task > .folded-tool-body { border-top-color: #c7d2fe; }
2051
+ html.dark .tool-color-task > .folded-tool-body { border-top-color: #1e1b4b; }
2052
+
2053
+ .tool-color-default.folded-tool > .folded-tool-bar { }
2054
+ html.dark .tool-color-default.folded-tool > .folded-tool-bar { }
2055
+ .tool-color-default.folded-tool > .folded-tool-bar:hover { }
2056
+ html.dark .tool-color-default.folded-tool > .folded-tool-bar:hover { }
2057
+ .tool-color-default.folded-tool > .folded-tool-bar::before { color: #0891b2; }
2058
+ html.dark .tool-color-default.folded-tool > .folded-tool-bar::before { color: #22d3ee; }
2059
+ .tool-color-default .folded-tool-icon { color: #0891b2; }
2060
+ html.dark .tool-color-default .folded-tool-icon { color: #22d3ee; }
2061
+ .tool-color-default .folded-tool-name { color: #155e75; }
2062
+ html.dark .tool-color-default .folded-tool-name { color: #67e8f9; }
2063
+ .tool-color-default .folded-tool-desc { color: #0e7490; }
2064
+ html.dark .tool-color-default .folded-tool-desc { color: #22d3ee; }
2065
+ .tool-color-default > .folded-tool-body { border-top-color: #a5f3fc; }
2066
+ html.dark .tool-color-default > .folded-tool-body { border-top-color: #164e63; }
2067
+
2068
+ /* Execute - Purple */
2069
+ .tool-color-execute.folded-tool > .folded-tool-bar { }
2070
+ html.dark .tool-color-execute.folded-tool > .folded-tool-bar { }
2071
+ .tool-color-execute.folded-tool > .folded-tool-bar:hover { }
2072
+ html.dark .tool-color-execute.folded-tool > .folded-tool-bar:hover { }
2073
+ .tool-color-execute.folded-tool > .folded-tool-bar::before { color: #a855f7; }
2074
+ html.dark .tool-color-execute.folded-tool > .folded-tool-bar::before { color: #d8b4fe; }
2075
+ .tool-color-execute .folded-tool-icon { color: #a855f7; }
2076
+ html.dark .tool-color-execute .folded-tool-icon { color: #d8b4fe; }
2077
+ .tool-color-execute .folded-tool-name { color: #6b21a8; }
2078
+ html.dark .tool-color-execute .folded-tool-name { color: #e879f9; }
2079
+ .tool-color-execute .folded-tool-desc { color: #7e22ce; }
2080
+ html.dark .tool-color-execute .folded-tool-desc { color: #d8b4fe; }
2081
+ .tool-color-execute > .folded-tool-body { border-top-color: #e9d5ff; }
2082
+ html.dark .tool-color-execute > .folded-tool-body { border-top-color: #4c1d95; }
2083
+
2084
+ /* Sleep - Orange */
2085
+ .tool-color-sleep.folded-tool > .folded-tool-bar { }
2086
+ html.dark .tool-color-sleep.folded-tool > .folded-tool-bar { }
2087
+ .tool-color-sleep.folded-tool > .folded-tool-bar:hover { }
2088
+ html.dark .tool-color-sleep.folded-tool > .folded-tool-bar:hover { }
2089
+ .tool-color-sleep.folded-tool > .folded-tool-bar::before { color: #f97316; }
2090
+ html.dark .tool-color-sleep.folded-tool > .folded-tool-bar::before { color: #fb923c; }
2091
+ .tool-color-sleep .folded-tool-icon { color: #f97316; }
2092
+ html.dark .tool-color-sleep .folded-tool-icon { color: #fb923c; }
2093
+ .tool-color-sleep .folded-tool-name { color: #7c2d12; }
2094
+ html.dark .tool-color-sleep .folded-tool-name { color: #fed7aa; }
2095
+ .tool-color-sleep .folded-tool-desc { color: #b45309; }
2096
+ html.dark .tool-color-sleep .folded-tool-desc { color: #fb923c; }
2097
+ .tool-color-sleep > .folded-tool-body { border-top-color: #fdba74; }
2098
+ html.dark .tool-color-sleep > .folded-tool-body { border-top-color: #7c2d12; }
2099
+
2100
+ /* Search - Green */
2101
+ .tool-color-search.folded-tool > .folded-tool-bar { }
2102
+ html.dark .tool-color-search.folded-tool > .folded-tool-bar { }
2103
+ .tool-color-search.folded-tool > .folded-tool-bar:hover { }
2104
+ html.dark .tool-color-search.folded-tool > .folded-tool-bar:hover { }
2105
+ .tool-color-search.folded-tool > .folded-tool-bar::before { color: #16a34a; }
2106
+ html.dark .tool-color-search.folded-tool > .folded-tool-bar::before { color: #86efac; }
2107
+ .tool-color-search .folded-tool-icon { color: #16a34a; }
2108
+ html.dark .tool-color-search .folded-tool-icon { color: #86efac; }
2109
+ .tool-color-search .folded-tool-name { color: #15803d; }
2110
+ html.dark .tool-color-search .folded-tool-name { color: #bbf7d0; }
2111
+ .tool-color-search .folded-tool-desc { color: #166534; }
2112
+ html.dark .tool-color-search .folded-tool-desc { color: #86efac; }
2113
+ .tool-color-search > .folded-tool-body { border-top-color: #bbf7d0; }
2114
+ html.dark .tool-color-search > .folded-tool-body { border-top-color: #16a34a; }
2115
+
2116
+ /* Skill - Yellow/Amber */
2117
+ .tool-color-skill.folded-tool > .folded-tool-bar { }
2118
+ html.dark .tool-color-skill.folded-tool > .folded-tool-bar { }
2119
+ .tool-color-skill.folded-tool > .folded-tool-bar:hover { }
2120
+ html.dark .tool-color-skill.folded-tool > .folded-tool-bar:hover { }
2121
+ .tool-color-skill.folded-tool > .folded-tool-bar::before { color: #d97706; }
2122
+ html.dark .tool-color-skill.folded-tool > .folded-tool-bar::before { color: #fbbf24; }
2123
+ .tool-color-skill .folded-tool-icon { color: #d97706; }
2124
+ html.dark .tool-color-skill .folded-tool-icon { color: #fbbf24; }
2125
+ .tool-color-skill .folded-tool-name { color: #92400e; }
2126
+ html.dark .tool-color-skill .folded-tool-name { color: #fcd34d; }
2127
+ .tool-color-skill .folded-tool-desc { color: #b45309; }
2128
+ html.dark .tool-color-skill .folded-tool-desc { color: #fbbf24; }
2129
+ .tool-color-skill > .folded-tool-body { border-top-color: #fde68a; }
2130
+ html.dark .tool-color-skill > .folded-tool-body { border-top-color: #78350f; }
2131
+
2132
+ .block-type-tool_result .tool-result-status { }
2133
+ html.dark .block-type-tool_result .tool-result-status { }
2134
+ .block-type-tool_result .folded-tool-icon { color: #16a34a; }
2135
+ html.dark .block-type-tool_result .folded-tool-icon { color: #4ade80; }
2136
+ .block-type-tool_result .folded-tool-name { color: #374151; }
2137
+ html.dark .block-type-tool_result .folded-tool-name { color: #d4d4d4; }
2138
+ .block-type-tool_result > .folded-tool-body { border-top-color: #d1d5db; }
2139
+ html.dark .block-type-tool_result > .folded-tool-body { border-top-color: #525252; }
2140
+ .block-type-tool_result.tool-result-error { }
2141
+ html.dark .block-type-tool_result.tool-result-error { }
2142
+ .block-type-tool_result.tool-result-error .tool-result-status { }
2143
+ html.dark .block-type-tool_result.tool-result-error .tool-result-status { }
2144
+ .block-type-tool_result.tool-result-error .folded-tool-icon { color: #dc2626; }
2145
+ html.dark .block-type-tool_result.tool-result-error .folded-tool-icon { color: #f87171; }
2146
+ .block-type-tool_result.tool-result-error .folded-tool-name { color: #374151; }
2147
+ html.dark .block-type-tool_result.tool-result-error .folded-tool-name { color: #d4d4d4; }
2148
+
2149
+
2150
+
2151
+
2152
+ .block-type-system { }
2153
+ html.dark .block-type-system { }
2154
+ .block-type-system.folded-tool > .folded-tool-bar { }
2155
+ html.dark .block-type-system.folded-tool > .folded-tool-bar { }
2156
+ .block-type-system.folded-tool > .folded-tool-bar:hover { }
2157
+ html.dark .block-type-system.folded-tool > .folded-tool-bar:hover { }
2158
+ .block-type-system.folded-tool > .folded-tool-bar::before { color: #6366f1; }
2159
+ html.dark .block-type-system.folded-tool > .folded-tool-bar::before { color: #a5b4fc; }
2160
+ .block-type-system .folded-tool-icon { color: #6366f1; }
2161
+ html.dark .block-type-system .folded-tool-icon { color: #a5b4fc; }
2162
+ .block-type-system .folded-tool-name { color: #3730a3; }
2163
+ html.dark .block-type-system .folded-tool-name { color: #c7d2fe; }
2164
+ .block-type-system .folded-tool-desc { color: #4f46e5; }
2165
+ html.dark .block-type-system .folded-tool-desc { color: #a5b4fc; }
2166
+ .block-type-system > .folded-tool-body { border-top-color: #c7d2fe; }
2167
+ html.dark .block-type-system > .folded-tool-body { border-top-color: #3730a3; }
2168
+
2169
+ .block-type-result { }
2170
+ html.dark .block-type-result { }
2171
+ .block-type-result.folded-tool > .folded-tool-bar { }
2172
+ html.dark .block-type-result.folded-tool > .folded-tool-bar { }
2173
+ .block-type-result.folded-tool > .folded-tool-bar:hover { }
2174
+ html.dark .block-type-result.folded-tool > .folded-tool-bar:hover { }
2175
+ .block-type-result.folded-tool > .folded-tool-bar::before { color: #16a34a; }
2176
+ html.dark .block-type-result.folded-tool > .folded-tool-bar::before { color: #4ade80; }
2177
+ .block-type-result .folded-tool-icon { color: #16a34a; }
2178
+ html.dark .block-type-result .folded-tool-icon { color: #4ade80; }
2179
+ .block-type-result .folded-tool-name { color: #166534; }
2180
+ html.dark .block-type-result .folded-tool-name { color: #86efac; }
2181
+ .block-type-result .folded-tool-desc { color: #15803d; }
2182
+ html.dark .block-type-result .folded-tool-desc { color: #4ade80; }
2183
+ .block-type-result > .folded-tool-body { border-top-color: #bbf7d0; }
2184
+ html.dark .block-type-result > .folded-tool-body { border-top-color: #166534; }
2185
+
2186
+ .block-type-error { }
2187
+ html.dark .block-type-error { }
2188
+ .block-type-error.folded-tool > .folded-tool-bar { }
2189
+ html.dark .block-type-error.folded-tool > .folded-tool-bar { }
2190
+ .block-type-error.folded-tool > .folded-tool-bar:hover { }
2191
+ html.dark .block-type-error.folded-tool > .folded-tool-bar:hover { }
2192
+ .block-type-error.folded-tool > .folded-tool-bar::before { color: #ef4444; }
2193
+ html.dark .block-type-error.folded-tool > .folded-tool-bar::before { color: #f87171; }
2194
+ .block-type-error .folded-tool-icon { color: #ef4444; }
2195
+ html.dark .block-type-error .folded-tool-icon { color: #f87171; }
2196
+ .block-type-error .folded-tool-name { color: #991b1b; }
2197
+ html.dark .block-type-error .folded-tool-name { color: #fca5a5; }
2198
+ .block-type-error .folded-tool-desc { color: #b91c1c; }
2199
+ html.dark .block-type-error .folded-tool-desc { color: #f87171; }
2200
+ .block-type-error > .folded-tool-body { border-top-color: #fecaca; }
2201
+ html.dark .block-type-error > .folded-tool-body { border-top-color: #7f1d1d; }
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+
2208
+
2209
+ /* --- Code block header (non-collapsible) --- */
2210
+ .code-block-header {
2211
+ display: flex;
2212
+ align-items: center;
2213
+ gap: 0.5rem;
2214
+ padding: 0.3rem 0.75rem;
2215
+ background: #1f2937;
2216
+ color: #9ca3af;
2217
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2218
+ font-size: 0.75rem;
2219
+ }
2220
+ .code-block-header .copy-code-btn {
2221
+ margin-left: auto;
2222
+ background: none;
2223
+ border: none;
2224
+ color: #6b7280;
2225
+ cursor: pointer;
2226
+ padding: 0.125rem;
2227
+ border-radius: 0.25rem;
2228
+ display: flex;
2229
+ align-items: center;
2230
+ transition: all 0.15s;
2231
+ }
2232
+ .code-block-header .copy-code-btn:hover { color: #e5e7eb; background: #4b5563; }
2233
+ .code-block-header .copy-code-btn svg { width: 0.875rem; height: 0.875rem; }
2234
+
2235
+ /* --- Tool result success styling in body --- */
2236
+ .tool-result-success .tool-result-status {
2237
+ background: #e5e7eb;
2238
+ padding: 0.4rem 0.75rem;
2239
+ }
2240
+ html.dark .tool-result-success .tool-result-status {
2241
+ background: #404040;
2242
+ }
2243
+ .tool-result-success .folded-tool-icon { color: #16a34a; }
2244
+ html.dark .tool-result-success .folded-tool-icon { color: #4ade80; }
2245
+ .tool-result-success .folded-tool-name { color: #374151; font-weight: 600; }
2246
+ html.dark .tool-result-success .folded-tool-name { color: #d4d4d4; }
2247
+
2248
+ /* --- Tool_use parent: has-success / has-error indicators (icon/arrow only, preserves tool colors) --- */
2249
+ .folded-tool.has-success > .folded-tool-bar::before { color: #16a34a; }
2250
+ html.dark .folded-tool.has-success > .folded-tool-bar::before { color: #4ade80; }
2251
+
2252
+ .folded-tool.has-error > .folded-tool-bar::before { color: #ef4444; }
2253
+ html.dark .folded-tool.has-error > .folded-tool-bar::before { color: #f87171; }
2254
+
2255
+ /* --- Success/Error status icons in header --- */
2256
+ .folded-tool.has-success > .folded-tool-bar .folded-tool-icon::after,
2257
+ .folded-tool.has-error > .folded-tool-bar .folded-tool-icon::after {
2258
+ content: '';
2259
+ display: inline-block;
2260
+ width: 1rem;
2261
+ height: 1rem;
2262
+ margin-left: 0.375rem;
2263
+ background-size: contain;
2264
+ background-repeat: no-repeat;
2265
+ flex-shrink: 0;
2266
+ }
2267
+ .folded-tool.has-success > .folded-tool-bar .folded-tool-icon::after {
2268
+ 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");
2269
+ }
2270
+ html.dark .folded-tool.has-success > .folded-tool-bar .folded-tool-icon::after {
2271
+ 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");
2272
+ }
2273
+ .folded-tool.has-error > .folded-tool-bar .folded-tool-icon::after {
2274
+ 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");
2275
+ }
2276
+ html.dark .folded-tool.has-error > .folded-tool-bar .folded-tool-icon::after {
2277
+ 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");
2278
+ }
2279
+ .folded-tool-icon {
2280
+ display: inline-flex;
2281
+ align-items: center;
2282
+ }
2283
+
2284
+ /* --- Consecutive block joining --- */
2285
+ .folded-tool + .folded-tool,
2286
+ .block-tool-use + .block-tool-use {
2287
+ margin-top: -1px;
2288
+ border-radius: 0;
2289
+ }
2290
+ .folded-tool + .folded-tool > .folded-tool-bar,
2291
+ .block-tool-use + .block-tool-use > .folded-tool-bar {
2292
+ border-top: 1px solid rgba(0,0,0,0.06);
2293
+ }
2294
+ html.dark .folded-tool + .folded-tool > .folded-tool-bar,
2295
+ html.dark .block-tool-use + .block-tool-use > .folded-tool-bar {
2296
+ border-top: 1px solid rgba(255,255,255,0.06);
2297
+ }
2298
+ .folded-tool:first-child,
2299
+ .block-tool-use:first-child {
2300
+ border-radius: 0.375rem 0.375rem 0 0;
2301
+ }
2302
+ .folded-tool:last-child,
2303
+ .block-tool-use:last-child {
2304
+ border-radius: 0 0 0.375rem 0.375rem;
2305
+ }
2306
+ .folded-tool:only-child,
2307
+ .block-tool-use:only-child {
2308
+ border-radius: 0.375rem;
2309
+ }
2310
+
2311
+ /* --- Inline Tool Result (nested inside tool_use) --- */
2312
+ /* Tool Result Blocks - Folded by default with status icons */
2313
+ .folded-tool.block-type-tool_result {
2314
+ margin-bottom: 0.375rem;
2315
+ }
2316
+ .folded-tool.folded-tool-success {
2317
+ background: #f0fdf4;
2318
+ }
2319
+ html.dark .folded-tool.folded-tool-success {
2320
+ background: #0a1f0f;
2321
+ }
2322
+ .folded-tool.folded-tool-success > .folded-tool-bar {
2323
+ background: #dcfce7;
2324
+ }
2325
+ html.dark .folded-tool.folded-tool-success > .folded-tool-bar {
2326
+ background: #0f2b1a;
2327
+ }
2328
+ .folded-tool.folded-tool-success > .folded-tool-bar::before {
2329
+ color: #16a34a;
2330
+ }
2331
+ html.dark .folded-tool.folded-tool-success > .folded-tool-bar::before {
2332
+ color: #4ade80;
2333
+ }
2334
+
2335
+ /* --- Tool Result Inlined into Tool Use --- */
2336
+ .folded-tool-status {
2337
+ display: flex;
2338
+ align-items: center;
2339
+ flex-shrink: 0;
2340
+ margin-left: auto;
2341
+ width: 1rem;
2342
+ height: 1rem;
2343
+ }
2344
+ .folded-tool-status svg { width: 1rem; height: 1rem; }
2345
+ .block-tool-use.tool-result-success .folded-tool-status { color: #16a34a; }
2346
+ html.dark .block-tool-use.tool-result-success .folded-tool-status { color: #4ade80; }
2347
+ .block-tool-use.tool-result-error .folded-tool-status { color: #ef4444; }
2348
+ html.dark .block-tool-use.tool-result-error .folded-tool-status { color: #f87171; }
2349
+ .folded-tool-result-content {
2350
+ border-top: 1px solid #e5e7eb;
2351
+ padding-top: 0.5rem;
2352
+ margin-top: 0.5rem;
2353
+ }
2354
+ html.dark .folded-tool-result-content { border-top-color: #374151; }
2355
+
2356
+ /* --- Consecutive Block Joining --- */
2357
+ .streaming-blocks > * + *,
2358
+ .message-blocks > * + * {
2359
+ margin-top: 0;
2360
+ }
2361
+ .streaming-blocks > *,
2362
+ .message-blocks > * {
2363
+ border-radius: 0;
2364
+ }
2365
+ .streaming-blocks > *:first-child,
2366
+ .message-blocks > *:first-child {
2367
+ border-top-left-radius: 0.375rem;
2368
+ border-top-right-radius: 0.375rem;
2369
+ }
2370
+ .streaming-blocks > *:last-child,
2371
+ .message-blocks > *:last-child {
2372
+ border-bottom-left-radius: 0.375rem;
2373
+ border-bottom-right-radius: 0.375rem;
2374
+ }
2375
+ .streaming-blocks > *:only-child,
2376
+ .message-blocks > *:only-child {
2377
+ border-radius: 0.375rem;
2378
+ }
2379
+
2380
+ /* --- Collapsible Code Summary --- */
2381
+ .collapsible-code {
2382
+ margin: 0;
2383
+ border-radius: 0.375rem;
2384
+ overflow: hidden;
2385
+ background: #1e293b;
2386
+ }
2387
+ .collapsible-code-summary {
2388
+ display: flex;
2389
+ align-items: center;
2390
+ gap: 0.5rem;
2391
+ padding: 0.3rem 0.75rem;
2392
+ cursor: pointer;
2393
+ user-select: none;
2394
+ list-style: none;
2395
+ font-size: 0.75rem;
2396
+ line-height: 1.3;
2397
+ background: #1f2937;
2398
+ color: #9ca3af;
2399
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2400
+ transition: background 0.15s;
2401
+ }
2402
+ .collapsible-code-summary::-webkit-details-marker { display: none; }
2403
+ .collapsible-code-summary::marker { display: none; content: ''; }
2404
+ .collapsible-code-summary::before {
2405
+ content: '\25b6';
2406
+ font-size: 0.5rem;
2407
+ margin-right: 0.125rem;
2408
+ display: inline-block;
2409
+ transition: transform 0.15s;
2410
+ color: #6b7280;
2411
+ flex-shrink: 0;
2412
+ }
2413
+ .collapsible-code[open] > .collapsible-code-summary::before { transform: rotate(90deg); }
2414
+ .collapsible-code-summary:hover { background: #374151; }
2415
+ .collapsible-code-summary .copy-code-btn {
2416
+ margin-left: auto;
2417
+ background: none;
2418
+ border: none;
2419
+ color: #6b7280;
2420
+ cursor: pointer;
2421
+ padding: 0.125rem;
2422
+ border-radius: 0.25rem;
2423
+ display: flex;
2424
+ align-items: center;
2425
+ transition: all 0.15s;
2426
+ }
2427
+ .collapsible-code-summary .copy-code-btn:hover { color: #e5e7eb; background: #4b5563; }
2428
+ .collapsible-code-summary .copy-code-btn svg { width: 0.875rem; height: 0.875rem; }
2429
+ .collapsible-code-label {
2430
+ font-size: 0.7rem;
2431
+ text-transform: uppercase;
2432
+ letter-spacing: 0.05em;
2433
+ }
2434
+
2435
+ /* --- Tool Result Block --- */
2436
+ .block-tool-result {
2437
+ margin-bottom: 0;
2438
+ border-radius: 0.5rem;
2439
+ overflow: hidden;
2440
+ }
2441
+
2442
+ .block-tool-result.result-success { }
2443
+ .block-tool-result.result-error { }
2444
+ html.dark .block-tool-result.result-success { }
2445
+ html.dark .block-tool-result.result-error { }
2446
+
2447
+ .block-tool-result .result-header {
2448
+ padding: 0.3rem 0.75rem;
2449
+ display: flex;
2450
+ align-items: center;
2451
+ justify-content: space-between;
2452
+ }
2453
+
2454
+ .block-tool-result.result-success .result-header { }
2455
+ .block-tool-result.result-error .result-header { }
2456
+ html.dark .block-tool-result.result-success .result-header { }
2457
+ html.dark .block-tool-result.result-error .result-header { }
2458
+
2459
+ .block-tool-result .result-header .status-label {
2460
+ display: flex;
2461
+ align-items: center;
2462
+ gap: 0.375rem;
2463
+ font-weight: 600;
2464
+ font-size: 0.8rem;
2465
+ }
2466
+
2467
+ .block-tool-result.result-success .status-label { color: #166534; }
2468
+ .block-tool-result.result-error .status-label { color: #991b1b; }
2469
+ html.dark .block-tool-result.result-success .status-label { color: #86efac; }
2470
+ html.dark .block-tool-result.result-error .status-label { color: #fca5a5; }
2471
+
2472
+ .block-tool-result .result-body {
2473
+ padding: 0.375rem 0.75rem;
2474
+ font-size: 0.8rem;
2475
+ white-space: pre-wrap;
2476
+ word-break: break-all;
2477
+ overflow-x: auto;
2478
+ max-height: 400px;
2479
+ overflow-y: auto;
2480
+ line-height: 1.5;
2481
+ }
2482
+
2483
+ .block-tool-result.result-success .result-body { color: #14532d; }
2484
+ .block-tool-result.result-error .result-body { color: #7f1d1d; }
2485
+ html.dark .block-tool-result.result-success .result-body { color: #bbf7d0; }
2486
+ html.dark .block-tool-result.result-error .result-body { color: #fecaca; }
2487
+
2488
+ .block-tool-result .result-body.collapsed { max-height: 150px; position: relative; }
2489
+ .block-tool-result .result-body.collapsed::after {
2490
+ content: '';
2491
+ position: absolute;
2492
+ bottom: 0;
2493
+ left: 0;
2494
+ right: 0;
2495
+ height: 3rem;
2496
+ background: linear-gradient(transparent, var(--color-bg-primary));
2497
+ pointer-events: none;
2498
+ }
2499
+
2500
+ .block-tool-result .expand-btn {
2501
+ display: block;
2502
+ width: 100%;
2503
+ padding: 0.375rem;
2504
+ background: var(--color-bg-secondary);
2505
+ border: none;
2506
+ cursor: pointer;
2507
+ font-size: 0.75rem;
2508
+ color: var(--color-primary);
2509
+ font-weight: 500;
2510
+ text-align: center;
2511
+ }
2512
+
2513
+ .block-tool-result .expand-btn:hover { background: var(--color-border); }
2514
+
2515
+ .block-tool-result .result-id {
2516
+ font-size: 0.65rem;
2517
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2518
+ opacity: 0.6;
2519
+ }
2520
+
2521
+ /* --- Result Summary Block --- */
2522
+ .block-result {
2523
+ margin-bottom: 0;
2524
+ border-radius: 0.5rem;
2525
+ overflow: hidden;
2526
+ }
2527
+
2528
+ .block-result.result-ok {
2529
+ }
2530
+
2531
+ .block-result.result-err {
2532
+ }
2533
+
2534
+ html.dark .block-result.result-ok { }
2535
+ html.dark .block-result.result-err { }
2536
+
2537
+ .block-result .result-summary-header {
2538
+ padding: 0.375rem 0.75rem;
2539
+ display: flex;
2540
+ align-items: center;
2541
+ gap: 0.5rem;
2542
+ }
2543
+
2544
+ .block-result.result-ok .result-summary-header { color: #166534; }
2545
+ .block-result.result-err .result-summary-header { color: #991b1b; }
2546
+ html.dark .block-result.result-ok .result-summary-header { color: #86efac; }
2547
+ html.dark .block-result.result-err .result-summary-header { color: #fca5a5; }
2548
+
2549
+ .block-result .result-summary-header .result-title { font-weight: 700; font-size: 0.9rem; }
2550
+
2551
+ .block-result .result-stats {
2552
+ display: flex;
2553
+ gap: 1.5rem;
2554
+ padding: 0 0.75rem 0.375rem;
2555
+ font-size: 0.8rem;
2556
+ flex-wrap: wrap;
2557
+ }
2558
+
2559
+ .block-result .result-stat {
2560
+ display: flex;
2561
+ align-items: center;
2562
+ gap: 0.375rem;
2563
+ }
2564
+
2565
+ .block-result .result-stat .stat-icon { font-size: 0.9rem; opacity: 0.7; }
2566
+ .block-result .result-stat .stat-value { font-weight: 600; }
2567
+ .block-result .result-stat .stat-label { color: var(--color-text-secondary); font-size: 0.75rem; }
2568
+
2569
+ .block-result .result-content {
2570
+ padding: 0.375rem 0.75rem;
2571
+ font-size: 0.85rem;
2572
+ white-space: pre-wrap;
2573
+ word-break: break-word;
2574
+ max-height: 300px;
2575
+ overflow-y: auto;
2576
+ line-height: 1.5;
2577
+ }
2578
+
2579
+ /* --- System Block --- */
2580
+ .block-system {
2581
+ margin-bottom: 0;
2582
+ border-radius: 0.5rem;
2583
+ overflow: hidden;
2584
+ }
2585
+
2586
+ html.dark .block-system { }
2587
+
2588
+ .block-system .system-header {
2589
+ padding: 0.375rem 0.75rem;
2590
+ font-weight: 600;
2591
+ font-size: 0.85rem;
2592
+ color: #3730a3;
2593
+ }
2594
+
2595
+ html.dark .block-system .system-header { color: #a5b4fc; }
2596
+
2597
+ .block-system .system-body {
2598
+ padding: 0.375rem 0.75rem;
2599
+ font-size: 0.8rem;
2600
+ color: #3730a3;
2601
+ display: flex;
2602
+ flex-direction: column;
2603
+ gap: 0.25rem;
2604
+ }
2605
+
2606
+ html.dark .block-system .system-body { color: #c7d2fe; }
2607
+
2608
+ .block-system .system-body .sys-field { display: flex; align-items: baseline; gap: 0.5rem; }
2609
+ .block-system .system-body .sys-label { font-weight: 600; flex-shrink: 0; min-width: 5rem; }
2610
+ .block-system .system-body .sys-value { font-family: 'Monaco','Menlo','Ubuntu Mono', monospace; font-size: 0.75rem; }
2611
+ .block-system .system-body .sys-value code { background: #c7d2fe; padding: 0.0625rem 0.375rem; border-radius: 0.25rem; }
2612
+ html.dark .block-system .system-body .sys-value code { background: #312e81; }
2613
+
2614
+ .block-system .tools-list {
2615
+ display: flex;
2616
+ flex-wrap: wrap;
2617
+ gap: 0.25rem;
2618
+ margin-top: 0.25rem;
2619
+ }
2620
+
2621
+ .block-system .tools-list .tool-badge {
2622
+ display: inline-block;
2623
+ padding: 0.125rem 0.5rem;
2624
+ background: #c7d2fe;
2625
+ color: #3730a3;
2626
+ border-radius: 1rem;
2627
+ font-size: 0.65rem;
2628
+ font-weight: 500;
2629
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2630
+ }
2631
+
2632
+ html.dark .block-system .tools-list .tool-badge { background: #312e81; color: #a5b4fc; }
2633
+
2634
+ /* --- Bash Block --- */
2635
+ .block-bash {
2636
+ margin-bottom: 0;
2637
+ border-radius: 0.5rem;
2638
+ overflow: hidden;
2639
+ }
2640
+
2641
+ .block-bash .bash-command {
2642
+ padding: 0.375rem 0.75rem;
2643
+ display: flex;
2644
+ align-items: flex-start;
2645
+ gap: 0.5rem;
2646
+ }
2647
+
2648
+ .block-bash .bash-command .prompt { color: #34d399; font-weight: 700; flex-shrink: 0; }
2649
+ .block-bash .bash-command code {
2650
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2651
+ color: #e5e7eb;
2652
+ font-size: 0.8rem;
2653
+ overflow-x: auto;
2654
+ flex: 1;
2655
+ }
2656
+
2657
+ .block-bash .bash-output {
2658
+ padding: 0.375rem 0.75rem;
2659
+ color: #9ca3af;
2660
+ font-size: 0.75rem;
2661
+ overflow-x: auto;
2662
+ white-space: pre-wrap;
2663
+ max-height: 300px;
2664
+ overflow-y: auto;
2665
+ }
2666
+
2667
+ /* --- Generic Block --- */
2668
+ .block-generic {
2669
+ margin-bottom: 0;
2670
+ padding: 0.5rem 0.75rem;
2671
+ border-radius: 0.5rem;
2672
+ background: var(--color-bg-secondary);
2673
+ }
2674
+
2675
+ .block-generic .generic-type {
2676
+ font-size: 0.7rem;
2677
+ text-transform: uppercase;
2678
+ letter-spacing: 0.05em;
2679
+ color: var(--color-text-secondary);
2680
+ font-weight: 600;
2681
+ margin-bottom: 0.375rem;
2682
+ }
2683
+
2684
+ .block-generic .generic-fields {
2685
+ display: flex;
2686
+ flex-direction: column;
2687
+ gap: 0.25rem;
2688
+ font-size: 0.8rem;
2689
+ }
2690
+
2691
+ .block-generic .generic-field {
2692
+ display: flex;
2693
+ gap: 0.5rem;
2694
+ }
2695
+
2696
+ .block-generic .generic-field .field-key {
2697
+ font-weight: 600;
2698
+ color: var(--color-text-secondary);
2699
+ flex-shrink: 0;
2700
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2701
+ font-size: 0.75rem;
2702
+ }
2703
+
2704
+ .block-generic .generic-field .field-value {
2705
+ font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
2706
+ font-size: 0.75rem;
2707
+ word-break: break-all;
2708
+ }
2709
+
2710
+ /* --- Error Block --- */
2711
+ .block-error {
2712
+ margin-bottom: 0;
2713
+ padding: 0.5rem 0.75rem;
2714
+ border-radius: 0.5rem;
2715
+ }
2716
+
2717
+ html.dark .block-error { }
2718
+
2719
+ /* --- Image Block --- */
2720
+ .block-image {
2721
+ margin-bottom: 0;
2722
+ border-radius: 0.5rem;
2723
+ overflow: hidden;
2724
+ }
2725
+
2726
+ .block-image img { max-width: 100%; height: auto; max-height: 24rem; object-fit: contain; display: block; }
2727
+ .block-image .image-caption { padding: 0.5rem 0.75rem; background: var(--color-bg-secondary); font-size: 0.8rem; color: var(--color-text-secondary); }
2728
+
2729
+ /* ===== STREAMING EVENTS ===== */
2730
+ .event-streaming-start {
2731
+ margin-bottom: 0;
2732
+ padding: 0.375rem 0.75rem;
2733
+ background: #eff6ff;
2734
+ border-radius: 0.5rem;
2735
+ display: flex;
2736
+ align-items: center;
2737
+ gap: 0.625rem;
2738
+ }
2739
+
2740
+ html.dark .event-streaming-start { background: #0c1a2e; }
2741
+
2742
+ .event-streaming-complete {
2743
+ margin-bottom: 0;
2744
+ padding: 0.375rem 0.75rem;
2745
+ background: linear-gradient(135deg, #ecfdf5, #f0fdf4);
2746
+ border-radius: 0.5rem;
2747
+ }
2748
+
2749
+ html.dark .event-streaming-complete { background: linear-gradient(135deg, #0a1f0f, #0f2b1a); }
2750
+
2751
+ @keyframes skeleton-pulse {
2752
+ 0%, 100% { opacity: 0.4; }
2753
+ 50% { opacity: 0.15; }
2754
+ }
2755
+ .skeleton-pulse { animation: skeleton-pulse 1.5s ease-in-out infinite; }
2756
+ .skeleton-loading { padding: 1rem; }
2757
+
2758
+ .message-sending { opacity: 0.6; transition: opacity 0.3s ease; }
2759
+ .message-send-failed { border-left: 3px solid var(--color-error); }
2760
+
2761
+ .connection-indicator {
2762
+ display: inline-flex;
2763
+ align-items: center;
2764
+ gap: 0.375rem;
2765
+ padding: 0.25rem 0.5rem;
2766
+ border-radius: 1rem;
2767
+ font-size: 0.75rem;
2768
+ cursor: pointer;
2769
+ transition: all 0.3s ease;
2770
+ }
2771
+ .connection-dot {
2772
+ width: 8px;
2773
+ height: 8px;
2774
+ border-radius: 50%;
2775
+ transition: background-color 0.5s ease;
2776
+ }
2777
+ .connection-dot.excellent { background: #10b981; }
2778
+ .connection-dot.good { background: #10b981; }
2779
+ .connection-dot.fair { background: #f59e0b; }
2780
+ .connection-dot.poor { background: #f97316; }
2781
+ .connection-dot.bad { background: #ef4444; }
2782
+ .connection-dot.unknown { background: #6b7280; }
2783
+ .connection-dot.disconnected { background: #ef4444; animation: pulse 1.5s ease-in-out infinite; }
2784
+ .connection-dot.reconnecting { background: #f59e0b; animation: pulse 1s ease-in-out infinite; }
2785
+ .connection-dot.downloading { background: #3b82f6; animation: pulse 1s ease-in-out infinite; }
2786
+
2787
+ .model-dl-indicator {
2788
+ display: none;
2789
+ position: relative;
2790
+ width: 24px;
2791
+ height: 24px;
2792
+ cursor: pointer;
2793
+ }
2794
+ .model-dl-indicator.active { display: inline-flex; align-items: center; justify-content: center; }
2795
+ .model-dl-indicator svg { width: 24px; height: 24px; transform: rotate(-90deg); }
2796
+ .model-dl-indicator .track { fill: none; stroke: var(--color-bg-secondary); stroke-width: 3; }
2797
+ .model-dl-indicator .progress { fill: none; stroke: var(--color-primary); stroke-width: 3; stroke-linecap: round; transition: stroke-dashoffset 0.3s ease; }
2798
+ .model-dl-indicator .icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
2799
+ .model-dl-indicator .icon svg { width: 12px; height: 12px; transform: none; }
2800
+ .model-dl-indicator-tooltip {
2801
+ display: none; position: absolute; top: calc(100% + 6px); right: 0; background: var(--color-bg-primary);
2802
+ border: 1px solid var(--color-border); border-radius: 6px; padding: 8px 12px; font-size: 0.75rem;
2803
+ white-space: nowrap; z-index: 1000; box-shadow: 0 2px 8px rgba(0,0,0,0.15);
2804
+ }
2805
+ .model-dl-indicator:hover .model-dl-indicator-tooltip { display: block; }
2806
+
2807
+ .connection-tooltip {
2808
+ position: absolute;
2809
+ top: 100%;
2810
+ right: 0;
2811
+ margin-top: 0.5rem;
2812
+ padding: 0.75rem;
2813
+ background: var(--color-bg-secondary);
2814
+ border: 1px solid var(--color-border);
2815
+ border-radius: 0.5rem;
2816
+ font-size: 0.75rem;
2817
+ white-space: nowrap;
2818
+ z-index: 100;
2819
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
2820
+ }
2821
+
2822
+ .new-content-pill {
2823
+ position: sticky;
2824
+ bottom: 0.5rem;
2825
+ left: 50%;
2826
+ transform: translateX(-50%);
2827
+ padding: 0.375rem 1rem;
2828
+ background: var(--color-primary);
2829
+ color: white;
2830
+ border: none;
2831
+ border-radius: 1rem;
2832
+ font-size: 0.8rem;
2833
+ cursor: pointer;
2834
+ z-index: 50;
2835
+ box-shadow: 0 2px 8px rgba(0,0,0,0.2);
2836
+ transition: opacity 0.2s ease;
2837
+ }
2838
+ .new-content-pill:hover { opacity: 0.9; }
2839
+
2840
+ @keyframes block-appear {
2841
+ from { opacity: 0; transform: translateY(6px); }
2842
+ to { opacity: 1; transform: translateY(0); }
2843
+ }
2844
+ .streaming-blocks > * {
2845
+ animation: block-appear 0.2s ease-out both;
2846
+ }
2847
+ .streaming-blocks > details.block-tool-use {
2848
+ transition: max-height 0.3s ease;
2849
+ }
2850
+ @keyframes chunk-placeholder-pulse {
2851
+ 0%, 100% { opacity: 0.3; }
2852
+ 50% { opacity: 0.6; }
2853
+ }
2854
+ .chunk-placeholder {
2855
+ height: 2rem;
2856
+ border-radius: 0.375rem;
2857
+ background: var(--color-bg-secondary);
2858
+ animation: chunk-placeholder-pulse 1s ease-in-out infinite;
2859
+ margin: 0.25rem 0;
2860
+ }
2861
+ .connection-dot.degrading {
2862
+ animation: pulse 1s ease-in-out infinite;
2863
+ background-color: var(--color-warning) !important;
2864
+ }
2865
+
2866
+ /* ===== IN-UI DIALOGS ===== */
2867
+ .dialog-overlay {
2868
+ position: fixed;
2869
+ top: 0;
2870
+ left: 0;
2871
+ right: 0;
2872
+ bottom: 0;
2873
+ z-index: 10000;
2874
+ display: flex;
2875
+ align-items: center;
2876
+ justify-content: center;
2877
+ opacity: 0;
2878
+ transition: opacity 0.2s ease;
2879
+ }
2880
+ .dialog-overlay.visible { opacity: 1; }
2881
+ .dialog-backdrop {
2882
+ position: absolute;
2883
+ top: 0;
2884
+ left: 0;
2885
+ right: 0;
2886
+ bottom: 0;
2887
+ background: rgba(0, 0, 0, 0.5);
2888
+ backdrop-filter: blur(2px);
2889
+ }
2890
+ .dialog-container {
2891
+ position: fixed;
2892
+ top: 0;
2893
+ left: 0;
2894
+ right: 0;
2895
+ bottom: 0;
2896
+ display: flex;
2897
+ align-items: center;
2898
+ justify-content: center;
2899
+ z-index: 10001;
2900
+ opacity: 0;
2901
+ transition: opacity 0.2s ease;
2902
+ }
2903
+ .dialog-container.visible { opacity: 1; }
2904
+ .dialog-box {
2905
+ background: var(--color-bg-primary);
2906
+ border-radius: 0.75rem;
2907
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
2908
+ max-width: 90vw;
2909
+ width: 400px;
2910
+ overflow: hidden;
2911
+ transform: scale(0.95) translateY(-10px);
2912
+ transition: transform 0.2s ease;
2913
+ }
2914
+ .dialog-container.visible .dialog-box {
2915
+ transform: scale(1) translateY(0);
2916
+ }
2917
+ .dialog-box-progress { width: 450px; }
2918
+ .dialog-header {
2919
+ padding: 1rem 1.25rem;
2920
+ border-bottom: 1px solid var(--color-border);
2921
+ }
2922
+ .dialog-title {
2923
+ margin: 0;
2924
+ font-size: 1.1rem;
2925
+ font-weight: 600;
2926
+ }
2927
+ .dialog-body {
2928
+ padding: 1.25rem;
2929
+ }
2930
+ .dialog-message {
2931
+ margin: 0;
2932
+ font-size: 0.9rem;
2933
+ line-height: 1.5;
2934
+ color: var(--color-text-primary);
2935
+ }
2936
+ .dialog-label {
2937
+ display: block;
2938
+ margin-bottom: 0.5rem;
2939
+ font-size: 0.9rem;
2940
+ color: var(--color-text-primary);
2941
+ }
2942
+ .dialog-input {
2943
+ width: 100%;
2944
+ padding: 0.625rem 0.875rem;
2945
+ border: 1px solid var(--color-border);
2946
+ border-radius: 0.5rem;
2947
+ background: var(--color-bg-secondary);
2948
+ color: var(--color-text-primary);
2949
+ font-size: 0.9rem;
2950
+ outline: none;
2951
+ transition: border-color 0.15s, box-shadow 0.15s;
2952
+ }
2953
+ .dialog-input:focus {
2954
+ border-color: var(--color-primary);
2955
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
2956
+ }
2957
+ .dialog-footer {
2958
+ padding: 0.75rem 1.25rem;
2959
+ display: flex;
2960
+ justify-content: flex-end;
2961
+ gap: 0.5rem;
2962
+ border-top: 1px solid var(--color-border);
2963
+ background: var(--color-bg-secondary);
2964
+ }
2965
+ .dialog-btn {
2966
+ padding: 0.5rem 1.25rem;
2967
+ border: none;
2968
+ border-radius: 0.5rem;
2969
+ font-size: 0.875rem;
2970
+ font-weight: 500;
2971
+ cursor: pointer;
2972
+ transition: all 0.15s;
2973
+ }
2974
+ .dialog-btn-primary {
2975
+ background: var(--color-primary);
2976
+ color: white;
2977
+ }
2978
+ .dialog-btn-primary:hover { background: var(--color-primary-dark); }
2979
+ .dialog-btn-secondary {
2980
+ background: var(--color-bg-primary);
2981
+ color: var(--color-text-primary);
2982
+ border: 1px solid var(--color-border);
2983
+ }
2984
+ .dialog-btn-secondary:hover { background: var(--color-bg-secondary); }
2985
+ .dialog-btn-danger { background: var(--color-error); }
2986
+ .dialog-btn-danger:hover { background: #dc2626; }
2987
+ .dialog-progress-bar {
2988
+ height: 8px;
2989
+ background: var(--color-bg-secondary);
2990
+ border-radius: 4px;
2991
+ overflow: hidden;
2992
+ margin: 1rem 0 0.5rem;
2993
+ }
2994
+ .dialog-progress-fill {
2995
+ height: 100%;
2996
+ background: var(--color-primary);
2997
+ border-radius: 4px;
2998
+ transition: width 0.3s ease;
2999
+ }
3000
+ .dialog-progress-percent {
3001
+ margin: 0;
3002
+ text-align: center;
3003
+ font-size: 0.8rem;
3004
+ color: var(--color-text-secondary);
3005
+ }
3006
+
3007
+ /* ===== TOAST NOTIFICATIONS ===== */
3008
+ .toast-notification {
3009
+ position: fixed;
3010
+ bottom: 100px;
3011
+ left: 50%;
3012
+ transform: translateX(-50%) translateY(20px);
3013
+ padding: 0.75rem 1.5rem;
3014
+ border-radius: 0.5rem;
3015
+ font-size: 0.875rem;
3016
+ font-weight: 500;
3017
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
3018
+ z-index: 20000;
3019
+ opacity: 0;
3020
+ transition: all 0.3s ease;
3021
+ display: flex;
3022
+ align-items: center;
3023
+ gap: 0.5rem;
3024
+ }
3025
+ .toast-notification.visible {
3026
+ opacity: 1;
3027
+ transform: translateX(-50%) translateY(0);
3028
+ }
3029
+ .toast-info { background: var(--color-primary); color: white; }
3030
+ .toast-success { background: var(--color-success); color: white; }
3031
+ .toast-error { background: var(--color-error); color: white; }
3032
+ .toast-warning { background: var(--color-warning); color: white; }
3033
+
3034
+ .inline-code {
3035
+ background: #f3f4f6;
3036
+ padding: 0.125rem 0.375rem;
3037
+ border-radius: 0.25rem;
3038
+ font-size: 0.875rem;
3039
+ font-family: ui-monospace, monospace;
3040
+ color: #dc2626;
3041
+ }
3042
+
3043
+ html.dark .inline-code {
3044
+ background: #262626;
3045
+ color: #f87171;
3046
+ }
3047
+
3048
+ .html-rendered-container {
3049
+ border-radius: 0.5rem;
3050
+ overflow: hidden;
3051
+ border: 1px solid #e5e7eb;
3052
+ }
3053
+
3054
+ html.dark .html-rendered-container {
3055
+ border-color: #262626;
3056
+ }
3057
+