claude-code-kanban 2.0.1 → 2.1.0-rc.2

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