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