claude-code-kanban 4.26.0 → 4.28.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/public/style.css CHANGED
@@ -9,9 +9,6 @@
9
9
  --bg-surface: #16181c;
10
10
  --bg-elevated: #1e2025;
11
11
  --bg-hover: #282a30;
12
- /* Selection reads as a recess against the darker surface here, but light theme's deep tone
13
- sits within a shade of the sidebar, so there it has to rise instead. */
14
- --session-active-bg: var(--bg-deep);
15
12
  --border: #363840;
16
13
  --text-primary: #f0f1f3;
17
14
  --text-secondary: #c2c4c9;
@@ -32,22 +29,18 @@
32
29
  --team-dim: rgba(96, 165, 250, 0.18);
33
30
  --plan: #86a886;
34
31
  --plan-dim: rgba(134, 168, 134, 0.18);
35
- --ansi-black: var(--text-muted);
36
32
  --ansi-red: #e06c66;
37
33
  --ansi-green: #3ecf8e;
38
34
  --ansi-yellow: #e0b04a;
39
35
  --ansi-blue: #60a5fa;
40
36
  --ansi-magenta: #c98ce0;
41
37
  --ansi-cyan: #4dc9c9;
42
- --ansi-white: var(--text-secondary);
43
- --ansi-bright-black: var(--text-tertiary);
44
38
  --ansi-bright-red: #ff8a84;
45
39
  --ansi-bright-green: #5ee3a8;
46
40
  --ansi-bright-yellow: #f0c56a;
47
41
  --ansi-bright-blue: #8bbdfb;
48
42
  --ansi-bright-magenta: #e0a8f0;
49
43
  --ansi-bright-cyan: #7ddede;
50
- --ansi-bright-white: var(--text-primary);
51
44
  --mono: 'IBM Plex Mono', monospace;
52
45
  --serif: 'Playfair Display', serif;
53
46
  --card-gap: 7px;
@@ -61,6 +54,18 @@
61
54
  --modal-zoom: 1;
62
55
  }
63
56
 
