@agent-link/server 0.1.162 → 0.1.164

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/web/style.css DELETED
@@ -1,5012 +0,0 @@
1
- *,
2
- *::before,
3
- *::after {
4
- box-sizing: border-box;
5
- margin: 0;
6
- padding: 0;
7
- }
8
-
9
- /* Keyboard focus outlines (visible only for keyboard navigation) */
10
- :focus-visible {
11
- outline: 2px solid var(--accent);
12
- outline-offset: 2px;
13
- }
14
-
15
- :focus:not(:focus-visible) {
16
- outline: none;
17
- }
18
-
19
- :root {
20
- --bg-primary: #1e1e1e;
21
- --bg-secondary: #252525;
22
- --bg-tertiary: #2f2f2f;
23
- --text-primary: #d4d4d4;
24
- --text-secondary: #858585;
25
- --accent: #6b9fce;
26
- --accent-hover: #5a8bba;
27
- --success: #4ead6a;
28
- --warning: #d4a24c;
29
- --error: #d45454;
30
- --border: #353535;
31
- --code-bg: #1a1a1a;
32
- --code-header-bg: #222222;
33
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
34
- }
35
-
36
- /* ── Light theme ── */
37
- [data-theme="light"] {
38
- --bg-primary: #fefcf8;
39
- --bg-secondary: #f5f3ef;
40
- --bg-tertiary: #e8e6e1;
41
- --text-primary: #1a1a1a;
42
- --text-secondary: #4b5563;
43
- --accent: #2563eb;
44
- --accent-hover: #1d4ed8;
45
- --success: #16a34a;
46
- --warning: #d97706;
47
- --error: #dc2626;
48
- --border: #d1d5db;
49
- --code-bg: #f1f3f5;
50
- --code-header-bg: #e9ecef;
51
- }
52
-
53
- html {
54
- height: 100%;
55
- height: 100dvh;
56
- }
57
-
58
- body {
59
- background-color: var(--bg-primary);
60
- color: var(--text-primary);
61
- height: 100%;
62
- }
63
-
64
- #app {
65
- height: 100%;
66
- }
67
-
68
- /* ── Layout ── */
69
- .layout {
70
- display: flex;
71
- flex-direction: column;
72
- height: 100%;
73
- }
74
-
75
- .top-bar {
76
- display: flex;
77
- align-items: center;
78
- justify-content: space-between;
79
- padding: 0.5rem 1rem;
80
- background: var(--bg-secondary);
81
- border-bottom: 1px solid var(--border);
82
- flex-shrink: 0;
83
- }
84
-
85
- .top-bar-left {
86
- display: flex;
87
- align-items: center;
88
- gap: 0.5rem;
89
- }
90
-
91
- .sidebar-toggle {
92
- display: flex;
93
- align-items: center;
94
- justify-content: center;
95
- width: 30px;
96
- height: 30px;
97
- background: none;
98
- border: none;
99
- border-radius: 4px;
100
- color: var(--text-secondary);
101
- cursor: pointer;
102
- transition: color 0.15s, background 0.15s;
103
- }
104
-
105
- .sidebar-toggle:hover {
106
- color: var(--text-primary);
107
- background: var(--bg-tertiary);
108
- }
109
-
110
- .top-bar h1 {
111
- font-size: 1.1rem;
112
- font-weight: 700;
113
- }
114
-
115
- .top-bar-info {
116
- display: flex;
117
- align-items: center;
118
- gap: 0.75rem;
119
- }
120
-
121
- .agent-label {
122
- color: var(--text-secondary);
123
- font-size: 0.85rem;
124
- }
125
-
126
- .latency {
127
- font-size: 0.75rem;
128
- font-variant-numeric: tabular-nums;
129
- opacity: 0.7;
130
- }
131
- .latency.good { color: var(--success); }
132
- .latency.ok { color: var(--warning); }
133
- .latency.bad { color: var(--error); }
134
-
135
- .theme-toggle {
136
- display: flex;
137
- align-items: center;
138
- justify-content: center;
139
- width: 32px;
140
- height: 32px;
141
- flex-shrink: 0;
142
- background: none;
143
- border: 1px solid var(--border);
144
- border-radius: 8px;
145
- color: var(--text-secondary);
146
- cursor: pointer;
147
- transition: color 0.15s, background 0.15s, border-color 0.15s;
148
- }
149
-
150
- .theme-toggle:hover {
151
- color: var(--text-primary);
152
- background: var(--bg-tertiary);
153
- border-color: var(--text-secondary);
154
- }
155
-
156
- /* ── Center card (no session / waiting) ── */
157
- .center-card {
158
- flex: 1;
159
- display: flex;
160
- align-items: center;
161
- justify-content: center;
162
- padding: 2rem;
163
- min-height: 0;
164
- }
165
-
166
- .status-card {
167
- background: var(--bg-secondary);
168
- border: 1px solid var(--border);
169
- border-radius: 12px;
170
- padding: 1.5rem 2rem;
171
- min-width: 320px;
172
- text-align: center;
173
- }
174
-
175
- .status-card .status {
176
- font-size: 1.1rem;
177
- margin-bottom: 0.75rem;
178
- }
179
-
180
- .status-card .info {
181
- margin-bottom: 0.5rem;
182
- font-size: 0.95rem;
183
- }
184
-
185
- .status-card .label {
186
- color: var(--text-secondary);
187
- }
188
-
189
- /* ── Badges ── */
190
- .muted {
191
- color: var(--text-secondary);
192
- font-size: 0.85rem;
193
- }
194
-
195
- .badge {
196
- padding: 2px 8px;
197
- border-radius: 4px;
198
- font-weight: 600;
199
- font-size: 0.9rem;
200
- }
201
-
202
- .badge.connected {
203
- color: var(--success);
204
- background: rgba(78, 173, 106, 0.1);
205
- }
206
-
207
- .badge.disconnected {
208
- color: var(--error);
209
- background: rgba(212, 84, 84, 0.1);
210
- }
211
-
212
- .badge.connecting\.\.\. {
213
- color: var(--warning);
214
- background: rgba(212, 162, 76, 0.1);
215
- }
216
-
217
- .badge.reconnecting\.\.\. {
218
- color: var(--warning);
219
- background: rgba(212, 162, 76, 0.1);
220
- }
221
-
222
- .badge.waiting {
223
- color: var(--warning);
224
- background: rgba(212, 162, 76, 0.1);
225
- }
226
-
227
- .badge.error,
228
- .badge.no\ session {
229
- color: var(--error);
230
- background: rgba(212, 84, 84, 0.1);
231
- }
232
-
233
- .error-msg {
234
- color: var(--error);
235
- font-size: 0.85rem;
236
- margin-top: 0.75rem;
237
- }
238
-
239
- /* ── Main body (sidebar + chat) ── */
240
- .main-body {
241
- flex: 1;
242
- display: flex;
243
- min-height: 0;
244
- }
245
-
246
- /* ── Sidebar ── */
247
- .sidebar {
248
- width: 260px;
249
- flex-shrink: 0;
250
- background: var(--bg-secondary);
251
- border-right: 1px solid var(--border);
252
- display: flex;
253
- flex-direction: column;
254
- overflow: hidden;
255
- }
256
-
257
- .sidebar-section {
258
- padding: 0.5rem 0.75rem;
259
- border-bottom: 1px solid var(--border);
260
- }
261
-
262
- .sidebar-workdir {
263
- position: relative;
264
- }
265
-
266
- .sidebar-hostname {
267
- display: flex;
268
- align-items: center;
269
- gap: 6px;
270
- font-size: 0.85rem;
271
- font-weight: 500;
272
- color: var(--text-primary);
273
- margin-bottom: 10px;
274
- padding-bottom: 10px;
275
- border-bottom: 1px solid var(--border);
276
- }
277
-
278
- .sidebar-hostname-icon {
279
- flex-shrink: 0;
280
- opacity: 0.6;
281
- }
282
-
283
- .sidebar-workdir-label {
284
- font-size: 0.7rem;
285
- text-transform: uppercase;
286
- letter-spacing: 0.05em;
287
- color: var(--text-secondary);
288
- margin-bottom: 4px;
289
- }
290
-
291
- .sidebar-workdir-path {
292
- font-size: 0.8rem;
293
- color: var(--text-primary);
294
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
295
- overflow: hidden;
296
- text-overflow: ellipsis;
297
- white-space: nowrap;
298
- line-height: 1.3;
299
- }
300
-
301
- /* ── Working Directory History ── */
302
- .workdir-history {
303
- margin-top: 10px;
304
- padding-top: 10px;
305
- border-top: 1px solid var(--border);
306
- }
307
- .workdir-history-label {
308
- font-size: 0.65rem;
309
- text-transform: uppercase;
310
- letter-spacing: 0.05em;
311
- color: var(--text-secondary);
312
- margin-bottom: 6px;
313
- opacity: 0.7;
314
- }
315
- .workdir-history-list {
316
- display: flex;
317
- flex-direction: column;
318
- gap: 2px;
319
- max-height: 120px;
320
- overflow-y: auto;
321
- }
322
- .workdir-history-item {
323
- display: flex;
324
- align-items: center;
325
- gap: 6px;
326
- padding: 4px 6px;
327
- border-radius: 4px;
328
- cursor: pointer;
329
- transition: background 0.15s;
330
- }
331
- .workdir-history-item:hover {
332
- background: var(--bg-tertiary);
333
- }
334
- .workdir-history-path {
335
- font-size: 0.72rem;
336
- color: var(--text-secondary);
337
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
338
- overflow: hidden;
339
- text-overflow: ellipsis;
340
- white-space: nowrap;
341
- flex: 1;
342
- min-width: 0;
343
- }
344
- .workdir-history-item:hover .workdir-history-path {
345
- color: var(--text-primary);
346
- }
347
- .workdir-history-delete {
348
- display: flex;
349
- align-items: center;
350
- justify-content: center;
351
- width: 18px;
352
- height: 18px;
353
- background: none;
354
- border: none;
355
- border-radius: 3px;
356
- color: var(--text-secondary);
357
- cursor: pointer;
358
- padding: 0;
359
- flex-shrink: 0;
360
- transition: color 0.15s, background 0.15s;
361
- visibility: hidden;
362
- }
363
- .workdir-history-item:hover .workdir-history-delete {
364
- visibility: visible;
365
- }
366
- .workdir-history-delete:hover {
367
- color: var(--error);
368
- background: rgba(212, 84, 84, 0.1);
369
- }
370
-
371
- .sidebar-sessions {
372
- display: flex;
373
- flex-direction: column;
374
- overflow: hidden;
375
- min-height: 0;
376
- }
377
-
378
- .sidebar-version-footer {
379
- padding: 6px 12px;
380
- font-size: 0.65rem;
381
- color: var(--text-secondary);
382
- opacity: 0.5;
383
- text-align: center;
384
- border-top: 1px solid var(--border);
385
- flex-shrink: 0;
386
- }
387
-
388
- .sidebar-version-sep {
389
- margin: 0 3px;
390
- }
391
-
392
- .sidebar-section-header {
393
- display: flex;
394
- align-items: center;
395
- justify-content: space-between;
396
- font-size: 0.7rem;
397
- text-transform: uppercase;
398
- letter-spacing: 0.05em;
399
- color: var(--text-secondary);
400
- margin-bottom: 4px;
401
- }
402
-
403
- .sidebar-refresh-btn {
404
- display: flex;
405
- align-items: center;
406
- justify-content: center;
407
- width: 20px;
408
- height: 20px;
409
- background: none;
410
- border: none;
411
- border-radius: 4px;
412
- color: var(--text-secondary);
413
- cursor: pointer;
414
- transition: color 0.15s;
415
- }
416
-
417
- .sidebar-refresh-btn:hover {
418
- color: var(--text-primary);
419
- }
420
-
421
- .sidebar-refresh-btn:disabled {
422
- opacity: 0.4;
423
- cursor: not-allowed;
424
- }
425
-
426
- .sidebar-section-header-actions {
427
- display: flex;
428
- align-items: center;
429
- gap: 2px;
430
- }
431
-
432
- .sidebar-collapse-btn {
433
- display: flex;
434
- align-items: center;
435
- justify-content: center;
436
- width: 24px;
437
- height: 24px;
438
- background: none;
439
- border: none;
440
- border-radius: 4px;
441
- color: var(--text-secondary);
442
- cursor: pointer;
443
- transition: color 0.15s;
444
- }
445
-
446
- .sidebar-collapse-btn:hover {
447
- color: var(--text-primary);
448
- }
449
-
450
- .sidebar-collapse-btn svg {
451
- transition: transform 0.2s ease;
452
- }
453
-
454
- .sidebar-collapse-btn svg.collapsed {
455
- transform: rotate(-90deg);
456
- }
457
-
458
- @keyframes spin {
459
- from { transform: rotate(0deg); }
460
- to { transform: rotate(360deg); }
461
- }
462
-
463
- .spinning {
464
- animation: spin 0.8s linear infinite;
465
- }
466
-
467
- .new-conversation-btn {
468
- display: flex;
469
- align-items: center;
470
- gap: 6px;
471
- width: 100%;
472
- padding: 6px 8px;
473
- background: none;
474
- border: 1px dashed var(--border);
475
- border-radius: 6px;
476
- color: var(--text-secondary);
477
- font-size: 0.82rem;
478
- cursor: pointer;
479
- transition: color 0.15s, border-color 0.15s, background 0.15s;
480
- margin-bottom: 8px;
481
- }
482
-
483
- .new-conversation-btn:hover {
484
- color: var(--text-primary);
485
- border-color: var(--text-secondary);
486
- background: var(--bg-tertiary);
487
- }
488
-
489
- .new-conversation-btn:disabled {
490
- opacity: 0.4;
491
- cursor: not-allowed;
492
- }
493
-
494
- .sidebar-loading,
495
- .sidebar-empty {
496
- font-size: 0.8rem;
497
- color: var(--text-secondary);
498
- text-align: center;
499
- padding: 1rem 0;
500
- }
501
-
502
- .session-list {
503
- flex: 1 1 auto;
504
- overflow-y: auto;
505
- min-height: 0;
506
- overscroll-behavior: contain;
507
- display: flex;
508
- flex-direction: column;
509
- gap: 2px;
510
- min-height: 0;
511
- overscroll-behavior: contain;
512
- }
513
-
514
- .session-group {
515
- margin-bottom: 0.5rem;
516
- }
517
-
518
- .session-group-label {
519
- font-size: 0.68rem;
520
- font-weight: 600;
521
- text-transform: uppercase;
522
- letter-spacing: 0.04em;
523
- color: var(--text-secondary);
524
- padding: 0.4rem 8px 0.2rem;
525
- opacity: 0.7;
526
- }
527
-
528
- .session-item {
529
- padding: 8px 10px;
530
- border-radius: 8px;
531
- cursor: pointer;
532
- transition: background 0.15s, transform 0.1s;
533
- border-left: 3px solid transparent;
534
- }
535
-
536
- .session-item:hover {
537
- background: var(--bg-tertiary);
538
- }
539
-
540
- .session-item:active {
541
- transform: scale(0.98);
542
- }
543
-
544
- .session-item.active {
545
- background: var(--bg-tertiary);
546
- border-left-color: var(--accent);
547
- }
548
-
549
- .session-title {
550
- font-size: 0.82rem;
551
- color: var(--text-primary);
552
- overflow: hidden;
553
- text-overflow: ellipsis;
554
- white-space: nowrap;
555
- line-height: 1.3;
556
- display: flex;
557
- align-items: center;
558
- gap: 4px;
559
- }
560
-
561
- .session-team-icon {
562
- flex-shrink: 0;
563
- color: var(--accent);
564
- opacity: 0.7;
565
- }
566
-
567
- /* Processing indicator: pulsing dot before session title */
568
- .session-item.processing .session-title::before {
569
- content: '';
570
- display: inline-block;
571
- width: 6px;
572
- height: 6px;
573
- border-radius: 50%;
574
- background: var(--accent);
575
- margin-right: 6px;
576
- vertical-align: middle;
577
- animation: pulse-dot 1.5s ease-in-out infinite;
578
- }
579
-
580
- @keyframes pulse-dot {
581
- 0%, 100% { opacity: 1; }
582
- 50% { opacity: 0.3; }
583
- }
584
-
585
- .session-meta {
586
- font-size: 0.7rem;
587
- color: var(--text-secondary);
588
- margin-top: 2px;
589
- display: flex;
590
- align-items: center;
591
- justify-content: space-between;
592
- }
593
-
594
- .session-actions {
595
- display: flex;
596
- align-items: center;
597
- gap: 2px;
598
- visibility: hidden;
599
- }
600
-
601
- .session-item:hover .session-actions {
602
- visibility: visible;
603
- }
604
-
605
- .team-history-item:hover .session-actions {
606
- visibility: visible;
607
- }
608
-
609
- .session-delete-btn {
610
- display: flex;
611
- align-items: center;
612
- justify-content: center;
613
- width: 20px;
614
- height: 20px;
615
- background: none;
616
- border: none;
617
- border-radius: 4px;
618
- color: var(--text-secondary);
619
- cursor: pointer;
620
- padding: 0;
621
- transition: color 0.15s, background 0.15s;
622
- }
623
-
624
- .session-delete-btn:hover {
625
- color: var(--error);
626
- background: rgba(212, 84, 84, 0.1);
627
- }
628
-
629
- /* ── Rename session (pencil icon + inline edit) ── */
630
- .session-rename-btn {
631
- display: flex;
632
- align-items: center;
633
- justify-content: center;
634
- width: 20px;
635
- height: 20px;
636
- background: none;
637
- border: none;
638
- border-radius: 4px;
639
- color: var(--text-secondary);
640
- cursor: pointer;
641
- padding: 0;
642
- transition: color 0.15s, background 0.15s;
643
- }
644
-
645
- .session-rename-btn:hover {
646
- color: var(--accent);
647
- background: rgba(107, 159, 206, 0.12);
648
- }
649
-
650
- .session-rename-row {
651
- display: flex;
652
- align-items: center;
653
- gap: 4px;
654
- min-width: 0;
655
- flex: 1;
656
- }
657
-
658
- .session-rename-input {
659
- flex: 1;
660
- min-width: 0;
661
- background: var(--bg-primary);
662
- border: 1px solid var(--accent);
663
- border-radius: 4px;
664
- color: var(--text-primary);
665
- font-size: 0.82rem;
666
- padding: 2px 6px;
667
- outline: none;
668
- }
669
-
670
- .session-rename-ok,
671
- .session-rename-cancel {
672
- background: none;
673
- border: none;
674
- color: var(--text-secondary);
675
- cursor: pointer;
676
- font-size: 0.9rem;
677
- padding: 0 2px;
678
- line-height: 1;
679
- }
680
-
681
- .session-rename-ok:hover { color: var(--accent); }
682
- .session-rename-cancel:hover { color: var(--error); }
683
-
684
- /* ── Delete confirmation dialog ── */
685
- .delete-confirm-dialog {
686
- width: 360px;
687
- background: var(--bg-secondary);
688
- border: 1px solid var(--border);
689
- border-radius: 12px;
690
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
691
- }
692
-
693
- .delete-confirm-header {
694
- padding: 12px 16px;
695
- font-size: 0.95rem;
696
- font-weight: 600;
697
- border-bottom: 1px solid var(--border);
698
- }
699
-
700
- .delete-confirm-body {
701
- padding: 16px;
702
- font-size: 0.88rem;
703
- line-height: 1.5;
704
- }
705
-
706
- .delete-confirm-body p {
707
- margin-bottom: 6px;
708
- }
709
-
710
- .delete-confirm-title {
711
- font-weight: 500;
712
- color: var(--text-primary);
713
- overflow: hidden;
714
- text-overflow: ellipsis;
715
- white-space: nowrap;
716
- padding: 6px 10px;
717
- background: var(--bg-tertiary);
718
- border-radius: 6px;
719
- }
720
-
721
- .delete-confirm-warning {
722
- font-size: 0.78rem;
723
- color: var(--text-secondary);
724
- margin-top: 4px;
725
- }
726
-
727
- .delete-confirm-footer {
728
- padding: 10px 16px;
729
- display: flex;
730
- justify-content: flex-end;
731
- gap: 8px;
732
- border-top: 1px solid var(--border);
733
- }
734
-
735
- .delete-confirm-btn {
736
- padding: 6px 20px;
737
- background: var(--error);
738
- color: #fff;
739
- border: none;
740
- border-radius: 8px;
741
- font-size: 0.85rem;
742
- font-weight: 600;
743
- cursor: pointer;
744
- transition: background 0.15s;
745
- }
746
-
747
- .delete-confirm-btn:hover {
748
- background: #c04444;
749
- }
750
-
751
- /* ── Auth Dialog ── */
752
- .auth-dialog {
753
- background: var(--bg-secondary);
754
- border: 1px solid var(--border);
755
- border-radius: 12px;
756
- width: 360px;
757
- max-width: 90vw;
758
- box-shadow: 0 8px 32px rgba(0,0,0,0.3);
759
- }
760
-
761
- .auth-dialog-header {
762
- display: flex;
763
- align-items: center;
764
- gap: 10px;
765
- padding: 20px 24px 16px;
766
- font-size: 1rem;
767
- font-weight: 600;
768
- color: var(--text-primary);
769
- }
770
-
771
- .auth-dialog-header svg {
772
- color: var(--accent);
773
- }
774
-
775
- .auth-dialog-locked .auth-dialog-header svg {
776
- color: var(--error);
777
- }
778
-
779
- .auth-dialog-body {
780
- padding: 0 24px 16px;
781
- }
782
-
783
- .auth-dialog-body p {
784
- margin: 0 0 12px 0;
785
- color: var(--text-secondary);
786
- font-size: 0.85rem;
787
- }
788
-
789
- .auth-password-input {
790
- width: 100%;
791
- padding: 10px 12px;
792
- background: var(--bg-tertiary);
793
- border: 1px solid var(--border);
794
- border-radius: 8px;
795
- color: var(--text-primary);
796
- font-size: 0.9rem;
797
- outline: none;
798
- box-sizing: border-box;
799
- margin-bottom: 4px;
800
- }
801
-
802
- .auth-password-input:focus {
803
- border-color: var(--accent);
804
- }
805
-
806
- .auth-error {
807
- color: var(--error) !important;
808
- font-size: 0.82rem !important;
809
- margin-top: 8px !important;
810
- }
811
-
812
- .auth-attempts {
813
- color: var(--text-secondary) !important;
814
- font-size: 0.78rem !important;
815
- }
816
-
817
- .auth-locked-hint {
818
- font-size: 0.78rem !important;
819
- color: var(--text-secondary) !important;
820
- }
821
-
822
- .auth-dialog-footer {
823
- padding: 12px 24px 20px;
824
- display: flex;
825
- justify-content: flex-end;
826
- }
827
-
828
- .auth-submit-btn {
829
- background: var(--accent);
830
- color: #fff;
831
- border: none;
832
- padding: 8px 24px;
833
- border-radius: 8px;
834
- font-size: 0.85rem;
835
- font-weight: 600;
836
- cursor: pointer;
837
- transition: background 0.15s;
838
- }
839
-
840
- .auth-submit-btn:hover:not(:disabled) {
841
- background: var(--accent-hover);
842
- }
843
-
844
- .auth-submit-btn:disabled {
845
- opacity: 0.4;
846
- cursor: not-allowed;
847
- }
848
-
849
- /* ── Chat area (message list + input) ── */
850
- .chat-area {
851
- flex: 1;
852
- display: flex;
853
- flex-direction: column;
854
- min-height: 0;
855
- }
856
-
857
- /* ── Message list ── */
858
- .message-list {
859
- flex: 1 1 auto;
860
- overflow-y: auto;
861
- min-height: 0;
862
- overscroll-behavior: contain;
863
- padding: 1.5rem 1.5rem 1rem;
864
- display: flex;
865
- flex-direction: column;
866
- gap: 0.25rem;
867
- min-height: 0;
868
- overscroll-behavior: contain;
869
- }
870
-
871
- .message-list-inner {
872
- max-width: 768px;
873
- width: 100%;
874
- margin: 0 auto;
875
- display: flex;
876
- flex-direction: column;
877
- gap: 0.25rem;
878
- }
879
-
880
- .empty-state {
881
- flex: 1;
882
- display: flex;
883
- flex-direction: column;
884
- align-items: center;
885
- justify-content: center;
886
- gap: 0.5rem;
887
- color: var(--text-secondary);
888
- }
889
-
890
- .empty-state-icon {
891
- font-size: 2.5rem;
892
- opacity: 0.5;
893
- margin-bottom: 0.5rem;
894
- }
895
-
896
- .empty-state strong {
897
- color: var(--text-primary);
898
- }
899
-
900
- /* ── Messages ── */
901
- .message {
902
- display: flex;
903
- flex-direction: column;
904
- }
905
-
906
- .message-user {
907
- margin-top: 1.25rem;
908
- }
909
-
910
- .message-role-label {
911
- font-size: 0.75rem;
912
- font-weight: 600;
913
- text-transform: uppercase;
914
- letter-spacing: 0.03em;
915
- margin-bottom: 0.3rem;
916
- padding-left: 0.1rem;
917
- }
918
-
919
- .message-role-label.user-label {
920
- color: var(--text-secondary);
921
- }
922
-
923
- .message-role-label.assistant-label {
924
- color: var(--accent);
925
- }
926
-
927
- .message-bubble {
928
- padding: 0.6rem 0.9rem;
929
- border-radius: 10px;
930
- font-size: 0.94rem;
931
- line-height: 1.6;
932
- word-wrap: break-word;
933
- position: relative;
934
- }
935
-
936
- .user-bubble {
937
- background: var(--bg-tertiary);
938
- color: var(--text-primary);
939
- }
940
-
941
- /* ── Queue bar (pending messages above input) ── */
942
- .queue-bar {
943
- max-width: 768px;
944
- margin: 0 auto 6px;
945
- display: flex;
946
- flex-direction: column;
947
- gap: 3px;
948
- }
949
-
950
- .queue-item {
951
- display: flex;
952
- align-items: center;
953
- gap: 6px;
954
- background: var(--bg-secondary);
955
- border: 1px dashed var(--border);
956
- border-radius: 8px;
957
- padding: 4px 8px;
958
- font-size: 0.8rem;
959
- line-height: 1.3;
960
- color: var(--text-secondary);
961
- opacity: 0.85;
962
- }
963
-
964
- .queue-item-num {
965
- flex-shrink: 0;
966
- font-weight: 600;
967
- color: var(--text-secondary);
968
- font-size: 0.7rem;
969
- opacity: 0.6;
970
- }
971
-
972
- .queue-item-text {
973
- flex: 1;
974
- min-width: 0;
975
- overflow: hidden;
976
- text-overflow: ellipsis;
977
- white-space: nowrap;
978
- }
979
-
980
- .queue-item-attach {
981
- flex-shrink: 0;
982
- display: flex;
983
- align-items: center;
984
- gap: 2px;
985
- font-size: 0.7rem;
986
- opacity: 0.6;
987
- }
988
-
989
- .queue-item-remove {
990
- flex-shrink: 0;
991
- background: none;
992
- border: none;
993
- color: var(--text-secondary);
994
- font-size: 1rem;
995
- line-height: 1;
996
- cursor: pointer;
997
- padding: 0 2px;
998
- opacity: 0.5;
999
- transition: color 0.15s, opacity 0.15s;
1000
- }
1001
-
1002
- .queue-item-remove:hover {
1003
- opacity: 1;
1004
- color: var(--error);
1005
- }
1006
-
1007
- .usage-bar {
1008
- max-width: 768px;
1009
- margin: 0 auto 6px;
1010
- padding: 4px 10px;
1011
- font-size: 0.75rem;
1012
- color: var(--text-secondary);
1013
- text-align: center;
1014
- opacity: 0.7;
1015
- }
1016
-
1017
- .assistant-bubble {
1018
- background: transparent;
1019
- padding: 0.2rem 0;
1020
- }
1021
-
1022
- /* ── Message actions (copy button, shown on hover) ── */
1023
- .message-actions {
1024
- position: absolute;
1025
- top: 0;
1026
- right: 0;
1027
- display: flex;
1028
- gap: 2px;
1029
- opacity: 0;
1030
- transition: opacity 0.15s;
1031
- }
1032
-
1033
- .message-bubble:hover .message-actions {
1034
- opacity: 1;
1035
- }
1036
-
1037
- .icon-btn {
1038
- display: flex;
1039
- align-items: center;
1040
- justify-content: center;
1041
- width: 26px;
1042
- height: 26px;
1043
- background: var(--bg-tertiary);
1044
- border: 1px solid var(--border);
1045
- border-radius: 4px;
1046
- color: var(--text-secondary);
1047
- cursor: pointer;
1048
- transition: color 0.15s;
1049
- }
1050
-
1051
- .icon-btn:hover {
1052
- color: var(--text-primary);
1053
- }
1054
-
1055
- /* ── Markdown body in assistant messages ── */
1056
- .markdown-body {
1057
- line-height: 1.6;
1058
- }
1059
-
1060
- .markdown-body p {
1061
- margin-bottom: 0.5em;
1062
- }
1063
-
1064
- .markdown-body p:last-child {
1065
- margin-bottom: 0;
1066
- }
1067
-
1068
- .markdown-body ul, .markdown-body ol {
1069
- padding-left: 1.5em;
1070
- margin-bottom: 0.5em;
1071
- }
1072
-
1073
- .markdown-body li {
1074
- margin-bottom: 0.2em;
1075
- }
1076
-
1077
- .markdown-body strong {
1078
- font-weight: 600;
1079
- }
1080
-
1081
- .markdown-body code {
1082
- background: var(--bg-tertiary);
1083
- padding: 0.15em 0.35em;
1084
- border-radius: 3px;
1085
- font-size: 0.85em;
1086
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
1087
- }
1088
-
1089
- .markdown-body pre {
1090
- margin: 0.5em 0;
1091
- overflow-x: auto;
1092
- }
1093
-
1094
- .markdown-body pre code {
1095
- background: none;
1096
- padding: 0;
1097
- border-radius: 0;
1098
- font-size: 0.85em;
1099
- display: block;
1100
- padding: 0.8em;
1101
- }
1102
-
1103
- .markdown-body a {
1104
- color: #7aafe0;
1105
- text-decoration: none;
1106
- }
1107
-
1108
- .markdown-body a:hover {
1109
- text-decoration: underline;
1110
- }
1111
-
1112
- [data-theme="light"] .markdown-body a {
1113
- color: #2563eb;
1114
- }
1115
-
1116
- .markdown-body blockquote {
1117
- border-left: 3px solid var(--border);
1118
- padding-left: 0.8em;
1119
- color: var(--text-secondary);
1120
- margin: 0.5em 0;
1121
- }
1122
-
1123
- .markdown-body hr {
1124
- border: none;
1125
- border-top: 1px solid var(--border);
1126
- margin: 0.75em 0;
1127
- }
1128
-
1129
- .markdown-body table {
1130
- border-collapse: collapse;
1131
- margin: 0.5em 0;
1132
- font-size: 0.88em;
1133
- }
1134
-
1135
- .markdown-body th, .markdown-body td {
1136
- border: 1px solid var(--border);
1137
- padding: 0.4em 0.6em;
1138
- }
1139
-
1140
- .markdown-body th {
1141
- background: var(--bg-tertiary);
1142
- }
1143
-
1144
- /* ── Code block wrapper (with copy button) ── */
1145
- .code-block-wrapper {
1146
- position: relative;
1147
- margin: 0.5em 0;
1148
- border-radius: 8px;
1149
- overflow: hidden;
1150
- background: var(--code-bg);
1151
- }
1152
-
1153
- .code-block-header {
1154
- display: flex;
1155
- justify-content: space-between;
1156
- align-items: center;
1157
- padding: 6px 12px;
1158
- background: var(--code-header-bg);
1159
- }
1160
-
1161
- .code-lang {
1162
- font-size: 11px;
1163
- color: var(--text-secondary);
1164
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
1165
- }
1166
-
1167
- .code-copy-btn {
1168
- display: flex;
1169
- align-items: center;
1170
- padding: 2px 6px;
1171
- border: none;
1172
- border-radius: 3px;
1173
- background: transparent;
1174
- color: var(--text-secondary);
1175
- cursor: pointer;
1176
- transition: color 0.15s;
1177
- }
1178
-
1179
- .code-copy-btn:hover {
1180
- color: var(--text-primary);
1181
- }
1182
-
1183
- .code-block-wrapper pre {
1184
- margin: 0;
1185
- }
1186
-
1187
- .code-block-wrapper pre code {
1188
- padding: 0.8em 1em;
1189
- }
1190
-
1191
- /* ── Tool use lines (collapsible, compact, subdued) ── */
1192
- .tool-line-wrapper {
1193
- max-width: 100%;
1194
- padding-left: 0.25rem;
1195
- overflow: hidden;
1196
- }
1197
-
1198
- .tool-line {
1199
- display: flex;
1200
- align-items: center;
1201
- gap: 6px;
1202
- padding: 3px 6px;
1203
- border-radius: 4px;
1204
- font-size: 0.8rem;
1205
- cursor: pointer;
1206
- user-select: none;
1207
- transition: background 0.15s;
1208
- color: var(--text-secondary);
1209
- min-width: 0;
1210
- overflow: hidden;
1211
- }
1212
-
1213
- .tool-line:hover {
1214
- background: var(--bg-tertiary);
1215
- }
1216
-
1217
- .tool-icon {
1218
- flex-shrink: 0;
1219
- display: flex;
1220
- align-items: center;
1221
- color: var(--text-secondary);
1222
- opacity: 0.6;
1223
- }
1224
-
1225
- .tool-name {
1226
- font-weight: 500;
1227
- color: var(--text-secondary);
1228
- overflow: hidden;
1229
- text-overflow: ellipsis;
1230
- white-space: nowrap;
1231
- min-width: 0;
1232
- }
1233
-
1234
- .tool-summary {
1235
- color: var(--text-secondary);
1236
- overflow: hidden;
1237
- text-overflow: ellipsis;
1238
- white-space: nowrap;
1239
- flex: 1;
1240
- min-width: 0;
1241
- }
1242
-
1243
- .tool-status-icon {
1244
- color: var(--text-secondary);
1245
- font-weight: normal;
1246
- flex-shrink: 0;
1247
- font-size: 0.75rem;
1248
- opacity: 0.7;
1249
- }
1250
-
1251
- .tool-line.completed .tool-status-icon {
1252
- color: var(--success);
1253
- opacity: 0.6;
1254
- }
1255
-
1256
- .running-dots {
1257
- display: inline-flex;
1258
- gap: 2px;
1259
- }
1260
-
1261
- .running-dots span {
1262
- width: 3px;
1263
- height: 3px;
1264
- border-radius: 50%;
1265
- background: var(--text-secondary);
1266
- animation: typing 1.2s infinite ease-in-out;
1267
- }
1268
-
1269
- .running-dots span:nth-child(2) { animation-delay: 0.2s; }
1270
- .running-dots span:nth-child(3) { animation-delay: 0.4s; }
1271
-
1272
- .tool-toggle {
1273
- color: var(--text-secondary);
1274
- font-size: 0.6rem;
1275
- flex-shrink: 0;
1276
- margin-left: auto;
1277
- opacity: 0.5;
1278
- }
1279
-
1280
- .tool-expand {
1281
- margin-top: 2px;
1282
- margin-left: 20px;
1283
- border-left: 1px solid var(--border);
1284
- padding-left: 8px;
1285
- overflow: hidden;
1286
- animation: toolExpand 0.15s ease-out;
1287
- }
1288
-
1289
- @keyframes toolExpand {
1290
- from { opacity: 0; max-height: 0; }
1291
- to { opacity: 1; max-height: 500px; }
1292
- }
1293
-
1294
- .tool-block {
1295
- background: var(--bg-secondary);
1296
- border-radius: 4px;
1297
- padding: 0.4rem 0.6rem;
1298
- margin-top: 0.25rem;
1299
- overflow-x: auto;
1300
- font-size: 0.75rem;
1301
- line-height: 1.4;
1302
- max-height: 200px;
1303
- overflow-y: auto;
1304
- white-space: pre-wrap;
1305
- word-break: break-all;
1306
- color: var(--text-secondary);
1307
- }
1308
-
1309
- .tool-output {
1310
- border-left: 2px solid var(--success);
1311
- color: var(--text-primary);
1312
- }
1313
-
1314
- /* ── Formatted tool input (Read, Write, Bash, Glob, Grep) ── */
1315
- .tool-input-formatted {
1316
- padding: 0.3rem 0.5rem;
1317
- margin-top: 0.25rem;
1318
- font-size: 0.75rem;
1319
- line-height: 1.5;
1320
- color: var(--text-secondary);
1321
- word-break: break-all;
1322
- }
1323
-
1324
- .tool-input-meta {
1325
- color: var(--text-secondary);
1326
- opacity: 0.6;
1327
- }
1328
-
1329
- .tool-input-cmd {
1330
- background: var(--bg-secondary);
1331
- padding: 0.1rem 0.4rem;
1332
- border-radius: 3px;
1333
- font-size: 0.73rem;
1334
- word-break: break-all;
1335
- white-space: pre-wrap;
1336
- }
1337
-
1338
- /* ── TodoWrite checklist ── */
1339
- .todo-list {
1340
- display: flex;
1341
- flex-direction: column;
1342
- gap: 2px;
1343
- }
1344
-
1345
- .todo-item {
1346
- display: flex;
1347
- align-items: baseline;
1348
- gap: 6px;
1349
- font-size: 0.75rem;
1350
- line-height: 1.4;
1351
- color: var(--text-secondary);
1352
- }
1353
-
1354
- .todo-item.todo-done {
1355
- opacity: 0.55;
1356
- }
1357
-
1358
- .todo-item.todo-active {
1359
- color: var(--text-primary);
1360
- }
1361
-
1362
- .todo-icon {
1363
- flex-shrink: 0;
1364
- width: 1em;
1365
- text-align: center;
1366
- font-size: 0.7rem;
1367
- opacity: 0.5;
1368
- }
1369
-
1370
- .todo-icon.done {
1371
- color: var(--success);
1372
- opacity: 0.8;
1373
- }
1374
-
1375
- .todo-icon.active {
1376
- color: var(--accent);
1377
- opacity: 1;
1378
- font-size: 0.55rem;
1379
- }
1380
-
1381
- .todo-text {
1382
- word-break: break-word;
1383
- }
1384
-
1385
- /* ── Task / WebFetch formatted fields ── */
1386
- .task-field {
1387
- font-size: 0.75rem;
1388
- line-height: 1.5;
1389
- color: var(--text-secondary);
1390
- }
1391
-
1392
- .task-field + .task-field {
1393
- margin-top: 2px;
1394
- }
1395
-
1396
- .task-prompt {
1397
- background: var(--bg-secondary);
1398
- border-radius: 3px;
1399
- padding: 0.3rem 0.5rem;
1400
- margin-top: 3px;
1401
- font-size: 0.73rem;
1402
- line-height: 1.4;
1403
- color: var(--text-secondary);
1404
- white-space: pre-wrap;
1405
- word-break: break-word;
1406
- max-height: 150px;
1407
- overflow-y: auto;
1408
- }
1409
-
1410
- .tool-link {
1411
- color: var(--accent);
1412
- font-size: 0.75rem;
1413
- word-break: break-all;
1414
- text-decoration: none;
1415
- }
1416
-
1417
- .tool-link:hover {
1418
- text-decoration: underline;
1419
- }
1420
-
1421
- [data-theme="light"] .todo-icon.active {
1422
- color: #0969da;
1423
- }
1424
-
1425
- [data-theme="light"] .tool-link {
1426
- color: #0969da;
1427
- }
1428
-
1429
- /* ── Edit tool diff view ── */
1430
- .tool-diff {
1431
- background: var(--bg-secondary);
1432
- border-radius: 4px;
1433
- padding: 0.4rem 0.6rem;
1434
- margin-top: 0.25rem;
1435
- overflow-x: auto;
1436
- font-size: 0.75rem;
1437
- line-height: 1.5;
1438
- max-height: 300px;
1439
- overflow-y: auto;
1440
- font-family: 'Cascadia Code', 'Fira Code', 'JetBrains Mono', 'Consolas', monospace;
1441
- }
1442
-
1443
- .diff-file {
1444
- color: var(--text-secondary);
1445
- margin-bottom: 0.35rem;
1446
- font-weight: 500;
1447
- }
1448
-
1449
- .diff-replace-all {
1450
- opacity: 0.6;
1451
- font-weight: 400;
1452
- }
1453
-
1454
- .diff-lines {
1455
- border-radius: 3px;
1456
- overflow: hidden;
1457
- }
1458
-
1459
- .diff-removed, .diff-added {
1460
- white-space: pre-wrap;
1461
- word-break: break-all;
1462
- padding: 0 0.4rem;
1463
- }
1464
-
1465
- .diff-removed {
1466
- background: rgba(212, 84, 84, 0.12);
1467
- color: #d4716b;
1468
- }
1469
-
1470
- .diff-added {
1471
- background: rgba(78, 173, 106, 0.12);
1472
- color: #5cb87a;
1473
- }
1474
-
1475
- .diff-sign {
1476
- display: inline-block;
1477
- width: 1.2em;
1478
- user-select: none;
1479
- opacity: 0.7;
1480
- }
1481
-
1482
- [data-theme="light"] .diff-removed {
1483
- background: rgba(208, 46, 38, 0.12);
1484
- color: #b31d28;
1485
- }
1486
-
1487
- [data-theme="light"] .diff-added {
1488
- background: rgba(34, 134, 58, 0.12);
1489
- color: #22863a;
1490
- }
1491
-
1492
- /* ── Context summary (collapsible continuation notice) ── */
1493
- .context-summary-wrapper {
1494
- margin: 0.75rem 0;
1495
- }
1496
-
1497
- /* ── AskUserQuestion interactive card ── */
1498
- .ask-question-wrapper {
1499
- max-width: 100%;
1500
- padding-left: 0.25rem;
1501
- margin: 0.5rem 0;
1502
- }
1503
-
1504
- .ask-question-card {
1505
- background: var(--bg-secondary);
1506
- border: 1px solid var(--accent);
1507
- border-radius: 10px;
1508
- padding: 0.8rem 1rem;
1509
- display: flex;
1510
- flex-direction: column;
1511
- gap: 0.75rem;
1512
- }
1513
-
1514
- .ask-question-block {
1515
- display: flex;
1516
- flex-direction: column;
1517
- gap: 0.5rem;
1518
- }
1519
-
1520
- .ask-question-header {
1521
- font-size: 0.7rem;
1522
- font-weight: 600;
1523
- text-transform: uppercase;
1524
- letter-spacing: 0.04em;
1525
- color: var(--accent);
1526
- }
1527
-
1528
- .ask-question-text {
1529
- font-size: 0.9rem;
1530
- color: var(--text-primary);
1531
- line-height: 1.5;
1532
- }
1533
-
1534
- .ask-question-options {
1535
- display: flex;
1536
- flex-direction: column;
1537
- gap: 6px;
1538
- }
1539
-
1540
- .ask-question-option {
1541
- padding: 8px 12px;
1542
- border: 1px solid var(--border);
1543
- border-radius: 8px;
1544
- cursor: pointer;
1545
- transition: border-color 0.15s, background 0.15s;
1546
- }
1547
-
1548
- .ask-question-option:hover {
1549
- border-color: var(--text-secondary);
1550
- background: var(--bg-tertiary);
1551
- }
1552
-
1553
- .ask-question-option.selected {
1554
- border-color: var(--accent);
1555
- background: rgba(107, 159, 206, 0.12);
1556
- }
1557
-
1558
- .ask-option-label {
1559
- font-size: 0.88rem;
1560
- font-weight: 500;
1561
- color: var(--text-primary);
1562
- }
1563
-
1564
- .ask-option-desc {
1565
- font-size: 0.78rem;
1566
- color: var(--text-secondary);
1567
- margin-top: 2px;
1568
- line-height: 1.4;
1569
- }
1570
-
1571
- .ask-question-custom {
1572
- margin-top: 2px;
1573
- }
1574
-
1575
- .ask-question-custom input {
1576
- width: 100%;
1577
- padding: 6px 10px;
1578
- background: var(--bg-primary);
1579
- border: 1px solid var(--border);
1580
- border-radius: 6px;
1581
- color: var(--text-primary);
1582
- font-size: 0.85rem;
1583
- font-family: inherit;
1584
- outline: none;
1585
- transition: border-color 0.15s;
1586
- }
1587
-
1588
- .ask-question-custom input::placeholder {
1589
- color: var(--text-secondary);
1590
- }
1591
-
1592
- .ask-question-custom input:focus {
1593
- border-color: var(--accent);
1594
- }
1595
-
1596
- .ask-question-actions {
1597
- display: flex;
1598
- justify-content: flex-end;
1599
- }
1600
-
1601
- .ask-question-submit {
1602
- padding: 6px 20px;
1603
- background: var(--accent);
1604
- color: #fff;
1605
- border: none;
1606
- border-radius: 8px;
1607
- font-size: 0.85rem;
1608
- font-weight: 600;
1609
- cursor: pointer;
1610
- transition: background 0.15s, opacity 0.15s;
1611
- }
1612
-
1613
- .ask-question-submit:hover:not(:disabled) {
1614
- background: var(--accent-hover);
1615
- }
1616
-
1617
- .ask-question-submit:disabled {
1618
- opacity: 0.3;
1619
- cursor: not-allowed;
1620
- }
1621
-
1622
- .ask-question-answered {
1623
- display: flex;
1624
- align-items: center;
1625
- gap: 6px;
1626
- padding: 4px 8px;
1627
- font-size: 0.82rem;
1628
- color: var(--text-secondary);
1629
- }
1630
-
1631
- .ask-answered-icon {
1632
- color: var(--success);
1633
- font-size: 0.8rem;
1634
- }
1635
-
1636
- .ask-answered-text {
1637
- font-style: italic;
1638
- }
1639
-
1640
- .context-summary-bar {
1641
- display: flex;
1642
- align-items: center;
1643
- gap: 6px;
1644
- padding: 6px 10px;
1645
- border-radius: 6px;
1646
- border: 1px dashed var(--border);
1647
- font-size: 0.78rem;
1648
- color: var(--text-secondary);
1649
- cursor: pointer;
1650
- transition: background 0.15s;
1651
- }
1652
-
1653
- .context-summary-bar:hover {
1654
- background: var(--bg-tertiary);
1655
- }
1656
-
1657
- .context-summary-icon {
1658
- flex-shrink: 0;
1659
- opacity: 0.5;
1660
- }
1661
-
1662
- .context-summary-label {
1663
- flex: 1;
1664
- }
1665
-
1666
- .context-summary-toggle {
1667
- font-size: 0.72rem;
1668
- opacity: 0.6;
1669
- flex-shrink: 0;
1670
- }
1671
-
1672
- .context-summary-body {
1673
- margin-top: 6px;
1674
- padding: 0.6rem 0.8rem;
1675
- background: var(--bg-secondary);
1676
- border-radius: 6px;
1677
- border: 1px solid var(--border);
1678
- font-size: 0.82rem;
1679
- color: var(--text-secondary);
1680
- max-height: 400px;
1681
- overflow-y: auto;
1682
- }
1683
-
1684
- .context-summary-body .markdown-body {
1685
- font-size: 0.82rem;
1686
- color: var(--text-secondary);
1687
- }
1688
-
1689
- /* ── System message ── */
1690
- .system-msg {
1691
- text-align: center;
1692
- color: var(--text-secondary);
1693
- font-size: 0.8rem;
1694
- font-style: italic;
1695
- padding: 0.25rem 0;
1696
- }
1697
-
1698
- .system-msg.command-output-msg {
1699
- text-align: left;
1700
- font-style: normal;
1701
- font-size: 0.85rem;
1702
- padding: 0.5rem 0;
1703
- }
1704
-
1705
- .system-msg.error-msg {
1706
- text-align: left;
1707
- font-style: normal;
1708
- color: #d45454;
1709
- background: rgba(212, 84, 84, 0.08);
1710
- border: 1px solid rgba(212, 84, 84, 0.2);
1711
- border-radius: 8px;
1712
- padding: 0.75rem 1rem;
1713
- font-size: 0.85rem;
1714
- word-break: break-word;
1715
- overflow-wrap: break-word;
1716
- }
1717
-
1718
- /* ── History loading indicator ── */
1719
- .history-loading {
1720
- display: flex;
1721
- align-items: center;
1722
- justify-content: center;
1723
- gap: 0.5rem;
1724
- padding: 2rem 0;
1725
- color: var(--text-secondary);
1726
- font-size: 0.85rem;
1727
- }
1728
-
1729
- .history-loading-spinner {
1730
- width: 16px;
1731
- height: 16px;
1732
- border: 2px solid var(--border);
1733
- border-top-color: var(--accent);
1734
- border-radius: 50%;
1735
- animation: spin 0.8s linear infinite;
1736
- }
1737
-
1738
- /* ── Load more button ── */
1739
- .load-more-wrapper {
1740
- display: flex;
1741
- justify-content: center;
1742
- padding: 0.75rem 0;
1743
- }
1744
-
1745
- .load-more-btn {
1746
- background: var(--bg-tertiary);
1747
- color: var(--text-secondary);
1748
- border: 1px solid var(--border);
1749
- border-radius: 6px;
1750
- padding: 0.4rem 1.2rem;
1751
- font-size: 0.8rem;
1752
- cursor: pointer;
1753
- transition: background 0.15s, color 0.15s;
1754
- }
1755
-
1756
- .load-more-btn:hover {
1757
- background: var(--accent);
1758
- color: #fff;
1759
- border-color: var(--accent);
1760
- }
1761
-
1762
- /* ── Typing indicator ── */
1763
- .typing-indicator {
1764
- display: flex;
1765
- align-items: center;
1766
- gap: 4px;
1767
- padding: 0.5rem 0.9rem;
1768
- }
1769
-
1770
- .typing-indicator span {
1771
- width: 6px;
1772
- height: 6px;
1773
- border-radius: 50%;
1774
- background: var(--text-secondary);
1775
- animation: typing 1.2s infinite ease-in-out;
1776
- }
1777
-
1778
- .typing-indicator span:nth-child(2) {
1779
- animation-delay: 0.2s;
1780
- }
1781
-
1782
- .typing-indicator span:nth-child(3) {
1783
- animation-delay: 0.4s;
1784
- }
1785
-
1786
- @keyframes typing {
1787
- 0%, 60%, 100% { opacity: 0.3; transform: scale(0.8); }
1788
- 30% { opacity: 1; transform: scale(1); }
1789
- }
1790
-
1791
- /* ── Context compaction inline message ── */
1792
- .compact-msg {
1793
- display: inline-flex;
1794
- align-items: center;
1795
- gap: 6px;
1796
- color: var(--warning) !important;
1797
- font-style: normal !important;
1798
- font-weight: 500;
1799
- }
1800
-
1801
- .compact-inline-spinner {
1802
- display: inline-block;
1803
- width: 12px;
1804
- height: 12px;
1805
- border: 2px solid rgba(212, 162, 76, 0.3);
1806
- border-top-color: var(--warning);
1807
- border-radius: 50%;
1808
- animation: spin 0.8s linear infinite;
1809
- flex-shrink: 0;
1810
- }
1811
-
1812
- .compact-done-icon {
1813
- color: var(--success, #4ead6a);
1814
- font-weight: 700;
1815
- font-style: normal;
1816
- }
1817
-
1818
- /* ── Input area ── */
1819
- .input-area {
1820
- flex-shrink: 0;
1821
- padding: 0 1.5rem 1rem;
1822
- background: transparent;
1823
- position: relative;
1824
- }
1825
-
1826
- .input-card {
1827
- max-width: 768px;
1828
- margin: 0 auto;
1829
- background: var(--bg-secondary);
1830
- border: 1px solid var(--border);
1831
- border-radius: 16px;
1832
- padding: 0.5rem;
1833
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
1834
- transition: border-color 0.2s, box-shadow 0.2s;
1835
- }
1836
-
1837
- .input-card:focus-within {
1838
- border-color: var(--accent);
1839
- box-shadow: 0 2px 16px rgba(107, 159, 206, 0.1);
1840
- }
1841
-
1842
- .input-card textarea {
1843
- width: 100%;
1844
- background: transparent;
1845
- border: none;
1846
- color: var(--text-primary);
1847
- padding: 0.4rem 0.6rem;
1848
- font-family: inherit;
1849
- font-size: 16px; /* >=16px prevents iOS auto-zoom on focus */
1850
- resize: none;
1851
- outline: none;
1852
- line-height: 1.5;
1853
- max-height: 160px;
1854
- overflow-y: auto;
1855
- }
1856
-
1857
- .input-card textarea::placeholder {
1858
- color: var(--text-secondary);
1859
- }
1860
-
1861
- .input-bottom-row {
1862
- display: flex;
1863
- justify-content: space-between;
1864
- align-items: center;
1865
- padding: 0.1rem 0.25rem 0;
1866
- }
1867
-
1868
- .send-btn {
1869
- background: var(--accent);
1870
- color: #fff;
1871
- border: none;
1872
- border-radius: 10px;
1873
- width: 32px;
1874
- height: 32px;
1875
- font-size: 0.9rem;
1876
- font-weight: 600;
1877
- cursor: pointer;
1878
- display: flex;
1879
- align-items: center;
1880
- justify-content: center;
1881
- transition: background 0.15s, opacity 0.15s;
1882
- }
1883
-
1884
- .send-btn:hover:not(:disabled) {
1885
- background: var(--accent-hover);
1886
- }
1887
-
1888
- .send-btn:disabled {
1889
- opacity: 0.3;
1890
- cursor: not-allowed;
1891
- }
1892
-
1893
- /* ── Stop button ── */
1894
- .stop-btn {
1895
- background: var(--error);
1896
- }
1897
-
1898
- .stop-btn:hover {
1899
- background: #c04444;
1900
- }
1901
-
1902
- /* ── Streaming cursor ── */
1903
- .assistant-bubble.streaming .markdown-body > *:last-child::after,
1904
- .assistant-bubble.streaming .message-content:not(.markdown-body)::after {
1905
- content: '';
1906
- display: inline-block;
1907
- width: 2px;
1908
- height: 1em;
1909
- background: var(--accent);
1910
- margin-left: 2px;
1911
- vertical-align: text-bottom;
1912
- animation: blink-cursor 0.8s steps(2) infinite;
1913
- }
1914
-
1915
- @keyframes blink-cursor {
1916
- 0% { opacity: 1; }
1917
- 50% { opacity: 0; }
1918
- }
1919
-
1920
- /* ── Sidebar change-dir button ── */
1921
- .sidebar-workdir-header {
1922
- display: flex;
1923
- align-items: center;
1924
- justify-content: space-between;
1925
- }
1926
-
1927
- /* ── Workdir path row (clickable) ── */
1928
- .sidebar-workdir-path-row {
1929
- display: flex;
1930
- align-items: flex-start;
1931
- gap: 4px;
1932
- cursor: pointer;
1933
- padding: 4px 6px;
1934
- margin: 0 -6px;
1935
- border-radius: 4px;
1936
- transition: background 0.15s;
1937
- }
1938
-
1939
- .sidebar-workdir-path-row:hover {
1940
- background: var(--bg-tertiary);
1941
- }
1942
-
1943
- .sidebar-workdir-path-row .sidebar-workdir-path {
1944
- flex: 1;
1945
- min-width: 0;
1946
- }
1947
-
1948
- .sidebar-workdir-chevron {
1949
- flex-shrink: 0;
1950
- margin-top: 2px;
1951
- color: var(--text-secondary);
1952
- transition: transform 0.15s ease;
1953
- }
1954
-
1955
- .sidebar-workdir-chevron.open {
1956
- transform: rotate(180deg);
1957
- }
1958
-
1959
- /* ── Workdir dropdown menu ── */
1960
- .workdir-menu {
1961
- position: absolute;
1962
- left: -6px;
1963
- right: -6px;
1964
- z-index: 50;
1965
- margin-top: 4px;
1966
- background: var(--bg-secondary);
1967
- border: 1px solid var(--border);
1968
- border-radius: 6px;
1969
- padding: 4px 0;
1970
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
1971
- }
1972
-
1973
- .workdir-menu-item {
1974
- display: flex;
1975
- align-items: center;
1976
- gap: 8px;
1977
- padding: 7px 12px;
1978
- font-size: 0.8rem;
1979
- cursor: pointer;
1980
- color: var(--text-primary);
1981
- }
1982
-
1983
- .workdir-menu-item:hover {
1984
- background: var(--bg-tertiary);
1985
- }
1986
-
1987
- .workdir-menu-item svg {
1988
- flex-shrink: 0;
1989
- color: var(--text-secondary);
1990
- }
1991
-
1992
- /* ── Workdir switching overlay ── */
1993
- .workdir-switching-overlay {
1994
- position: fixed;
1995
- top: 0; left: 0; right: 0; bottom: 0;
1996
- background: rgba(0, 0, 0, 0.45);
1997
- z-index: 1100;
1998
- display: flex;
1999
- flex-direction: column;
2000
- align-items: center;
2001
- justify-content: center;
2002
- gap: 16px;
2003
- backdrop-filter: blur(2px);
2004
- }
2005
- .workdir-switching-spinner {
2006
- width: 36px;
2007
- height: 36px;
2008
- border: 3px solid rgba(255, 255, 255, 0.2);
2009
- border-top-color: rgba(255, 255, 255, 0.8);
2010
- border-radius: 50%;
2011
- animation: workdir-spin 0.7s linear infinite;
2012
- }
2013
- @keyframes workdir-spin {
2014
- to { transform: rotate(360deg); }
2015
- }
2016
- .workdir-switching-text {
2017
- color: rgba(255, 255, 255, 0.9);
2018
- font-size: 0.9rem;
2019
- font-weight: 500;
2020
- }
2021
- .fade-enter-active, .fade-leave-active {
2022
- transition: opacity 0.2s ease;
2023
- }
2024
- .fade-enter-from, .fade-leave-to {
2025
- opacity: 0;
2026
- }
2027
-
2028
- /* ── Folder Picker Modal ── */
2029
- .folder-picker-overlay {
2030
- position: fixed;
2031
- top: 0; left: 0; right: 0; bottom: 0;
2032
- background: rgba(0, 0, 0, 0.5);
2033
- z-index: 1000;
2034
- display: flex;
2035
- align-items: center;
2036
- justify-content: center;
2037
- }
2038
-
2039
- .folder-picker-dialog {
2040
- width: 440px;
2041
- height: 520px;
2042
- background: var(--bg-secondary);
2043
- border: 1px solid var(--border);
2044
- border-radius: 12px;
2045
- display: flex;
2046
- flex-direction: column;
2047
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
2048
- }
2049
-
2050
- .folder-picker-header {
2051
- display: flex;
2052
- justify-content: space-between;
2053
- align-items: center;
2054
- padding: 12px 16px;
2055
- font-size: 0.95rem;
2056
- font-weight: 600;
2057
- border-bottom: 1px solid var(--border);
2058
- }
2059
-
2060
- .folder-picker-close {
2061
- background: none;
2062
- border: none;
2063
- color: var(--text-secondary);
2064
- font-size: 1.2rem;
2065
- cursor: pointer;
2066
- padding: 0 4px;
2067
- line-height: 1;
2068
- }
2069
-
2070
- .folder-picker-close:hover {
2071
- color: var(--text-primary);
2072
- }
2073
-
2074
- .folder-picker-nav {
2075
- display: flex;
2076
- align-items: center;
2077
- gap: 8px;
2078
- padding: 8px 16px;
2079
- font-size: 0.78rem;
2080
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
2081
- color: var(--text-secondary);
2082
- border-bottom: 1px solid var(--border);
2083
- }
2084
-
2085
- .folder-picker-up {
2086
- display: flex;
2087
- align-items: center;
2088
- justify-content: center;
2089
- width: 24px;
2090
- height: 24px;
2091
- background: none;
2092
- border: 1px solid var(--border);
2093
- border-radius: 4px;
2094
- color: var(--text-secondary);
2095
- cursor: pointer;
2096
- flex-shrink: 0;
2097
- transition: color 0.15s, background 0.15s;
2098
- }
2099
-
2100
- .folder-picker-up:hover {
2101
- color: var(--text-primary);
2102
- background: var(--bg-tertiary);
2103
- }
2104
-
2105
- .folder-picker-up:disabled {
2106
- opacity: 0.3;
2107
- cursor: not-allowed;
2108
- }
2109
-
2110
- .folder-picker-current {
2111
- overflow: hidden;
2112
- text-overflow: ellipsis;
2113
- white-space: nowrap;
2114
- flex: 1;
2115
- }
2116
-
2117
- .folder-picker-path-input {
2118
- flex: 1;
2119
- background: var(--bg-primary);
2120
- color: var(--text-primary);
2121
- border: 1px solid var(--border);
2122
- border-radius: 4px;
2123
- padding: 4px 8px;
2124
- font-size: 0.85rem;
2125
- font-family: monospace;
2126
- outline: none;
2127
- }
2128
-
2129
- .folder-picker-path-input:focus {
2130
- border-color: var(--accent);
2131
- }
2132
-
2133
- .folder-picker-list {
2134
- flex: 1;
2135
- overflow-y: auto;
2136
- min-height: 200px;
2137
- max-height: 350px;
2138
- padding: 4px 0;
2139
- }
2140
-
2141
- .folder-picker-loading {
2142
- display: flex;
2143
- align-items: center;
2144
- gap: 8px;
2145
- padding: 16px;
2146
- color: var(--text-secondary);
2147
- font-size: 0.82rem;
2148
- }
2149
-
2150
- .folder-picker-item {
2151
- display: flex;
2152
- align-items: center;
2153
- gap: 8px;
2154
- padding: 6px 16px;
2155
- font-size: 0.85rem;
2156
- cursor: pointer;
2157
- color: var(--text-primary);
2158
- transition: background 0.1s;
2159
- user-select: none;
2160
- }
2161
-
2162
- .folder-picker-item:hover {
2163
- background: var(--bg-tertiary);
2164
- }
2165
-
2166
- .folder-picker-item svg {
2167
- flex-shrink: 0;
2168
- color: var(--text-secondary);
2169
- }
2170
-
2171
- .folder-picker-selected {
2172
- background: var(--accent) !important;
2173
- color: #fff !important;
2174
- }
2175
-
2176
- .folder-picker-selected svg {
2177
- color: #fff !important;
2178
- }
2179
-
2180
- .folder-picker-empty {
2181
- text-align: center;
2182
- padding: 2rem;
2183
- color: var(--text-secondary);
2184
- font-size: 0.82rem;
2185
- }
2186
-
2187
- .folder-picker-footer {
2188
- padding: 10px 16px;
2189
- display: flex;
2190
- justify-content: flex-end;
2191
- gap: 8px;
2192
- border-top: 1px solid var(--border);
2193
- }
2194
-
2195
- .folder-picker-cancel {
2196
- padding: 6px 16px;
2197
- background: none;
2198
- color: var(--text-secondary);
2199
- border: 1px solid var(--border);
2200
- border-radius: 8px;
2201
- font-size: 0.85rem;
2202
- cursor: pointer;
2203
- transition: color 0.15s, background 0.15s;
2204
- }
2205
-
2206
- .folder-picker-cancel:hover {
2207
- color: var(--text-primary);
2208
- background: var(--bg-tertiary);
2209
- }
2210
-
2211
- .folder-picker-confirm {
2212
- padding: 6px 20px;
2213
- background: var(--accent);
2214
- color: #fff;
2215
- border: none;
2216
- border-radius: 8px;
2217
- font-size: 0.85rem;
2218
- font-weight: 600;
2219
- cursor: pointer;
2220
- transition: background 0.15s;
2221
- }
2222
-
2223
- .folder-picker-confirm:hover {
2224
- background: var(--accent-hover);
2225
- }
2226
-
2227
- .folder-picker-confirm:disabled {
2228
- opacity: 0.4;
2229
- cursor: not-allowed;
2230
- }
2231
-
2232
- /* ── File Upload: Attachment Bar ── */
2233
- .attachment-bar {
2234
- display: flex;
2235
- flex-wrap: wrap;
2236
- gap: 6px;
2237
- padding: 6px 8px;
2238
- border-top: 1px solid var(--border);
2239
- }
2240
-
2241
- .attachment-chip {
2242
- display: flex;
2243
- align-items: center;
2244
- gap: 6px;
2245
- background: var(--bg-tertiary);
2246
- border: 1px solid var(--border);
2247
- border-radius: 8px;
2248
- padding: 4px 8px;
2249
- font-size: 0.78rem;
2250
- color: var(--text-primary);
2251
- max-width: 220px;
2252
- }
2253
-
2254
- .attachment-thumb {
2255
- width: 28px;
2256
- height: 28px;
2257
- object-fit: cover;
2258
- border-radius: 4px;
2259
- flex-shrink: 0;
2260
- }
2261
-
2262
- .attachment-file-icon {
2263
- display: flex;
2264
- align-items: center;
2265
- justify-content: center;
2266
- width: 28px;
2267
- height: 28px;
2268
- background: var(--bg-secondary);
2269
- border-radius: 4px;
2270
- flex-shrink: 0;
2271
- color: var(--text-secondary);
2272
- }
2273
-
2274
- .attachment-info {
2275
- overflow: hidden;
2276
- min-width: 0;
2277
- }
2278
-
2279
- .attachment-name {
2280
- overflow: hidden;
2281
- text-overflow: ellipsis;
2282
- white-space: nowrap;
2283
- font-weight: 500;
2284
- }
2285
-
2286
- .attachment-size {
2287
- color: var(--text-secondary);
2288
- font-size: 0.7rem;
2289
- }
2290
-
2291
- .attachment-remove {
2292
- background: none;
2293
- border: none;
2294
- color: var(--text-secondary);
2295
- cursor: pointer;
2296
- padding: 0 2px;
2297
- font-size: 1rem;
2298
- line-height: 1;
2299
- flex-shrink: 0;
2300
- transition: color 0.15s;
2301
- }
2302
-
2303
- .attachment-remove:hover {
2304
- color: var(--error);
2305
- }
2306
-
2307
- /* ── Paperclip attach button ── */
2308
- .attach-btn {
2309
- background: none;
2310
- border: none;
2311
- color: var(--text-secondary);
2312
- cursor: pointer;
2313
- display: flex;
2314
- align-items: center;
2315
- justify-content: center;
2316
- width: 32px;
2317
- height: 32px;
2318
- border-radius: 8px;
2319
- transition: color 0.15s, background 0.15s;
2320
- }
2321
-
2322
- .attach-btn:hover {
2323
- color: var(--text-primary);
2324
- background: var(--bg-tertiary);
2325
- }
2326
-
2327
- .attach-btn:disabled {
2328
- opacity: 0.3;
2329
- cursor: not-allowed;
2330
- }
2331
-
2332
- /* ── Drag-over highlight on input card ── */
2333
- .input-card.drag-over {
2334
- border-color: var(--accent);
2335
- box-shadow: 0 0 0 2px var(--accent), 0 2px 12px rgba(107, 159, 206, 0.12);
2336
- }
2337
-
2338
- /* ── Attachments displayed in sent messages ── */
2339
- .message-attachments {
2340
- display: flex;
2341
- flex-wrap: wrap;
2342
- gap: 6px;
2343
- margin-top: 6px;
2344
- }
2345
-
2346
- .message-attachment-chip {
2347
- display: flex;
2348
- align-items: center;
2349
- gap: 4px;
2350
- background: var(--bg-secondary);
2351
- border: 1px solid var(--border);
2352
- border-radius: 6px;
2353
- padding: 3px 8px;
2354
- font-size: 0.75rem;
2355
- color: var(--text-secondary);
2356
- }
2357
-
2358
- .message-attachment-thumb {
2359
- width: 20px;
2360
- height: 20px;
2361
- object-fit: cover;
2362
- border-radius: 3px;
2363
- }
2364
-
2365
- .message-attachment-file-icon {
2366
- display: flex;
2367
- align-items: center;
2368
- color: var(--text-secondary);
2369
- }
2370
-
2371
- /* ── Sidebar backdrop (mobile overlay) ── */
2372
- .sidebar-backdrop {
2373
- display: none;
2374
- }
2375
-
2376
- /* ══════════════════════════════════════════
2377
- File Browser Panel
2378
- ══════════════════════════════════════════ */
2379
- .file-panel {
2380
- width: 280px;
2381
- flex-shrink: 0;
2382
- background: var(--bg-primary);
2383
- border-right: 1px solid var(--border);
2384
- display: flex;
2385
- flex-direction: column;
2386
- overflow: hidden;
2387
- position: relative;
2388
- }
2389
-
2390
- .file-panel-resize-handle {
2391
- position: absolute;
2392
- top: 0;
2393
- right: -3px;
2394
- width: 6px;
2395
- height: 100%;
2396
- cursor: col-resize;
2397
- z-index: 10;
2398
- background: transparent;
2399
- transition: background 0.15s;
2400
- }
2401
-
2402
- .file-panel-resize-handle:hover,
2403
- .file-panel-resize-handle:active {
2404
- background: var(--accent);
2405
- opacity: 0.4;
2406
- }
2407
-
2408
- .file-panel-header {
2409
- display: flex;
2410
- align-items: center;
2411
- justify-content: space-between;
2412
- padding: 0.75rem;
2413
- border-bottom: 1px solid var(--border);
2414
- background: var(--bg-primary);
2415
- flex-shrink: 0;
2416
- }
2417
-
2418
- .file-panel-title {
2419
- font-size: 0.8rem;
2420
- font-weight: 600;
2421
- text-transform: uppercase;
2422
- letter-spacing: 0.05em;
2423
- color: var(--text-secondary);
2424
- }
2425
-
2426
- .file-panel-actions {
2427
- display: flex;
2428
- gap: 4px;
2429
- }
2430
-
2431
- .file-panel-btn {
2432
- display: flex;
2433
- align-items: center;
2434
- justify-content: center;
2435
- width: 24px;
2436
- height: 24px;
2437
- background: none;
2438
- border: none;
2439
- border-radius: 4px;
2440
- color: var(--text-secondary);
2441
- cursor: pointer;
2442
- padding: 0;
2443
- }
2444
-
2445
- .file-panel-btn:hover {
2446
- color: var(--text-primary);
2447
- background: var(--bg-tertiary);
2448
- }
2449
-
2450
- .file-panel-breadcrumb {
2451
- padding: 0.5rem 0.75rem;
2452
- font-size: 0.75rem;
2453
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
2454
- color: var(--text-secondary);
2455
- border-bottom: 1px solid var(--border);
2456
- white-space: nowrap;
2457
- overflow: hidden;
2458
- text-overflow: ellipsis;
2459
- flex-shrink: 0;
2460
- }
2461
-
2462
- .file-tree {
2463
- flex: 1;
2464
- overflow-y: auto;
2465
- overflow-x: hidden;
2466
- padding: 0.25rem 0;
2467
- }
2468
-
2469
- .file-tree-item {
2470
- display: flex;
2471
- align-items: center;
2472
- gap: 6px;
2473
- padding: 3px 8px;
2474
- font-size: 0.8rem;
2475
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
2476
- color: var(--text-primary);
2477
- cursor: pointer;
2478
- user-select: none;
2479
- white-space: nowrap;
2480
- overflow: hidden;
2481
- }
2482
-
2483
- .file-tree-item:hover {
2484
- background: var(--bg-tertiary);
2485
- }
2486
-
2487
- .file-tree-arrow {
2488
- flex-shrink: 0;
2489
- width: 14px;
2490
- text-align: center;
2491
- font-size: 0.65rem;
2492
- color: var(--text-secondary);
2493
- transition: transform 0.15s ease;
2494
- display: inline-block;
2495
- }
2496
-
2497
- .file-tree-arrow.expanded {
2498
- transform: rotate(90deg);
2499
- }
2500
-
2501
- .file-tree-file-icon {
2502
- flex-shrink: 0;
2503
- width: 14px;
2504
- text-align: center;
2505
- color: var(--text-secondary);
2506
- display: flex;
2507
- align-items: center;
2508
- justify-content: center;
2509
- }
2510
-
2511
- .file-tree-name {
2512
- flex: 1;
2513
- min-width: 0;
2514
- overflow: hidden;
2515
- text-overflow: ellipsis;
2516
- }
2517
-
2518
- .file-tree-spinner {
2519
- width: 12px;
2520
- height: 12px;
2521
- border: 2px solid var(--border);
2522
- border-top-color: var(--accent);
2523
- border-radius: 50%;
2524
- animation: spin 0.6s linear infinite;
2525
- flex-shrink: 0;
2526
- margin-left: auto;
2527
- }
2528
-
2529
- @keyframes spin {
2530
- to { transform: rotate(360deg); }
2531
- }
2532
-
2533
- .file-tree-empty {
2534
- padding: 4px 8px;
2535
- font-size: 0.75rem;
2536
- color: var(--text-secondary);
2537
- font-style: italic;
2538
- }
2539
-
2540
- .file-tree-error {
2541
- padding: 4px 8px;
2542
- font-size: 0.75rem;
2543
- color: var(--error, #e74c3c);
2544
- }
2545
-
2546
- .file-panel-loading {
2547
- padding: 1rem;
2548
- text-align: center;
2549
- color: var(--text-secondary);
2550
- font-size: 0.85rem;
2551
- }
2552
-
2553
- .file-panel-empty {
2554
- padding: 1rem;
2555
- text-align: center;
2556
- color: var(--text-secondary);
2557
- font-size: 0.85rem;
2558
- }
2559
-
2560
- /* ── File Context Menu ── */
2561
- .file-context-menu {
2562
- position: fixed;
2563
- z-index: 200;
2564
- background: var(--bg-secondary);
2565
- border: 1px solid var(--border);
2566
- border-radius: 6px;
2567
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
2568
- padding: 4px 0;
2569
- min-width: 200px;
2570
- }
2571
-
2572
- .file-context-item {
2573
- display: flex;
2574
- align-items: center;
2575
- gap: 8px;
2576
- padding: 8px 12px;
2577
- font-size: 0.8rem;
2578
- cursor: pointer;
2579
- color: var(--text-primary);
2580
- }
2581
-
2582
- .file-context-item:hover {
2583
- background: var(--bg-tertiary);
2584
- }
2585
-
2586
- .file-context-item svg {
2587
- flex-shrink: 0;
2588
- color: var(--text-secondary);
2589
- }
2590
-
2591
- /* ── File panel transition (Vue <Transition>) ── */
2592
- .file-panel-enter-active,
2593
- .file-panel-leave-active {
2594
- transition: width 0.2s ease, opacity 0.15s ease;
2595
- overflow: hidden;
2596
- }
2597
- .file-panel-enter-from,
2598
- .file-panel-leave-to {
2599
- width: 0 !important;
2600
- opacity: 0;
2601
- }
2602
-
2603
- /* ── Mobile file browser in sidebar ── */
2604
- .file-panel-mobile {
2605
- display: flex;
2606
- flex-direction: column;
2607
- height: 100%;
2608
- overflow: hidden;
2609
- }
2610
-
2611
- .file-panel-mobile-header {
2612
- display: flex;
2613
- align-items: center;
2614
- justify-content: space-between;
2615
- padding: 0.75rem;
2616
- border-bottom: 1px solid var(--border);
2617
- flex-shrink: 0;
2618
- }
2619
-
2620
- .file-panel-mobile-back {
2621
- display: flex;
2622
- align-items: center;
2623
- gap: 4px;
2624
- background: none;
2625
- border: none;
2626
- color: var(--accent);
2627
- cursor: pointer;
2628
- font-size: 0.85rem;
2629
- padding: 4px 0;
2630
- }
2631
-
2632
- .file-panel-mobile-back:hover {
2633
- opacity: 0.8;
2634
- }
2635
-
2636
- /* ══════════════════════════════════════════
2637
- File Preview Panel
2638
- ══════════════════════════════════════════ */
2639
- .preview-panel {
2640
- width: 400px;
2641
- flex-shrink: 0;
2642
- position: relative;
2643
- display: flex;
2644
- flex-direction: column;
2645
- overflow: hidden;
2646
- border-left: 1px solid var(--border);
2647
- background: var(--bg);
2648
- }
2649
-
2650
- .preview-panel-resize-handle {
2651
- position: absolute;
2652
- top: 0;
2653
- left: -3px;
2654
- width: 6px;
2655
- height: 100%;
2656
- cursor: col-resize;
2657
- z-index: 10;
2658
- background: transparent;
2659
- transition: background 0.15s;
2660
- }
2661
-
2662
- .preview-panel-resize-handle:hover,
2663
- .preview-panel-resize-handle:active {
2664
- background: var(--accent);
2665
- opacity: 0.4;
2666
- }
2667
-
2668
- .preview-panel-header {
2669
- display: flex;
2670
- align-items: center;
2671
- gap: 0.5rem;
2672
- padding: 0.5rem 0.75rem;
2673
- border-bottom: 1px solid var(--border);
2674
- background: var(--bg-primary);
2675
- flex-shrink: 0;
2676
- }
2677
-
2678
- .preview-panel-filename {
2679
- flex: 1;
2680
- font-weight: 600;
2681
- font-size: 0.85rem;
2682
- overflow: hidden;
2683
- text-overflow: ellipsis;
2684
- white-space: nowrap;
2685
- }
2686
-
2687
- .preview-panel-size {
2688
- font-size: 0.75rem;
2689
- color: var(--text-secondary);
2690
- flex-shrink: 0;
2691
- }
2692
-
2693
- .preview-panel-close {
2694
- background: none;
2695
- border: none;
2696
- font-size: 1.2rem;
2697
- cursor: pointer;
2698
- color: var(--text-secondary);
2699
- padding: 0 0.25rem;
2700
- line-height: 1;
2701
- }
2702
-
2703
- .preview-panel-close:hover {
2704
- color: var(--text);
2705
- }
2706
-
2707
- .preview-md-toggle {
2708
- background: none;
2709
- border: 1px solid var(--border);
2710
- border-radius: 4px;
2711
- cursor: pointer;
2712
- color: var(--text-secondary);
2713
- padding: 2px 6px;
2714
- line-height: 1;
2715
- display: flex;
2716
- align-items: center;
2717
- flex-shrink: 0;
2718
- }
2719
-
2720
- .preview-md-toggle:hover {
2721
- color: var(--text);
2722
- border-color: var(--text-secondary);
2723
- }
2724
-
2725
- .preview-md-toggle.active {
2726
- color: var(--accent, #6366f1);
2727
- border-color: var(--accent, #6366f1);
2728
- background: color-mix(in srgb, var(--accent, #6366f1) 10%, transparent);
2729
- }
2730
-
2731
- .preview-header-actions {
2732
- display: flex;
2733
- align-items: center;
2734
- gap: 0.5rem;
2735
- }
2736
-
2737
- .preview-markdown-rendered {
2738
- padding: 1rem;
2739
- }
2740
-
2741
- .preview-panel-body {
2742
- flex: 1;
2743
- overflow: auto;
2744
- padding: 0;
2745
- }
2746
-
2747
- .preview-loading {
2748
- display: flex;
2749
- align-items: center;
2750
- justify-content: center;
2751
- height: 100%;
2752
- color: var(--text-secondary);
2753
- font-size: 0.85rem;
2754
- }
2755
-
2756
- .preview-error {
2757
- padding: 1rem;
2758
- color: var(--error, #ef4444);
2759
- font-size: 0.85rem;
2760
- }
2761
-
2762
- .preview-text-container {
2763
- overflow: auto;
2764
- height: 100%;
2765
- }
2766
-
2767
- .preview-code {
2768
- margin: 0;
2769
- padding: 0.75rem;
2770
- font-size: 0.8rem;
2771
- line-height: 1.5;
2772
- white-space: pre;
2773
- overflow-x: auto;
2774
- background: var(--bg);
2775
- font-family: var(--font-mono, 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace);
2776
- }
2777
-
2778
- .preview-code code {
2779
- font-family: inherit;
2780
- }
2781
-
2782
- .preview-image-container {
2783
- display: flex;
2784
- align-items: center;
2785
- justify-content: center;
2786
- padding: 1rem;
2787
- height: 100%;
2788
- }
2789
-
2790
- .preview-image {
2791
- max-width: 100%;
2792
- max-height: 100%;
2793
- object-fit: contain;
2794
- }
2795
-
2796
- .preview-truncated-notice {
2797
- padding: 0.5rem 0.75rem;
2798
- font-size: 0.75rem;
2799
- color: var(--text-secondary);
2800
- border-top: 1px solid var(--border);
2801
- background: var(--bg-secondary, var(--bg-primary));
2802
- text-align: center;
2803
- }
2804
-
2805
- .preview-binary-info {
2806
- display: flex;
2807
- flex-direction: column;
2808
- align-items: center;
2809
- justify-content: center;
2810
- height: 100%;
2811
- gap: 0.5rem;
2812
- color: var(--text-secondary);
2813
- font-size: 0.85rem;
2814
- }
2815
-
2816
- .preview-binary-icon {
2817
- opacity: 0.4;
2818
- margin-bottom: 0.5rem;
2819
- }
2820
-
2821
- .preview-binary-meta {
2822
- font-size: 0.75rem;
2823
- color: var(--text-secondary);
2824
- }
2825
-
2826
- /* ── Mobile file preview in sidebar ── */
2827
- .file-preview-mobile {
2828
- display: flex;
2829
- flex-direction: column;
2830
- height: 100%;
2831
- overflow: hidden;
2832
- }
2833
-
2834
- .file-preview-mobile-header {
2835
- display: flex;
2836
- align-items: center;
2837
- justify-content: space-between;
2838
- padding: 0.75rem;
2839
- border-bottom: 1px solid var(--border);
2840
- flex-shrink: 0;
2841
- }
2842
-
2843
- .file-preview-mobile-size {
2844
- font-size: 0.75rem;
2845
- color: var(--text-secondary);
2846
- }
2847
-
2848
- .file-preview-mobile-filename {
2849
- padding: 0.5rem 0.75rem;
2850
- font-size: 0.8rem;
2851
- font-weight: 600;
2852
- color: var(--text);
2853
- border-bottom: 1px solid var(--border);
2854
- white-space: nowrap;
2855
- overflow: hidden;
2856
- text-overflow: ellipsis;
2857
- flex-shrink: 0;
2858
- }
2859
-
2860
- .file-preview-mobile .preview-panel-body {
2861
- flex: 1;
2862
- overflow: auto;
2863
- }
2864
-
2865
- /* ══════════════════════════════════════════
2866
- Medium screens — file panel narrower
2867
- ══════════════════════════════════════════ */
2868
- @media (max-width: 1200px) and (min-width: 769px) {
2869
- .file-panel {
2870
- max-width: clamp(200px, 20vw, 280px);
2871
- }
2872
- .preview-panel {
2873
- max-width: min(400px, 40vw);
2874
- }
2875
- }
2876
-
2877
- /* ══════════════════════════════════════════
2878
- Team Mode
2879
- ══════════════════════════════════════════ */
2880
-
2881
- /* ── Team mode toggle ── */
2882
- .team-mode-toggle {
2883
- display: flex;
2884
- gap: 2px;
2885
- background: var(--bg-tertiary);
2886
- border-radius: 6px;
2887
- padding: 2px;
2888
- margin-left: 8px;
2889
- }
2890
-
2891
- .team-mode-btn {
2892
- padding: 4px 14px;
2893
- border: none;
2894
- border-radius: 4px;
2895
- background: none;
2896
- color: var(--text-secondary);
2897
- font-size: 0.75rem;
2898
- font-weight: 500;
2899
- cursor: pointer;
2900
- transition: all 0.15s;
2901
- }
2902
-
2903
- .team-mode-btn.active {
2904
- background: var(--bg-secondary);
2905
- color: var(--text-primary);
2906
- box-shadow: 0 1px 2px rgba(0,0,0,0.15);
2907
- }
2908
-
2909
- .team-mode-btn:hover:not(.active) {
2910
- color: var(--text-primary);
2911
- }
2912
-
2913
- .team-mode-select {
2914
- display: none;
2915
- padding: 4px 8px;
2916
- border: 1px solid var(--border);
2917
- border-radius: 6px;
2918
- background: var(--bg-tertiary);
2919
- color: var(--text-primary);
2920
- font-size: 0.75rem;
2921
- font-weight: 500;
2922
- cursor: pointer;
2923
- }
2924
-
2925
- /* ── Team create panel ── */
2926
- .team-create-panel {
2927
- flex: 1;
2928
- display: flex;
2929
- align-items: flex-start;
2930
- justify-content: center;
2931
- padding: 2rem;
2932
- overflow-y: auto;
2933
- }
2934
-
2935
- .team-create-inner {
2936
- max-width: 560px;
2937
- width: 100%;
2938
- }
2939
-
2940
- .team-create-header {
2941
- display: flex;
2942
- align-items: center;
2943
- gap: 10px;
2944
- margin-bottom: 8px;
2945
- color: var(--text-primary);
2946
- }
2947
-
2948
- .team-create-header h2 {
2949
- font-size: 1.25rem;
2950
- font-weight: 600;
2951
- }
2952
-
2953
- .team-create-desc {
2954
- font-size: 0.85rem;
2955
- color: var(--text-secondary);
2956
- margin-bottom: 16px;
2957
- line-height: 1.4;
2958
- }
2959
-
2960
- /* ── Template selector ── */
2961
- .team-tpl-section {
2962
- margin-bottom: 14px;
2963
- }
2964
- .team-tpl-label {
2965
- display: block;
2966
- font-size: 0.8rem;
2967
- font-weight: 600;
2968
- color: var(--text-secondary);
2969
- margin-bottom: 6px;
2970
- text-transform: uppercase;
2971
- letter-spacing: 0.03em;
2972
- }
2973
- .team-tpl-select {
2974
- width: 100%;
2975
- padding: 8px 10px;
2976
- border: 1px solid var(--border);
2977
- border-radius: 6px;
2978
- background: var(--bg-secondary);
2979
- color: var(--text-primary);
2980
- font-size: 0.9rem;
2981
- font-family: inherit;
2982
- cursor: pointer;
2983
- appearance: auto;
2984
- }
2985
- .team-tpl-select:focus {
2986
- outline: none;
2987
- border-color: var(--accent);
2988
- }
2989
- .team-tpl-desc {
2990
- display: block;
2991
- font-size: 0.78rem;
2992
- color: var(--text-secondary);
2993
- margin-top: 4px;
2994
- }
2995
-
2996
- /* ── Collapsible lead prompt ── */
2997
- .team-lead-prompt-section {
2998
- margin-bottom: 14px;
2999
- border: 1px solid var(--border);
3000
- border-radius: 8px;
3001
- overflow: hidden;
3002
- }
3003
- .team-lead-prompt-header {
3004
- display: flex;
3005
- align-items: center;
3006
- gap: 6px;
3007
- padding: 8px 10px;
3008
- cursor: pointer;
3009
- user-select: none;
3010
- background: var(--bg-secondary);
3011
- }
3012
- .team-lead-prompt-header:hover {
3013
- background: var(--bg-hover);
3014
- }
3015
- .team-lead-prompt-arrow {
3016
- transition: transform 0.15s;
3017
- flex-shrink: 0;
3018
- color: var(--text-secondary);
3019
- }
3020
- .team-lead-prompt-arrow.expanded {
3021
- transform: rotate(90deg);
3022
- }
3023
- .team-lead-prompt-title {
3024
- font-size: 0.8rem;
3025
- font-weight: 600;
3026
- color: var(--text-secondary);
3027
- text-transform: uppercase;
3028
- letter-spacing: 0.03em;
3029
- flex-shrink: 0;
3030
- }
3031
- .team-lead-prompt-preview {
3032
- font-size: 0.78rem;
3033
- color: var(--text-tertiary, #666);
3034
- overflow: hidden;
3035
- text-overflow: ellipsis;
3036
- white-space: nowrap;
3037
- margin-left: 8px;
3038
- }
3039
- .team-lead-prompt-body {
3040
- padding: 8px 10px;
3041
- border-top: 1px solid var(--border);
3042
- }
3043
- .team-lead-prompt-textarea {
3044
- width: 100%;
3045
- padding: 10px;
3046
- border: 1px solid var(--border);
3047
- border-radius: 6px;
3048
- background: var(--bg-primary);
3049
- color: var(--text-primary);
3050
- font-size: 0.82rem;
3051
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
3052
- resize: vertical;
3053
- min-height: 160px;
3054
- line-height: 1.5;
3055
- }
3056
- .team-lead-prompt-textarea:focus {
3057
- outline: none;
3058
- border-color: var(--accent);
3059
- }
3060
- .team-lead-prompt-actions {
3061
- display: flex;
3062
- justify-content: flex-end;
3063
- margin-top: 6px;
3064
- }
3065
- .team-lead-prompt-reset {
3066
- padding: 4px 12px;
3067
- border: 1px solid var(--border);
3068
- border-radius: 4px;
3069
- background: transparent;
3070
- color: var(--text-secondary);
3071
- font-size: 0.78rem;
3072
- cursor: pointer;
3073
- transition: all 0.15s;
3074
- }
3075
- .team-lead-prompt-reset:hover {
3076
- color: var(--text-primary);
3077
- border-color: var(--text-secondary);
3078
- }
3079
-
3080
- .team-create-textarea {
3081
- width: 100%;
3082
- padding: 12px;
3083
- border: 1px solid var(--border);
3084
- border-radius: 8px;
3085
- background: var(--bg-secondary);
3086
- color: var(--text-primary);
3087
- font-size: 0.9rem;
3088
- font-family: inherit;
3089
- resize: vertical;
3090
- min-height: 100px;
3091
- line-height: 1.4;
3092
- }
3093
-
3094
- .team-create-textarea:focus {
3095
- outline: none;
3096
- border-color: var(--accent);
3097
- }
3098
-
3099
- .team-create-actions {
3100
- display: flex;
3101
- gap: 8px;
3102
- margin-top: 12px;
3103
- }
3104
-
3105
- .team-create-launch {
3106
- display: flex;
3107
- align-items: center;
3108
- gap: 6px;
3109
- padding: 8px 18px;
3110
- border: none;
3111
- border-radius: 6px;
3112
- background: var(--accent);
3113
- color: #fff;
3114
- font-size: 0.85rem;
3115
- font-weight: 500;
3116
- cursor: pointer;
3117
- transition: background 0.15s;
3118
- }
3119
-
3120
- .team-create-launch:hover:not(:disabled) {
3121
- background: var(--accent-hover);
3122
- }
3123
-
3124
- .team-create-launch:disabled {
3125
- opacity: 0.4;
3126
- cursor: not-allowed;
3127
- }
3128
-
3129
- .team-create-cancel {
3130
- padding: 8px 18px;
3131
- border: 1px solid var(--border);
3132
- border-radius: 6px;
3133
- background: none;
3134
- color: var(--text-secondary);
3135
- font-size: 0.85rem;
3136
- cursor: pointer;
3137
- transition: all 0.15s;
3138
- }
3139
-
3140
- .team-create-cancel:hover {
3141
- color: var(--text-primary);
3142
- border-color: var(--text-secondary);
3143
- }
3144
-
3145
- /* ── Example instructions ── */
3146
- .team-examples-section {
3147
- margin-top: 20px;
3148
- }
3149
-
3150
- .team-examples-header {
3151
- font-size: 0.78rem;
3152
- font-weight: 600;
3153
- color: var(--text-secondary);
3154
- text-transform: uppercase;
3155
- letter-spacing: 0.04em;
3156
- margin-bottom: 8px;
3157
- }
3158
-
3159
- .team-examples-list {
3160
- display: flex;
3161
- flex-direction: column;
3162
- gap: 8px;
3163
- }
3164
-
3165
- .team-example-card {
3166
- display: flex;
3167
- align-items: flex-start;
3168
- gap: 12px;
3169
- padding: 14px 16px;
3170
- border: 1px solid var(--border);
3171
- border-radius: 10px;
3172
- transition: all 0.15s;
3173
- background: linear-gradient(135deg, rgba(255,255,255,0.02) 0%, transparent 100%);
3174
- }
3175
-
3176
- .team-example-card:hover {
3177
- border-color: rgba(59,130,246,0.3);
3178
- background: linear-gradient(135deg, rgba(59,130,246,0.06) 0%, rgba(59,130,246,0.02) 100%);
3179
- }
3180
-
3181
- .team-example-icon {
3182
- flex-shrink: 0;
3183
- width: 36px;
3184
- height: 36px;
3185
- display: flex;
3186
- align-items: center;
3187
- justify-content: center;
3188
- border-radius: 8px;
3189
- background: rgba(59,130,246,0.1);
3190
- color: var(--accent);
3191
- margin-top: 1px;
3192
- }
3193
-
3194
- .team-example-card:nth-child(2) .team-example-icon {
3195
- background: rgba(16,185,129,0.1);
3196
- color: #10B981;
3197
- }
3198
-
3199
- .team-example-card:nth-child(3) .team-example-icon {
3200
- background: rgba(139,92,246,0.1);
3201
- color: #8B5CF6;
3202
- }
3203
-
3204
- .team-example-body {
3205
- flex: 1;
3206
- min-width: 0;
3207
- }
3208
-
3209
- .team-example-title {
3210
- font-size: 0.8rem;
3211
- font-weight: 600;
3212
- color: var(--text-primary);
3213
- margin-bottom: 4px;
3214
- }
3215
-
3216
- .team-example-text {
3217
- font-size: 0.74rem;
3218
- color: var(--text-secondary);
3219
- line-height: 1.5;
3220
- }
3221
-
3222
- .team-example-try {
3223
- flex-shrink: 0;
3224
- align-self: center;
3225
- padding: 6px 16px;
3226
- font-size: 0.74rem;
3227
- font-weight: 500;
3228
- color: var(--accent);
3229
- background: transparent;
3230
- border: 1px solid var(--accent);
3231
- border-radius: 6px;
3232
- cursor: pointer;
3233
- transition: all 0.15s;
3234
- white-space: nowrap;
3235
- }
3236
-
3237
- .team-example-try:hover {
3238
- background: var(--accent);
3239
- color: #fff;
3240
- }
3241
-
3242
- /* ── Historical teams in create panel ── */
3243
- .team-history-section {
3244
- margin-top: 20px;
3245
- border-top: 1px solid var(--border);
3246
- padding-top: 16px;
3247
- }
3248
-
3249
- .team-history-section-header {
3250
- font-size: 0.8rem;
3251
- font-weight: 600;
3252
- text-transform: uppercase;
3253
- letter-spacing: 0.03em;
3254
- color: var(--text-secondary);
3255
- margin-bottom: 8px;
3256
- }
3257
-
3258
- .team-history-section .team-history-list {
3259
- max-height: 200px;
3260
- overflow-y: auto;
3261
- border: 1px solid var(--border);
3262
- border-radius: 6px;
3263
- background: var(--bg-secondary);
3264
- }
3265
-
3266
- /* ── Team dashboard ── */
3267
- .team-dashboard {
3268
- flex: 1;
3269
- display: flex;
3270
- flex-direction: column;
3271
- min-height: 0;
3272
- overflow: hidden;
3273
- }
3274
-
3275
- .team-dash-header {
3276
- display: flex;
3277
- flex-direction: column;
3278
- padding: 12px 20px;
3279
- border-bottom: 1px solid var(--border);
3280
- flex-shrink: 0;
3281
- gap: 8px;
3282
- }
3283
-
3284
- .team-dash-header-top {
3285
- display: flex;
3286
- align-items: center;
3287
- justify-content: space-between;
3288
- }
3289
-
3290
- .team-dash-header-left {
3291
- display: flex;
3292
- align-items: center;
3293
- gap: 10px;
3294
- }
3295
-
3296
- .team-dash-instruction {
3297
- position: relative;
3298
- }
3299
-
3300
- .team-dash-instruction-text {
3301
- font-size: 0.92rem;
3302
- line-height: 1.5;
3303
- color: var(--text);
3304
- white-space: pre-wrap;
3305
- word-break: break-word;
3306
- overflow: hidden;
3307
- display: -webkit-box;
3308
- -webkit-box-orient: vertical;
3309
- -webkit-line-clamp: 3;
3310
- }
3311
-
3312
- .team-dash-instruction.expanded .team-dash-instruction-text {
3313
- -webkit-line-clamp: unset;
3314
- display: block;
3315
- }
3316
-
3317
- .team-dash-instruction-toggle {
3318
- background: none;
3319
- border: none;
3320
- color: var(--accent);
3321
- cursor: pointer;
3322
- font-size: 0.78rem;
3323
- padding: 2px 0;
3324
- margin-top: 2px;
3325
- }
3326
-
3327
- .team-dash-instruction-toggle:hover {
3328
- text-decoration: underline;
3329
- }
3330
-
3331
- .team-status-badge {
3332
- display: inline-block;
3333
- padding: 2px 8px;
3334
- border-radius: 10px;
3335
- font-size: 0.7rem;
3336
- font-weight: 500;
3337
- text-transform: uppercase;
3338
- letter-spacing: 0.03em;
3339
- }
3340
-
3341
- .team-status-planning {
3342
- background: rgba(234,179,8,0.15);
3343
- color: #eab308;
3344
- }
3345
-
3346
- .team-status-running {
3347
- background: rgba(59,130,246,0.15);
3348
- color: #3b82f6;
3349
- }
3350
-
3351
- .team-status-summarizing {
3352
- background: rgba(139,92,246,0.15);
3353
- color: #8b5cf6;
3354
- }
3355
-
3356
- .team-status-completed {
3357
- background: rgba(16,185,129,0.15);
3358
- color: #10b981;
3359
- }
3360
-
3361
- .team-status-failed {
3362
- background: rgba(239,68,68,0.15);
3363
- color: #ef4444;
3364
- }
3365
-
3366
- .team-dash-header-right {
3367
- display: flex;
3368
- gap: 8px;
3369
- }
3370
-
3371
- .team-dissolve-btn {
3372
- padding: 5px 12px;
3373
- border: 1px solid var(--error);
3374
- border-radius: 5px;
3375
- background: none;
3376
- color: var(--error);
3377
- font-size: 0.8rem;
3378
- cursor: pointer;
3379
- transition: all 0.15s;
3380
- }
3381
-
3382
- .team-dissolve-btn:hover {
3383
- background: rgba(212,84,84,0.1);
3384
- }
3385
-
3386
- .team-back-btn {
3387
- padding: 5px 12px;
3388
- border: 1px solid var(--border);
3389
- border-radius: 5px;
3390
- background: none;
3391
- color: var(--text-secondary);
3392
- font-size: 0.8rem;
3393
- cursor: pointer;
3394
- transition: all 0.15s;
3395
- }
3396
-
3397
- .team-back-btn:hover {
3398
- color: var(--text-primary);
3399
- border-color: var(--text-secondary);
3400
- }
3401
-
3402
- .team-new-btn {
3403
- padding: 5px 12px;
3404
- border: 1px solid var(--accent);
3405
- border-radius: 5px;
3406
- background: none;
3407
- color: var(--accent);
3408
- font-size: 0.8rem;
3409
- cursor: pointer;
3410
- transition: all 0.15s;
3411
- }
3412
-
3413
- .team-new-btn:hover {
3414
- background: rgba(59,130,246,0.1);
3415
- }
3416
-
3417
- /* ── Lead status bar ── */
3418
- .team-lead-bar {
3419
- display: flex;
3420
- align-items: center;
3421
- gap: 8px;
3422
- padding: 8px 16px;
3423
- background: var(--bg-secondary);
3424
- border-bottom: 1px solid var(--border);
3425
- font-size: 0.8rem;
3426
- flex-shrink: 0;
3427
- }
3428
- .team-lead-bar-clickable {
3429
- cursor: pointer;
3430
- transition: background 0.15s;
3431
- }
3432
- .team-lead-bar-clickable:hover {
3433
- background: var(--bg-hover);
3434
- }
3435
-
3436
- .team-lead-dot {
3437
- width: 8px;
3438
- height: 8px;
3439
- border-radius: 50%;
3440
- background: var(--accent);
3441
- flex-shrink: 0;
3442
- animation: agent-pulse 1.5s ease-in-out infinite;
3443
- }
3444
-
3445
- .team-lead-label {
3446
- font-weight: 600;
3447
- color: var(--accent);
3448
- text-transform: uppercase;
3449
- font-size: 0.7rem;
3450
- letter-spacing: 0.03em;
3451
- }
3452
-
3453
- .team-lead-text {
3454
- color: var(--text-primary);
3455
- overflow: hidden;
3456
- text-overflow: ellipsis;
3457
- white-space: nowrap;
3458
- }
3459
-
3460
- /* ── Dashboard body ── */
3461
- .team-dash-body {
3462
- flex: 1;
3463
- display: flex;
3464
- min-height: 0;
3465
- overflow: hidden;
3466
- }
3467
-
3468
- .team-dash-main {
3469
- flex: 1;
3470
- overflow-y: auto;
3471
- padding: 16px 20px;
3472
- display: flex;
3473
- flex-direction: column;
3474
- gap: 20px;
3475
- }
3476
-
3477
- /* ── Kanban board ── */
3478
- .team-kanban-section {
3479
- border: 1px solid var(--border);
3480
- border-radius: 8px;
3481
- background: var(--bg-secondary);
3482
- flex-shrink: 0;
3483
- }
3484
-
3485
- .team-kanban-section-header {
3486
- display: flex;
3487
- align-items: center;
3488
- gap: 6px;
3489
- padding: 8px 12px;
3490
- cursor: pointer;
3491
- user-select: none;
3492
- font-size: 0.8rem;
3493
- font-weight: 600;
3494
- text-transform: uppercase;
3495
- letter-spacing: 0.03em;
3496
- color: var(--text-secondary);
3497
- transition: background 0.15s;
3498
- }
3499
- .team-kanban-section-header:hover {
3500
- background: var(--bg-tertiary);
3501
- }
3502
- .team-kanban-section-toggle {
3503
- font-size: 0.65rem;
3504
- color: var(--text-secondary);
3505
- }
3506
- .team-kanban-section-summary {
3507
- margin-left: auto;
3508
- font-size: 0.72rem;
3509
- font-weight: 400;
3510
- color: var(--text-secondary);
3511
- opacity: 0.8;
3512
- }
3513
-
3514
- .team-kanban {
3515
- display: flex;
3516
- gap: 12px;
3517
- min-height: 0;
3518
- flex-shrink: 0;
3519
- padding: 0 8px 8px;
3520
- }
3521
-
3522
- .team-kanban-col {
3523
- flex: 1;
3524
- min-width: 0;
3525
- display: flex;
3526
- flex-direction: column;
3527
- background: var(--bg-secondary);
3528
- border-radius: 8px;
3529
- border: 1px solid var(--border);
3530
- }
3531
-
3532
- .team-kanban-col-header {
3533
- display: flex;
3534
- align-items: center;
3535
- gap: 6px;
3536
- padding: 10px 12px;
3537
- font-size: 0.8rem;
3538
- font-weight: 600;
3539
- text-transform: uppercase;
3540
- letter-spacing: 0.03em;
3541
- color: var(--text-secondary);
3542
- border-bottom: 1px solid var(--border);
3543
- }
3544
-
3545
- .team-kanban-col-dot {
3546
- width: 8px;
3547
- height: 8px;
3548
- border-radius: 50%;
3549
- flex-shrink: 0;
3550
- }
3551
-
3552
- .team-kanban-col-dot.pending { background: var(--text-secondary); }
3553
- .team-kanban-col-dot.active { background: var(--accent); }
3554
- .team-kanban-col-dot.done { background: var(--success); }
3555
- .team-kanban-col-dot.failed { background: var(--error); }
3556
-
3557
- .team-kanban-col-count {
3558
- margin-left: auto;
3559
- background: var(--bg-tertiary);
3560
- padding: 1px 6px;
3561
- border-radius: 8px;
3562
- font-size: 0.7rem;
3563
- }
3564
-
3565
- .team-kanban-col-body {
3566
- padding: 8px;
3567
- display: flex;
3568
- flex-direction: column;
3569
- gap: 6px;
3570
- overflow-y: auto;
3571
- max-height: 160px;
3572
- }
3573
-
3574
- .team-kanban-empty {
3575
- padding: 12px;
3576
- text-align: center;
3577
- font-size: 0.8rem;
3578
- color: var(--text-secondary);
3579
- opacity: 0.6;
3580
- }
3581
-
3582
- /* ── Task cards ── */
3583
- .team-task-card {
3584
- padding: 10px 12px;
3585
- border-radius: 6px;
3586
- background: var(--bg-primary);
3587
- border: 1px solid var(--border);
3588
- transition: border-color 0.15s;
3589
- }
3590
-
3591
- .team-task-card.active {
3592
- border-left: 3px solid var(--accent);
3593
- }
3594
-
3595
- .team-task-card.done {
3596
- opacity: 0.8;
3597
- }
3598
-
3599
- .team-task-card.failed {
3600
- border-left: 3px solid var(--error);
3601
- }
3602
-
3603
- .team-task-title {
3604
- font-size: 0.85rem;
3605
- font-weight: 500;
3606
- color: var(--text-primary);
3607
- line-height: 1.3;
3608
- }
3609
-
3610
- .team-task-desc {
3611
- font-size: 0.78rem;
3612
- color: var(--text-secondary);
3613
- margin-top: 4px;
3614
- line-height: 1.3;
3615
- }
3616
-
3617
- .team-task-desc-clamp {
3618
- display: -webkit-box;
3619
- -webkit-line-clamp: 2;
3620
- -webkit-box-orient: vertical;
3621
- overflow: hidden;
3622
- cursor: pointer;
3623
- }
3624
- .team-task-desc-clamp:hover {
3625
- color: var(--text-primary);
3626
- }
3627
- .team-task-desc-expanded {
3628
- -webkit-line-clamp: unset;
3629
- overflow: visible;
3630
- }
3631
-
3632
- .team-task-assignee {
3633
- display: flex;
3634
- align-items: center;
3635
- gap: 4px;
3636
- margin-top: 6px;
3637
- font-size: 0.75rem;
3638
- color: var(--text-secondary);
3639
- }
3640
-
3641
- /* ── Agent dot ── */
3642
- .team-agent-dot {
3643
- width: 8px;
3644
- height: 8px;
3645
- border-radius: 50%;
3646
- flex-shrink: 0;
3647
- display: inline-block;
3648
- }
3649
-
3650
- .team-agent-dot.working {
3651
- animation: agent-pulse 1.5s ease-in-out infinite;
3652
- }
3653
-
3654
- @keyframes agent-pulse {
3655
- 0%, 100% { opacity: 1; transform: scale(1); }
3656
- 50% { opacity: 0.5; transform: scale(1.3); }
3657
- }
3658
-
3659
- /* ── Activity feed ── */
3660
- .team-feed {
3661
- border: 1px solid var(--border);
3662
- border-radius: 8px;
3663
- background: var(--bg-secondary);
3664
- }
3665
-
3666
- .team-feed-header {
3667
- padding: 10px 12px;
3668
- font-size: 0.8rem;
3669
- font-weight: 600;
3670
- text-transform: uppercase;
3671
- letter-spacing: 0.03em;
3672
- color: var(--text-secondary);
3673
- border-bottom: 1px solid var(--border);
3674
- }
3675
-
3676
- .team-feed-list {
3677
- max-height: 250px;
3678
- overflow-y: auto;
3679
- padding: 8px 12px;
3680
- display: flex;
3681
- flex-direction: column;
3682
- gap: 4px;
3683
- }
3684
-
3685
- .team-feed-entry {
3686
- display: flex;
3687
- align-items: baseline;
3688
- gap: 6px;
3689
- font-size: 0.8rem;
3690
- line-height: 1.4;
3691
- padding: 2px 0;
3692
- }
3693
-
3694
- .team-feed-time {
3695
- flex-shrink: 0;
3696
- font-size: 0.7rem;
3697
- color: var(--text-secondary);
3698
- opacity: 0.7;
3699
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
3700
- }
3701
-
3702
- .team-feed-text {
3703
- color: var(--text-primary);
3704
- }
3705
-
3706
- .team-feed-agent-name {
3707
- font-weight: 600;
3708
- }
3709
-
3710
- .sidebar-section-collapsible {
3711
- display: flex;
3712
- flex-direction: column;
3713
- flex: 1;
3714
- min-height: 0;
3715
- overflow: hidden;
3716
- }
3717
-
3718
- /* ── Teams sidebar section (history list in sidebar) ── */
3719
- .sidebar-teams {
3720
- padding: 0.5rem 0.75rem;
3721
- overflow: hidden;
3722
- display: flex;
3723
- flex-direction: column;
3724
- min-height: 0;
3725
- }
3726
-
3727
- /* ── Loops sidebar section ── */
3728
- .sidebar-loops {
3729
- padding: 0.5rem 0.75rem;
3730
- overflow: hidden;
3731
- display: flex;
3732
- flex-direction: column;
3733
- min-height: 0;
3734
- }
3735
-
3736
- .loop-history-list {
3737
- flex: 1 1 auto;
3738
- overflow-y: auto;
3739
- min-height: 0;
3740
- display: flex;
3741
- flex-direction: column;
3742
- gap: 2px;
3743
- }
3744
-
3745
- .team-history-list {
3746
- flex: 1 1 auto;
3747
- overflow-y: auto;
3748
- min-height: 0;
3749
- display: flex;
3750
- flex-direction: column;
3751
- gap: 2px;
3752
- }
3753
-
3754
- .team-history-item {
3755
- display: flex;
3756
- align-items: center;
3757
- padding: 8px 10px;
3758
- border-radius: 8px;
3759
- cursor: pointer;
3760
- transition: background 0.15s;
3761
- border-left: 3px solid transparent;
3762
- }
3763
-
3764
- .team-history-item:hover {
3765
- background: var(--bg-tertiary);
3766
- }
3767
-
3768
- .team-history-item.active {
3769
- background: var(--bg-tertiary);
3770
- border-left-color: var(--accent);
3771
- }
3772
-
3773
- .team-history-info {
3774
- min-width: 0;
3775
- flex: 1;
3776
- }
3777
-
3778
- .team-history-title {
3779
- font-size: 0.82rem;
3780
- color: var(--text-primary);
3781
- overflow: hidden;
3782
- text-overflow: ellipsis;
3783
- white-space: nowrap;
3784
- line-height: 1.3;
3785
- }
3786
-
3787
- .team-history-meta {
3788
- display: flex;
3789
- align-items: center;
3790
- flex-wrap: wrap;
3791
- gap: 2px 6px;
3792
- margin-top: 2px;
3793
- font-size: 0.7rem;
3794
- color: var(--text-secondary);
3795
- }
3796
-
3797
- .team-history-tasks {
3798
- color: var(--text-secondary);
3799
- white-space: nowrap;
3800
- }
3801
-
3802
- .team-status-badge-sm {
3803
- font-size: 0.6rem;
3804
- padding: 1px 5px;
3805
- border-radius: 8px;
3806
- }
3807
-
3808
- /* ── Completion stats bar ── */
3809
- .team-stats-bar {
3810
- display: flex;
3811
- gap: 16px;
3812
- padding: 10px 14px;
3813
- margin-bottom: 12px;
3814
- background: var(--bg-secondary);
3815
- border: 1px solid var(--border);
3816
- border-radius: 8px;
3817
- }
3818
-
3819
- .team-stat {
3820
- display: flex;
3821
- flex-direction: column;
3822
- align-items: center;
3823
- gap: 2px;
3824
- }
3825
-
3826
- .team-stat-label {
3827
- font-size: 0.65rem;
3828
- text-transform: uppercase;
3829
- letter-spacing: 0.04em;
3830
- color: var(--text-secondary);
3831
- }
3832
-
3833
- .team-stat-value {
3834
- font-size: 0.9rem;
3835
- font-weight: 600;
3836
- color: var(--text-primary);
3837
- }
3838
-
3839
- /* ── Team summary (completion) ── */
3840
- .team-summary {
3841
- border: 1px solid var(--border);
3842
- border-radius: 8px;
3843
- background: var(--bg-secondary);
3844
- }
3845
-
3846
- .team-summary-header {
3847
- padding: 10px 12px;
3848
- font-size: 0.8rem;
3849
- font-weight: 600;
3850
- text-transform: uppercase;
3851
- letter-spacing: 0.03em;
3852
- color: var(--text-secondary);
3853
- border-bottom: 1px solid var(--border);
3854
- }
3855
-
3856
- .team-summary-body {
3857
- padding: 12px;
3858
- }
3859
-
3860
- /* ── Agent bar (horizontal) ── */
3861
- .team-agents-bar {
3862
- border: 1px solid var(--border);
3863
- border-radius: 8px;
3864
- background: var(--bg-secondary);
3865
- flex-shrink: 0;
3866
- }
3867
-
3868
- .team-agents-bar-header {
3869
- padding: 10px 12px;
3870
- font-size: 0.8rem;
3871
- font-weight: 600;
3872
- text-transform: uppercase;
3873
- letter-spacing: 0.03em;
3874
- color: var(--text-secondary);
3875
- border-bottom: 1px solid var(--border);
3876
- }
3877
-
3878
- .team-agents-bar-list {
3879
- display: flex;
3880
- flex-wrap: wrap;
3881
- gap: 8px;
3882
- padding: 10px 12px;
3883
- }
3884
-
3885
- .team-agent-card {
3886
- flex: 1;
3887
- min-width: 180px;
3888
- max-width: 300px;
3889
- padding: 10px 12px;
3890
- border-radius: 6px;
3891
- background: var(--bg-primary);
3892
- border: 1px solid var(--border);
3893
- cursor: pointer;
3894
- transition: border-color 0.15s;
3895
- }
3896
-
3897
- .team-agent-card:hover {
3898
- border-color: var(--accent);
3899
- }
3900
-
3901
- .team-agent-card-top {
3902
- display: flex;
3903
- align-items: center;
3904
- gap: 6px;
3905
- }
3906
-
3907
- .team-agent-card-name {
3908
- font-size: 0.82rem;
3909
- font-weight: 500;
3910
- color: var(--text-primary);
3911
- white-space: nowrap;
3912
- overflow: hidden;
3913
- text-overflow: ellipsis;
3914
- }
3915
-
3916
- .team-agent-card-status {
3917
- margin-left: auto;
3918
- font-size: 0.65rem;
3919
- font-weight: 500;
3920
- text-transform: uppercase;
3921
- letter-spacing: 0.03em;
3922
- padding: 1px 6px;
3923
- border-radius: 8px;
3924
- flex-shrink: 0;
3925
- }
3926
-
3927
- .team-agent-card-status-starting,
3928
- .team-agent-card-status-working {
3929
- background: rgba(59,130,246,0.15);
3930
- color: #3b82f6;
3931
- }
3932
-
3933
- .team-agent-card-status-done {
3934
- background: rgba(16,185,129,0.15);
3935
- color: #10b981;
3936
- }
3937
-
3938
- .team-agent-card-status-error {
3939
- background: rgba(239,68,68,0.15);
3940
- color: #ef4444;
3941
- }
3942
-
3943
- .team-agent-card-activity {
3944
- margin-top: 6px;
3945
- font-size: 0.75rem;
3946
- color: var(--text-secondary);
3947
- overflow: hidden;
3948
- text-overflow: ellipsis;
3949
- white-space: nowrap;
3950
- line-height: 1.3;
3951
- }
3952
-
3953
- .team-agents-empty {
3954
- padding: 16px 12px;
3955
- text-align: center;
3956
- font-size: 0.8rem;
3957
- color: var(--text-secondary);
3958
- opacity: 0.6;
3959
- }
3960
-
3961
- /* ── Agent detail view ── */
3962
- .team-agent-detail {
3963
- flex: 1;
3964
- display: flex;
3965
- flex-direction: column;
3966
- min-height: 0;
3967
- overflow: hidden;
3968
- }
3969
-
3970
- .team-agent-detail-header {
3971
- display: flex;
3972
- align-items: center;
3973
- gap: 8px;
3974
- padding: 10px 16px;
3975
- border-bottom: 1px solid var(--border);
3976
- flex-shrink: 0;
3977
- }
3978
-
3979
- .team-agent-back-btn {
3980
- display: flex;
3981
- align-items: center;
3982
- gap: 4px;
3983
- padding: 4px 10px;
3984
- border: 1px solid var(--border);
3985
- border-radius: 4px;
3986
- background: none;
3987
- color: var(--text-secondary);
3988
- font-size: 0.78rem;
3989
- cursor: pointer;
3990
- transition: all 0.15s;
3991
- margin-right: 4px;
3992
- }
3993
-
3994
- .team-agent-back-btn:hover {
3995
- color: var(--text-primary);
3996
- border-color: var(--text-secondary);
3997
- }
3998
-
3999
- .team-agent-detail-name {
4000
- font-size: 0.9rem;
4001
- font-weight: 600;
4002
- color: var(--text-primary);
4003
- }
4004
-
4005
- .team-agent-detail-status {
4006
- font-size: 0.75rem;
4007
- color: var(--text-secondary);
4008
- text-transform: capitalize;
4009
- }
4010
-
4011
- .team-agent-messages {
4012
- flex: 1;
4013
- overflow-y: auto;
4014
- padding: 1rem 1.5rem;
4015
- min-height: 0;
4016
- }
4017
-
4018
- .team-agent-messages-inner {
4019
- max-width: 768px;
4020
- width: 100%;
4021
- margin: 0 auto;
4022
- display: flex;
4023
- flex-direction: column;
4024
- gap: 0.25rem;
4025
- }
4026
-
4027
- .team-agent-empty-msg {
4028
- text-align: center;
4029
- padding: 2rem;
4030
- color: var(--text-secondary);
4031
- font-size: 0.85rem;
4032
- }
4033
-
4034
- /* ── Agent prompt card ── */
4035
- .team-agent-prompt {
4036
- border: 1px solid var(--border);
4037
- border-radius: 8px;
4038
- background: var(--bg-secondary);
4039
- margin-bottom: 0.5rem;
4040
- }
4041
-
4042
- .team-agent-prompt-label {
4043
- padding: 8px 12px;
4044
- font-size: 0.75rem;
4045
- font-weight: 600;
4046
- text-transform: uppercase;
4047
- letter-spacing: 0.03em;
4048
- color: var(--text-secondary);
4049
- border-bottom: 1px solid var(--border);
4050
- }
4051
-
4052
- .team-agent-prompt-body {
4053
- padding: 10px 14px;
4054
- font-size: 0.85rem;
4055
- line-height: 1.5;
4056
- color: var(--text-primary);
4057
- }
4058
-
4059
- /* ── Agent detail name tag (above assistant bubbles) ── */
4060
- .team-agent-detail-name-tag {
4061
- font-size: 0.72rem;
4062
- font-weight: 600;
4063
- margin-bottom: 2px;
4064
- padding-left: 2px;
4065
- }
4066
-
4067
- /* ── New team launcher (after completion) ── */
4068
- .team-new-launcher {
4069
- border: 1px solid var(--border);
4070
- border-radius: 8px;
4071
- background: var(--bg-secondary);
4072
- padding: 12px;
4073
- flex-shrink: 0;
4074
- }
4075
- .team-new-launcher-input {
4076
- width: 100%;
4077
- box-sizing: border-box;
4078
- padding: 8px 10px;
4079
- border: 1px solid var(--border);
4080
- border-radius: 6px;
4081
- background: var(--bg-primary);
4082
- color: var(--text-primary);
4083
- font-size: 0.85rem;
4084
- font-family: inherit;
4085
- resize: vertical;
4086
- outline: none;
4087
- }
4088
- .team-new-launcher-input:focus {
4089
- border-color: var(--accent);
4090
- }
4091
- .team-new-launcher-actions {
4092
- display: flex;
4093
- gap: 8px;
4094
- margin-top: 8px;
4095
- justify-content: flex-end;
4096
- }
4097
-
4098
- /* ── Team Agent tool call styling in main chat ── */
4099
- .team-agent-tool-wrapper {
4100
- border-left: 3px solid #8B5CF6;
4101
- border-radius: 6px;
4102
- margin-left: 4px;
4103
- padding-left: 0;
4104
- }
4105
- .team-agent-tool-line {
4106
- background: linear-gradient(90deg, rgba(139, 92, 246, 0.08), transparent);
4107
- }
4108
- .team-agent-tool-line:hover {
4109
- background: linear-gradient(90deg, rgba(139, 92, 246, 0.14), transparent);
4110
- }
4111
- .team-agent-tool-icon {
4112
- display: inline-flex;
4113
- align-items: center;
4114
- color: #8B5CF6;
4115
- }
4116
- .team-agent-tool-name {
4117
- font-weight: 700;
4118
- color: #8B5CF6;
4119
- font-size: 0.82rem;
4120
- }
4121
- .team-agent-tool-desc {
4122
- flex: 1;
4123
- overflow: hidden;
4124
- text-overflow: ellipsis;
4125
- white-space: nowrap;
4126
- font-size: 0.8rem;
4127
- color: var(--text-secondary);
4128
- }
4129
- .team-agent-tool-expand {
4130
- border-top: 1px solid rgba(139, 92, 246, 0.15);
4131
- }
4132
- .team-agent-tool-result {
4133
- margin-top: 6px;
4134
- padding: 8px 10px;
4135
- background: rgba(139, 92, 246, 0.06);
4136
- border-radius: 4px;
4137
- border: 1px solid rgba(139, 92, 246, 0.12);
4138
- }
4139
- .team-agent-tool-result-label {
4140
- font-size: 0.72rem;
4141
- font-weight: 600;
4142
- color: #8B5CF6;
4143
- margin-bottom: 4px;
4144
- text-transform: uppercase;
4145
- letter-spacing: 0.5px;
4146
- }
4147
- .team-agent-tool-result-content {
4148
- font-size: 0.82rem;
4149
- line-height: 1.5;
4150
- max-height: 300px;
4151
- overflow-y: auto;
4152
- }
4153
-
4154
- /* ══════════════════════════════════════════
4155
- Mobile responsive — max-width: 768px
4156
- ══════════════════════════════════════════ */
4157
- @media (max-width: 768px) {
4158
- /* Prevent page-level horizontal scroll */
4159
- html, body {
4160
- overflow-x: hidden;
4161
- }
4162
-
4163
- .layout, .main-body, .chat-area {
4164
- overflow-x: hidden;
4165
- max-width: 100vw;
4166
- }
4167
-
4168
- /* File panel hidden on mobile — shown inside sidebar instead */
4169
- .file-panel {
4170
- display: none;
4171
- }
4172
-
4173
- /* Preview panel hidden on mobile — shown inside sidebar instead */
4174
- .preview-panel {
4175
- display: none;
4176
- }
4177
-
4178
- /* Sidebar as fixed overlay */
4179
- .sidebar {
4180
- position: fixed;
4181
- top: 0;
4182
- left: 0;
4183
- bottom: 0;
4184
- width: 320px;
4185
- max-width: 90vw;
4186
- z-index: 100;
4187
- box-shadow: 4px 0 24px rgba(0, 0, 0, 0.5);
4188
- }
4189
-
4190
- .sidebar-backdrop {
4191
- display: block;
4192
- position: fixed;
4193
- inset: 0;
4194
- background: rgba(0, 0, 0, 0.4);
4195
- z-index: 99;
4196
- }
4197
-
4198
- /* Top bar */
4199
- .top-bar {
4200
- padding: 0 0.75rem;
4201
- }
4202
-
4203
- .agent-label {
4204
- display: none;
4205
- }
4206
-
4207
- .latency {
4208
- display: none;
4209
- }
4210
-
4211
- .top-bar-info {
4212
- gap: 0.4rem;
4213
- }
4214
-
4215
- .team-mode-toggle {
4216
- display: none;
4217
- }
4218
-
4219
- .team-mode-select {
4220
- display: block;
4221
- }
4222
-
4223
- /* Message area */
4224
- .message-list {
4225
- padding: 0.75rem 0.75rem 0.5rem;
4226
- }
4227
-
4228
- .message-list-inner {
4229
- max-width: 100%;
4230
- min-width: 0;
4231
- }
4232
-
4233
- /* Constrain message rows and bubbles */
4234
- .message-row {
4235
- min-width: 0;
4236
- max-width: 100%;
4237
- }
4238
-
4239
- .message-bubble {
4240
- min-width: 0;
4241
- max-width: 100%;
4242
- overflow: hidden;
4243
- overflow-wrap: anywhere;
4244
- word-break: break-word;
4245
- }
4246
-
4247
- /* Message content: contain all overflow within the bubble */
4248
- .message-content {
4249
- min-width: 0;
4250
- max-width: 100%;
4251
- overflow-wrap: anywhere;
4252
- word-break: break-word;
4253
- }
4254
-
4255
- .message-content pre {
4256
- max-width: 100%;
4257
- overflow-x: auto;
4258
- }
4259
-
4260
- /* Code block wrappers */
4261
- .code-block-wrapper {
4262
- max-width: 100%;
4263
- }
4264
-
4265
- .code-block-wrapper pre {
4266
- max-width: 100%;
4267
- overflow-x: auto;
4268
- }
4269
-
4270
- .markdown-body code {
4271
- word-break: break-all;
4272
- }
4273
-
4274
- .markdown-body pre {
4275
- max-width: 100%;
4276
- }
4277
-
4278
- .markdown-body table {
4279
- display: block;
4280
- max-width: 100%;
4281
- overflow-x: auto;
4282
- }
4283
-
4284
- /* Input area */
4285
- .input-area {
4286
- padding: 0 0.75rem 0.75rem;
4287
- }
4288
-
4289
- .input-card {
4290
- max-width: 100%;
4291
- }
4292
-
4293
- /* Folder picker */
4294
- .folder-picker-dialog {
4295
- width: calc(100vw - 2rem);
4296
- max-width: 440px;
4297
- }
4298
-
4299
- /* Status card */
4300
- .status-card {
4301
- min-width: 0;
4302
- width: 100%;
4303
- max-width: 320px;
4304
- }
4305
-
4306
- /* Tool blocks */
4307
- .tool-expand {
4308
- margin-left: 0;
4309
- min-width: 0;
4310
- max-width: 100%;
4311
- overflow: hidden;
4312
- }
4313
-
4314
- .tool-block {
4315
- max-width: 100%;
4316
- overflow-x: auto;
4317
- }
4318
-
4319
- .tool-output-content pre {
4320
- font-size: 0.8rem;
4321
- max-width: 100%;
4322
- }
4323
-
4324
- .tool-input-formatted {
4325
- max-width: 100%;
4326
- overflow-wrap: anywhere;
4327
- }
4328
-
4329
- /* AskUserQuestion — larger tap targets */
4330
- .ask-question-option {
4331
- min-height: 44px;
4332
- }
4333
-
4334
- /* Team dashboard — stack kanban columns */
4335
- .team-kanban {
4336
- flex-direction: column;
4337
- }
4338
-
4339
- .team-dash-body {
4340
- flex-direction: column;
4341
- }
4342
-
4343
- .team-agents-panel {
4344
- width: 100%;
4345
- border-left: none;
4346
- border-top: 1px solid var(--border);
4347
- max-height: 150px;
4348
- }
4349
-
4350
- .team-dash-main {
4351
- padding: 12px;
4352
- }
4353
-
4354
- .team-create-panel {
4355
- padding: 1rem;
4356
- }
4357
-
4358
- /* Loop dashboard — responsive */
4359
- .loop-active-item {
4360
- flex-direction: column;
4361
- align-items: flex-start;
4362
- gap: 8px;
4363
- }
4364
-
4365
- .loop-active-item-actions {
4366
- width: 100%;
4367
- justify-content: flex-start;
4368
- flex-wrap: wrap;
4369
- gap: 6px;
4370
- }
4371
-
4372
- .loop-active-item-actions .loop-action-btn {
4373
- min-height: 36px;
4374
- padding: 6px 14px;
4375
- }
4376
-
4377
- .loop-active-item-meta {
4378
- flex-wrap: wrap;
4379
- }
4380
-
4381
- .loop-detail-actions {
4382
- flex-wrap: wrap;
4383
- }
4384
-
4385
- .loop-detail-actions .loop-action-btn {
4386
- min-height: 36px;
4387
- padding: 6px 14px;
4388
- }
4389
-
4390
- .loop-exec-item {
4391
- flex-direction: column;
4392
- align-items: flex-start;
4393
- gap: 6px;
4394
- }
4395
-
4396
- .loop-exec-item-left {
4397
- flex-wrap: wrap;
4398
- }
4399
-
4400
- .loop-exec-item-right {
4401
- width: 100%;
4402
- }
4403
-
4404
- .loop-exec-item-right .loop-action-btn {
4405
- min-height: 36px;
4406
- width: 100%;
4407
- text-align: center;
4408
- }
4409
-
4410
- .loop-schedule-detail {
4411
- flex-wrap: wrap;
4412
- }
4413
-
4414
- .loop-running-banner {
4415
- left: 1rem;
4416
- right: 1rem;
4417
- transform: none;
4418
- bottom: 70px;
4419
- }
4420
-
4421
- .loop-exec-messages {
4422
- max-height: calc(100vh - 160px);
4423
- }
4424
- }
4425
-
4426
- /* ══════════════════════════════════════════
4427
- Extra-small screens — max-width: 480px
4428
- ══════════════════════════════════════════ */
4429
- @media (max-width: 480px) {
4430
- .message-list {
4431
- padding: 0.5rem 0.5rem 0.5rem;
4432
- }
4433
-
4434
- .input-area {
4435
- padding: 0 0.5rem 0.5rem;
4436
- }
4437
-
4438
- .top-bar {
4439
- padding: 0 0.5rem;
4440
- }
4441
-
4442
- .folder-picker-dialog {
4443
- width: calc(100vw - 1rem);
4444
- }
4445
-
4446
- /* Loop — extra-small adjustments */
4447
- .loop-detail-name {
4448
- font-size: 1rem;
4449
- }
4450
-
4451
- .loop-active-item-name {
4452
- font-size: 0.82rem;
4453
- }
4454
-
4455
- .loop-schedule-options {
4456
- padding: 8px;
4457
- }
4458
-
4459
- .loop-schedule-radio {
4460
- font-size: 0.82rem;
4461
- }
4462
-
4463
- .loop-cron-input {
4464
- width: 110px;
4465
- }
4466
- }
4467
-
4468
- /* ══════════════════════════════════════════════════════════════════════════════
4469
- Loop Mode Styles
4470
- ══════════════════════════════════════════════════════════════════════════════ */
4471
-
4472
- /* ── Loop name input ── */
4473
- .loop-name-input {
4474
- width: 100%;
4475
- padding: 8px 10px;
4476
- border: 1px solid var(--border);
4477
- border-radius: 6px;
4478
- background: var(--bg-secondary);
4479
- color: var(--text-primary);
4480
- font-size: 0.9rem;
4481
- font-family: inherit;
4482
- }
4483
- .loop-name-input:focus {
4484
- outline: none;
4485
- border-color: var(--accent);
4486
- }
4487
-
4488
- /* ── Schedule selector ── */
4489
- .loop-schedule-options {
4490
- display: flex;
4491
- flex-direction: column;
4492
- gap: 8px;
4493
- border: 1px solid var(--border);
4494
- border-radius: 8px;
4495
- padding: 12px;
4496
- background: var(--bg-secondary);
4497
- }
4498
- .loop-schedule-radio {
4499
- display: flex;
4500
- align-items: center;
4501
- gap: 8px;
4502
- font-size: 0.85rem;
4503
- color: var(--text-primary);
4504
- cursor: pointer;
4505
- }
4506
- .loop-schedule-radio input[type="radio"] {
4507
- margin: 0;
4508
- accent-color: var(--accent);
4509
- }
4510
- .loop-schedule-detail {
4511
- display: inline-flex;
4512
- align-items: center;
4513
- gap: 4px;
4514
- font-size: 0.82rem;
4515
- color: var(--text-secondary);
4516
- margin-left: 4px;
4517
- }
4518
- .loop-time-input {
4519
- width: 46px;
4520
- padding: 3px 6px;
4521
- border: 1px solid var(--border);
4522
- border-radius: 4px;
4523
- background: var(--bg-primary);
4524
- color: var(--text-primary);
4525
- font-size: 0.82rem;
4526
- font-family: inherit;
4527
- text-align: center;
4528
- }
4529
- .loop-time-input:focus {
4530
- outline: none;
4531
- border-color: var(--accent);
4532
- }
4533
- .loop-day-select {
4534
- padding: 3px 6px;
4535
- border: 1px solid var(--border);
4536
- border-radius: 4px;
4537
- background: var(--bg-primary);
4538
- color: var(--text-primary);
4539
- font-size: 0.82rem;
4540
- font-family: inherit;
4541
- cursor: pointer;
4542
- }
4543
- .loop-day-select:focus {
4544
- outline: none;
4545
- border-color: var(--accent);
4546
- }
4547
- .loop-cron-input {
4548
- width: 140px;
4549
- padding: 3px 8px;
4550
- border: 1px solid var(--border);
4551
- border-radius: 4px;
4552
- background: var(--bg-primary);
4553
- color: var(--text-primary);
4554
- font-size: 0.82rem;
4555
- font-family: 'SF Mono', 'Fira Code', monospace;
4556
- }
4557
- .loop-cron-input:focus {
4558
- outline: none;
4559
- border-color: var(--accent);
4560
- }
4561
-
4562
- /* ── Template selected highlight ── */
4563
- .loop-template-selected {
4564
- border-color: rgba(59,130,246,0.4) !important;
4565
- background: linear-gradient(135deg, rgba(59,130,246,0.08) 0%, rgba(59,130,246,0.03) 100%) !important;
4566
- }
4567
-
4568
- /* ── Active Loops list ── */
4569
- .loop-active-section {
4570
- margin-top: 24px;
4571
- border-top: 1px solid var(--border);
4572
- padding-top: 16px;
4573
- }
4574
- .loop-active-header {
4575
- font-size: 0.8rem;
4576
- font-weight: 600;
4577
- color: var(--text-secondary);
4578
- text-transform: uppercase;
4579
- letter-spacing: 0.04em;
4580
- margin-bottom: 10px;
4581
- }
4582
- .loop-active-list {
4583
- display: flex;
4584
- flex-direction: column;
4585
- gap: 6px;
4586
- }
4587
- .loop-active-item {
4588
- display: flex;
4589
- align-items: center;
4590
- justify-content: space-between;
4591
- gap: 12px;
4592
- padding: 10px 14px;
4593
- border: 1px solid var(--border);
4594
- border-radius: 8px;
4595
- transition: border-color 0.15s;
4596
- }
4597
- .loop-active-item:hover {
4598
- border-color: rgba(59,130,246,0.3);
4599
- }
4600
- .loop-active-item-info {
4601
- flex: 1;
4602
- min-width: 0;
4603
- cursor: pointer;
4604
- }
4605
- .loop-active-item-top {
4606
- display: flex;
4607
- align-items: center;
4608
- gap: 8px;
4609
- margin-bottom: 2px;
4610
- }
4611
- .loop-active-item-name {
4612
- font-size: 0.85rem;
4613
- font-weight: 600;
4614
- color: var(--text-primary);
4615
- overflow: hidden;
4616
- text-overflow: ellipsis;
4617
- white-space: nowrap;
4618
- }
4619
- .loop-status-dot {
4620
- width: 8px;
4621
- height: 8px;
4622
- border-radius: 50%;
4623
- flex-shrink: 0;
4624
- }
4625
- .loop-status-dot-on {
4626
- background: #10B981;
4627
- }
4628
- .loop-status-dot-off {
4629
- background: var(--text-secondary);
4630
- opacity: 0.4;
4631
- }
4632
- .loop-active-item-meta {
4633
- display: flex;
4634
- align-items: center;
4635
- gap: 10px;
4636
- font-size: 0.75rem;
4637
- color: var(--text-secondary);
4638
- }
4639
- .loop-active-item-actions {
4640
- display: flex;
4641
- gap: 4px;
4642
- flex-shrink: 0;
4643
- }
4644
-
4645
- /* ── Loop action buttons ── */
4646
- .loop-action-btn {
4647
- padding: 5px 12px;
4648
- font-size: 0.78rem;
4649
- font-weight: 500;
4650
- color: var(--text-primary);
4651
- background: var(--bg-secondary);
4652
- border: 1px solid var(--border);
4653
- border-radius: 6px;
4654
- cursor: pointer;
4655
- transition: all 0.15s;
4656
- white-space: nowrap;
4657
- }
4658
- .loop-action-btn:hover:not(:disabled) {
4659
- border-color: var(--accent);
4660
- color: var(--accent);
4661
- }
4662
- .loop-action-btn:disabled {
4663
- opacity: 0.4;
4664
- cursor: not-allowed;
4665
- }
4666
- .loop-action-btn.loop-action-sm {
4667
- padding: 3px 8px;
4668
- font-size: 0.72rem;
4669
- }
4670
- .loop-action-btn.loop-action-run {
4671
- color: #10B981;
4672
- border-color: rgba(16,185,129,0.3);
4673
- }
4674
- .loop-action-btn.loop-action-run:hover:not(:disabled) {
4675
- background: rgba(16,185,129,0.1);
4676
- border-color: #10B981;
4677
- }
4678
- .loop-action-btn.loop-action-cancel {
4679
- color: var(--error);
4680
- border-color: rgba(239,68,68,0.3);
4681
- }
4682
- .loop-action-btn.loop-action-cancel:hover {
4683
- background: rgba(239,68,68,0.1);
4684
- border-color: var(--error);
4685
- }
4686
- .loop-action-btn.loop-action-delete {
4687
- color: var(--error);
4688
- border-color: rgba(239,68,68,0.3);
4689
- }
4690
- .loop-action-btn.loop-action-delete:hover {
4691
- background: rgba(239,68,68,0.1);
4692
- border-color: var(--error);
4693
- }
4694
-
4695
- /* ── Loop detail view ── */
4696
- .loop-detail-header {
4697
- margin-bottom: 16px;
4698
- }
4699
- .loop-detail-info {
4700
- margin-bottom: 16px;
4701
- }
4702
- .loop-detail-name {
4703
- font-size: 1.15rem;
4704
- font-weight: 600;
4705
- color: var(--text-primary);
4706
- margin: 0 0 6px;
4707
- }
4708
- .loop-detail-meta {
4709
- display: flex;
4710
- align-items: center;
4711
- gap: 10px;
4712
- margin-bottom: 10px;
4713
- }
4714
- .loop-detail-schedule {
4715
- font-size: 0.82rem;
4716
- color: var(--text-secondary);
4717
- }
4718
- .loop-status-badge {
4719
- font-size: 0.72rem;
4720
- font-weight: 600;
4721
- padding: 2px 8px;
4722
- border-radius: 10px;
4723
- text-transform: uppercase;
4724
- letter-spacing: 0.03em;
4725
- }
4726
- .loop-status-enabled {
4727
- background: rgba(16,185,129,0.15);
4728
- color: #10B981;
4729
- }
4730
- .loop-status-disabled {
4731
- background: rgba(156,163,175,0.15);
4732
- color: var(--text-secondary);
4733
- }
4734
- .loop-detail-actions {
4735
- display: flex;
4736
- gap: 6px;
4737
- }
4738
- .loop-detail-prompt-section {
4739
- margin-bottom: 20px;
4740
- padding: 12px 14px;
4741
- border: 1px solid var(--border);
4742
- border-radius: 8px;
4743
- background: var(--bg-secondary);
4744
- }
4745
- .loop-detail-prompt-label {
4746
- font-size: 0.75rem;
4747
- font-weight: 600;
4748
- color: var(--text-secondary);
4749
- text-transform: uppercase;
4750
- letter-spacing: 0.03em;
4751
- margin-bottom: 6px;
4752
- }
4753
- .loop-detail-prompt-text {
4754
- font-size: 0.84rem;
4755
- color: var(--text-primary);
4756
- line-height: 1.6;
4757
- white-space: pre-wrap;
4758
- }
4759
-
4760
- /* ── Execution history ── */
4761
- .loop-exec-history-section {
4762
- border-top: 1px solid var(--border);
4763
- padding-top: 16px;
4764
- }
4765
- .loop-exec-history-header {
4766
- font-size: 0.8rem;
4767
- font-weight: 600;
4768
- color: var(--text-secondary);
4769
- text-transform: uppercase;
4770
- letter-spacing: 0.04em;
4771
- margin-bottom: 10px;
4772
- }
4773
- .loop-loading {
4774
- display: flex;
4775
- align-items: center;
4776
- gap: 10px;
4777
- padding: 20px 0;
4778
- font-size: 0.85rem;
4779
- color: var(--text-secondary);
4780
- }
4781
- .loop-exec-empty {
4782
- font-size: 0.85rem;
4783
- color: var(--text-secondary);
4784
- padding: 16px 0;
4785
- }
4786
- .loop-exec-list {
4787
- display: flex;
4788
- flex-direction: column;
4789
- gap: 4px;
4790
- }
4791
- .loop-exec-item {
4792
- display: flex;
4793
- align-items: center;
4794
- justify-content: space-between;
4795
- gap: 12px;
4796
- padding: 8px 12px;
4797
- border: 1px solid var(--border);
4798
- border-radius: 6px;
4799
- transition: border-color 0.15s;
4800
- }
4801
- .loop-exec-item:hover {
4802
- border-color: rgba(59,130,246,0.2);
4803
- }
4804
- .loop-exec-item-left {
4805
- display: flex;
4806
- align-items: center;
4807
- gap: 10px;
4808
- flex: 1;
4809
- min-width: 0;
4810
- font-size: 0.82rem;
4811
- }
4812
- .loop-exec-item-right {
4813
- flex-shrink: 0;
4814
- }
4815
- .loop-exec-status-icon {
4816
- font-size: 0.9rem;
4817
- width: 18px;
4818
- text-align: center;
4819
- flex-shrink: 0;
4820
- }
4821
- .loop-exec-status-running {
4822
- color: var(--accent);
4823
- animation: loop-spin 1s linear infinite;
4824
- }
4825
- @keyframes loop-spin {
4826
- from { transform: rotate(0deg); }
4827
- to { transform: rotate(360deg); }
4828
- }
4829
- .loop-exec-status-success {
4830
- color: #10B981;
4831
- }
4832
- .loop-exec-status-error {
4833
- color: var(--error);
4834
- }
4835
- .loop-exec-status-cancelled {
4836
- color: var(--text-secondary);
4837
- }
4838
- .loop-exec-time {
4839
- color: var(--text-primary);
4840
- font-weight: 500;
4841
- white-space: nowrap;
4842
- }
4843
- .loop-exec-running-label {
4844
- color: var(--accent);
4845
- font-weight: 500;
4846
- font-size: 0.78rem;
4847
- }
4848
- .loop-exec-duration {
4849
- color: var(--text-secondary);
4850
- white-space: nowrap;
4851
- }
4852
- .loop-exec-error-text {
4853
- color: var(--error);
4854
- font-size: 0.75rem;
4855
- overflow: hidden;
4856
- text-overflow: ellipsis;
4857
- white-space: nowrap;
4858
- }
4859
- .loop-exec-trigger-badge {
4860
- font-size: 0.68rem;
4861
- padding: 1px 6px;
4862
- border-radius: 8px;
4863
- background: rgba(139,92,246,0.15);
4864
- color: #8B5CF6;
4865
- text-transform: uppercase;
4866
- letter-spacing: 0.03em;
4867
- }
4868
-
4869
- /* ── Execution messages ── */
4870
- .loop-exec-messages {
4871
- max-height: calc(100vh - 200px);
4872
- overflow-y: auto;
4873
- }
4874
-
4875
- /* ── Running Loop notification banner ── */
4876
- .loop-running-banner {
4877
- position: fixed;
4878
- bottom: 80px;
4879
- left: 50%;
4880
- transform: translateX(-50%);
4881
- display: flex;
4882
- align-items: center;
4883
- gap: 10px;
4884
- padding: 8px 16px;
4885
- background: var(--bg-secondary);
4886
- border: 1px solid var(--accent);
4887
- border-radius: 20px;
4888
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
4889
- z-index: 100;
4890
- font-size: 0.82rem;
4891
- color: var(--text-primary);
4892
- }
4893
- .loop-running-banner-dot {
4894
- width: 8px;
4895
- height: 8px;
4896
- border-radius: 50%;
4897
- background: var(--accent);
4898
- animation: loop-pulse 1.5s ease-in-out infinite;
4899
- }
4900
- @keyframes loop-pulse {
4901
- 0%, 100% { opacity: 1; }
4902
- 50% { opacity: 0.3; }
4903
- }
4904
-
4905
- /* ── Modal dialog (generic) ── */
4906
- .modal-overlay {
4907
- position: fixed;
4908
- top: 0; left: 0; right: 0; bottom: 0;
4909
- background: rgba(0, 0, 0, 0.5);
4910
- z-index: 1000;
4911
- display: flex;
4912
- align-items: center;
4913
- justify-content: center;
4914
- }
4915
- .modal-dialog {
4916
- width: 380px;
4917
- max-width: 90vw;
4918
- background: var(--bg-secondary);
4919
- border: 1px solid var(--border);
4920
- border-radius: 12px;
4921
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
4922
- }
4923
- .modal-title {
4924
- padding: 12px 16px;
4925
- font-size: 0.95rem;
4926
- font-weight: 600;
4927
- border-bottom: 1px solid var(--border);
4928
- color: var(--text-primary);
4929
- }
4930
- .modal-body {
4931
- padding: 16px;
4932
- font-size: 0.88rem;
4933
- line-height: 1.5;
4934
- color: var(--text-primary);
4935
- }
4936
- .modal-actions {
4937
- padding: 10px 16px;
4938
- display: flex;
4939
- justify-content: flex-end;
4940
- gap: 8px;
4941
- border-top: 1px solid var(--border);
4942
- }
4943
- .modal-confirm-btn {
4944
- padding: 6px 20px;
4945
- background: var(--error);
4946
- color: #fff;
4947
- border: none;
4948
- border-radius: 8px;
4949
- font-size: 0.85rem;
4950
- font-weight: 600;
4951
- cursor: pointer;
4952
- transition: background 0.15s;
4953
- }
4954
- .modal-confirm-btn:hover {
4955
- background: #c04444;
4956
- }
4957
- .modal-cancel-btn {
4958
- padding: 6px 20px;
4959
- background: transparent;
4960
- color: var(--text-primary);
4961
- border: 1px solid var(--border);
4962
- border-radius: 8px;
4963
- font-size: 0.85rem;
4964
- cursor: pointer;
4965
- transition: border-color 0.15s;
4966
- }
4967
- .modal-cancel-btn:hover {
4968
- border-color: var(--text-primary);
4969
- }
4970
-
4971
- /* ── Loop error banner ── */
4972
- .loop-error-banner {
4973
- display: flex;
4974
- align-items: center;
4975
- gap: 8px;
4976
- margin-top: 12px;
4977
- padding: 10px 14px;
4978
- background: rgba(239, 68, 68, 0.1);
4979
- border: 1px solid rgba(239, 68, 68, 0.3);
4980
- border-radius: 8px;
4981
- color: var(--error);
4982
- font-size: 0.84rem;
4983
- cursor: pointer;
4984
- transition: background 0.15s;
4985
- }
4986
- .loop-error-banner:hover {
4987
- background: rgba(239, 68, 68, 0.15);
4988
- }
4989
- .loop-error-icon {
4990
- flex-shrink: 0;
4991
- font-size: 1rem;
4992
- }
4993
- .loop-error-text {
4994
- flex: 1;
4995
- min-width: 0;
4996
- overflow-wrap: anywhere;
4997
- }
4998
- .loop-error-dismiss {
4999
- flex-shrink: 0;
5000
- opacity: 0.6;
5001
- font-size: 0.8rem;
5002
- }
5003
- .loop-error-dismiss:hover {
5004
- opacity: 1;
5005
- }
5006
-
5007
- /* ── Load more executions ── */
5008
- .loop-load-more {
5009
- display: flex;
5010
- justify-content: center;
5011
- padding: 12px 0 4px;
5012
- }