obsidian-agent-fleet 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3911 @@
1
+ /* ═══════════════════════════════════════════════════════
2
+ Agent Fleet Dashboard — Obsidian Plugin Styles
3
+ Uses af- prefix to avoid conflicts.
4
+ Catppuccin-inspired palette with Obsidian variable fallbacks.
5
+ ═══════════════════════════════════════════════════════ */
6
+
7
+ /* ─── Custom Properties ─── */
8
+ .af-root {
9
+ --af-bg-primary: var(--background-primary);
10
+ --af-bg-secondary: var(--background-secondary);
11
+ --af-bg-tertiary: var(--background-secondary-alt, var(--background-secondary));
12
+ --af-bg-card: var(--background-primary);
13
+ --af-bg-card-hover: var(--background-modifier-hover);
14
+ --af-bg-surface: var(--background-modifier-form-field);
15
+ --af-bg-input: var(--background-secondary);
16
+ --af-border: var(--background-modifier-border);
17
+ --af-border-hover: var(--background-modifier-border-hover, var(--background-modifier-border));
18
+ --af-text-primary: var(--text-normal);
19
+ --af-text-secondary: var(--text-muted);
20
+ --af-text-muted: var(--text-faint);
21
+ --af-text-faint: var(--text-faint);
22
+ --af-accent: var(--interactive-accent);
23
+ --af-accent-hover: var(--interactive-accent-hover, var(--interactive-accent));
24
+ --af-accent-bg: rgba(var(--interactive-accent-rgb, 137, 180, 250), 0.1);
25
+
26
+ /* Semantic colors */
27
+ --af-green: #a6e3a1;
28
+ --af-green-bg: rgba(166, 227, 161, 0.1);
29
+ --af-yellow: #f9e2af;
30
+ --af-yellow-bg: rgba(249, 226, 175, 0.1);
31
+ --af-red: #f38ba8;
32
+ --af-red-bg: rgba(243, 139, 168, 0.1);
33
+ --af-blue: #89b4fa;
34
+ --af-blue-bg: rgba(137, 180, 250, 0.1);
35
+ --af-purple: #cba6f7;
36
+ --af-purple-bg: rgba(203, 166, 247, 0.1);
37
+ --af-orange: #fab387;
38
+ --af-orange-bg: rgba(250, 179, 135, 0.1);
39
+
40
+ --af-radius-sm: 6px;
41
+ --af-radius-md: 10px;
42
+ --af-radius-lg: 14px;
43
+ --af-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.15);
44
+ --af-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15);
45
+ --af-transition: 150ms ease;
46
+ }
47
+
48
+ /* ─── Root & Layout ─── */
49
+ .af-root {
50
+ height: 100%;
51
+ overflow: hidden;
52
+ font-size: 13px;
53
+ line-height: 1.5;
54
+ }
55
+
56
+ .af-app {
57
+ display: grid;
58
+ grid-template-columns: 1fr;
59
+ height: 100%;
60
+ position: relative;
61
+ }
62
+
63
+ /* ─── Sidebar (Left Panel) ─── */
64
+ .af-sidebar {
65
+ padding: 0;
66
+ font-size: 13px;
67
+ }
68
+
69
+ .af-sidebar-section {
70
+ padding: 8px 0;
71
+ border-bottom: 1px solid var(--background-modifier-border);
72
+ }
73
+
74
+ .af-sidebar-section:last-child {
75
+ border-bottom: none;
76
+ }
77
+
78
+ .af-sidebar-section-header {
79
+ padding: 8px 16px 6px;
80
+ font-size: 10px;
81
+ font-weight: 700;
82
+ letter-spacing: 0.8px;
83
+ color: var(--text-faint);
84
+ text-transform: uppercase;
85
+ }
86
+
87
+ .af-sidebar-nav-item {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 10px;
91
+ padding: 6px 16px;
92
+ cursor: pointer;
93
+ transition: background 150ms ease;
94
+ border-radius: 4px;
95
+ margin: 1px 6px;
96
+ }
97
+
98
+ .af-sidebar-nav-item:hover {
99
+ background: var(--background-modifier-hover);
100
+ }
101
+
102
+ .af-sidebar-nav-icon {
103
+ display: flex;
104
+ align-items: center;
105
+ color: var(--text-muted);
106
+ flex-shrink: 0;
107
+ }
108
+
109
+ .af-sidebar-nav-icon svg {
110
+ width: 16px;
111
+ height: 16px;
112
+ }
113
+
114
+ .af-sidebar-nav-label {
115
+ flex: 1;
116
+ font-size: 13px;
117
+ }
118
+
119
+ .af-sidebar-badge {
120
+ background: var(--interactive-accent);
121
+ color: var(--text-on-accent, white);
122
+ padding: 0px 6px;
123
+ border-radius: 10px;
124
+ font-size: 10px;
125
+ font-weight: 600;
126
+ min-width: 18px;
127
+ text-align: center;
128
+ }
129
+
130
+ .af-sidebar-empty {
131
+ padding: 10px 16px;
132
+ color: var(--text-faint);
133
+ font-size: 12px;
134
+ font-style: italic;
135
+ }
136
+
137
+ .af-sidebar-agent-item {
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 10px;
141
+ padding: 5px 16px;
142
+ cursor: pointer;
143
+ transition: background 150ms ease;
144
+ border-radius: 4px;
145
+ margin: 1px 6px;
146
+ }
147
+
148
+ .af-sidebar-agent-item:hover {
149
+ background: var(--background-modifier-hover);
150
+ }
151
+
152
+ .af-sidebar-agent-dot {
153
+ width: 8px;
154
+ height: 8px;
155
+ border-radius: 50%;
156
+ flex-shrink: 0;
157
+ }
158
+
159
+ .af-sidebar-agent-dot.idle { background: var(--af-green, #a6e3a1); }
160
+ .af-sidebar-agent-dot.running { background: var(--af-yellow, #f9e2af); animation: af-pulse 2s ease-in-out infinite; }
161
+ .af-sidebar-agent-dot.error { background: var(--af-red, #f38ba8); }
162
+ .af-sidebar-agent-dot.pending { background: var(--af-blue, #89b4fa); }
163
+ .af-sidebar-agent-dot.disabled { background: var(--text-faint); }
164
+
165
+ .af-sidebar-agent-name {
166
+ font-size: 12px;
167
+ overflow: hidden;
168
+ text-overflow: ellipsis;
169
+ white-space: nowrap;
170
+ }
171
+
172
+ .af-sidebar-action-item {
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 10px;
176
+ padding: 5px 16px;
177
+ cursor: pointer;
178
+ transition: background 150ms ease;
179
+ color: var(--text-muted);
180
+ border-radius: 4px;
181
+ margin: 1px 6px;
182
+ font-size: 12px;
183
+ }
184
+
185
+ .af-sidebar-action-item:hover {
186
+ background: var(--background-modifier-hover);
187
+ color: var(--interactive-accent);
188
+ }
189
+
190
+ .af-sidebar-action-icon {
191
+ display: flex;
192
+ align-items: center;
193
+ }
194
+
195
+ .af-sidebar-action-icon svg {
196
+ width: 14px;
197
+ height: 14px;
198
+ }
199
+
200
+ /* ─── Main Content ─── */
201
+ .af-main-content {
202
+ display: flex;
203
+ flex-direction: column;
204
+ overflow: hidden;
205
+ }
206
+
207
+ /* ─── Top Bar ─── */
208
+ .af-top-bar {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: 12px;
212
+ padding: 10px 20px;
213
+ background: var(--af-bg-secondary);
214
+ border-bottom: 1px solid var(--af-border);
215
+ min-height: 46px;
216
+ }
217
+
218
+ .af-top-bar-title {
219
+ font-weight: 600;
220
+ font-size: 14px;
221
+ display: flex;
222
+ align-items: center;
223
+ gap: 8px;
224
+ }
225
+
226
+ .af-top-bar-icon svg {
227
+ width: 18px;
228
+ height: 18px;
229
+ }
230
+
231
+ .af-breadcrumb {
232
+ color: var(--af-text-muted);
233
+ font-size: 12px;
234
+ display: flex;
235
+ gap: 6px;
236
+ align-items: center;
237
+ }
238
+
239
+ .af-breadcrumb-sep {
240
+ display: flex;
241
+ align-items: center;
242
+ color: var(--af-text-faint);
243
+ }
244
+
245
+ .af-breadcrumb-sep svg {
246
+ width: 14px;
247
+ height: 14px;
248
+ }
249
+
250
+ .af-top-bar-spacer {
251
+ flex: 1;
252
+ }
253
+
254
+ /* ─── Search ─── */
255
+ .af-search-wrap {
256
+ position: relative;
257
+ display: flex;
258
+ align-items: center;
259
+ gap: 8px;
260
+ border: 1px solid var(--af-border);
261
+ border-radius: var(--af-radius-sm);
262
+ background: var(--af-bg-input);
263
+ padding: 0 10px;
264
+ width: 280px;
265
+ transition: width var(--af-transition), border-color var(--af-transition);
266
+ }
267
+
268
+ .af-search-wrap:focus-within {
269
+ width: 340px;
270
+ border-color: var(--af-accent);
271
+ }
272
+
273
+ .af-search-icon {
274
+ display: flex;
275
+ align-items: center;
276
+ color: var(--af-text-muted);
277
+ flex-shrink: 0;
278
+ }
279
+
280
+ .af-search-icon svg {
281
+ width: 14px;
282
+ height: 14px;
283
+ }
284
+
285
+ .af-search-input {
286
+ padding: 6px 0;
287
+ font-size: 12px;
288
+ border: none !important;
289
+ background: none !important;
290
+ color: var(--af-text-primary);
291
+ flex: 1;
292
+ min-width: 0;
293
+ outline: none !important;
294
+ box-shadow: none !important;
295
+ }
296
+
297
+ .af-search-results {
298
+ position: absolute;
299
+ top: 100%;
300
+ right: 0;
301
+ width: 320px;
302
+ max-height: 360px;
303
+ overflow-y: auto;
304
+ background: var(--af-bg-card);
305
+ border: 1px solid var(--af-border);
306
+ border-radius: var(--af-radius-md);
307
+ box-shadow: var(--af-shadow-md);
308
+ z-index: 50;
309
+ margin-top: 4px;
310
+ }
311
+
312
+ .af-search-result-item {
313
+ display: flex;
314
+ align-items: center;
315
+ gap: 8px;
316
+ padding: 8px 12px;
317
+ cursor: pointer;
318
+ font-size: 12px;
319
+ transition: background var(--af-transition);
320
+ }
321
+
322
+ .af-search-result-item:hover {
323
+ background: var(--af-bg-card-hover);
324
+ }
325
+
326
+ .af-search-result-icon {
327
+ display: flex;
328
+ align-items: center;
329
+ color: var(--af-text-muted);
330
+ }
331
+
332
+ .af-search-result-icon svg {
333
+ width: 14px;
334
+ height: 14px;
335
+ }
336
+
337
+ /* ─── Status Pills ─── */
338
+ .af-status-pills {
339
+ display: flex;
340
+ gap: 6px;
341
+ }
342
+
343
+ .af-pill {
344
+ display: inline-flex;
345
+ align-items: center;
346
+ gap: 5px;
347
+ padding: 3px 10px;
348
+ border-radius: 20px;
349
+ font-size: 11px;
350
+ font-weight: 500;
351
+ }
352
+
353
+ .af-pill.green { background: var(--af-green-bg); color: var(--af-green); }
354
+ .af-pill.yellow { background: var(--af-yellow-bg); color: var(--af-yellow); }
355
+ .af-pill.red { background: var(--af-red-bg); color: var(--af-red); }
356
+ .af-pill.blue { background: var(--af-blue-bg); color: var(--af-blue); }
357
+
358
+ .af-dot {
359
+ width: 6px;
360
+ height: 6px;
361
+ border-radius: 50%;
362
+ background: currentColor;
363
+ display: inline-block;
364
+ }
365
+
366
+ .af-dot.pulse,
367
+ .pulse {
368
+ animation: af-pulse 2s ease-in-out infinite;
369
+ }
370
+
371
+ @keyframes af-pulse {
372
+ 0%, 100% { opacity: 1; }
373
+ 50% { opacity: 0.3; }
374
+ }
375
+
376
+ /* ─── Tab Bar ─── */
377
+ .af-tab-bar {
378
+ display: flex;
379
+ border-bottom: 1px solid var(--af-border);
380
+ padding: 0 16px;
381
+ gap: 2px;
382
+ overflow-x: auto;
383
+ }
384
+
385
+ .af-tab-item {
386
+ padding: 8px 14px;
387
+ font-size: 12px;
388
+ font-weight: 500;
389
+ color: var(--af-text-muted);
390
+ transition: color 0.15s ease;
391
+ cursor: pointer;
392
+ -webkit-appearance: none;
393
+ appearance: none;
394
+ background: none !important;
395
+ background-color: transparent !important;
396
+ border: none !important;
397
+ border-bottom: 2px solid transparent !important;
398
+ border-radius: 0 !important;
399
+ box-shadow: none !important;
400
+ outline: none !important;
401
+ margin: 0;
402
+ white-space: nowrap;
403
+ display: inline-flex;
404
+ align-items: center;
405
+ gap: 6px;
406
+ }
407
+
408
+ .af-tab-item:hover {
409
+ color: var(--af-text-secondary);
410
+ }
411
+
412
+ .af-tab-item.active {
413
+ color: var(--af-accent);
414
+ border-bottom-color: var(--af-accent) !important;
415
+ font-weight: 600;
416
+ }
417
+
418
+ .af-tab-item.active .af-tab-icon {
419
+ color: var(--af-accent);
420
+ }
421
+
422
+ .af-tab-icon {
423
+ display: flex;
424
+ align-items: center;
425
+ }
426
+
427
+ .af-tab-icon svg {
428
+ width: 14px;
429
+ height: 14px;
430
+ }
431
+
432
+ .af-badge {
433
+ background: var(--af-accent-bg);
434
+ color: var(--af-accent);
435
+ padding: 1px 6px;
436
+ border-radius: 10px;
437
+ font-size: 10px;
438
+ font-weight: 600;
439
+ }
440
+
441
+ .af-badge-warn {
442
+ background: var(--af-orange-bg);
443
+ color: var(--af-orange);
444
+ }
445
+
446
+ /* ─── Page Container ─── */
447
+ .af-page {
448
+ flex: 1;
449
+ overflow: auto;
450
+ }
451
+
452
+ /* ─── Dashboard Page ─── */
453
+ .af-dashboard {
454
+ padding: 20px;
455
+ }
456
+
457
+ .af-dash-grid {
458
+ display: grid;
459
+ grid-template-columns: repeat(4, 1fr);
460
+ gap: 14px;
461
+ margin-bottom: 20px;
462
+ }
463
+
464
+ /* ─── Charts Row ─── */
465
+ .af-charts-row {
466
+ display: grid;
467
+ grid-template-columns: 1fr 200px;
468
+ gap: 14px;
469
+ margin-bottom: 20px;
470
+ }
471
+
472
+ .af-chart-section {
473
+ min-height: 0;
474
+ }
475
+
476
+ .af-chart-body {
477
+ padding: 16px;
478
+ }
479
+
480
+ .af-chart-body-center {
481
+ display: flex;
482
+ align-items: center;
483
+ justify-content: center;
484
+ }
485
+
486
+ .af-chart-bar,
487
+ .af-chart-donut {
488
+ display: block;
489
+ }
490
+
491
+ /* ─── Streaming Output Cards ─── */
492
+ .af-streaming-section {
493
+ margin-bottom: 20px;
494
+ }
495
+
496
+ .af-streaming-card {
497
+ background: var(--af-bg-card);
498
+ border: 1px solid var(--af-yellow-bg);
499
+ border-left: 3px solid var(--af-yellow);
500
+ border-radius: var(--af-radius-md);
501
+ margin-top: 10px;
502
+ overflow: hidden;
503
+ }
504
+
505
+ .af-streaming-card-header {
506
+ display: flex;
507
+ align-items: center;
508
+ gap: 8px;
509
+ padding: 10px 14px;
510
+ font-weight: 600;
511
+ font-size: 12px;
512
+ border-bottom: 1px solid var(--af-border);
513
+ }
514
+
515
+ .af-streaming-card-agent {
516
+ font-weight: 600;
517
+ }
518
+
519
+ .af-streaming-card-task {
520
+ color: var(--af-text-secondary);
521
+ font-weight: 400;
522
+ }
523
+
524
+ .af-streaming-output {
525
+ padding: 10px 14px;
526
+ font-family: var(--font-monospace);
527
+ font-size: 11px;
528
+ line-height: 1.5;
529
+ color: var(--af-text-secondary);
530
+ height: 72px; /* ~4 lines at 11px * 1.5 line-height */
531
+ overflow-y: auto;
532
+ white-space: pre-wrap;
533
+ background: var(--af-bg-primary);
534
+ }
535
+
536
+ /* ─── Stat Cards ─── */
537
+ .af-stat-card {
538
+ background: var(--af-bg-card);
539
+ border: 1px solid var(--af-border);
540
+ border-radius: var(--af-radius-lg);
541
+ padding: 18px;
542
+ transition: all var(--af-transition);
543
+ }
544
+
545
+ .af-stat-card:hover {
546
+ border-color: var(--af-border-hover);
547
+ }
548
+
549
+ .af-stat-label {
550
+ color: var(--af-text-muted);
551
+ font-size: 11px;
552
+ text-transform: uppercase;
553
+ letter-spacing: 0.5px;
554
+ margin-bottom: 8px;
555
+ display: flex;
556
+ align-items: center;
557
+ gap: 6px;
558
+ }
559
+
560
+ .af-stat-icon svg {
561
+ width: 14px;
562
+ height: 14px;
563
+ }
564
+
565
+ .af-stat-value {
566
+ font-size: 28px;
567
+ font-weight: 700;
568
+ }
569
+
570
+ .af-stat-value-suffix {
571
+ color: var(--af-text-faint);
572
+ font-size: 14px;
573
+ margin-left: 4px;
574
+ }
575
+
576
+ .af-stat-sub {
577
+ color: var(--af-text-muted);
578
+ font-size: 11px;
579
+ margin-top: 4px;
580
+ }
581
+
582
+ /* ─── Dashboard Split ─── */
583
+ .af-dash-split {
584
+ display: grid;
585
+ grid-template-columns: 1fr 380px;
586
+ gap: 14px;
587
+ }
588
+
589
+ /* ─── Section Card ─── */
590
+ .af-section-card {
591
+ background: var(--af-bg-card);
592
+ border: 1px solid var(--af-border);
593
+ border-radius: var(--af-radius-lg);
594
+ overflow: hidden;
595
+ margin-bottom: 14px;
596
+ }
597
+
598
+ .af-section-header {
599
+ display: flex;
600
+ align-items: center;
601
+ justify-content: space-between;
602
+ padding: 14px 18px;
603
+ border-bottom: 1px solid var(--af-border);
604
+ }
605
+
606
+ .af-section-title {
607
+ font-weight: 600;
608
+ font-size: 13px;
609
+ display: flex;
610
+ align-items: center;
611
+ gap: 8px;
612
+ }
613
+
614
+ .af-section-title svg {
615
+ width: 16px;
616
+ height: 16px;
617
+ }
618
+
619
+ .af-section-actions {
620
+ display: flex;
621
+ gap: 6px;
622
+ }
623
+
624
+ /* ─── Icons ─── */
625
+ .af-icon svg {
626
+ width: 16px;
627
+ height: 16px;
628
+ }
629
+
630
+ .af-meta-icon {
631
+ display: inline-flex;
632
+ align-items: center;
633
+ vertical-align: middle;
634
+ }
635
+
636
+ .af-meta-icon svg {
637
+ width: 12px;
638
+ height: 12px;
639
+ }
640
+
641
+ .af-btn-icon {
642
+ display: inline-flex;
643
+ align-items: center;
644
+ vertical-align: middle;
645
+ }
646
+
647
+ .af-btn-icon svg {
648
+ width: 12px;
649
+ height: 12px;
650
+ }
651
+
652
+ .af-icon-back {
653
+ transform: rotate(180deg);
654
+ }
655
+
656
+ /* ─── Buttons ─── */
657
+ /* ─── Outlined Buttons ─── */
658
+ .af-btn-sm {
659
+ padding: 5px 12px;
660
+ border-radius: var(--af-radius-sm);
661
+ font-size: 11px;
662
+ font-weight: 500;
663
+ cursor: pointer;
664
+ display: inline-flex;
665
+ align-items: center;
666
+ gap: 5px;
667
+ transition: all var(--af-transition);
668
+
669
+ /* Secondary (default): white/light stroke + text */
670
+ -webkit-appearance: none;
671
+ appearance: none;
672
+ background: none !important;
673
+ background-color: transparent !important;
674
+ color: var(--af-text-secondary);
675
+ border: 1px solid var(--af-border);
676
+ box-shadow: none !important;
677
+ }
678
+
679
+ .af-btn-sm:hover {
680
+ color: var(--af-text-primary);
681
+ border-color: var(--af-text-muted);
682
+ }
683
+
684
+ .af-btn-sm .af-btn-icon {
685
+ display: inline-flex;
686
+ align-items: center;
687
+ }
688
+
689
+ .af-btn-sm .af-btn-icon svg {
690
+ width: 13px;
691
+ height: 13px;
692
+ }
693
+
694
+ /* Primary: blue stroke + icon + label */
695
+ .af-btn-sm.primary {
696
+ color: var(--af-accent);
697
+ border-color: var(--af-accent);
698
+ }
699
+
700
+ .af-btn-sm.primary:hover {
701
+ color: var(--af-accent-hover);
702
+ border-color: var(--af-accent-hover);
703
+ background: var(--af-accent-bg) !important;
704
+ }
705
+
706
+ .af-btn-sm.primary .af-btn-icon {
707
+ color: var(--af-accent);
708
+ }
709
+
710
+ /* Danger: red stroke + icon + label */
711
+ .af-btn-sm.danger {
712
+ color: var(--af-red);
713
+ border-color: rgba(243, 139, 168, 0.4);
714
+ }
715
+
716
+ .af-btn-sm.danger:hover {
717
+ border-color: var(--af-red);
718
+ background: var(--af-red-bg) !important;
719
+ }
720
+
721
+ .af-btn-sm.danger .af-btn-icon {
722
+ color: var(--af-red);
723
+ }
724
+
725
+ /* ─── Confirm Delete Modal ─── */
726
+ .af-confirm-delete-modal {
727
+ max-width: 480px;
728
+ }
729
+
730
+ .af-delete-header {
731
+ display: flex;
732
+ align-items: center;
733
+ gap: 10px;
734
+ margin-bottom: 16px;
735
+ }
736
+
737
+ .af-delete-header h3 {
738
+ margin: 0;
739
+ font-size: 16px;
740
+ }
741
+
742
+ .af-delete-header-icon {
743
+ color: var(--af-red);
744
+ display: flex;
745
+ align-items: center;
746
+ }
747
+
748
+ .af-delete-header-icon svg {
749
+ width: 22px;
750
+ height: 22px;
751
+ }
752
+
753
+ .af-delete-summary {
754
+ margin-bottom: 14px;
755
+ font-size: 13px;
756
+ color: var(--af-text-secondary);
757
+ }
758
+
759
+ .af-delete-impact-list {
760
+ margin: 8px 0 0 20px;
761
+ padding: 0;
762
+ }
763
+
764
+ .af-delete-impact-list li {
765
+ margin-bottom: 4px;
766
+ font-size: 13px;
767
+ }
768
+
769
+ .af-delete-preserved {
770
+ color: var(--af-text-muted);
771
+ font-style: italic;
772
+ }
773
+
774
+ .af-delete-note {
775
+ font-size: 12px;
776
+ color: var(--af-text-muted);
777
+ padding: 10px 12px;
778
+ background: var(--af-bg-surface);
779
+ border-radius: var(--af-radius-sm);
780
+ margin-bottom: 16px;
781
+ }
782
+
783
+ .af-delete-actions {
784
+ display: flex;
785
+ justify-content: flex-end;
786
+ gap: 8px;
787
+ margin-top: 16px;
788
+ }
789
+
790
+ .af-delete-confirm-btn {
791
+ background: var(--af-red) !important;
792
+ color: white !important;
793
+ border: none !important;
794
+ padding: 6px 16px;
795
+ border-radius: var(--af-radius-sm);
796
+ font-weight: 600;
797
+ font-size: 13px;
798
+ cursor: pointer;
799
+ display: flex;
800
+ align-items: center;
801
+ gap: 6px;
802
+ }
803
+
804
+ .af-delete-confirm-btn:hover {
805
+ opacity: 0.9;
806
+ }
807
+
808
+ .af-delete-btn-icon {
809
+ display: flex;
810
+ align-items: center;
811
+ order: -1;
812
+ }
813
+
814
+ .af-delete-btn-icon svg {
815
+ width: 14px;
816
+ height: 14px;
817
+ }
818
+
819
+ .af-btn-xs {
820
+ padding: 3px 10px;
821
+ font-size: 10px;
822
+ }
823
+
824
+ /* ─── Activity Timeline ─── */
825
+ .af-timeline {
826
+ padding: 0;
827
+ }
828
+
829
+ .af-timeline-item {
830
+ display: flex;
831
+ gap: 12px;
832
+ padding: 12px 18px;
833
+ border-bottom: 1px solid var(--af-border);
834
+ transition: background var(--af-transition);
835
+ cursor: pointer;
836
+ }
837
+
838
+ .af-timeline-item:last-child {
839
+ border-bottom: none;
840
+ }
841
+
842
+ .af-timeline-item:hover {
843
+ background: var(--af-bg-card-hover);
844
+ }
845
+
846
+ .af-tl-icon {
847
+ width: 32px;
848
+ height: 32px;
849
+ border-radius: var(--af-radius-sm);
850
+ display: flex;
851
+ align-items: center;
852
+ justify-content: center;
853
+ flex-shrink: 0;
854
+ }
855
+
856
+ .af-tl-icon svg {
857
+ width: 16px;
858
+ height: 16px;
859
+ }
860
+
861
+ .af-tl-icon.success { background: var(--af-green-bg); color: var(--af-green); }
862
+ .af-tl-icon.error { background: var(--af-red-bg); color: var(--af-red); }
863
+ .af-tl-icon.running { background: var(--af-yellow-bg); color: var(--af-yellow); }
864
+ .af-tl-icon.warning { background: var(--af-yellow-bg); color: var(--af-yellow); }
865
+ .af-tl-icon.pending { background: var(--af-blue-bg); color: var(--af-blue); }
866
+
867
+ .af-tl-body {
868
+ flex: 1;
869
+ min-width: 0;
870
+ }
871
+
872
+ .af-tl-title {
873
+ font-weight: 500;
874
+ font-size: 12px;
875
+ display: flex;
876
+ gap: 6px;
877
+ align-items: center;
878
+ }
879
+
880
+ .af-agent-tag {
881
+ color: var(--af-accent);
882
+ }
883
+
884
+ .af-tl-desc {
885
+ color: var(--af-text-muted);
886
+ font-size: 11px;
887
+ margin-top: 2px;
888
+ overflow: hidden;
889
+ text-overflow: ellipsis;
890
+ white-space: nowrap;
891
+ }
892
+
893
+ .af-tl-meta {
894
+ color: var(--af-text-faint);
895
+ font-size: 10px;
896
+ margin-top: 3px;
897
+ display: flex;
898
+ gap: 10px;
899
+ }
900
+
901
+ /* ─── Agent Mini List (Dashboard sidebar) ─── */
902
+ .af-agent-mini-list {
903
+ padding: 6px 0;
904
+ }
905
+
906
+ .af-agent-mini {
907
+ display: flex;
908
+ align-items: center;
909
+ gap: 10px;
910
+ padding: 10px 18px;
911
+ border-bottom: 1px solid var(--af-border);
912
+ cursor: pointer;
913
+ transition: background var(--af-transition);
914
+ }
915
+
916
+ .af-agent-mini:last-child {
917
+ border-bottom: none;
918
+ }
919
+
920
+ .af-agent-mini:hover {
921
+ background: var(--af-bg-card-hover);
922
+ }
923
+
924
+ .af-agent-avatar {
925
+ width: 34px;
926
+ height: 34px;
927
+ border-radius: var(--af-radius-md);
928
+ display: flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ font-size: 13px;
932
+ font-weight: 700;
933
+ flex-shrink: 0;
934
+ }
935
+
936
+ .af-agent-avatar svg {
937
+ width: 16px;
938
+ height: 16px;
939
+ }
940
+
941
+ .af-agent-avatar.idle { background: var(--af-green-bg); color: var(--af-green); }
942
+ .af-agent-avatar.running { background: var(--af-yellow-bg); color: var(--af-yellow); }
943
+ .af-agent-avatar.error { background: var(--af-red-bg); color: var(--af-red); }
944
+ .af-agent-avatar.pending { background: var(--af-blue-bg); color: var(--af-blue); }
945
+ .af-agent-avatar.disabled { background: var(--af-bg-surface); color: var(--af-text-faint); }
946
+
947
+ .af-agent-info {
948
+ flex: 1;
949
+ min-width: 0;
950
+ }
951
+
952
+ .af-agent-name {
953
+ font-weight: 600;
954
+ font-size: 12px;
955
+ }
956
+
957
+ .af-agent-desc {
958
+ color: var(--af-text-muted);
959
+ font-size: 11px;
960
+ overflow: hidden;
961
+ text-overflow: ellipsis;
962
+ white-space: nowrap;
963
+ }
964
+
965
+ .af-agent-status-dot {
966
+ width: 8px;
967
+ height: 8px;
968
+ border-radius: 50%;
969
+ flex-shrink: 0;
970
+ }
971
+
972
+ .af-agent-status-dot.idle { background: var(--af-green); }
973
+ .af-agent-status-dot.running { background: var(--af-yellow); animation: af-pulse 2s ease-in-out infinite; }
974
+ .af-agent-status-dot.error { background: var(--af-red); }
975
+ .af-agent-status-dot.pending { background: var(--af-blue); }
976
+ .af-agent-status-dot.disabled { background: var(--af-text-faint); }
977
+
978
+ /* ─── Quick Run ─── */
979
+ .af-quick-run {
980
+ padding: 14px 18px;
981
+ border-top: 1px solid var(--af-border);
982
+ }
983
+
984
+ .af-quick-run-label {
985
+ font-weight: 600;
986
+ font-size: 11px;
987
+ color: var(--af-text-muted);
988
+ text-transform: uppercase;
989
+ letter-spacing: 0.5px;
990
+ margin-bottom: 8px;
991
+ display: flex;
992
+ align-items: center;
993
+ gap: 4px;
994
+ }
995
+
996
+ .af-quick-run-row {
997
+ display: flex;
998
+ gap: 8px;
999
+ }
1000
+
1001
+ .af-select {
1002
+ flex: 1;
1003
+ font-size: 12px;
1004
+ padding: 5px 10px;
1005
+ background: var(--af-bg-input);
1006
+ border: 1px solid var(--af-border);
1007
+ border-radius: var(--af-radius-sm);
1008
+ color: var(--af-text-primary);
1009
+ }
1010
+
1011
+ /* ─── Approval Banner ─── */
1012
+ .af-approval-banner {
1013
+ background: var(--af-blue-bg);
1014
+ border: 1px solid rgba(137, 180, 250, 0.2);
1015
+ border-radius: var(--af-radius-md);
1016
+ padding: 12px 16px;
1017
+ margin-bottom: 14px;
1018
+ display: flex;
1019
+ align-items: center;
1020
+ gap: 12px;
1021
+ }
1022
+
1023
+ .af-approval-icon {
1024
+ color: var(--af-blue);
1025
+ display: flex;
1026
+ align-items: center;
1027
+ }
1028
+
1029
+ .af-approval-icon svg {
1030
+ width: 20px;
1031
+ height: 20px;
1032
+ }
1033
+
1034
+ .af-approval-text {
1035
+ flex: 1;
1036
+ }
1037
+
1038
+ .af-approval-title {
1039
+ font-weight: 600;
1040
+ font-size: 12px;
1041
+ color: var(--af-blue);
1042
+ }
1043
+
1044
+ .af-approval-desc {
1045
+ font-size: 11px;
1046
+ color: var(--af-text-secondary);
1047
+ }
1048
+
1049
+ .af-approval-actions {
1050
+ display: flex;
1051
+ gap: 6px;
1052
+ }
1053
+
1054
+ .af-btn-approve {
1055
+ padding: 5px 14px;
1056
+ border-radius: var(--af-radius-sm);
1057
+ background: var(--af-green);
1058
+ color: var(--af-bg-tertiary);
1059
+ font-weight: 600;
1060
+ font-size: 11px;
1061
+ cursor: pointer;
1062
+ border: none;
1063
+ display: inline-flex;
1064
+ align-items: center;
1065
+ gap: 4px;
1066
+ }
1067
+
1068
+ .af-btn-reject {
1069
+ padding: 5px 14px;
1070
+ border-radius: var(--af-radius-sm);
1071
+ background: var(--af-red-bg);
1072
+ color: var(--af-red);
1073
+ font-weight: 600;
1074
+ font-size: 11px;
1075
+ border: 1px solid rgba(243, 139, 168, 0.2);
1076
+ cursor: pointer;
1077
+ display: inline-flex;
1078
+ align-items: center;
1079
+ gap: 4px;
1080
+ }
1081
+
1082
+ /* ─── Agents Page ─── */
1083
+ .af-agents-page {
1084
+ padding: 20px;
1085
+ }
1086
+
1087
+ .af-agents-toolbar {
1088
+ display: flex;
1089
+ align-items: center;
1090
+ gap: 10px;
1091
+ margin-bottom: 16px;
1092
+ }
1093
+
1094
+ .af-page-title {
1095
+ font-weight: 600;
1096
+ font-size: 16px;
1097
+ }
1098
+
1099
+ .af-toolbar-spacer {
1100
+ flex: 1;
1101
+ }
1102
+
1103
+ .af-agents-grid {
1104
+ display: grid;
1105
+ grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
1106
+ gap: 14px;
1107
+ }
1108
+
1109
+ /* ─── Agent Card ─── */
1110
+ .af-agent-card {
1111
+ background: var(--af-bg-card);
1112
+ border: 1px solid var(--af-border);
1113
+ border-radius: var(--af-radius-lg);
1114
+ padding: 18px;
1115
+ transition: all var(--af-transition);
1116
+ cursor: pointer;
1117
+ }
1118
+
1119
+ .af-agent-card:hover {
1120
+ border-color: var(--af-border-hover);
1121
+ }
1122
+
1123
+ .af-agent-card.disabled {
1124
+ opacity: 0.6;
1125
+ }
1126
+
1127
+ .af-agent-card-header {
1128
+ display: flex;
1129
+ align-items: flex-start;
1130
+ gap: 12px;
1131
+ margin-bottom: 14px;
1132
+ }
1133
+
1134
+ .af-agent-card-avatar {
1135
+ width: 42px;
1136
+ height: 42px;
1137
+ border-radius: var(--af-radius-md);
1138
+ display: flex;
1139
+ align-items: center;
1140
+ justify-content: center;
1141
+ font-weight: 700;
1142
+ }
1143
+
1144
+ .af-agent-card-avatar svg {
1145
+ width: 20px;
1146
+ height: 20px;
1147
+ }
1148
+
1149
+ .af-agent-card-avatar.idle { background: var(--af-green-bg); color: var(--af-green); }
1150
+ .af-agent-card-avatar.running { background: var(--af-yellow-bg); color: var(--af-yellow); }
1151
+ .af-agent-card-avatar.error { background: var(--af-red-bg); color: var(--af-red); }
1152
+ .af-agent-card-avatar.pending { background: var(--af-blue-bg); color: var(--af-blue); }
1153
+ .af-agent-card-avatar.disabled { background: var(--af-bg-surface); color: var(--af-text-faint); }
1154
+
1155
+ .af-agent-card-titleblock {
1156
+ flex: 1;
1157
+ min-width: 0;
1158
+ }
1159
+
1160
+ .af-agent-card-name {
1161
+ font-weight: 600;
1162
+ font-size: 14px;
1163
+ margin-bottom: 2px;
1164
+ }
1165
+
1166
+ .af-agent-card-desc {
1167
+ color: var(--af-text-secondary);
1168
+ font-size: 12px;
1169
+ overflow: hidden;
1170
+ text-overflow: ellipsis;
1171
+ white-space: nowrap;
1172
+ }
1173
+
1174
+ /* Toggle switch */
1175
+ .af-agent-card-toggle {
1176
+ width: 36px;
1177
+ height: 20px;
1178
+ border-radius: 10px;
1179
+ background: var(--af-border);
1180
+ position: relative;
1181
+ cursor: pointer;
1182
+ transition: background var(--af-transition);
1183
+ flex-shrink: 0;
1184
+ }
1185
+
1186
+ .af-agent-card-toggle.on {
1187
+ background: var(--af-accent);
1188
+ }
1189
+
1190
+ .af-agent-card-toggle::after {
1191
+ content: "";
1192
+ position: absolute;
1193
+ width: 16px;
1194
+ height: 16px;
1195
+ border-radius: 50%;
1196
+ background: white;
1197
+ top: 2px;
1198
+ left: 2px;
1199
+ transition: transform var(--af-transition);
1200
+ }
1201
+
1202
+ .af-agent-card-toggle.on::after {
1203
+ transform: translateX(16px);
1204
+ }
1205
+
1206
+ /* Agent stats */
1207
+ .af-agent-card-stats {
1208
+ display: flex;
1209
+ gap: 16px;
1210
+ margin-bottom: 14px;
1211
+ }
1212
+
1213
+ .af-agent-stat {
1214
+ display: flex;
1215
+ flex-direction: column;
1216
+ }
1217
+
1218
+ .af-agent-stat-value {
1219
+ font-weight: 600;
1220
+ font-size: 16px;
1221
+ }
1222
+
1223
+ .af-agent-stat-label {
1224
+ color: var(--af-text-muted);
1225
+ font-size: 10px;
1226
+ text-transform: uppercase;
1227
+ letter-spacing: 0.3px;
1228
+ }
1229
+
1230
+ /* Skills tags */
1231
+ .af-agent-card-skills {
1232
+ display: flex;
1233
+ flex-wrap: wrap;
1234
+ gap: 4px;
1235
+ margin-bottom: 14px;
1236
+ }
1237
+
1238
+ .af-skill-tag {
1239
+ padding: 2px 8px;
1240
+ border-radius: 4px;
1241
+ font-size: 10px;
1242
+ font-weight: 500;
1243
+ background: var(--af-purple-bg);
1244
+ color: var(--af-purple);
1245
+ }
1246
+
1247
+ /* Agent card footer */
1248
+ .af-agent-card-footer {
1249
+ display: flex;
1250
+ justify-content: space-between;
1251
+ align-items: center;
1252
+ padding-top: 12px;
1253
+ border-top: 1px solid var(--af-border);
1254
+ }
1255
+
1256
+ .af-agent-card-meta {
1257
+ color: var(--af-text-muted);
1258
+ font-size: 11px;
1259
+ }
1260
+
1261
+ .af-agent-card-actions {
1262
+ display: flex;
1263
+ gap: 4px;
1264
+ }
1265
+
1266
+ /* ─── Agent Detail Page ─── */
1267
+ .af-agent-detail-page,
1268
+ .af-task-detail-page {
1269
+ padding: 20px;
1270
+ }
1271
+
1272
+ .af-breadcrumb-link {
1273
+ cursor: pointer;
1274
+ color: var(--af-text-muted);
1275
+ }
1276
+
1277
+ .af-breadcrumb-link:hover {
1278
+ color: var(--af-accent);
1279
+ }
1280
+
1281
+ .af-detail-header {
1282
+ display: flex;
1283
+ align-items: center;
1284
+ justify-content: space-between;
1285
+ margin-bottom: 20px;
1286
+ gap: 16px;
1287
+ }
1288
+
1289
+ .af-detail-header-left {
1290
+ display: flex;
1291
+ align-items: center;
1292
+ gap: 14px;
1293
+ min-width: 0;
1294
+ flex: 1;
1295
+ }
1296
+
1297
+ .af-detail-header-left .af-agent-card-avatar {
1298
+ flex-shrink: 0;
1299
+ }
1300
+
1301
+ .af-detail-header-left > div:last-child {
1302
+ min-width: 0;
1303
+ }
1304
+
1305
+ .af-detail-header-name {
1306
+ font-weight: 700;
1307
+ font-size: 18px;
1308
+ white-space: nowrap;
1309
+ overflow: hidden;
1310
+ text-overflow: ellipsis;
1311
+ }
1312
+
1313
+ .af-detail-header-desc {
1314
+ color: var(--af-text-muted);
1315
+ font-size: 12px;
1316
+ margin-top: 2px;
1317
+ display: -webkit-box;
1318
+ -webkit-line-clamp: 2;
1319
+ -webkit-box-orient: vertical;
1320
+ overflow: hidden;
1321
+ }
1322
+
1323
+ .af-detail-header-actions {
1324
+ display: flex;
1325
+ gap: 6px;
1326
+ }
1327
+
1328
+ .af-detail-tabs {
1329
+ display: flex;
1330
+ border-bottom: 1px solid var(--af-border);
1331
+ margin-bottom: 20px;
1332
+ gap: 0;
1333
+ }
1334
+
1335
+ .af-detail-tab {
1336
+ padding: 8px 16px;
1337
+ font-size: 12px;
1338
+ font-weight: 500;
1339
+ color: var(--af-text-muted);
1340
+ transition: color 0.15s ease;
1341
+ cursor: pointer;
1342
+ -webkit-appearance: none;
1343
+ appearance: none;
1344
+ background: none !important;
1345
+ background-color: transparent !important;
1346
+ border: none !important;
1347
+ border-bottom: 2px solid transparent !important;
1348
+ border-radius: 0 !important;
1349
+ box-shadow: none !important;
1350
+ outline: none !important;
1351
+ margin: 0;
1352
+ display: flex;
1353
+ align-items: center;
1354
+ gap: 6px;
1355
+ }
1356
+
1357
+ .af-detail-tab:hover {
1358
+ color: var(--af-text-secondary);
1359
+ }
1360
+
1361
+ .af-detail-tab.active {
1362
+ color: var(--af-accent);
1363
+ border-bottom-color: var(--af-accent) !important;
1364
+ }
1365
+
1366
+ .af-detail-tab.active .af-tab-icon {
1367
+ color: var(--af-accent);
1368
+ }
1369
+
1370
+ .af-detail-tab-content {
1371
+ min-height: 200px;
1372
+ }
1373
+
1374
+ .af-detail-skills-list {
1375
+ padding: 14px 18px;
1376
+ display: flex;
1377
+ flex-wrap: wrap;
1378
+ gap: 6px;
1379
+ }
1380
+
1381
+ .af-config-form {
1382
+ padding: 14px 18px;
1383
+ }
1384
+
1385
+ .af-config-prompt-section {
1386
+ margin-top: 16px;
1387
+ }
1388
+
1389
+ .af-detail-value-row {
1390
+ display: flex;
1391
+ align-items: center;
1392
+ gap: 8px;
1393
+ }
1394
+
1395
+ .af-run-list-item {
1396
+ display: flex;
1397
+ gap: 12px;
1398
+ padding: 12px 18px;
1399
+ border-bottom: 1px solid var(--af-border);
1400
+ transition: background var(--af-transition);
1401
+ cursor: pointer;
1402
+ }
1403
+
1404
+ .af-run-list-item:hover {
1405
+ background: var(--af-bg-card-hover);
1406
+ }
1407
+
1408
+ /* ─── Approvals Page ─── */
1409
+ .af-approvals-page {
1410
+ padding: 20px;
1411
+ }
1412
+
1413
+ .af-approvals-list {
1414
+ padding: 0;
1415
+ }
1416
+
1417
+ .af-approval-item {
1418
+ display: flex;
1419
+ gap: 12px;
1420
+ padding: 14px 18px;
1421
+ border-bottom: 1px solid var(--af-border);
1422
+ align-items: flex-start;
1423
+ }
1424
+
1425
+ .af-approval-item:last-child {
1426
+ border-bottom: none;
1427
+ }
1428
+
1429
+ .af-approval-item-icon {
1430
+ width: 32px;
1431
+ height: 32px;
1432
+ border-radius: var(--af-radius-sm);
1433
+ display: flex;
1434
+ align-items: center;
1435
+ justify-content: center;
1436
+ flex-shrink: 0;
1437
+ }
1438
+
1439
+ .af-approval-item-icon svg {
1440
+ width: 16px;
1441
+ height: 16px;
1442
+ }
1443
+
1444
+ .af-approval-item-icon.pending { background: var(--af-blue-bg); color: var(--af-blue); }
1445
+ .af-approval-item-icon.approved { background: var(--af-green-bg); color: var(--af-green); }
1446
+ .af-approval-item-icon.rejected { background: var(--af-red-bg); color: var(--af-red); }
1447
+
1448
+ .af-approval-item-body {
1449
+ flex: 1;
1450
+ min-width: 0;
1451
+ }
1452
+
1453
+ .af-approval-item-title {
1454
+ font-weight: 600;
1455
+ font-size: 13px;
1456
+ }
1457
+
1458
+ .af-approval-item-meta {
1459
+ color: var(--af-text-muted);
1460
+ font-size: 11px;
1461
+ margin-top: 2px;
1462
+ }
1463
+
1464
+ .af-approval-item-reason {
1465
+ color: var(--af-text-secondary);
1466
+ font-size: 11px;
1467
+ margin-top: 4px;
1468
+ font-style: italic;
1469
+ }
1470
+
1471
+ .af-approval-item-actions {
1472
+ display: flex;
1473
+ gap: 6px;
1474
+ flex-shrink: 0;
1475
+ align-items: center;
1476
+ }
1477
+
1478
+ /* ─── Kanban Page ─── */
1479
+ .af-kanban-page {
1480
+ padding: 20px;
1481
+ display: flex;
1482
+ flex-direction: column;
1483
+ height: 100%;
1484
+ }
1485
+
1486
+ .af-kanban-toolbar {
1487
+ display: flex;
1488
+ align-items: center;
1489
+ gap: 10px;
1490
+ margin-bottom: 14px;
1491
+ flex-shrink: 0;
1492
+ }
1493
+
1494
+ .af-kanban-board {
1495
+ display: flex;
1496
+ gap: 14px;
1497
+ flex: 1;
1498
+ overflow-x: auto;
1499
+ padding-bottom: 12px;
1500
+ }
1501
+
1502
+ .af-kanban-column {
1503
+ min-width: 260px;
1504
+ max-width: 300px;
1505
+ flex-shrink: 0;
1506
+ background: var(--af-bg-secondary);
1507
+ border: 1px solid var(--af-border);
1508
+ border-radius: var(--af-radius-lg);
1509
+ display: flex;
1510
+ flex-direction: column;
1511
+ max-height: calc(100vh - 200px);
1512
+ transition: border-color var(--af-transition), background var(--af-transition);
1513
+ }
1514
+
1515
+ .af-kanban-running { border-color: rgba(249, 226, 175, 0.3); }
1516
+ .af-kanban-review { border-color: rgba(137, 180, 250, 0.3); }
1517
+ .af-kanban-failed { border-color: rgba(243, 139, 168, 0.15); }
1518
+
1519
+ /* Drag and drop states */
1520
+ .af-kanban-column.af-drag-over {
1521
+ background: var(--af-accent-bg);
1522
+ border-color: var(--af-accent);
1523
+ }
1524
+
1525
+ .af-kanban-card.af-dragging {
1526
+ opacity: 0.4;
1527
+ }
1528
+
1529
+ .af-kanban-card-grip {
1530
+ position: absolute;
1531
+ top: 8px;
1532
+ left: 4px;
1533
+ color: var(--af-text-faint);
1534
+ cursor: grab;
1535
+ opacity: 0;
1536
+ transition: opacity var(--af-transition);
1537
+ }
1538
+
1539
+ .af-kanban-card-grip svg {
1540
+ width: 14px;
1541
+ height: 14px;
1542
+ }
1543
+
1544
+ .af-kanban-card:hover .af-kanban-card-grip {
1545
+ opacity: 0.6;
1546
+ }
1547
+
1548
+ .af-kanban-col-header {
1549
+ display: flex;
1550
+ align-items: center;
1551
+ justify-content: space-between;
1552
+ padding: 12px 14px;
1553
+ border-bottom: 1px solid var(--af-border);
1554
+ flex-shrink: 0;
1555
+ }
1556
+
1557
+ .af-kanban-col-title {
1558
+ font-weight: 600;
1559
+ font-size: 12px;
1560
+ display: flex;
1561
+ align-items: center;
1562
+ gap: 8px;
1563
+ }
1564
+
1565
+ .af-kanban-col-title svg {
1566
+ width: 14px;
1567
+ height: 14px;
1568
+ }
1569
+
1570
+ .af-kanban-col-count {
1571
+ background: var(--af-bg-surface);
1572
+ padding: 1px 7px;
1573
+ border-radius: 10px;
1574
+ font-size: 10px;
1575
+ color: var(--af-text-muted);
1576
+ }
1577
+
1578
+ .af-kanban-col-body {
1579
+ flex: 1;
1580
+ overflow-y: auto;
1581
+ padding: 10px;
1582
+ display: flex;
1583
+ flex-direction: column;
1584
+ gap: 8px;
1585
+ }
1586
+
1587
+ .af-kanban-empty {
1588
+ color: var(--af-text-faint);
1589
+ font-size: 11px;
1590
+ text-align: center;
1591
+ padding: 20px 0;
1592
+ }
1593
+
1594
+ .af-kanban-card {
1595
+ background: var(--af-bg-card);
1596
+ border: 1px solid var(--af-border);
1597
+ border-radius: var(--af-radius-md);
1598
+ padding: 12px;
1599
+ cursor: pointer;
1600
+ transition: all var(--af-transition);
1601
+ position: relative;
1602
+ }
1603
+
1604
+ .af-kanban-card:hover {
1605
+ border-color: var(--af-border-hover);
1606
+ }
1607
+
1608
+ /* Priority left border indicators */
1609
+ .af-kanban-card.af-priority-critical { border-left: 3px solid #ef4444; }
1610
+ .af-kanban-card.af-priority-high { border-left: 3px solid #f59e0b; }
1611
+ .af-kanban-card.af-priority-medium { border-left: 3px solid #3b82f6; }
1612
+ .af-kanban-card.af-priority-low { border-left: 3px solid var(--af-text-secondary); }
1613
+
1614
+ .af-kanban-card-running {
1615
+ border-color: rgba(249, 226, 175, 0.3);
1616
+ }
1617
+
1618
+ .af-kanban-card-failed {
1619
+ border-color: rgba(243, 139, 168, 0.2);
1620
+ }
1621
+
1622
+ .af-kanban-card-cancelled {
1623
+ border-color: var(--af-yellow-bg);
1624
+ }
1625
+
1626
+ .af-kanban-card-header {
1627
+ display: flex;
1628
+ align-items: flex-start;
1629
+ justify-content: space-between;
1630
+ gap: 8px;
1631
+ margin-bottom: 6px;
1632
+ }
1633
+
1634
+ .af-kanban-card-title {
1635
+ font-weight: 500;
1636
+ font-size: 12px;
1637
+ flex: 1;
1638
+ min-width: 0;
1639
+ }
1640
+
1641
+ .af-kanban-card-status {
1642
+ width: 8px;
1643
+ height: 8px;
1644
+ border-radius: 50%;
1645
+ flex-shrink: 0;
1646
+ margin-top: 3px;
1647
+ }
1648
+ .af-kanban-card-status.active { background: var(--af-green); }
1649
+ .af-kanban-card-status.inactive { background: var(--af-text-faint); }
1650
+
1651
+ .af-kanban-card-agent {
1652
+ display: flex;
1653
+ align-items: center;
1654
+ gap: 5px;
1655
+ margin-bottom: 8px;
1656
+ }
1657
+
1658
+ .af-kanban-card-agent-icon {
1659
+ display: flex;
1660
+ align-items: center;
1661
+ color: var(--af-text-muted);
1662
+ }
1663
+ .af-kanban-card-agent-icon svg {
1664
+ width: 12px;
1665
+ height: 12px;
1666
+ }
1667
+
1668
+ .af-kanban-card-agent-name {
1669
+ font-size: 11px;
1670
+ color: var(--af-accent);
1671
+ }
1672
+
1673
+ /* ─── Inline Schedule Controls ─── */
1674
+ .af-schedule-time-selects {
1675
+ display: flex;
1676
+ align-items: center;
1677
+ gap: 4px;
1678
+ }
1679
+
1680
+ .af-schedule-colon {
1681
+ font-weight: 600;
1682
+ color: var(--af-text-muted);
1683
+ }
1684
+
1685
+ .af-form-select-sm {
1686
+ width: auto;
1687
+ min-width: 70px;
1688
+ flex: none;
1689
+ }
1690
+
1691
+ .af-schedule-day-buttons {
1692
+ display: flex;
1693
+ gap: 4px;
1694
+ flex-wrap: wrap;
1695
+ }
1696
+
1697
+ .af-schedule-day-btn {
1698
+ padding: 4px 10px;
1699
+ font-size: 11px;
1700
+ font-weight: 500;
1701
+ border-radius: var(--af-radius-sm);
1702
+ border: 1px solid var(--af-border);
1703
+ background: none !important;
1704
+ color: var(--af-text-muted);
1705
+ cursor: pointer;
1706
+ transition: all var(--af-transition);
1707
+ -webkit-appearance: none;
1708
+ appearance: none;
1709
+ }
1710
+
1711
+ .af-schedule-day-btn:hover {
1712
+ border-color: var(--af-accent);
1713
+ color: var(--af-text-primary);
1714
+ }
1715
+
1716
+ .af-schedule-day-btn.active {
1717
+ border-color: var(--af-accent);
1718
+ color: var(--af-accent);
1719
+ background: var(--af-accent-bg) !important;
1720
+ }
1721
+
1722
+ /* Toggle alignment */
1723
+ .af-form-row-toggle {
1724
+ align-items: center;
1725
+ }
1726
+ .af-form-toggle {
1727
+ margin: 0;
1728
+ }
1729
+
1730
+ .af-kanban-card-footer {
1731
+ display: flex;
1732
+ justify-content: space-between;
1733
+ align-items: center;
1734
+ }
1735
+
1736
+ .af-kanban-card-schedule {
1737
+ font-size: 10px;
1738
+ color: var(--af-text-muted);
1739
+ display: flex;
1740
+ align-items: center;
1741
+ gap: 4px;
1742
+ }
1743
+
1744
+ .af-kanban-card-tags {
1745
+ display: flex;
1746
+ gap: 3px;
1747
+ }
1748
+
1749
+ .af-kanban-card-tag {
1750
+ padding: 1px 6px;
1751
+ border-radius: 3px;
1752
+ font-size: 9px;
1753
+ font-weight: 500;
1754
+ }
1755
+
1756
+ .af-kanban-card-tag.monitoring { background: var(--af-blue-bg); color: var(--af-blue); }
1757
+ .af-kanban-card-tag.devops { background: var(--af-orange-bg); color: var(--af-orange); }
1758
+ .af-kanban-card-tag.sample { background: var(--af-purple-bg); color: var(--af-purple); }
1759
+ .af-kanban-card-tag.default { background: var(--af-bg-surface); color: var(--af-text-muted); }
1760
+
1761
+ .af-kanban-card-error {
1762
+ padding: 6px 0;
1763
+ font-size: 11px;
1764
+ color: var(--af-red);
1765
+ display: flex;
1766
+ align-items: center;
1767
+ gap: 4px;
1768
+ }
1769
+
1770
+ .af-kanban-progress {
1771
+ margin: 8px 0;
1772
+ }
1773
+
1774
+ .af-kanban-progress-track {
1775
+ background: var(--af-bg-surface);
1776
+ border-radius: 4px;
1777
+ height: 4px;
1778
+ overflow: hidden;
1779
+ }
1780
+
1781
+ .af-kanban-progress-bar {
1782
+ background: var(--af-yellow);
1783
+ height: 100%;
1784
+ width: 0%;
1785
+ border-radius: 4px;
1786
+ }
1787
+
1788
+ .af-kanban-progress-bar-real {
1789
+ transition: width 1s linear;
1790
+ }
1791
+
1792
+ .af-kanban-stop-btn {
1793
+ -webkit-appearance: none;
1794
+ appearance: none;
1795
+ display: flex;
1796
+ align-items: center;
1797
+ justify-content: center;
1798
+ width: 20px;
1799
+ height: 20px;
1800
+ padding: 0;
1801
+ margin: 0;
1802
+ border: none;
1803
+ background: transparent !important;
1804
+ box-shadow: none;
1805
+ color: var(--af-red, #ef4444);
1806
+ cursor: pointer;
1807
+ opacity: 0.5;
1808
+ transition: opacity 0.15s ease;
1809
+ margin-left: auto;
1810
+ flex-shrink: 0;
1811
+ }
1812
+
1813
+ .af-kanban-stop-btn:hover {
1814
+ opacity: 1;
1815
+ }
1816
+
1817
+ .af-kanban-stop-btn svg {
1818
+ width: 14px;
1819
+ height: 14px;
1820
+ }
1821
+
1822
+ .af-kanban-col-add {
1823
+ padding: 10px 14px;
1824
+ border-top: 1px solid var(--af-border);
1825
+ flex-shrink: 0;
1826
+ }
1827
+
1828
+ .af-kanban-col-add button {
1829
+ width: 100%;
1830
+ padding: 6px;
1831
+ border-radius: var(--af-radius-sm);
1832
+ color: var(--af-text-muted);
1833
+ font-size: 11px;
1834
+ transition: all var(--af-transition);
1835
+ border: 1px dashed var(--af-border);
1836
+ background: none;
1837
+ cursor: pointer;
1838
+ display: flex;
1839
+ align-items: center;
1840
+ justify-content: center;
1841
+ gap: 4px;
1842
+ }
1843
+
1844
+ .af-kanban-col-add button:hover {
1845
+ color: var(--af-accent);
1846
+ border-color: var(--af-accent);
1847
+ background: var(--af-accent-bg);
1848
+ }
1849
+
1850
+ /* ─── Priority Badge (detail page) ─── */
1851
+ .af-priority-badge {
1852
+ display: inline-block;
1853
+ padding: 2px 8px;
1854
+ border-radius: var(--af-radius-sm);
1855
+ font-size: 11px;
1856
+ font-weight: 600;
1857
+ text-transform: uppercase;
1858
+ letter-spacing: 0.5px;
1859
+ }
1860
+ .af-priority-badge.critical { background: rgba(239, 68, 68, 0.15); color: #ef4444; }
1861
+ .af-priority-badge.high { background: rgba(245, 158, 11, 0.15); color: #f59e0b; }
1862
+ .af-priority-badge.medium { background: rgba(59, 130, 246, 0.15); color: #3b82f6; }
1863
+ .af-priority-badge.low { background: var(--af-bg-surface); color: var(--af-text-secondary); }
1864
+
1865
+ /* ─── Schedule body toggle ─── */
1866
+ .af-schedule-body {
1867
+ padding-left: 4px;
1868
+ }
1869
+
1870
+ /* ─── Runs / History Page ─── */
1871
+ .af-runs-page {
1872
+ padding: 20px;
1873
+ }
1874
+
1875
+ .af-runs-toolbar {
1876
+ display: flex;
1877
+ align-items: center;
1878
+ gap: 10px;
1879
+ margin-bottom: 14px;
1880
+ }
1881
+
1882
+ .af-runs-table {
1883
+ width: 100%;
1884
+ background: var(--af-bg-card);
1885
+ border: 1px solid var(--af-border);
1886
+ border-radius: var(--af-radius-lg);
1887
+ overflow: hidden;
1888
+ }
1889
+
1890
+ .af-runs-table table {
1891
+ width: 100%;
1892
+ border-collapse: collapse;
1893
+ }
1894
+
1895
+ .af-runs-table th {
1896
+ text-align: left;
1897
+ padding: 10px 16px;
1898
+ font-size: 11px;
1899
+ font-weight: 600;
1900
+ text-transform: uppercase;
1901
+ letter-spacing: 0.3px;
1902
+ color: var(--af-text-muted);
1903
+ background: var(--af-bg-secondary);
1904
+ border-bottom: 1px solid var(--af-border);
1905
+ }
1906
+
1907
+ .af-runs-table td {
1908
+ padding: 10px 16px;
1909
+ font-size: 12px;
1910
+ border-bottom: 1px solid var(--af-border);
1911
+ }
1912
+
1913
+ .af-runs-table tr:last-child td {
1914
+ border-bottom: none;
1915
+ }
1916
+
1917
+ .af-runs-table tr {
1918
+ cursor: pointer;
1919
+ transition: background var(--af-transition);
1920
+ }
1921
+
1922
+ .af-runs-table tbody tr:hover td {
1923
+ background: var(--af-bg-card-hover);
1924
+ }
1925
+
1926
+ /* ─── Status Badge ─── */
1927
+ .af-status-badge {
1928
+ display: inline-flex;
1929
+ align-items: center;
1930
+ gap: 4px;
1931
+ padding: 2px 8px;
1932
+ border-radius: 4px;
1933
+ font-size: 11px;
1934
+ font-weight: 500;
1935
+ white-space: nowrap;
1936
+ }
1937
+
1938
+ .af-status-badge span {
1939
+ display: inline-flex;
1940
+ align-items: center;
1941
+ }
1942
+
1943
+ .af-status-badge svg {
1944
+ width: 12px;
1945
+ height: 12px;
1946
+ }
1947
+
1948
+ .af-status-badge.success { background: var(--af-green-bg); color: var(--af-green); }
1949
+ .af-status-badge.failure { background: var(--af-red-bg); color: var(--af-red); }
1950
+ .af-status-badge.running { background: var(--af-yellow-bg); color: var(--af-yellow); }
1951
+ .af-status-badge.pending { background: var(--af-blue-bg); color: var(--af-blue); }
1952
+ .af-status-badge.timeout { background: var(--af-orange-bg); color: var(--af-orange); }
1953
+ .af-status-badge.cancelled { background: var(--af-yellow-bg); color: var(--af-yellow); }
1954
+
1955
+ .af-mono {
1956
+ font-family: var(--font-monospace);
1957
+ font-size: 11px;
1958
+ }
1959
+
1960
+ .af-agent-link {
1961
+ color: var(--af-accent);
1962
+ cursor: pointer;
1963
+ }
1964
+
1965
+ /* ─── Skills Page ─── */
1966
+ .af-skills-page {
1967
+ padding: 20px;
1968
+ }
1969
+
1970
+ .af-skills-grid {
1971
+ display: grid;
1972
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
1973
+ gap: 14px;
1974
+ margin-top: 14px;
1975
+ }
1976
+
1977
+ .af-skill-card {
1978
+ background: var(--af-bg-card);
1979
+ border: 1px solid var(--af-border);
1980
+ border-radius: var(--af-radius-lg);
1981
+ padding: 18px;
1982
+ cursor: pointer;
1983
+ transition: all var(--af-transition);
1984
+ }
1985
+
1986
+ .af-skill-card:hover {
1987
+ border-color: var(--af-border-hover);
1988
+ }
1989
+
1990
+ .af-skill-card-header {
1991
+ display: flex;
1992
+ align-items: flex-start;
1993
+ justify-content: space-between;
1994
+ }
1995
+
1996
+ .af-skill-card-icon {
1997
+ margin-bottom: 10px;
1998
+ color: var(--af-purple);
1999
+ }
2000
+
2001
+ .af-skill-card-icon svg {
2002
+ width: 24px;
2003
+ height: 24px;
2004
+ }
2005
+
2006
+ .af-skill-card-name {
2007
+ font-weight: 600;
2008
+ font-size: 13px;
2009
+ margin-bottom: 4px;
2010
+ }
2011
+
2012
+ .af-skill-card-desc {
2013
+ color: var(--af-text-secondary);
2014
+ font-size: 11px;
2015
+ margin-bottom: 12px;
2016
+ }
2017
+
2018
+ .af-skill-card-agents {
2019
+ display: flex;
2020
+ gap: 4px;
2021
+ flex-wrap: wrap;
2022
+ }
2023
+
2024
+ .af-skill-card-agent-tag {
2025
+ padding: 2px 6px;
2026
+ border-radius: 3px;
2027
+ font-size: 10px;
2028
+ background: var(--af-accent-bg);
2029
+ color: var(--af-accent);
2030
+ }
2031
+
2032
+ /* ─── Slideover ─── */
2033
+ .af-slideover-overlay {
2034
+ position: absolute;
2035
+ inset: 0;
2036
+ background: rgba(0, 0, 0, 0.5);
2037
+ z-index: 100;
2038
+ }
2039
+
2040
+ .af-slideover {
2041
+ position: absolute;
2042
+ top: 0;
2043
+ right: 0;
2044
+ width: 480px;
2045
+ max-width: 90%;
2046
+ height: 100%;
2047
+ background: var(--af-bg-secondary);
2048
+ border-left: 1px solid var(--af-border);
2049
+ z-index: 101;
2050
+ display: flex;
2051
+ flex-direction: column;
2052
+ }
2053
+
2054
+ .af-slideover-header {
2055
+ display: flex;
2056
+ align-items: center;
2057
+ justify-content: space-between;
2058
+ padding: 16px 20px;
2059
+ border-bottom: 1px solid var(--af-border);
2060
+ }
2061
+
2062
+ .af-slideover-title {
2063
+ font-weight: 600;
2064
+ font-size: 14px;
2065
+ }
2066
+
2067
+ /* Close buttons use Obsidian's native clickable-icon class */
2068
+
2069
+ .af-slideover-body {
2070
+ flex: 1;
2071
+ overflow-y: auto;
2072
+ padding: 20px;
2073
+ }
2074
+
2075
+ .af-slideover-section {
2076
+ margin-bottom: 20px;
2077
+ }
2078
+
2079
+ .af-slideover-section-title {
2080
+ font-weight: 600;
2081
+ font-size: 11px;
2082
+ text-transform: uppercase;
2083
+ letter-spacing: 0.5px;
2084
+ color: var(--af-text-muted);
2085
+ margin-bottom: 10px;
2086
+ }
2087
+
2088
+ .af-detail-row {
2089
+ display: flex;
2090
+ align-items: flex-start;
2091
+ gap: 12px;
2092
+ padding: 6px 0;
2093
+ border-bottom: 1px solid var(--af-border);
2094
+ }
2095
+
2096
+ .af-detail-label {
2097
+ color: var(--af-text-muted);
2098
+ font-size: 12px;
2099
+ width: 100px;
2100
+ flex-shrink: 0;
2101
+ }
2102
+
2103
+ .af-detail-value {
2104
+ font-size: 12px;
2105
+ font-weight: 500;
2106
+ flex: 1;
2107
+ word-break: break-word;
2108
+ }
2109
+
2110
+ .af-detail-value.af-accent {
2111
+ color: var(--af-accent);
2112
+ }
2113
+
2114
+ .af-output-block {
2115
+ background: var(--af-bg-primary);
2116
+ border: 1px solid var(--af-border);
2117
+ border-radius: var(--af-radius-sm);
2118
+ padding: 12px;
2119
+ font-family: var(--font-monospace);
2120
+ font-size: 11px;
2121
+ line-height: 1.6;
2122
+ color: var(--af-text-secondary);
2123
+ max-height: 300px;
2124
+ overflow-y: auto;
2125
+ white-space: pre-wrap;
2126
+ }
2127
+
2128
+ .af-slideover-actions {
2129
+ display: flex;
2130
+ gap: 8px;
2131
+ margin-top: 12px;
2132
+ }
2133
+
2134
+ /* ─── Schedule Editor ─── */
2135
+ .af-schedule-editor {
2136
+ max-width: 400px;
2137
+ }
2138
+
2139
+ .af-schedule-time-row {
2140
+ display: flex;
2141
+ align-items: center;
2142
+ gap: 6px;
2143
+ padding: 8px 0 16px;
2144
+ }
2145
+
2146
+ .af-schedule-select {
2147
+ width: 70px;
2148
+ }
2149
+
2150
+ .af-schedule-day-row {
2151
+ display: flex;
2152
+ gap: 4px;
2153
+ padding: 8px 0 16px;
2154
+ flex-wrap: wrap;
2155
+ }
2156
+
2157
+ .af-schedule-day-btn {
2158
+ padding: 4px 10px;
2159
+ border-radius: var(--af-radius-sm);
2160
+ font-size: 11px;
2161
+ font-weight: 500;
2162
+ border: 1px solid var(--background-modifier-border);
2163
+ background: none;
2164
+ cursor: pointer;
2165
+ color: var(--text-muted);
2166
+ transition: all 150ms ease;
2167
+ }
2168
+
2169
+ .af-schedule-day-btn.active {
2170
+ background: var(--interactive-accent);
2171
+ color: var(--text-on-accent, white);
2172
+ border-color: var(--interactive-accent);
2173
+ }
2174
+
2175
+ .af-schedule-day-btn:hover {
2176
+ border-color: var(--interactive-accent);
2177
+ }
2178
+
2179
+ .af-schedule-preview {
2180
+ padding: 10px 0 16px;
2181
+ font-size: 12px;
2182
+ color: var(--text-muted);
2183
+ }
2184
+
2185
+ .af-schedule-preview code {
2186
+ background: var(--background-modifier-form-field);
2187
+ padding: 2px 6px;
2188
+ border-radius: 4px;
2189
+ font-size: 12px;
2190
+ }
2191
+
2192
+ /* ─── Empty State ─── */
2193
+ .af-empty-state {
2194
+ display: flex;
2195
+ flex-direction: column;
2196
+ align-items: center;
2197
+ justify-content: center;
2198
+ padding: 60px 20px;
2199
+ color: var(--af-text-muted);
2200
+ }
2201
+
2202
+ .af-empty-icon {
2203
+ margin-bottom: 12px;
2204
+ opacity: 0.5;
2205
+ color: var(--af-text-faint);
2206
+ }
2207
+
2208
+ .af-empty-icon svg {
2209
+ width: 40px;
2210
+ height: 40px;
2211
+ }
2212
+
2213
+ .af-empty-label {
2214
+ font-size: 14px;
2215
+ font-weight: 500;
2216
+ margin-bottom: 4px;
2217
+ }
2218
+
2219
+ .af-empty-sublabel {
2220
+ font-size: 12px;
2221
+ }
2222
+
2223
+ /* ─── Responsive ─── */
2224
+ @media (max-width: 1000px) {
2225
+ .af-dash-grid {
2226
+ grid-template-columns: repeat(2, 1fr);
2227
+ }
2228
+ .af-dash-split {
2229
+ grid-template-columns: 1fr;
2230
+ }
2231
+ .af-charts-row {
2232
+ grid-template-columns: 1fr;
2233
+ }
2234
+ }
2235
+
2236
+ /* ═══════════════════════════════════════════════════════
2237
+ Legacy sidebar styles (backward compatibility)
2238
+ ═══════════════════════════════════════════════════════ */
2239
+
2240
+ .agent-fleet-view {
2241
+ padding: 12px;
2242
+ }
2243
+
2244
+ .agent-fleet-header,
2245
+ .agent-fleet-actions {
2246
+ display: flex;
2247
+ gap: 8px;
2248
+ align-items: center;
2249
+ justify-content: space-between;
2250
+ }
2251
+
2252
+ .agent-fleet-card,
2253
+ .agent-fleet-section,
2254
+ .agent-fleet-issues {
2255
+ border: 1px solid var(--background-modifier-border);
2256
+ border-radius: 10px;
2257
+ padding: 10px;
2258
+ margin-bottom: 10px;
2259
+ }
2260
+
2261
+ .agent-fleet-card-title {
2262
+ font-weight: 600;
2263
+ }
2264
+
2265
+ .agent-fleet-card-subtitle,
2266
+ .agent-fleet-meta {
2267
+ color: var(--text-muted);
2268
+ margin-top: 4px;
2269
+ }
2270
+
2271
+ .agent-fleet-task-list {
2272
+ margin: 8px 0 0 16px;
2273
+ }
2274
+
2275
+ .agent-fleet-textarea {
2276
+ width: 100%;
2277
+ margin: 8px 0 16px;
2278
+ }
2279
+
2280
+ /* ─── Create Agent Modal ─── */
2281
+ .af-create-agent-modal {
2282
+ max-width: 600px;
2283
+ width: 600px;
2284
+ }
2285
+
2286
+ .af-create-header {
2287
+ display: flex;
2288
+ align-items: center;
2289
+ gap: 10px;
2290
+ margin-bottom: 16px;
2291
+ }
2292
+
2293
+ .af-create-header h3 {
2294
+ margin: 0;
2295
+ font-size: 16px;
2296
+ font-weight: 700;
2297
+ }
2298
+
2299
+ .af-create-header-icon {
2300
+ color: var(--interactive-accent);
2301
+ display: flex;
2302
+ align-items: center;
2303
+ }
2304
+
2305
+ .af-create-header-icon svg {
2306
+ width: 22px;
2307
+ height: 22px;
2308
+ }
2309
+
2310
+ .af-create-scroll {
2311
+ max-height: 60vh;
2312
+ overflow-y: auto;
2313
+ padding-right: 4px;
2314
+ }
2315
+
2316
+ .af-create-section {
2317
+ margin-bottom: 18px;
2318
+ padding-bottom: 16px;
2319
+ border-bottom: 1px solid var(--background-modifier-border);
2320
+ }
2321
+
2322
+ .af-create-section:last-child {
2323
+ border-bottom: none;
2324
+ margin-bottom: 0;
2325
+ }
2326
+
2327
+ .af-create-section-header {
2328
+ display: flex;
2329
+ align-items: center;
2330
+ gap: 8px;
2331
+ font-weight: 600;
2332
+ font-size: 13px;
2333
+ text-transform: uppercase;
2334
+ letter-spacing: 0.5px;
2335
+ color: var(--text-muted);
2336
+ margin-bottom: 12px;
2337
+ }
2338
+
2339
+ .af-create-section-icon {
2340
+ display: flex;
2341
+ align-items: center;
2342
+ color: var(--interactive-accent);
2343
+ }
2344
+
2345
+ .af-create-section-icon svg {
2346
+ width: 14px;
2347
+ height: 14px;
2348
+ }
2349
+
2350
+ .af-create-textarea {
2351
+ width: 100%;
2352
+ min-height: 80px;
2353
+ padding: 10px 12px;
2354
+ font-size: 12px;
2355
+ font-family: var(--font-monospace);
2356
+ line-height: 1.5;
2357
+ background: var(--background-modifier-form-field);
2358
+ border: 1px solid var(--background-modifier-border);
2359
+ border-radius: 6px;
2360
+ color: var(--text-normal);
2361
+ resize: vertical;
2362
+ margin-top: 4px;
2363
+ }
2364
+
2365
+ .af-create-textarea:focus {
2366
+ border-color: var(--interactive-accent);
2367
+ outline: none;
2368
+ }
2369
+
2370
+ .af-create-subsection-label {
2371
+ font-size: 12px;
2372
+ font-weight: 600;
2373
+ color: var(--text-muted);
2374
+ margin-bottom: 6px;
2375
+ margin-top: 10px;
2376
+ }
2377
+
2378
+ .af-create-skills-grid {
2379
+ display: flex;
2380
+ flex-direction: column;
2381
+ gap: 6px;
2382
+ margin-bottom: 10px;
2383
+ }
2384
+
2385
+ .af-create-skill-item {
2386
+ display: flex;
2387
+ align-items: flex-start;
2388
+ gap: 8px;
2389
+ padding: 6px 8px;
2390
+ border-radius: 6px;
2391
+ background: var(--background-secondary);
2392
+ transition: background 150ms ease;
2393
+ }
2394
+
2395
+ .af-create-skill-item:hover {
2396
+ background: var(--background-modifier-hover);
2397
+ }
2398
+
2399
+ .af-create-skill-item input[type="checkbox"] {
2400
+ margin-top: 2px;
2401
+ flex-shrink: 0;
2402
+ }
2403
+
2404
+ .af-create-skill-label {
2405
+ display: flex;
2406
+ flex-direction: column;
2407
+ gap: 1px;
2408
+ min-width: 0;
2409
+ }
2410
+
2411
+ .af-create-skill-name {
2412
+ font-size: 12px;
2413
+ font-weight: 600;
2414
+ }
2415
+
2416
+ .af-create-skill-desc {
2417
+ font-size: 11px;
2418
+ color: var(--text-muted);
2419
+ }
2420
+
2421
+ .af-create-footer {
2422
+ display: flex;
2423
+ justify-content: flex-end;
2424
+ gap: 8px;
2425
+ margin-top: 16px;
2426
+ padding-top: 14px;
2427
+ border-top: 1px solid var(--background-modifier-border);
2428
+ }
2429
+
2430
+ .af-create-submit-btn {
2431
+ background: var(--interactive-accent) !important;
2432
+ color: var(--text-on-accent, white) !important;
2433
+ border: none !important;
2434
+ padding: 6px 18px;
2435
+ border-radius: 6px;
2436
+ font-weight: 600;
2437
+ font-size: 13px;
2438
+ cursor: pointer;
2439
+ display: flex;
2440
+ align-items: center;
2441
+ gap: 6px;
2442
+ }
2443
+
2444
+ .af-create-submit-btn:hover {
2445
+ opacity: 0.9;
2446
+ }
2447
+
2448
+ .af-create-btn-icon {
2449
+ display: flex;
2450
+ align-items: center;
2451
+ order: -1;
2452
+ }
2453
+
2454
+ .af-create-btn-icon svg {
2455
+ width: 14px;
2456
+ height: 14px;
2457
+ }
2458
+
2459
+ /* ─── Create Agent Full Page ─── */
2460
+ .af-create-agent-page {
2461
+ padding: 20px;
2462
+ max-width: 800px;
2463
+ }
2464
+
2465
+ .af-create-form {
2466
+ display: flex;
2467
+ flex-direction: column;
2468
+ gap: 6px;
2469
+ margin-top: 16px;
2470
+ }
2471
+
2472
+ .af-create-form .af-create-section {
2473
+ background: var(--af-bg-card);
2474
+ border: 1px solid var(--af-border);
2475
+ border-radius: var(--af-radius-lg);
2476
+ padding: 18px;
2477
+ }
2478
+
2479
+ .af-create-form .af-create-section-header {
2480
+ display: flex;
2481
+ align-items: center;
2482
+ gap: 8px;
2483
+ font-weight: 600;
2484
+ font-size: 13px;
2485
+ margin-bottom: 14px;
2486
+ color: var(--af-text-primary);
2487
+ }
2488
+
2489
+ .af-create-form .af-create-section-icon {
2490
+ display: flex;
2491
+ align-items: center;
2492
+ color: var(--af-accent);
2493
+ }
2494
+
2495
+ .af-create-form .af-create-section-icon svg {
2496
+ width: 16px;
2497
+ height: 16px;
2498
+ }
2499
+
2500
+ .af-form-row {
2501
+ display: flex;
2502
+ align-items: flex-start;
2503
+ gap: 12px;
2504
+ margin-bottom: 10px;
2505
+ }
2506
+
2507
+ /* Form toggles reuse .af-agent-card-toggle styles */
2508
+
2509
+ .af-form-field-wrap {
2510
+ flex: 1;
2511
+ display: flex;
2512
+ flex-direction: column;
2513
+ min-width: 0;
2514
+ }
2515
+
2516
+ .af-form-label {
2517
+ width: 130px;
2518
+ flex-shrink: 0;
2519
+ font-size: 12px;
2520
+ font-weight: 500;
2521
+ color: var(--af-text-secondary);
2522
+ padding-top: 7px;
2523
+ line-height: 1;
2524
+ }
2525
+
2526
+ .af-form-desc {
2527
+ font-size: 10px;
2528
+ color: var(--af-text-muted);
2529
+ font-weight: 400;
2530
+ margin-top: 2px;
2531
+ }
2532
+
2533
+ .af-form-sublabel {
2534
+ font-size: 11px;
2535
+ font-weight: 600;
2536
+ color: var(--af-text-muted);
2537
+ margin-bottom: 6px;
2538
+ margin-top: 10px;
2539
+ text-transform: uppercase;
2540
+ letter-spacing: 0.3px;
2541
+ }
2542
+
2543
+ .af-form-input {
2544
+ flex: 1;
2545
+ padding: 6px 10px;
2546
+ font-size: 12px;
2547
+ border: 1px solid var(--af-border);
2548
+ border-radius: var(--af-radius-sm);
2549
+ background: var(--af-bg-input);
2550
+ color: var(--af-text-primary);
2551
+ }
2552
+
2553
+ .af-form-input:focus {
2554
+ border-color: var(--af-accent);
2555
+ outline: none;
2556
+ }
2557
+
2558
+ .af-form-input-sm {
2559
+ max-width: 80px;
2560
+ }
2561
+
2562
+ .af-form-select {
2563
+ flex: 1;
2564
+ padding: 6px 10px;
2565
+ font-size: 12px;
2566
+ border: 1px solid var(--af-border);
2567
+ border-radius: var(--af-radius-sm);
2568
+ background: var(--af-bg-input);
2569
+ color: var(--af-text-primary);
2570
+ }
2571
+
2572
+ .af-create-prompt-textarea {
2573
+ width: 100%;
2574
+ padding: 10px 12px;
2575
+ font-size: 12px;
2576
+ font-family: var(--font-monospace);
2577
+ line-height: 1.6;
2578
+ background: var(--af-bg-input);
2579
+ border: 1px solid var(--af-border);
2580
+ border-radius: var(--af-radius-sm);
2581
+ color: var(--af-text-primary);
2582
+ resize: vertical;
2583
+ margin-top: 8px;
2584
+ }
2585
+
2586
+ .af-create-prompt-textarea:focus {
2587
+ border-color: var(--af-accent);
2588
+ outline: none;
2589
+ }
2590
+
2591
+ .af-create-config-grid {
2592
+ display: grid;
2593
+ grid-template-columns: 1fr 1fr;
2594
+ gap: 4px 20px;
2595
+ }
2596
+
2597
+ .af-create-agent-page .af-create-footer {
2598
+ margin-top: 20px;
2599
+ padding: 16px 0;
2600
+ border-top: 1px solid var(--af-border);
2601
+ display: flex;
2602
+ justify-content: flex-end;
2603
+ gap: 8px;
2604
+ }
2605
+
2606
+ .af-create-submit {
2607
+ font-size: 13px;
2608
+ padding: 6px 18px;
2609
+ }
2610
+
2611
+ /* ─── Chat View (standalone panel) ─── */
2612
+ .af-chat-view-container {
2613
+ display: flex;
2614
+ flex-direction: column;
2615
+ height: 100%;
2616
+ overflow: hidden;
2617
+ }
2618
+
2619
+ .af-chat-view-header {
2620
+ display: flex;
2621
+ align-items: center;
2622
+ gap: 8px;
2623
+ padding: 10px 14px;
2624
+ border-bottom: 1px solid var(--af-border);
2625
+ flex-shrink: 0;
2626
+ }
2627
+
2628
+ .af-chat-view-agent-select {
2629
+ flex: 1;
2630
+ font-size: 13px;
2631
+ font-weight: 500;
2632
+ padding: 6px 10px;
2633
+ border-radius: 6px;
2634
+ border: 1px solid var(--af-border);
2635
+ background: var(--af-card-bg);
2636
+ color: var(--af-text-primary);
2637
+ }
2638
+
2639
+ .af-chat-view-new-btn {
2640
+ white-space: nowrap;
2641
+ flex-shrink: 0;
2642
+ }
2643
+
2644
+ .af-chat-view-empty {
2645
+ display: flex;
2646
+ flex-direction: column;
2647
+ align-items: center;
2648
+ justify-content: center;
2649
+ gap: 12px;
2650
+ padding: 40px 20px;
2651
+ color: var(--af-text-muted);
2652
+ min-height: 100%;
2653
+ }
2654
+
2655
+ .af-chat-view-empty-icon {
2656
+ color: var(--af-text-muted);
2657
+ opacity: 0.4;
2658
+ }
2659
+
2660
+ .af-chat-view-empty-icon svg {
2661
+ width: 32px;
2662
+ height: 32px;
2663
+ }
2664
+
2665
+ .af-chat-view-empty-text {
2666
+ font-size: 14px;
2667
+ font-weight: 500;
2668
+ text-align: center;
2669
+ color: var(--af-text-primary);
2670
+ }
2671
+
2672
+ .af-chat-view-empty-hint {
2673
+ font-size: 12px;
2674
+ text-align: center;
2675
+ color: var(--af-text-secondary);
2676
+ margin-top: 4px;
2677
+ }
2678
+
2679
+ /* ── Code Block Copy Button ── */
2680
+
2681
+ /* Hide Obsidian's native copy button in chat */
2682
+ .af-chat-bubble .copy-code-button {
2683
+ display: none !important;
2684
+ }
2685
+
2686
+ /* Our code block copy button — matches af-chat-copy-btn style */
2687
+ .af-code-copy-btn {
2688
+ position: absolute;
2689
+ top: 6px;
2690
+ right: 6px;
2691
+ display: flex;
2692
+ align-items: center;
2693
+ justify-content: center;
2694
+ width: 24px;
2695
+ height: 24px;
2696
+ padding: 0;
2697
+ margin: 0;
2698
+ border: none;
2699
+ border-radius: 4px;
2700
+ background: transparent;
2701
+ color: var(--af-text-secondary);
2702
+ cursor: pointer;
2703
+ opacity: 0;
2704
+ transition: opacity 0.15s ease, background 0.15s ease;
2705
+ }
2706
+
2707
+ .af-chat-bubble pre:hover .af-code-copy-btn {
2708
+ opacity: 0.7;
2709
+ }
2710
+
2711
+ .af-code-copy-btn:hover {
2712
+ opacity: 1 !important;
2713
+ background: var(--af-border);
2714
+ }
2715
+
2716
+ .af-code-copy-btn.copied {
2717
+ opacity: 1 !important;
2718
+ color: var(--af-green);
2719
+ }
2720
+
2721
+ .af-code-copy-btn svg {
2722
+ width: 14px;
2723
+ height: 14px;
2724
+ }
2725
+
2726
+ /* ── Chat Attach Button ── */
2727
+
2728
+ .af-chat-attach-btn {
2729
+ -webkit-appearance: none;
2730
+ appearance: none;
2731
+ display: flex;
2732
+ align-items: center;
2733
+ justify-content: center;
2734
+ width: 18px;
2735
+ height: 18px;
2736
+ padding: 0;
2737
+ margin: 0;
2738
+ border: none;
2739
+ background: transparent !important;
2740
+ box-shadow: none;
2741
+ outline: none;
2742
+ color: var(--af-text-secondary);
2743
+ cursor: pointer;
2744
+ flex-shrink: 0;
2745
+ opacity: 0.45;
2746
+ transition: opacity 0.15s ease;
2747
+ }
2748
+
2749
+ .af-chat-attach-btn:hover {
2750
+ opacity: 1;
2751
+ background: transparent !important;
2752
+ }
2753
+
2754
+ .af-chat-attach-btn:active,
2755
+ .af-chat-attach-btn:focus {
2756
+ background: transparent !important;
2757
+ box-shadow: none;
2758
+ }
2759
+
2760
+ .af-chat-attach-btn.af-chat-stop-mode {
2761
+ color: var(--af-red, #ef4444);
2762
+ opacity: 0.7;
2763
+ }
2764
+
2765
+ .af-chat-attach-btn.af-chat-stop-mode:hover {
2766
+ opacity: 1;
2767
+ }
2768
+
2769
+ .af-chat-attach-btn svg {
2770
+ width: 18px;
2771
+ height: 18px;
2772
+ }
2773
+
2774
+ /* ── Chat Input Row alignment ── */
2775
+
2776
+ .af-chat-input-row {
2777
+ display: flex;
2778
+ align-items: center;
2779
+ gap: 8px;
2780
+ }
2781
+
2782
+ /* ── Chat Attachment Pills ── */
2783
+
2784
+ .af-chat-pills-row {
2785
+ display: flex;
2786
+ flex-wrap: wrap;
2787
+ gap: 6px;
2788
+ /* Align with input: attach btn (18px) + gap (8px) */
2789
+ padding: 0 12px 8px calc(18px + 8px);
2790
+ }
2791
+
2792
+ .af-chat-pill {
2793
+ display: inline-flex;
2794
+ align-items: center;
2795
+ gap: 4px;
2796
+ padding: 3px 8px 3px 6px;
2797
+ border-radius: 12px;
2798
+ background: var(--af-card-bg);
2799
+ border: 1px solid var(--af-border);
2800
+ font-size: 11px;
2801
+ color: var(--af-text-secondary);
2802
+ max-width: 200px;
2803
+ }
2804
+
2805
+ .af-chat-pill-icon {
2806
+ display: flex;
2807
+ flex-shrink: 0;
2808
+ }
2809
+
2810
+ .af-chat-pill-icon svg {
2811
+ width: 12px;
2812
+ height: 12px;
2813
+ opacity: 0.6;
2814
+ }
2815
+
2816
+ .af-chat-pill-name {
2817
+ overflow: hidden;
2818
+ text-overflow: ellipsis;
2819
+ white-space: nowrap;
2820
+ }
2821
+
2822
+ .af-chat-pill-remove {
2823
+ display: flex;
2824
+ cursor: pointer;
2825
+ opacity: 0.5;
2826
+ flex-shrink: 0;
2827
+ margin-left: 2px;
2828
+ }
2829
+
2830
+ .af-chat-pill-remove:hover {
2831
+ opacity: 1;
2832
+ }
2833
+
2834
+ .af-chat-pill-remove svg {
2835
+ width: 12px;
2836
+ height: 12px;
2837
+ }
2838
+
2839
+ /* Inline attachment pills shown above user messages */
2840
+ .af-chat-bubble-attachments {
2841
+ display: flex;
2842
+ flex-wrap: wrap;
2843
+ gap: 4px;
2844
+ justify-content: flex-end;
2845
+ padding: 0 4px 4px 0;
2846
+ }
2847
+
2848
+ .af-chat-pill-inline {
2849
+ cursor: default;
2850
+ opacity: 0.7;
2851
+ font-size: 10px;
2852
+ padding: 2px 6px 2px 4px;
2853
+ }
2854
+
2855
+ /* Drag-over highlight for image drops */
2856
+ .af-chat-input-dragover {
2857
+ outline: 2px dashed var(--af-blue);
2858
+ outline-offset: -2px;
2859
+ border-radius: 8px;
2860
+ }
2861
+
2862
+ /* ─── Chat Slideover ─── */
2863
+ .af-slideover.af-chat-slideover {
2864
+ width: 540px;
2865
+ }
2866
+
2867
+ .af-chat-header-title {
2868
+ display: flex;
2869
+ align-items: center;
2870
+ gap: 8px;
2871
+ }
2872
+
2873
+ .af-chat-header-actions {
2874
+ display: flex;
2875
+ align-items: center;
2876
+ gap: 6px;
2877
+ }
2878
+
2879
+ .af-chat-header-icon {
2880
+ display: flex;
2881
+ align-items: center;
2882
+ color: var(--af-accent);
2883
+ }
2884
+
2885
+ .af-chat-header-icon svg {
2886
+ width: 16px;
2887
+ height: 16px;
2888
+ }
2889
+
2890
+ .af-chat-messages {
2891
+ flex: 1;
2892
+ overflow-y: auto;
2893
+ padding: 16px;
2894
+ display: flex;
2895
+ flex-direction: column-reverse;
2896
+ overflow-anchor: auto !important;
2897
+ }
2898
+
2899
+ .af-chat-messages-inner {
2900
+ display: flex;
2901
+ flex-direction: column;
2902
+ gap: 10px;
2903
+ }
2904
+
2905
+ .af-chat-bubble {
2906
+ max-width: 85%;
2907
+ padding: 10px 14px;
2908
+ border-radius: var(--af-radius-md);
2909
+ font-size: 13px;
2910
+ line-height: 1.55;
2911
+ white-space: pre-wrap;
2912
+ word-break: break-word;
2913
+ user-select: text;
2914
+ -webkit-user-select: text;
2915
+ position: relative;
2916
+ overflow: visible;
2917
+ }
2918
+
2919
+ .af-chat-bubble:hover .af-chat-copy-btn {
2920
+ opacity: 1 !important;
2921
+ }
2922
+
2923
+ .af-chat-copy-btn {
2924
+ position: absolute;
2925
+ top: 4px;
2926
+ right: 4px;
2927
+ width: 24px;
2928
+ height: 24px;
2929
+ border-radius: 4px;
2930
+ display: flex;
2931
+ align-items: center;
2932
+ justify-content: center;
2933
+ background: var(--af-bg-secondary);
2934
+ border: none;
2935
+ color: var(--af-text-muted);
2936
+ cursor: pointer;
2937
+ opacity: 0;
2938
+ transition: opacity 150ms ease, color 150ms ease;
2939
+ padding: 0;
2940
+ z-index: 2;
2941
+ }
2942
+
2943
+ .af-chat-copy-btn svg {
2944
+ width: 12px;
2945
+ height: 12px;
2946
+ }
2947
+
2948
+ .af-chat-copy-btn:hover {
2949
+ color: var(--af-accent);
2950
+ }
2951
+
2952
+ .af-chat-copy-btn.copied {
2953
+ color: var(--af-green);
2954
+ opacity: 1;
2955
+ }
2956
+
2957
+ .af-chat-bubble-user {
2958
+ align-self: flex-end;
2959
+ background: var(--af-accent);
2960
+ color: #fff;
2961
+ border-bottom-right-radius: var(--af-radius-sm);
2962
+ }
2963
+
2964
+ .af-chat-bubble-assistant {
2965
+ align-self: flex-start;
2966
+ background: var(--af-bg-surface);
2967
+ color: var(--af-text-primary);
2968
+ border: 1px solid var(--af-border);
2969
+ border-bottom-left-radius: var(--af-radius-sm);
2970
+ }
2971
+
2972
+ /* Compact markdown — shared by chat bubbles + run output */
2973
+ .af-compact-md {
2974
+ font-family: inherit;
2975
+ font-size: 13px;
2976
+ white-space: normal;
2977
+ line-height: 1.5;
2978
+ }
2979
+ .af-compact-md p {
2980
+ margin: 0 0 4px 0;
2981
+ }
2982
+ .af-compact-md p:last-child {
2983
+ margin-bottom: 0;
2984
+ }
2985
+ .af-compact-md h1,
2986
+ .af-compact-md h2,
2987
+ .af-compact-md h3,
2988
+ .af-compact-md h4,
2989
+ .af-compact-md h5,
2990
+ .af-compact-md h6 {
2991
+ font-size: 13px;
2992
+ font-weight: 600;
2993
+ margin: 6px 0 2px 0;
2994
+ padding: 0;
2995
+ }
2996
+ .af-compact-md > :first-child {
2997
+ margin-top: 0;
2998
+ }
2999
+ .af-compact-md ul,
3000
+ .af-compact-md ol {
3001
+ margin: 2px 0;
3002
+ padding-left: 18px;
3003
+ }
3004
+ .af-compact-md li {
3005
+ margin: 0;
3006
+ padding: 0;
3007
+ }
3008
+ .af-compact-md li > p {
3009
+ margin: 0;
3010
+ }
3011
+ .af-compact-md hr {
3012
+ margin: 4px 0;
3013
+ border: none;
3014
+ border-top: 1px solid var(--af-border);
3015
+ }
3016
+ .af-compact-md strong {
3017
+ font-weight: 600;
3018
+ color: var(--af-text-primary);
3019
+ }
3020
+ .af-compact-md table {
3021
+ border-collapse: collapse;
3022
+ font-size: 12px;
3023
+ margin: 4px 0;
3024
+ width: 100%;
3025
+ }
3026
+ .af-compact-md th,
3027
+ .af-compact-md td {
3028
+ border: 1px solid var(--af-border);
3029
+ padding: 3px 8px;
3030
+ text-align: left;
3031
+ }
3032
+ .af-compact-md th {
3033
+ font-weight: 600;
3034
+ background: var(--af-bg-secondary);
3035
+ }
3036
+ .af-compact-md code {
3037
+ font-size: 12px;
3038
+ background: var(--af-bg-secondary);
3039
+ padding: 1px 4px;
3040
+ border-radius: 3px;
3041
+ }
3042
+ .af-compact-md pre {
3043
+ margin: 4px 0;
3044
+ padding: 8px;
3045
+ background: var(--af-bg-secondary);
3046
+ border-radius: var(--af-radius-sm);
3047
+ overflow-x: auto;
3048
+ font-size: 12px;
3049
+ }
3050
+ .af-compact-md pre code {
3051
+ background: none;
3052
+ padding: 0;
3053
+ }
3054
+ .af-compact-md blockquote {
3055
+ margin: 2px 0;
3056
+ padding: 2px 0 2px 10px;
3057
+ border-left: 3px solid var(--af-accent);
3058
+ color: var(--af-text-secondary);
3059
+ }
3060
+
3061
+ .af-chat-bubble-error {
3062
+ align-self: stretch;
3063
+ background: rgba(243, 139, 168, 0.12);
3064
+ color: var(--af-red);
3065
+ border: 1px solid var(--af-red);
3066
+ border-radius: var(--af-radius-sm);
3067
+ font-size: 12px;
3068
+ }
3069
+
3070
+ /* ─── Activity indicator ─── */
3071
+ .af-chat-activity {
3072
+ align-self: flex-start;
3073
+ font-size: 12px;
3074
+ color: var(--af-text-muted);
3075
+ padding: 6px 14px;
3076
+ font-style: italic;
3077
+ animation: af-chat-pulse 2s ease-in-out infinite;
3078
+ }
3079
+
3080
+ @keyframes af-chat-pulse {
3081
+ 0%, 100% { opacity: 0.6; }
3082
+ 50% { opacity: 1; }
3083
+ }
3084
+
3085
+ /* ─── Tool call summary ─── */
3086
+ .af-chat-tool-summary {
3087
+ align-self: flex-start;
3088
+ max-width: 85%;
3089
+ font-size: 12px;
3090
+ }
3091
+
3092
+ .af-chat-tool-summary details {
3093
+ border: 1px solid var(--af-border);
3094
+ border-radius: var(--af-radius-sm);
3095
+ background: var(--af-bg-surface);
3096
+ overflow: hidden;
3097
+ }
3098
+
3099
+ .af-chat-tool-summary summary {
3100
+ padding: 6px 10px;
3101
+ cursor: pointer;
3102
+ color: var(--af-text-muted);
3103
+ display: flex;
3104
+ align-items: center;
3105
+ gap: 4px;
3106
+ user-select: none;
3107
+ font-size: 11px;
3108
+ }
3109
+
3110
+ .af-chat-tool-summary summary:hover {
3111
+ color: var(--af-text-primary);
3112
+ background: var(--af-bg-secondary);
3113
+ }
3114
+
3115
+ .af-chat-tool-icon {
3116
+ display: inline-flex;
3117
+ align-items: center;
3118
+ }
3119
+
3120
+ .af-chat-tool-icon svg {
3121
+ width: 12px;
3122
+ height: 12px;
3123
+ }
3124
+
3125
+ .af-chat-tool-list {
3126
+ padding: 4px 10px 8px 10px;
3127
+ border-top: 1px solid var(--af-border);
3128
+ }
3129
+
3130
+ .af-chat-tool-item {
3131
+ display: flex;
3132
+ gap: 8px;
3133
+ align-items: baseline;
3134
+ padding: 2px 0;
3135
+ font-family: var(--font-monospace);
3136
+ font-size: 11px;
3137
+ line-height: 1.5;
3138
+ color: var(--af-text-muted);
3139
+ }
3140
+
3141
+ .af-chat-tool-name {
3142
+ color: var(--af-text-secondary);
3143
+ white-space: nowrap;
3144
+ font-weight: 500;
3145
+ }
3146
+
3147
+ .af-chat-tool-cmd {
3148
+ color: var(--af-text-muted);
3149
+ overflow: hidden;
3150
+ text-overflow: ellipsis;
3151
+ white-space: nowrap;
3152
+ max-width: 280px;
3153
+ }
3154
+
3155
+ .af-chat-streaming-dot {
3156
+ display: flex;
3157
+ gap: 5px;
3158
+ padding: 10px 14px;
3159
+ align-self: flex-start;
3160
+ }
3161
+
3162
+ .af-chat-streaming-dot span {
3163
+ width: 6px;
3164
+ height: 6px;
3165
+ border-radius: 50%;
3166
+ background: var(--af-text-muted);
3167
+ animation: af-chat-bounce 1.2s ease-in-out infinite;
3168
+ }
3169
+
3170
+ .af-chat-streaming-dot span:nth-child(2) {
3171
+ animation-delay: 0.2s;
3172
+ }
3173
+
3174
+ .af-chat-streaming-dot span:nth-child(3) {
3175
+ animation-delay: 0.4s;
3176
+ }
3177
+
3178
+ @keyframes af-chat-bounce {
3179
+ 0%, 60%, 100% {
3180
+ opacity: 0.3;
3181
+ transform: scale(0.8);
3182
+ }
3183
+ 30% {
3184
+ opacity: 1;
3185
+ transform: scale(1);
3186
+ }
3187
+ }
3188
+
3189
+ .af-chat-working-indicator {
3190
+ font-size: 11px;
3191
+ color: var(--af-text-secondary);
3192
+ padding: 0 0 6px 0;
3193
+ opacity: 0.8;
3194
+ }
3195
+
3196
+ .af-chat-input-area {
3197
+ border-top: 1px solid var(--af-border);
3198
+ padding: 12px 16px 16px 16px;
3199
+ background: transparent;
3200
+ flex-shrink: 0;
3201
+ }
3202
+
3203
+ .af-chat-input-row {
3204
+ position: relative;
3205
+ display: flex;
3206
+ }
3207
+
3208
+ .af-chat-input {
3209
+ width: 100%;
3210
+ resize: none;
3211
+ border: 1px solid var(--af-border);
3212
+ border-radius: var(--af-radius-md);
3213
+ padding: 8px 44px 8px 12px;
3214
+ background: var(--af-bg-surface);
3215
+ color: var(--af-text-primary);
3216
+ font-size: 13px;
3217
+ line-height: 1.5;
3218
+ min-height: 32px;
3219
+ max-height: 160px;
3220
+ font-family: inherit;
3221
+ overflow-y: hidden;
3222
+ }
3223
+
3224
+ .af-chat-input:focus {
3225
+ outline: none;
3226
+ border-color: var(--af-accent);
3227
+ box-shadow: 0 0 0 2px var(--af-accent-bg, rgba(var(--interactive-accent-rgb, 126, 101, 230), 0.15));
3228
+ }
3229
+
3230
+ .af-chat-input:disabled {
3231
+ opacity: 0.6;
3232
+ cursor: not-allowed;
3233
+ }
3234
+
3235
+ .af-chat-send-btn {
3236
+ -webkit-appearance: none;
3237
+ appearance: none;
3238
+ display: flex;
3239
+ align-items: center;
3240
+ justify-content: center;
3241
+ width: 18px;
3242
+ height: 18px;
3243
+ padding: 0;
3244
+ margin: 0;
3245
+ border: none;
3246
+ background: transparent !important;
3247
+ box-shadow: none;
3248
+ outline: none;
3249
+ color: var(--af-text-secondary);
3250
+ cursor: pointer;
3251
+ flex-shrink: 0;
3252
+ opacity: 0.45;
3253
+ transition: opacity 0.15s ease;
3254
+ }
3255
+
3256
+ .af-chat-send-btn .af-btn-icon {
3257
+ display: flex;
3258
+ align-items: center;
3259
+ justify-content: center;
3260
+ color: inherit;
3261
+ }
3262
+
3263
+ .af-chat-send-btn .af-btn-icon svg {
3264
+ width: 18px;
3265
+ height: 18px;
3266
+ }
3267
+
3268
+ .af-chat-send-btn:hover:not(:disabled) {
3269
+ opacity: 1;
3270
+ background: transparent !important;
3271
+ }
3272
+
3273
+ .af-chat-send-btn:active,
3274
+ .af-chat-send-btn:focus {
3275
+ background: transparent !important;
3276
+ box-shadow: none;
3277
+ }
3278
+
3279
+ .af-chat-send-btn:disabled {
3280
+ opacity: 0.15;
3281
+ cursor: not-allowed;
3282
+ }
3283
+
3284
+ /* ─── Icon Picker Modal ─── */
3285
+ .af-icon-picker-modal {
3286
+ width: 500px;
3287
+ max-width: 100%;
3288
+ padding: 12px;
3289
+ display: flex;
3290
+ flex-direction: column;
3291
+ gap: 8px;
3292
+ }
3293
+
3294
+ .af-icon-picker-search {
3295
+ width: 100%;
3296
+ box-sizing: border-box;
3297
+ padding: 7px 10px;
3298
+ border-radius: var(--af-radius-sm);
3299
+ border: 1px solid var(--af-border);
3300
+ background: var(--af-bg-input);
3301
+ color: var(--af-text-primary);
3302
+ font-size: 13px;
3303
+ outline: none;
3304
+ }
3305
+
3306
+ .af-icon-picker-search:focus {
3307
+ border-color: var(--af-accent);
3308
+ box-shadow: 0 0 0 2px var(--af-accent-bg);
3309
+ }
3310
+
3311
+ .af-icon-picker-scroll {
3312
+ max-height: 380px;
3313
+ overflow-y: auto;
3314
+ display: flex;
3315
+ flex-direction: column;
3316
+ gap: 12px;
3317
+ }
3318
+
3319
+ .af-icon-picker-section {
3320
+ display: flex;
3321
+ flex-direction: column;
3322
+ gap: 6px;
3323
+ }
3324
+
3325
+ .af-icon-picker-section-label {
3326
+ font-size: 11px;
3327
+ font-weight: 600;
3328
+ text-transform: uppercase;
3329
+ letter-spacing: 0.05em;
3330
+ color: var(--af-text-muted);
3331
+ padding: 0 2px;
3332
+ }
3333
+
3334
+ .af-icon-picker-grid {
3335
+ display: grid;
3336
+ grid-template-columns: repeat(auto-fill, minmax(36px, 1fr));
3337
+ gap: 3px;
3338
+ }
3339
+
3340
+ .af-icon-picker-item {
3341
+ width: 36px;
3342
+ height: 36px;
3343
+ display: flex;
3344
+ align-items: center;
3345
+ justify-content: center;
3346
+ border-radius: var(--af-radius-sm);
3347
+ cursor: pointer;
3348
+ color: var(--af-text-secondary);
3349
+ transition: background var(--af-transition), color var(--af-transition);
3350
+ }
3351
+
3352
+ .af-icon-picker-item svg {
3353
+ width: 16px;
3354
+ height: 16px;
3355
+ pointer-events: none;
3356
+ }
3357
+
3358
+ .af-icon-picker-item:hover {
3359
+ background: var(--af-bg-card-hover);
3360
+ color: var(--af-text-primary);
3361
+ }
3362
+
3363
+ .af-icon-picker-item.selected {
3364
+ background: var(--af-accent-bg);
3365
+ color: var(--af-accent);
3366
+ }
3367
+
3368
+ /* ─── Avatar Picker Button (edit form) ─── */
3369
+ .af-avatar-picker-btn {
3370
+ display: flex;
3371
+ align-items: center;
3372
+ gap: 8px;
3373
+ padding: 5px 10px;
3374
+ border-radius: var(--af-radius-sm);
3375
+ border: 1px solid var(--af-border);
3376
+ background: var(--af-bg-input);
3377
+ color: var(--af-text-primary);
3378
+ cursor: pointer;
3379
+ font-size: 13px;
3380
+ transition: border-color var(--af-transition), background var(--af-transition);
3381
+ }
3382
+
3383
+ .af-avatar-picker-btn:hover {
3384
+ border-color: var(--af-accent);
3385
+ background: var(--af-bg-card-hover);
3386
+ }
3387
+
3388
+ .af-avatar-picker-preview {
3389
+ width: 24px;
3390
+ height: 24px;
3391
+ display: flex;
3392
+ align-items: center;
3393
+ justify-content: center;
3394
+ flex-shrink: 0;
3395
+ color: var(--af-accent);
3396
+ }
3397
+
3398
+ .af-avatar-picker-preview svg {
3399
+ width: 16px;
3400
+ height: 16px;
3401
+ }
3402
+
3403
+ .af-avatar-picker-label {
3404
+ color: var(--af-text-secondary);
3405
+ font-size: 12px;
3406
+ }
3407
+
3408
+ /* ─── Sidebar card avatar ─── */
3409
+ .agent-fleet-card-avatar {
3410
+ display: inline-flex;
3411
+ align-items: center;
3412
+ justify-content: center;
3413
+ width: 18px;
3414
+ height: 18px;
3415
+ margin-right: 5px;
3416
+ flex-shrink: 0;
3417
+ vertical-align: middle;
3418
+ }
3419
+
3420
+ .agent-fleet-card-avatar svg {
3421
+ width: 14px;
3422
+ height: 14px;
3423
+ }
3424
+
3425
+ /* ═══════════════════════════════════════════════════════
3426
+ MCP Servers Page
3427
+ ═══════════════════════════════════════════════════════ */
3428
+
3429
+ .af-mcp-card {
3430
+ background: var(--af-bg-card);
3431
+ border: 1px solid var(--af-border);
3432
+ border-radius: var(--af-radius-lg);
3433
+ padding: 18px;
3434
+ transition: all var(--af-transition);
3435
+ cursor: pointer;
3436
+ }
3437
+
3438
+ .af-mcp-card:hover {
3439
+ border-color: var(--af-border-hover);
3440
+ }
3441
+
3442
+ .af-mcp-meta {
3443
+ display: flex;
3444
+ align-items: center;
3445
+ gap: 6px;
3446
+ flex-wrap: wrap;
3447
+ }
3448
+
3449
+ .af-mcp-type-badge {
3450
+ display: inline-block;
3451
+ padding: 1px 7px;
3452
+ border-radius: 4px;
3453
+ font-size: 10px;
3454
+ font-weight: 600;
3455
+ text-transform: uppercase;
3456
+ letter-spacing: 0.05em;
3457
+ background: var(--af-bg-surface);
3458
+ color: var(--af-text-secondary);
3459
+ border: 1px solid var(--af-border);
3460
+ vertical-align: middle;
3461
+ }
3462
+
3463
+ .af-mcp-status-badge {
3464
+ display: inline-flex;
3465
+ align-items: center;
3466
+ gap: 4px;
3467
+ padding: 2px 8px;
3468
+ border-radius: 10px;
3469
+ font-size: 11px;
3470
+ font-weight: 500;
3471
+ white-space: nowrap;
3472
+ }
3473
+
3474
+ .af-mcp-status-badge.connected {
3475
+ background: var(--af-green-bg);
3476
+ color: var(--af-green);
3477
+ }
3478
+
3479
+ .af-mcp-status-badge.needs-auth {
3480
+ background: var(--af-yellow-bg);
3481
+ color: var(--af-yellow);
3482
+ }
3483
+
3484
+ .af-mcp-status-badge.error,
3485
+ .af-mcp-status-badge.disconnected {
3486
+ background: var(--af-red-bg);
3487
+ color: var(--af-red);
3488
+ }
3489
+
3490
+ .af-mcp-status-badge > span {
3491
+ display: inline-flex;
3492
+ align-items: center;
3493
+ }
3494
+
3495
+ .af-mcp-status-badge svg {
3496
+ width: 12px;
3497
+ height: 12px;
3498
+ flex-shrink: 0;
3499
+ }
3500
+
3501
+ /* Status dot for edit form checklist */
3502
+ .af-mcp-status-dot {
3503
+ display: inline-block;
3504
+ width: 8px;
3505
+ height: 8px;
3506
+ border-radius: 50%;
3507
+ flex-shrink: 0;
3508
+ margin-right: 4px;
3509
+ }
3510
+
3511
+ .af-mcp-status-dot.connected { background: var(--af-green); }
3512
+ .af-mcp-status-dot.needs-auth { background: var(--af-yellow); }
3513
+ .af-mcp-status-dot.error,
3514
+ .af-mcp-status-dot.disconnected { background: var(--af-red); }
3515
+
3516
+ .af-mcp-command {
3517
+ font-family: var(--font-monospace);
3518
+ font-size: 11px;
3519
+ color: var(--af-text-secondary);
3520
+ margin-top: 10px;
3521
+ overflow: hidden;
3522
+ text-overflow: ellipsis;
3523
+ white-space: nowrap;
3524
+ }
3525
+
3526
+ /* ─── MCP Card: Description ─── */
3527
+ .af-mcp-description {
3528
+ font-size: 12px;
3529
+ color: var(--af-text-secondary);
3530
+ margin-top: 8px;
3531
+ line-height: 1.5;
3532
+ }
3533
+
3534
+ /* ─── MCP Card: Tool Footer ─── */
3535
+ .af-mcp-tool-footer {
3536
+ margin-top: 10px;
3537
+ }
3538
+
3539
+ .af-mcp-tool-count {
3540
+ display: inline-flex;
3541
+ align-items: center;
3542
+ gap: 4px;
3543
+ font-size: 11px;
3544
+ color: var(--af-text-faint);
3545
+ }
3546
+
3547
+ .af-mcp-tool-count svg {
3548
+ width: 12px;
3549
+ height: 12px;
3550
+ }
3551
+
3552
+ .af-mcp-tool-chips {
3553
+ display: flex;
3554
+ flex-wrap: wrap;
3555
+ gap: 4px;
3556
+ margin-top: 8px;
3557
+ }
3558
+
3559
+ .af-mcp-tool-chip {
3560
+ display: inline-block;
3561
+ padding: 2px 7px;
3562
+ border-radius: 4px;
3563
+ font-size: 10px;
3564
+ font-family: var(--font-monospace);
3565
+ background: var(--af-bg-surface);
3566
+ color: var(--af-text-secondary);
3567
+ border: 1px solid var(--af-border);
3568
+ }
3569
+
3570
+ .af-mcp-tool-chip-more {
3571
+ color: var(--af-text-faint);
3572
+ font-family: var(--font-interface);
3573
+ font-style: italic;
3574
+ border: 1px dashed var(--af-border);
3575
+ background: transparent;
3576
+ }
3577
+
3578
+ /* ─── MCP Detail Slideover ─── */
3579
+ .af-mcp-detail-description {
3580
+ font-size: 12px;
3581
+ color: var(--af-text-secondary);
3582
+ line-height: 1.6;
3583
+ white-space: pre-wrap;
3584
+ max-height: 200px;
3585
+ overflow-y: auto;
3586
+ }
3587
+
3588
+ .af-mcp-tool-detail {
3589
+ padding: 10px 12px;
3590
+ background: var(--af-bg-surface);
3591
+ border: 1px solid var(--af-border);
3592
+ border-radius: var(--af-radius);
3593
+ margin-bottom: 8px;
3594
+ }
3595
+
3596
+ .af-mcp-tool-detail-header {
3597
+ display: flex;
3598
+ align-items: center;
3599
+ gap: 8px;
3600
+ }
3601
+
3602
+ .af-mcp-tool-detail-name {
3603
+ display: inline-flex;
3604
+ align-items: center;
3605
+ gap: 4px;
3606
+ font-family: var(--font-monospace);
3607
+ font-size: 12px;
3608
+ font-weight: 600;
3609
+ color: var(--af-text-primary);
3610
+ }
3611
+
3612
+ .af-mcp-tool-detail-name svg {
3613
+ width: 12px;
3614
+ height: 12px;
3615
+ opacity: 0.5;
3616
+ }
3617
+
3618
+ .af-mcp-tool-param-count {
3619
+ font-size: 10px;
3620
+ color: var(--af-text-faint);
3621
+ padding: 1px 6px;
3622
+ border-radius: 4px;
3623
+ background: var(--af-bg-card);
3624
+ border: 1px solid var(--af-border);
3625
+ }
3626
+
3627
+ .af-mcp-tool-detail-desc {
3628
+ font-size: 11px;
3629
+ color: var(--af-text-secondary);
3630
+ margin-top: 6px;
3631
+ line-height: 1.5;
3632
+ }
3633
+
3634
+ .af-mcp-tool-detail-desc summary {
3635
+ cursor: pointer;
3636
+ user-select: none;
3637
+ }
3638
+
3639
+ .af-mcp-tool-detail-full {
3640
+ margin-top: 6px;
3641
+ white-space: pre-wrap;
3642
+ font-size: 11px;
3643
+ color: var(--af-text-secondary);
3644
+ max-height: 200px;
3645
+ overflow-y: auto;
3646
+ padding: 6px 0;
3647
+ }
3648
+
3649
+ .af-mcp-tool-params {
3650
+ margin-top: 8px;
3651
+ display: flex;
3652
+ flex-direction: column;
3653
+ gap: 4px;
3654
+ }
3655
+
3656
+ .af-mcp-tool-param {
3657
+ display: flex;
3658
+ align-items: baseline;
3659
+ gap: 6px;
3660
+ font-size: 11px;
3661
+ flex-wrap: wrap;
3662
+ }
3663
+
3664
+ .af-mcp-tool-param-name {
3665
+ font-family: var(--font-monospace);
3666
+ font-weight: 500;
3667
+ color: var(--af-text-primary);
3668
+ }
3669
+
3670
+ .af-mcp-tool-param-type {
3671
+ font-family: var(--font-monospace);
3672
+ font-size: 10px;
3673
+ color: var(--af-text-faint);
3674
+ padding: 0 4px;
3675
+ border-radius: 3px;
3676
+ background: var(--af-bg-card);
3677
+ border: 1px solid var(--af-border);
3678
+ }
3679
+
3680
+ .af-mcp-tool-param-required {
3681
+ font-size: 9px;
3682
+ font-weight: 600;
3683
+ text-transform: uppercase;
3684
+ color: var(--af-yellow);
3685
+ letter-spacing: 0.05em;
3686
+ }
3687
+
3688
+ .af-mcp-tool-param-desc {
3689
+ color: var(--af-text-faint);
3690
+ font-size: 10px;
3691
+ }
3692
+
3693
+ /* ─── MCP Tool Item (simple list fallback) ─── */
3694
+ .af-mcp-tool-item {
3695
+ font-family: var(--font-monospace);
3696
+ font-size: 12px;
3697
+ padding: 4px 8px;
3698
+ background: var(--af-bg-surface);
3699
+ border-radius: 4px;
3700
+ margin-bottom: 4px;
3701
+ color: var(--af-text-secondary);
3702
+ }
3703
+
3704
+ /* ── MCP Discovery Progress ── */
3705
+
3706
+ .af-mcp-progress {
3707
+ margin: 0 0 20px 0;
3708
+ padding: 16px 20px;
3709
+ background: var(--af-card-bg);
3710
+ border: 1px solid var(--af-border);
3711
+ border-radius: 10px;
3712
+ }
3713
+
3714
+ .af-mcp-progress-header {
3715
+ display: flex;
3716
+ align-items: center;
3717
+ gap: 10px;
3718
+ margin-bottom: 12px;
3719
+ }
3720
+
3721
+ .af-mcp-spinner {
3722
+ display: flex;
3723
+ gap: 4px;
3724
+ align-items: center;
3725
+ }
3726
+
3727
+ .af-mcp-spinner span {
3728
+ width: 6px;
3729
+ height: 6px;
3730
+ border-radius: 50%;
3731
+ background: var(--af-blue);
3732
+ animation: af-mcp-bounce 1.2s infinite ease-in-out;
3733
+ }
3734
+
3735
+ .af-mcp-spinner span:nth-child(2) {
3736
+ animation-delay: 0.15s;
3737
+ }
3738
+
3739
+ .af-mcp-spinner span:nth-child(3) {
3740
+ animation-delay: 0.3s;
3741
+ }
3742
+
3743
+ @keyframes af-mcp-bounce {
3744
+ 0%, 60%, 100% { opacity: 0.3; transform: scale(0.8); }
3745
+ 30% { opacity: 1; transform: scale(1.1); }
3746
+ }
3747
+
3748
+ .af-mcp-progress-label {
3749
+ font-size: 13px;
3750
+ font-weight: 500;
3751
+ color: var(--af-text-primary);
3752
+ }
3753
+
3754
+ .af-mcp-progress-bar {
3755
+ height: 4px;
3756
+ border-radius: 2px;
3757
+ background: var(--af-border);
3758
+ overflow: hidden;
3759
+ margin-bottom: 8px;
3760
+ }
3761
+
3762
+ .af-mcp-progress-fill {
3763
+ height: 100%;
3764
+ border-radius: 2px;
3765
+ background: var(--af-blue);
3766
+ transition: width 0.4s ease;
3767
+ }
3768
+
3769
+ .af-mcp-progress-fill-slow {
3770
+ /* When tool discovery is running (the slow phase), add a shimmer */
3771
+ background: linear-gradient(
3772
+ 90deg,
3773
+ var(--af-blue) 0%,
3774
+ color-mix(in srgb, var(--af-blue) 60%, white) 50%,
3775
+ var(--af-blue) 100%
3776
+ );
3777
+ background-size: 200% 100%;
3778
+ animation: af-mcp-shimmer 1.5s infinite linear;
3779
+ }
3780
+
3781
+ @keyframes af-mcp-shimmer {
3782
+ 0% { background-position: 200% 0; }
3783
+ 100% { background-position: -200% 0; }
3784
+ }
3785
+
3786
+ .af-mcp-progress-detail {
3787
+ font-size: 11px;
3788
+ color: var(--af-text-secondary);
3789
+ letter-spacing: 0.01em;
3790
+ }
3791
+
3792
+ /* ── MCP Auth Button ── */
3793
+
3794
+ .af-mcp-auth-row {
3795
+ padding: 10px 0 0;
3796
+ border-top: 1px solid var(--af-border);
3797
+ margin-top: 10px;
3798
+ }
3799
+
3800
+ .af-mcp-auth-row .af-btn-sm {
3801
+ width: 100%;
3802
+ display: flex;
3803
+ align-items: center;
3804
+ justify-content: center;
3805
+ gap: 6px;
3806
+ }
3807
+
3808
+ .af-mcp-auth-row .af-btn-sm svg {
3809
+ width: 14px;
3810
+ height: 14px;
3811
+ }
3812
+
3813
+ .af-mcp-hint-row {
3814
+ font-size: 11px;
3815
+ color: var(--af-text-secondary);
3816
+ padding: 8px 0 0;
3817
+ border-top: 1px solid var(--af-border);
3818
+ margin-top: 10px;
3819
+ }
3820
+
3821
+ .af-mcp-hint-row .af-link {
3822
+ cursor: pointer;
3823
+ text-decoration: underline;
3824
+ opacity: 0.8;
3825
+ }
3826
+
3827
+ .af-mcp-hint-row .af-link:hover {
3828
+ opacity: 1;
3829
+ }
3830
+
3831
+ /* ── MCP Disabled State ── */
3832
+
3833
+ .af-mcp-card-disabled {
3834
+ opacity: 0.55;
3835
+ }
3836
+
3837
+ .af-mcp-card-disabled:hover {
3838
+ opacity: 0.75;
3839
+ }
3840
+
3841
+ .af-mcp-status-badge.disabled {
3842
+ color: var(--af-text-secondary);
3843
+ background: var(--af-border);
3844
+ }
3845
+
3846
+ /* ── MCP Agent Config List ── */
3847
+
3848
+ .af-mcp-agent-item {
3849
+ display: flex;
3850
+ align-items: center;
3851
+ gap: 10px;
3852
+ padding: 8px 12px;
3853
+ border-radius: 8px;
3854
+ background: var(--af-card-bg);
3855
+ border: 1px solid var(--af-border);
3856
+ }
3857
+
3858
+ .af-mcp-agent-label {
3859
+ flex: 1;
3860
+ min-width: 0;
3861
+ }
3862
+
3863
+ .af-mcp-agent-name-row {
3864
+ display: flex;
3865
+ align-items: center;
3866
+ gap: 8px;
3867
+ }
3868
+
3869
+ .af-mcp-agent-tool-count {
3870
+ font-size: 11px;
3871
+ color: var(--af-text-secondary);
3872
+ margin-left: auto;
3873
+ white-space: nowrap;
3874
+ }
3875
+
3876
+ .af-mcp-agent-tool-count.af-muted {
3877
+ opacity: 0.6;
3878
+ font-style: italic;
3879
+ }
3880
+
3881
+ /* ── MCP Overview (Agent Detail) ── */
3882
+
3883
+ .af-mcp-overview-list {
3884
+ display: flex;
3885
+ flex-direction: column;
3886
+ gap: 6px;
3887
+ padding: 14px 18px;
3888
+ }
3889
+
3890
+ .af-mcp-overview-row {
3891
+ display: flex;
3892
+ align-items: center;
3893
+ gap: 8px;
3894
+ }
3895
+
3896
+ .af-mcp-overview-name {
3897
+ font-size: 13px;
3898
+ font-weight: 500;
3899
+ color: var(--af-text-primary);
3900
+ }
3901
+
3902
+ .af-mcp-overview-tools {
3903
+ font-size: 11px;
3904
+ color: var(--af-text-secondary);
3905
+ margin-left: auto;
3906
+ }
3907
+
3908
+ .af-mcp-overview-tools.af-muted {
3909
+ opacity: 0.6;
3910
+ font-style: italic;
3911
+ }