57
+ /* Tokens derived from theme colors live on body, where color themes set those colors;
58
+ on :root they would resolve to the defaults before a theme applies. */
59
+ body {
60
+ /* Selection reads as a recess against the darker surface here, but light theme's deep tone
61
+ sits within a shade of the sidebar, so there it has to rise instead. */
62
+ --session-active-bg: var(--bg-deep);
63
+ --ansi-black: var(--text-muted);
64
+ --ansi-white: var(--text-secondary);
65
+ --ansi-bright-black: var(--text-tertiary);
66
+ --ansi-bright-white: var(--text-primary);
67
+ }
68
+
64
69
  * {
65
70
  box-sizing: border-box;
66
71
  margin: 0;
@@ -114,8 +119,8 @@ body::before {
114
119
 
115
120
  /* #region SIDEBAR */
116
121
  .sidebar {
117
- width: var(--sidebar-width, 310px);
118
- background: var(--bg-surface);
122
+ width: var(--sidebar-width, 415px);
123
+ background: var(--sidebar-bg, var(--bg-surface));
119
124
  border-right: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
120
125
  box-shadow: 1px 0 12px rgba(0, 0, 0, 0.04);
121
126
  display: flex;
@@ -231,6 +236,37 @@ body::before {
231
236
  display: none;
232
237
  }
233
238
 
239
+ .new-session-pill {
240
+ margin-left: auto;
241
+ padding: 4px 10px;
242
+ font: inherit;
243
+ font-size: 11px;
244
+ font-weight: 500;
245
+ letter-spacing: 0.04em;
246
+ color: var(--text-secondary);
247
+ background: transparent;
248
+ border: 1px dashed color-mix(in srgb, var(--text-secondary) 40%, var(--border));
249
+ border-radius: 999px;
250
+ white-space: nowrap;
251
+ cursor: pointer;
252
+ transition:
253
+ color 0.2s ease,
254
+ border-color 0.2s ease,
255
+ background 0.2s ease;
256
+ }
257
+
258
+ .new-session-pill:hover,
259
+ .new-session-pill:focus-visible {
260
+ color: var(--accent-text);
261
+ border-color: var(--accent);
262
+ background: var(--accent-dim);
263
+ outline: none;
264
+ }
265
+
266
+ .sidebar.collapsed .new-session-pill {
267
+ display: none;
268
+ }
269
+
234
270
  .sidebar-toggle-btn {
235
271
  width: 28px;
236
272
  height: 28px;
@@ -318,12 +354,52 @@ body::before {
318
354
  border: 1px solid var(--border);
319
355
  border-radius: 12px;
320
356
  }
321
- .offline-card svg {
322
- width: 56px;
323
- height: 56px;
324
- opacity: 0.4;
357
+ .clawd-sleep {
358
+ position: relative;
359
+ display: inline-block;
325
360
  margin-bottom: 1.5rem;
326
361
  }
362
+
363
+ .clawd-asleep {
364
+ display: block;
365
+ animation: clawd-breathe 3s ease-in-out infinite;
366
+ }
367
+
368
+ .clawd-zzz {
369
+ position: absolute;
370
+ top: -6px;
371
+ right: -14px;
372
+ color: var(--text-muted);
373
+ font: 600 13px var(--mono, monospace);
374
+ animation: clawd-zzz 3s ease-out infinite;
375
+ }
376
+
377
+ @keyframes clawd-breathe {
378
+ 50% {
379
+ transform: scaleY(0.93);
380
+ }
381
+ }
382
+
383
+ @keyframes clawd-zzz {
384
+ from {
385
+ opacity: 0;
386
+ transform: translate(0, 6px);
387
+ }
388
+ 30% {
389
+ opacity: 1;
390
+ }
391
+ to {
392
+ opacity: 0;
393
+ transform: translate(6px, -10px);
394
+ }
395
+ }
396
+
397
+ @media (prefers-reduced-motion: reduce) {
398
+ .clawd-asleep,
399
+ .clawd-zzz {
400
+ animation: none;
401
+ }
402
+ }
327
403
  .offline-card h2 {
328
404
  font-size: 1.15rem;
329
405
  font-weight: 600;
@@ -571,7 +647,7 @@ body::before {
571
647
  width: 100%;
572
648
  padding: 13px 15px;
573
649
  margin-bottom: 6px;
574
- background: transparent;
650
+ background: var(--sidebar-item-bg, transparent);
575
651
  border: 1px solid var(--border);
576
652
  border-radius: 9px;
577
653
  text-align: left;
@@ -579,6 +655,100 @@ body::before {
579
655
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
580
656
  }
581
657
 
658
+ .session-skeleton {
659
+ display: none;
660
+ flex-direction: column;
661
+ gap: 9px;
662
+ padding: 15px;
663
+ margin-bottom: 6px;
664
+ border: 1px solid var(--border);
665
+ border-radius: 9px;
666
+ }
667
+
668
+ body.booting .session-skeleton {
669
+ display: flex;
670
+ }
671
+
672
+ .session-skeleton span {
673
+ height: 9px;
674
+ width: 70%;
675
+ border-radius: 4px;
676
+ background: var(--border);
677
+ animation: breathe 1.4s ease-in-out infinite;
678
+ }
679
+
680
+ .session-skeleton span + span {
681
+ width: 40%;
682
+ }
683
+
684
+ body.booting #no-session {
685
+ display: none;
686
+ }
687
+
688
+ .boot-splash {
689
+ display: none;
690
+ flex: 1;
691
+ }
692
+
693
+ .boot-splash,
694
+ .terminal-boot {
695
+ flex-direction: column;
696
+ align-items: center;
697
+ justify-content: center;
698
+ gap: 14px;
699
+ color: var(--text-muted);
700
+ font-size: 12px;
701
+ }
702
+
703
+ body.booting .boot-splash {
704
+ display: flex;
705
+ animation: boot-fade 0.3s ease-out 0.15s both;
706
+ }
707
+
708
+ .clawd {
709
+ width: 64px;
710
+ height: 40px;
711
+ fill: #d97757;
712
+ overflow: visible;
713
+ transform-origin: 50% 100%;
714
+ }
715
+
716
+ .clawd-jump {
717
+ animation: clawd-jump 0.9s ease-in-out infinite;
718
+ }
719
+
720
+ @keyframes clawd-jump {
721
+ 0%,
722
+ 100% {
723
+ transform: translateY(0) scale(1, 1);
724
+ }
725
+ 15% {
726
+ transform: translateY(0) scale(1.1, 0.85);
727
+ }
728
+ 45% {
729
+ transform: translateY(-14px) scale(0.95, 1.05);
730
+ }
731
+ 70% {
732
+ transform: translateY(0) scale(1.08, 0.9);
733
+ }
734
+ 85% {
735
+ transform: translateY(0) scale(1, 1);
736
+ }
737
+ }
738
+
739
+ @keyframes boot-fade {
740
+ from {
741
+ opacity: 0;
742
+ }
743
+ }
744
+
745
+ @media (prefers-reduced-motion: reduce) {
746
+ .session-skeleton span,
747
+ .clawd-jump {
748
+ animation: none;
749
+ }
750
+ }
751
+
582
752
  /* `.active` is the open session, `.kb-selected` the keyboard cursor. They own different
583
753
  properties — fill and border — so the cursor landing on the open session adds to it
584
754
  instead of replacing how it looks. */
@@ -586,8 +756,12 @@ body::before {
586
756
  background: var(--session-active-bg);
587
757
  }
588
758
 
589
- .session-item.kb-selected {
759
+ .session-item.kb-selected,
760
+ .terminal-prompt button:focus-visible {
590
761
  border-color: var(--accent);
762
+ box-shadow:
763
+ inset 0 0 0 1px var(--accent),
764
+ 0 0 10px var(--accent-glow);
591
765
  }
592
766
 
593
767
  .session-item.stale {
@@ -645,7 +819,10 @@ body::before {
645
819
  padding-right: 22px;
646
820
  }
647
821
 
648
- .session-indicators .pulse {
822
+ .session-indicators .pulse,
823
+ .wf-live-name .pulse,
824
+ .session-waiting .pulse {
825
+ flex: none;
649
826
  width: 6px;
650
827
  height: 6px;
651
828
  background: var(--accent);
@@ -665,6 +842,19 @@ body::before {
665
842
  }
666
843
  }
667
844
 
845
+ .session-item.session-placeholder {
846
+ border-style: dashed;
847
+ }
848
+
849
+ .session-waiting {
850
+ display: flex;
851
+ align-items: center;
852
+ gap: 6px;
853
+ margin-top: var(--card-gap-tight);
854
+ font-size: 11px;
855
+ color: var(--text-muted);
856
+ }
857
+
668
858
  .session-secondary {
669
859
  font-size: 12px;
670
860
  font-weight: 450;
@@ -769,7 +959,10 @@ body::before {
769
959
  transition: width 0.5s ease-out;
770
960
  }
771
961
 
772
- .session-item:not(.active) .progress-fill {
962
+ /* The live-workflow bar takes the muted fill too: its card already carries a pulsing
963
+ accent dot, and a second accent bar under it shouts. */
964
+ .session-item:not(.active) .progress-fill,
965
+ .wf-live-bar .progress-fill {
773
966
  background: color-mix(in srgb, var(--text-tertiary) 55%, transparent);
774
967
  }
775
968
 
@@ -900,17 +1093,6 @@ body::before {
900
1093
  gap: 3px 10px;
901
1094
  }
902
1095
 
903
- .zen-panel .linked-docs-section {
904
- margin-top: 12px;
905
- padding-top: 10px;
906
- border-top: 1px solid var(--border);
907
- }
908
-
909
- .zen-panel .artifacts-section {
910
- padding-top: 10px;
911
- border-top: 1px solid var(--border);
912
- }
913
-
914
1096
  .zen-scratchpad {
915
1097
  display: flex;
916
1098
  align-items: center;
@@ -1920,7 +2102,8 @@ body::before {
1920
2102
  .team-info-btn,
1921
2103
  .plan-indicator,
1922
2104
  .loop-badge,
1923
- .workflow-badge {
2105
+ .workflow-badge,
2106
+ .terminal-badge {
1924
2107
  width: 18px;
1925
2108
  height: 18px;
1926
2109
  display: inline-flex;
@@ -2540,98 +2723,356 @@ body::before {
2540
2723
 
2541
2724
  /* #endregion */
2542
2725
 
2543
- /* #region MESSAGE_PANEL */
2544
- .message-panel {
2545
- position: fixed;
2546
- top: 0;
2547
- right: 0;
2548
- width: var(--message-panel-width, 540px);
2549
- height: 100vh;
2550
- background: var(--bg-deep);
2551
- border-left: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
2552
- box-shadow: -1px 0 12px rgba(0, 0, 0, 0.04);
2726
+ /* #region TERMINAL */
2727
+ .terminal-pane {
2728
+ position: relative;
2729
+ flex: 1;
2553
2730
  display: none;
2554
2731
  flex-direction: column;
2555
- z-index: 99;
2556
- overflow: hidden;
2732
+ min-height: 0;
2733
+ padding: 8px 12px 12px;
2734
+ gap: 6px;
2557
2735
  }
2558
- .message-panel.visible {
2559
- display: flex;
2736
+
2737
+ .session-view.terminal-mode .kanban,
2738
+ .session-view.terminal-mode .agent-footer {
2739
+ display: none;
2560
2740
  }
2561
- .message-panel.msg-expanded-wide {
2562
- width: 60vw;
2741
+
2742
+ .session-view.terminal-mode .terminal-pane {
2743
+ display: flex;
2563
2744
  }
2564
- .message-panel-header {
2565
- padding: 16px 20px;
2745
+
2746
+ .terminal-bar {
2566
2747
  display: flex;
2567
2748
  align-items: center;
2568
2749
  justify-content: space-between;
2569
- background-image: linear-gradient(to right, transparent, var(--border), transparent);
2570
- background-size: 100% 1px;
2571
- background-repeat: no-repeat;
2572
- background-position: bottom;
2573
- }
2574
- .message-panel-header h3 {
2575
- font-family: var(--serif);
2576
- font-size: 14px;
2577
- font-weight: 500;
2750
+ gap: 8px;
2751
+ font-family: var(--font-mono);
2752
+ font-size: 12px;
2753
+ color: var(--text-muted);
2578
2754
  }
2579
- .message-panel-content {
2580
- flex: 1 1 0;
2581
- height: 0;
2755
+
2756
+ .terminal-host {
2757
+ flex: 1;
2582
2758
  min-height: 0;
2583
- overflow-y: auto;
2584
- padding: 12px 16px;
2585
- }
2586
- .message-panel-content > * + * {
2587
- margin-top: 8px;
2759
+ overflow: hidden;
2760
+ background: var(--bg-deep);
2588
2761
  }
2589
- .msg-item {
2590
- display: flex;
2591
- gap: 8px;
2592
- padding: 8px 10px;
2593
- border-radius: 6px;
2594
- font-size: 12px;
2595
- line-height: 1.4;
2596
- background: var(--bg-surface);
2597
- border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
2762
+
2763
+ .terminal-pane:has(.terminal-prompt.visible) .xterm {
2764
+ visibility: hidden;
2598
2765
  }
2599
- .msg-item.msg-user {
2600
- border-left: 3px solid var(--gold);
2766
+
2767
+ .terminal-host .xterm {
2768
+ height: 100%;
2601
2769
  }
2602
- .msg-queued-tag {
2603
- margin-left: 8px;
2604
- padding: 0 5px;
2605
- border-radius: 3px;
2606
- font-size: 9px;
2607
- letter-spacing: 0.06em;
2608
- text-transform: uppercase;
2609
- color: var(--gold);
2610
- background: color-mix(in srgb, var(--gold) 14%, transparent);
2770
+
2771
+ /* xterm.css paints the viewport #000; it shows below the last row when the height is not a whole number of rows. */
2772
+ .terminal-host .xterm .xterm-viewport {
2773
+ background-color: var(--bg-deep);
2611
2774
  }
2612
- .msg-item.msg-assistant {
2613
- border-left: 3px solid var(--accent);
2775
+
2776
+ .terminal-manager-modal {
2777
+ width: 90%;
2778
+ max-width: 720px;
2779
+ max-height: 85vh;
2780
+ display: flex;
2781
+ flex-direction: column;
2614
2782
  }
2615
- .msg-item.msg-tool {
2616
- border-left: 2px solid color-mix(in srgb, var(--text-muted) 45%, transparent);
2617
- font-size: 11px;
2618
- padding: 5px 10px;
2619
- color: var(--text-secondary);
2783
+
2784
+ .terminal-manager-row {
2785
+ display: flex;
2786
+ align-items: center;
2787
+ gap: 14px;
2788
+ padding: 14px 4px;
2789
+ border-bottom: 1px solid var(--border);
2620
2790
  }
2621
- .msg-item.selected,
2622
- .msg-item.selected:hover {
2623
- background: var(--bg-elevated);
2624
- box-shadow:
2625
- 0 0 0 1px var(--accent),
2626
- 0 0 12px var(--accent-dim);
2791
+
2792
+ .terminal-manager-row:last-child {
2793
+ border-bottom: none;
2627
2794
  }
2628
- .msg-icon {
2795
+
2796
+ .terminal-manager-dot {
2629
2797
  flex-shrink: 0;
2630
- width: 16px;
2631
- height: 16px;
2632
- margin-top: 2px;
2633
- opacity: 0.9;
2634
- }
2798
+ width: 8px;
2799
+ height: 8px;
2800
+ border-radius: 50%;
2801
+ border: 1.5px solid var(--text-muted);
2802
+ }
2803
+
2804
+ .terminal-manager-row.attached .terminal-manager-dot {
2805
+ border-color: var(--success);
2806
+ background: var(--success);
2807
+ }
2808
+
2809
+ .terminal-manager-info {
2810
+ flex: 1;
2811
+ min-width: 0;
2812
+ display: flex;
2813
+ flex-direction: column;
2814
+ gap: 4px;
2815
+ }
2816
+
2817
+ .terminal-manager-name {
2818
+ display: flex;
2819
+ align-items: baseline;
2820
+ gap: 8px;
2821
+ min-width: 0;
2822
+ font-size: 14px;
2823
+ font-weight: 600;
2824
+ color: var(--text-primary);
2825
+ }
2826
+
2827
+ .terminal-manager-title {
2828
+ overflow: hidden;
2829
+ text-overflow: ellipsis;
2830
+ white-space: nowrap;
2831
+ }
2832
+
2833
+ .terminal-manager-here {
2834
+ flex-shrink: 0;
2835
+ font-size: 12px;
2836
+ font-weight: 400;
2837
+ color: var(--text-muted);
2838
+ }
2839
+
2840
+ .terminal-manager-meta {
2841
+ display: flex;
2842
+ align-items: center;
2843
+ gap: 14px;
2844
+ min-width: 0;
2845
+ font-size: 12px;
2846
+ color: var(--text-muted);
2847
+ white-space: nowrap;
2848
+ }
2849
+
2850
+ .terminal-manager-mode {
2851
+ color: var(--text-secondary);
2852
+ }
2853
+
2854
+ .terminal-manager-cwd {
2855
+ overflow: hidden;
2856
+ text-overflow: ellipsis;
2857
+ }
2858
+
2859
+ .terminal-manager-actions {
2860
+ display: flex;
2861
+ gap: 8px;
2862
+ flex-shrink: 0;
2863
+ }
2864
+
2865
+ .terminal-manager-actions .btn,
2866
+ .terminal-manager-footer .btn {
2867
+ padding: 6px 14px;
2868
+ }
2869
+
2870
+ .terminal-manager-end.btn-secondary:hover {
2871
+ color: var(--danger);
2872
+ border-color: color-mix(in srgb, var(--danger) 50%, transparent);
2873
+ background: color-mix(in srgb, var(--danger) 8%, transparent);
2874
+ }
2875
+
2876
+ .terminal-manager-footer {
2877
+ align-items: center;
2878
+ justify-content: space-between;
2879
+ margin-top: 12px;
2880
+ border-top: 1px solid var(--border);
2881
+ }
2882
+
2883
+ .terminal-manager-count {
2884
+ font-size: 12px;
2885
+ color: var(--text-muted);
2886
+ }
2887
+
2888
+ .terminal-manager-empty {
2889
+ color: var(--text-muted);
2890
+ padding: 24px 0;
2891
+ text-align: center;
2892
+ }
2893
+
2894
+ .terminal-boot {
2895
+ display: none;
2896
+ position: absolute;
2897
+ z-index: 1;
2898
+ inset: 0;
2899
+ pointer-events: none;
2900
+ }
2901
+
2902
+ .terminal-boot.visible {
2903
+ display: flex;
2904
+ animation: boot-fade 0.3s ease-out 0.2s both;
2905
+ }
2906
+
2907
+ /* Opacity, not visibility: a hidden textarea drops focus, and the terminal must keep it. */
2908
+ .terminal-pane:has(.terminal-boot.visible) .xterm {
2909
+ opacity: 0;
2910
+ }
2911
+
2912
+ .terminal-prompt {
2913
+ display: none;
2914
+ position: absolute;
2915
+ z-index: 1;
2916
+ top: 50%;
2917
+ left: 50%;
2918
+ transform: translate(-50%, -50%);
2919
+ width: min(440px, calc(100% - 32px));
2920
+ flex-direction: column;
2921
+ align-items: center;
2922
+ gap: 16px;
2923
+ padding: 28px 28px 20px;
2924
+ text-align: center;
2925
+ border: 1px solid var(--border);
2926
+ border-radius: 12px;
2927
+ box-shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.25);
2928
+ background: var(--bg-surface);
2929
+ color: var(--text-secondary);
2930
+ font-size: 13px;
2931
+ }
2932
+
2933
+ .terminal-prompt.visible {
2934
+ display: flex;
2935
+ }
2936
+
2937
+ .terminal-prompt-text {
2938
+ display: flex;
2939
+ flex-direction: column;
2940
+ gap: 4px;
2941
+ line-height: 1.5;
2942
+ }
2943
+
2944
+ .terminal-prompt-title {
2945
+ color: var(--text-primary);
2946
+ font-size: 15px;
2947
+ font-weight: 600;
2948
+ }
2949
+
2950
+ .terminal-prompt-actions {
2951
+ display: flex;
2952
+ justify-content: center;
2953
+ gap: 8px;
2954
+ flex-wrap: wrap;
2955
+ }
2956
+
2957
+ .terminal-prompt button:focus-visible {
2958
+ outline: none;
2959
+ }
2960
+
2961
+ .terminal-host:focus-within {
2962
+ box-shadow: inset 0 0 0 1px var(--accent);
2963
+ }
2964
+
2965
+ .terminal-prompt:has(.terminal-prompt-output) {
2966
+ width: min(640px, calc(100% - 32px));
2967
+ }
2968
+
2969
+ .terminal-prompt .terminal-prompt-output {
2970
+ align-self: stretch;
2971
+ max-height: 9.5em;
2972
+ overflow: auto;
2973
+ font-size: 12px;
2974
+ text-align: left;
2975
+ white-space: pre;
2976
+ }
2977
+
2978
+ #terminal-toggle.active {
2979
+ color: var(--accent);
2980
+ }
2981
+
2982
+ /* #endregion */
2983
+
2984
+ /* #region MESSAGE_PANEL */
2985
+ .message-panel {
2986
+ position: fixed;
2987
+ top: 0;
2988
+ right: 0;
2989
+ width: var(--message-panel-width, 540px);
2990
+ height: 100vh;
2991
+ background: var(--bg-deep);
2992
+ border-left: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
2993
+ box-shadow: -1px 0 12px rgba(0, 0, 0, 0.04);
2994
+ display: none;
2995
+ flex-direction: column;
2996
+ z-index: 99;
2997
+ overflow: hidden;
2998
+ }
2999
+ .message-panel.visible {
3000
+ display: flex;
3001
+ }
3002
+ .message-panel.msg-expanded-wide {
3003
+ width: 60vw;
3004
+ }
3005
+ .message-panel-header {
3006
+ padding: 16px 20px;
3007
+ display: flex;
3008
+ align-items: center;
3009
+ justify-content: space-between;
3010
+ background-image: linear-gradient(to right, transparent, var(--border), transparent);
3011
+ background-size: 100% 1px;
3012
+ background-repeat: no-repeat;
3013
+ background-position: bottom;
3014
+ }
3015
+ .message-panel-header h3 {
3016
+ font-family: var(--serif);
3017
+ font-size: 14px;
3018
+ font-weight: 500;
3019
+ }
3020
+ .message-panel-content {
3021
+ flex: 1 1 0;
3022
+ height: 0;
3023
+ min-height: 0;
3024
+ overflow-y: auto;
3025
+ padding: 12px 16px;
3026
+ }
3027
+ .message-panel-content > * + * {
3028
+ margin-top: 8px;
3029
+ }
3030
+ .msg-item {
3031
+ display: flex;
3032
+ gap: 8px;
3033
+ padding: 8px 10px;
3034
+ border-radius: 6px;
3035
+ font-size: 12px;
3036
+ line-height: 1.4;
3037
+ background: var(--bg-surface);
3038
+ border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
3039
+ }
3040
+ .msg-item.msg-user {
3041
+ border-left: 3px solid var(--gold);
3042
+ }
3043
+ .msg-queued-tag {
3044
+ margin-left: 8px;
3045
+ padding: 0 5px;
3046
+ border-radius: 3px;
3047
+ font-size: 9px;
3048
+ letter-spacing: 0.06em;
3049
+ text-transform: uppercase;
3050
+ color: var(--gold);
3051
+ background: color-mix(in srgb, var(--gold) 14%, transparent);
3052
+ }
3053
+ .msg-item.msg-assistant {
3054
+ border-left: 3px solid var(--accent);
3055
+ }
3056
+ .msg-item.msg-tool {
3057
+ border-left: 2px solid color-mix(in srgb, var(--text-muted) 45%, transparent);
3058
+ font-size: 11px;
3059
+ padding: 5px 10px;
3060
+ color: var(--text-secondary);
3061
+ }
3062
+ .msg-item.selected,
3063
+ .msg-item.selected:hover {
3064
+ background: var(--bg-elevated);
3065
+ box-shadow:
3066
+ 0 0 0 1px var(--accent),
3067
+ 0 0 12px var(--accent-dim);
3068
+ }
3069
+ .msg-icon {
3070
+ flex-shrink: 0;
3071
+ width: 16px;
3072
+ height: 16px;
3073
+ margin-top: 2px;
3074
+ opacity: 0.9;
3075
+ }
2635
3076
  .msg-body {
2636
3077
  flex: 1;
2637
3078
  min-width: 0;
@@ -3057,6 +3498,10 @@ body::before {
3057
3498
  font-family: var(--font-mono);
3058
3499
  font-size: 0.85rem;
3059
3500
  }
3501
+ .msg-detail-pre code.hljs {
3502
+ background: transparent;
3503
+ padding: 0;
3504
+ }
3060
3505
  .msg-detail-pre-tinted {
3061
3506
  background: color-mix(in srgb, var(--text-muted) 8%, transparent);
3062
3507
  border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
@@ -3861,6 +4306,12 @@ body::before {
3861
4306
  flex-shrink: 0;
3862
4307
  color: var(--text-secondary);
3863
4308
  }
4309
+ .terminal-badge {
4310
+ color: var(--text-secondary);
4311
+ }
4312
+ .terminal-badge:hover {
4313
+ color: var(--accent, var(--text-primary));
4314
+ }
3864
4315
  .agent-badge-waiting {
3865
4316
  color: var(--warning);
3866
4317
  animation: agent-badge-pulse 1.6s ease-in-out infinite;
@@ -3904,6 +4355,7 @@ body::before {
3904
4355
  }
3905
4356
 
3906
4357
  .linked-doc-list,
4358
+ .scratch-file-list,
3907
4359
  .artifact-list {
3908
4360
  list-style: none;
3909
4361
  padding: 0;
@@ -3914,6 +4366,7 @@ body::before {
3914
4366
  }
3915
4367
 
3916
4368
  .linked-doc-item,
4369
+ .scratch-file-item,
3917
4370
  .artifact-item {
3918
4371
  display: flex;
3919
4372
  align-items: baseline;
@@ -3922,11 +4375,16 @@ body::before {
3922
4375
  }
3923
4376
 
3924
4377
  .linked-doc-link,
4378
+ .scratch-file-link,
3925
4379
  .artifact-link {
3926
4380
  color: var(--accent-text);
3927
4381
  text-decoration: underline;
3928
4382
  text-decoration-style: dotted;
3929
4383
  text-underline-offset: 3px;
4384
+ }
4385
+
4386
+ .linked-doc-link,
4387
+ .artifact-link {
3930
4388
  flex-shrink: 0;
3931
4389
  }
3932
4390
 
@@ -3940,51 +4398,209 @@ body::before {
3940
4398
  min-width: 0;
3941
4399
  }
3942
4400
 
4401
+ .scratch-file-time {
4402
+ color: var(--text-muted);
4403
+ font-size: 11px;
4404
+ opacity: 0.7;
4405
+ white-space: nowrap;
4406
+ flex-shrink: 0;
4407
+ }
4408
+
3943
4409
  /* Rides on the shared .row-actions group; only the reveal trigger differs — per row
3944
4410
  here, per grid in the session info. margin-left:auto pins the group to the same
3945
4411
  right edge however long the names in between are. */
3946
4412
  .linked-doc-actions,
4413
+ .scratch-file-actions,
3947
4414
  .artifact-actions {
3948
4415
  margin-left: auto;
3949
4416
  align-self: center;
3950
4417
  flex-shrink: 0;
4418
+ /* Two .row-actions buttons wide (22px each, 4px gap), filled from the left, so a
4419
+ row with one action puts it in the same column as the rows that have two. */
4420
+ min-width: 48px;
4421
+ justify-content: flex-start;
3951
4422
  }
3952
4423
 
3953
4424
  .linked-doc-item:hover .linked-doc-actions,
4425
+ .scratch-file-item:hover .scratch-file-actions,
3954
4426
  .artifact-item:hover .artifact-actions {
3955
4427
  opacity: 1;
3956
4428
  }
3957
4429
 
3958
- /* The × is a glyph, not an svg, so .row-actions button svg does not size it. */
3959
- .linked-doc-remove {
3960
- font-family: var(--mono);
3961
- font-size: 15px;
3962
- line-height: 1;
4430
+ /* Hangs off the Scratchpad path row, so it carries no header of its own. */
4431
+ .scratch-files-section {
4432
+ margin-top: 6px;
4433
+ font-size: 11px;
4434
+ }
4435
+
4436
+ .scratch-file-link {
4437
+ background: none;
4438
+ border: none;
4439
+ padding: 0;
4440
+ font: inherit;
4441
+ cursor: pointer;
4442
+ text-align: left;
4443
+ /* A scratch name can be longer than the zen panel is wide; without this it pushes
4444
+ the action buttons out of their column. The full path is on the title. */
4445
+ min-width: 0;
4446
+ overflow: hidden;
4447
+ text-overflow: ellipsis;
4448
+ white-space: nowrap;
4449
+ }
4450
+
4451
+ .scratch-files-more {
4452
+ margin: 6px 0 0;
4453
+ font-size: 11px;
4454
+ }
4455
+
4456
+ /* A folder row wraps so its child list lands on its own full-width line under the
4457
+ name, indented one chevron in. */
4458
+ .scratch-folder-item {
4459
+ flex-wrap: wrap;
4460
+ }
4461
+
4462
+ .scratch-folder-item > .scratch-file-list,
4463
+ .scratch-folder-item > .scratch-folder-empty {
4464
+ flex-basis: 100%;
4465
+ margin-top: 4px;
4466
+ padding-left: 14px;
4467
+ }
4468
+
4469
+ .scratch-folder-empty {
4470
+ color: var(--text-muted);
4471
+ opacity: 0.7;
4472
+ }
4473
+
4474
+ .scratch-folder-toggle {
4475
+ display: inline-flex;
4476
+ align-items: center;
4477
+ gap: 4px;
4478
+ text-decoration: none;
4479
+ color: var(--text-secondary);
4480
+ }
4481
+
4482
+ /* The × is a glyph, not an svg, so .row-actions button svg does not size it. */
4483
+ .linked-doc-remove {
4484
+ font-family: var(--mono);
4485
+ font-size: 15px;
4486
+ line-height: 1;
4487
+ }
4488
+
4489
+ .linked-doc-actions .linked-doc-remove:hover {
4490
+ background: var(--danger-dim);
4491
+ border-color: var(--danger);
4492
+ color: var(--danger);
4493
+ }
4494
+
4495
+ /* A linked file the previewer can't render opens in the editor — the dashed
4496
+ underline keeps that different destination visible before the click. */
4497
+ .linked-doc-item.is-editor .linked-doc-link {
4498
+ color: var(--text-secondary);
4499
+ text-decoration-style: dashed;
4500
+ }
4501
+
4502
+ /* A section of the session panel: linked documents, artifacts. */
4503
+ .panel-section {
4504
+ margin-bottom: 16px;
4505
+ padding-top: 10px;
4506
+ border-top: 1px solid var(--border);
4507
+ font-size: 11px;
4508
+ }
4509
+
4510
+ .linked-docs-section {
4511
+ margin-top: 12px;
4512
+ }
4513
+
4514
+ /* Artifacts are read out of the transcript, so the section renders before the
4515
+ list arrives and stays in the DOM as the patch target when there is none. */
4516
+ .artifacts-section:empty,
4517
+ .scratch-files-section:empty,
4518
+ .workflow-live-section:empty {
4519
+ display: none;
4520
+ }
4521
+
4522
+ /* Its own card below the zen panel — the run is live state, not session detail, so it
4523
+ comes and goes on its own while the panel above stays put. */
4524
+ .workflow-live-section {
4525
+ margin-top: 10px;
4526
+ padding: 10px;
4527
+ background: var(--bg-elevated);
4528
+ border: 1px solid var(--border);
4529
+ border-radius: 8px;
4530
+ font-size: 11px;
4531
+ }
4532
+
4533
+ .wf-live {
4534
+ cursor: pointer;
4535
+ }
4536
+
4537
+ .wf-live-name {
4538
+ display: flex;
4539
+ align-items: center;
4540
+ gap: 6px;
4541
+ font-size: 12px;
4542
+ font-weight: 500;
4543
+ color: var(--text-primary);
4544
+ overflow: hidden;
4545
+ text-overflow: ellipsis;
4546
+ white-space: nowrap;
4547
+ }
4548
+
4549
+ .wf-live-bar {
4550
+ margin: 6px 0;
4551
+ }
4552
+
4553
+ .wf-live-phases {
4554
+ display: flex;
4555
+ flex-wrap: wrap;
4556
+ gap: 4px;
4557
+ }
4558
+
4559
+ /* A phase reads as one chip, so the dot goes in ::before rather than costing a span. */
4560
+ .wf-live-phase {
4561
+ display: flex;
4562
+ align-items: center;
4563
+ gap: 4px;
4564
+ padding: 1px 6px;
4565
+ border: 1px solid var(--border);
4566
+ border-radius: 10px;
4567
+ font-size: 10px;
4568
+ color: var(--text-secondary);
4569
+ }
4570
+
4571
+ .wf-live-phase::before {
4572
+ content: '';
4573
+ width: 5px;
4574
+ height: 5px;
4575
+ border-radius: 50%;
4576
+ background: var(--text-muted);
4577
+ }
4578
+
4579
+ .wf-live-phase.running::before {
4580
+ background: var(--accent);
4581
+ animation: pulse 2s ease-in-out infinite;
3963
4582
  }
3964
4583
 
3965
- .linked-doc-actions .linked-doc-remove:hover {
3966
- background: var(--danger-dim);
3967
- border-color: var(--danger);
3968
- color: var(--danger);
4584
+ .wf-live-phase.done::before {
4585
+ background: var(--ok, #3fb950);
3969
4586
  }
3970
4587
 
3971
- /* A linked file the previewer can't render opens in the editor — the dashed
3972
- underline keeps that different destination visible before the click. */
3973
- .linked-doc-item.is-editor .linked-doc-link {
3974
- color: var(--text-secondary);
3975
- text-decoration-style: dashed;
4588
+ .wf-live-phase.done {
4589
+ color: var(--text-muted);
3976
4590
  }
3977
4591
 
3978
- /* A section of the session panel: linked documents, artifacts. */
3979
- .panel-section {
3980
- margin-bottom: 16px;
3981
- font-size: 12px;
4592
+ .wf-live-phase-count {
4593
+ font-family: var(--font-mono);
3982
4594
  }
3983
4595
 
3984
- /* Artifacts are read out of the transcript, so the section renders before the
3985
- list arrives and stays in the DOM as the patch target when there is none. */
3986
- .artifacts-section:empty {
3987
- display: none;
4596
+ .wf-live-running {
4597
+ margin-top: 6px;
4598
+ overflow: hidden;
4599
+ text-overflow: ellipsis;
4600
+ white-space: nowrap;
4601
+ font-family: var(--font-mono);
4602
+ font-size: 10px;
4603
+ color: var(--text-muted);
3988
4604
  }
3989
4605
 
3990
4606
  .panel-section-header {
@@ -4266,7 +4882,7 @@ body.light {
4266
4882
  --text-secondary: #444444;
4267
4883
  --text-tertiary: #666666;
4268
4884
  --text-muted: #888888;
4269
- --accent-text: #b85a20;
4885
+ --accent-text: #a0501c;
4270
4886
  --accent-dim: rgba(232, 111, 51, 0.18);
4271
4887
  --accent-glow: rgba(232, 111, 51, 0.5);
4272
4888
  --gold: #a8842f;
@@ -4337,7 +4953,7 @@ body.light .msg-assistant .msg-text {
4337
4953
  .search-input {
4338
4954
  width: 100%;
4339
4955
  padding: 9px 32px 9px 12px;
4340
- background: var(--bg-deep);
4956
+ background: var(--sidebar-item-bg, var(--bg-deep));
4341
4957
  border: 1px solid transparent;
4342
4958
  border-radius: 6px;
4343
4959
  color: var(--text-primary);
@@ -4555,6 +5171,16 @@ body.light .msg-assistant .msg-text {
4555
5171
  padding-right: 8px;
4556
5172
  }
4557
5173
 
5174
+ #preview-modal-body .preview-image {
5175
+ display: block;
5176
+ max-width: 100%;
5177
+ max-height: 70vh;
5178
+ margin: 0 auto;
5179
+ border: 1px solid var(--border);
5180
+ border-radius: 4px;
5181
+ background: var(--bg-hover);
5182
+ }
5183
+
4558
5184
  #preview-modal-meta {
4559
5185
  margin-top: 12px;
4560
5186
  font-size: 11px;
@@ -4598,6 +5224,29 @@ body.light .msg-assistant .msg-text {
4598
5224
  padding-right: 0;
4599
5225
  }
4600
5226
 
5227
+ /* Source is read line by line, so it keeps its own line breaks and scrolls sideways
5228
+ instead of inheriting the body's `word-break: break-word`. */
5229
+ .preview-source {
5230
+ margin: 0;
5231
+ padding: 10px 12px;
5232
+ background: var(--bg-elevated);
5233
+ border: 1px solid var(--border);
5234
+ border-radius: 6px;
5235
+ overflow-x: auto;
5236
+ font-family: var(--mono);
5237
+ font-size: 12px;
5238
+ line-height: 1.55;
5239
+ white-space: pre;
5240
+ word-break: normal;
5241
+ tab-size: 4;
5242
+ }
5243
+
5244
+ .preview-source code {
5245
+ background: none;
5246
+ padding: 0;
5247
+ font: inherit;
5248
+ }
5249
+
4601
5250
  .preview-html-frame {
4602
5251
  width: 100%;
4603
5252
  height: 100%;
@@ -5150,6 +5799,232 @@ select.form-input option:checked {
5150
5799
 
5151
5800
  /* #endregion */
5152
5801
 
5802
+ /* #region NEW_SESSION */
5803
+ .modal.new-session-modal {
5804
+ width: 520px;
5805
+ max-width: calc(100vw - 32px);
5806
+ overflow: visible;
5807
+ }
5808
+
5809
+ .ns-body {
5810
+ display: flex;
5811
+ flex-direction: column;
5812
+ gap: 12px;
5813
+ overflow: visible;
5814
+ }
5815
+
5816
+ .ns-row {
5817
+ display: grid;
5818
+ grid-template-columns: 86px minmax(0, 1fr);
5819
+ align-items: start;
5820
+ gap: 12px;
5821
+ }
5822
+
5823
+ .new-session-modal.ns-resume .ns-extra {
5824
+ display: none;
5825
+ }
5826
+
5827
+ .ns-label {
5828
+ padding-top: 9px;
5829
+ font-size: 12px;
5830
+ font-weight: 500;
5831
+ color: var(--text-secondary);
5832
+ }
5833
+
5834
+ .ns-body .form-input {
5835
+ padding: 8px 10px;
5836
+ font-size: 13px;
5837
+ }
5838
+
5839
+ .ns-inline {
5840
+ display: flex;
5841
+ align-items: center;
5842
+ gap: 8px;
5843
+ }
5844
+
5845
+ .ns-inline .form-input {
5846
+ flex: 1;
5847
+ min-width: 0;
5848
+ }
5849
+
5850
+ .ns-body .btn.ns-browse {
5851
+ flex: none;
5852
+ padding: 8px 12px;
5853
+ }
5854
+
5855
+ .ns-folder-field {
5856
+ position: relative;
5857
+ }
5858
+
5859
+ .ns-dropdown {
5860
+ position: absolute;
5861
+ top: calc(100% + 4px);
5862
+ left: 0;
5863
+ right: 0;
5864
+ z-index: 2;
5865
+ max-height: 280px;
5866
+ overflow-y: auto;
5867
+ padding: 4px;
5868
+ background: var(--bg-surface);
5869
+ border: 1px solid var(--border);
5870
+ border-radius: 6px;
5871
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
5872
+ }
5873
+
5874
+ .ns-option {
5875
+ display: flex;
5876
+ align-items: baseline;
5877
+ gap: 8px;
5878
+ padding: 6px 8px;
5879
+ border-radius: 4px;
5880
+ cursor: pointer;
5881
+ font-size: 12px;
5882
+ }
5883
+
5884
+ .ns-option:hover,
5885
+ .ns-option.active {
5886
+ background: var(--bg-hover);
5887
+ }
5888
+
5889
+ .ns-option.active {
5890
+ box-shadow: inset 2px 0 0 var(--accent);
5891
+ }
5892
+
5893
+ .ns-option-name {
5894
+ flex: none;
5895
+ font-weight: 500;
5896
+ color: var(--text-primary);
5897
+ }
5898
+
5899
+ .ns-option-path {
5900
+ min-width: 0;
5901
+ overflow: hidden;
5902
+ text-overflow: ellipsis;
5903
+ white-space: nowrap;
5904
+ font-family: var(--mono);
5905
+ font-size: 11px;
5906
+ color: var(--text-muted);
5907
+ }
5908
+
5909
+ .ns-empty {
5910
+ display: flex;
5911
+ align-items: center;
5912
+ justify-content: space-between;
5913
+ gap: 8px;
5914
+ padding: 6px 8px;
5915
+ font-size: 12px;
5916
+ color: var(--text-muted);
5917
+ }
5918
+
5919
+ .ns-check {
5920
+ display: inline-flex;
5921
+ flex: none;
5922
+ align-items: center;
5923
+ gap: 6px;
5924
+ font-size: 12px;
5925
+ color: var(--text-primary);
5926
+ cursor: pointer;
5927
+ }
5928
+
5929
+ .ns-check input {
5930
+ accent-color: var(--accent);
5931
+ }
5932
+
5933
+ .ns-inline .form-input:disabled {
5934
+ opacity: 0.5;
5935
+ cursor: not-allowed;
5936
+ }
5937
+
5938
+ .ns-hint {
5939
+ margin-top: 4px;
5940
+ font-family: var(--mono);
5941
+ font-size: 11px;
5942
+ color: var(--text-muted);
5943
+ }
5944
+
5945
+ .ns-body textarea.form-input {
5946
+ min-height: 0;
5947
+ }
5948
+
5949
+ .ns-prompt-field {
5950
+ position: relative;
5951
+ }
5952
+
5953
+ .ns-prompt-field:has(.ns-mic:not([hidden])) textarea {
5954
+ padding-right: 36px;
5955
+ }
5956
+
5957
+ .ns-mic {
5958
+ position: absolute;
5959
+ top: 6px;
5960
+ right: 6px;
5961
+ display: flex;
5962
+ align-items: center;
5963
+ justify-content: center;
5964
+ width: 26px;
5965
+ height: 26px;
5966
+ padding: 0;
5967
+ color: var(--text-muted);
5968
+ background: transparent;
5969
+ border: none;
5970
+ border-radius: 4px;
5971
+ cursor: pointer;
5972
+ }
5973
+
5974
+ .ns-mic[hidden] {
5975
+ display: none;
5976
+ }
5977
+
5978
+ .ns-mic svg {
5979
+ width: 15px;
5980
+ height: 15px;
5981
+ }
5982
+
5983
+ .ns-mic:hover {
5984
+ color: var(--text-primary);
5985
+ background: var(--bg-hover);
5986
+ }
5987
+
5988
+ .ns-mic[aria-pressed='true'] {
5989
+ color: var(--danger);
5990
+ animation: ns-mic-pulse 1.2s ease-in-out infinite;
5991
+ }
5992
+
5993
+ @keyframes ns-mic-pulse {
5994
+ 50% {
5995
+ opacity: 0.45;
5996
+ }
5997
+ }
5998
+
5999
+ @media (prefers-reduced-motion: reduce) {
6000
+ .ns-mic[aria-pressed='true'] {
6001
+ animation: none;
6002
+ }
6003
+ }
6004
+
6005
+ .ns-error {
6006
+ font-size: 12px;
6007
+ color: var(--danger);
6008
+ }
6009
+
6010
+ .ns-footer {
6011
+ align-items: center;
6012
+ }
6013
+
6014
+ .ns-footer .btn-primary:disabled {
6015
+ opacity: 0.5;
6016
+ cursor: not-allowed;
6017
+ transform: none;
6018
+ box-shadow: none;
6019
+ }
6020
+
6021
+ @media (prefers-reduced-motion: reduce) {
6022
+ .session-waiting .pulse {
6023
+ animation: none;
6024
+ }
6025
+ }
6026
+ /* #endregion */
6027
+
5153
6028
  /* #region TOOL_STATS */
5154
6029
  .modal.tool-stats-modal {
5155
6030
  width: 90%;
@@ -5753,7 +6628,8 @@ pre.mermaid svg {
5753
6628
 
5754
6629
  .project-group-header .group-chevron,
5755
6630
  .session-group-header .group-chevron,
5756
- .sg-section-toggle .group-chevron {
6631
+ .sg-section-toggle .group-chevron,
6632
+ .scratch-folder-toggle .group-chevron {
5757
6633
  transition: transform 0.15s ease;
5758
6634
  flex-shrink: 0;
5759
6635
  display: block;
@@ -5761,12 +6637,14 @@ pre.mermaid svg {
5761
6637
 
5762
6638
  .project-group-header.collapsed .group-chevron,
5763
6639
  .session-group-header.collapsed .group-chevron,
5764
- .sg-section-toggle.collapsed .group-chevron {
6640
+ .sg-section-toggle.collapsed .group-chevron,
6641
+ .scratch-folder-toggle.collapsed .group-chevron {
5765
6642
  transform: rotate(-90deg);
5766
6643
  }
5767
6644
 
5768
6645
  .project-group-header .group-name,
5769
6646
  .session-group-header .group-name {
6647
+ flex: 1;
5770
6648
  overflow: hidden;
5771
6649
  text-overflow: ellipsis;
5772
6650
  white-space: nowrap;
@@ -5776,18 +6654,46 @@ pre.mermaid svg {
5776
6654
  flex: 1;
5777
6655
  }
5778
6656
 
5779
- .project-view-btn {
6657
+ .project-view-btn,
6658
+ .project-new-btn,
6659
+ .header-pad-btn {
5780
6660
  color: var(--text-muted);
5781
6661
  cursor: pointer;
5782
6662
  display: flex;
5783
6663
  align-items: center;
5784
- transition: color 0.15s;
6664
+ transition:
6665
+ color 0.15s,
6666
+ opacity 0.15s;
6667
+ }
6668
+
6669
+ .project-view-btn:hover,
6670
+ .project-new-btn:hover,
6671
+ .header-pad-btn:hover {
6672
+ color: var(--accent);
6673
+ }
6674
+
6675
+ .project-new-btn,
6676
+ .header-pad-btn {
6677
+ opacity: 0;
6678
+ }
6679
+
6680
+ .project-group-header:hover .project-new-btn,
6681
+ .project-group-header.kb-selected .project-new-btn {
6682
+ opacity: 1;
5785
6683
  }
5786
6684
 
5787
- .project-view-btn:hover {
6685
+ .header-pad-btn.has-pad {
5788
6686
  color: var(--accent);
5789
6687
  }
5790
6688
 
6689
+ .header-pad-btn.has-pad,
6690
+ .project-group-header:hover .header-pad-btn,
6691
+ .project-group-header.kb-selected .header-pad-btn,
6692
+ .session-group-header:hover .header-pad-btn,
6693
+ .session-group-header.kb-selected .header-pad-btn {
6694
+ opacity: 1;
6695
+ }
6696
+
5791
6697
  .project-group-header .group-count {
5792
6698
  font-weight: 400;
5793
6699
  color: var(--text-muted);
@@ -5917,6 +6823,16 @@ pre.mermaid svg {
5917
6823
  color: var(--accent);
5918
6824
  }
5919
6825
 
6826
+ .sg-transient .group-name {
6827
+ font-weight: 500;
6828
+ color: var(--text-secondary);
6829
+ }
6830
+
6831
+ .sg-keep {
6832
+ font-size: 10px;
6833
+ font-weight: 500;
6834
+ }
6835
+
5920
6836
  .pinned-sub-items.collapsed {
5921
6837
  display: none;
5922
6838
  }