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