claude-code-kanban 4.27.0 → 4.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,7 +756,8 @@ 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);
591
762
  box-shadow:
592
763
  inset 0 0 0 1px var(--accent),
@@ -649,7 +820,8 @@ body::before {
649
820
  }
650
821
 
651
822
  .session-indicators .pulse,
652
- .wf-live-name .pulse {
823
+ .wf-live-name .pulse,
824
+ .session-waiting .pulse {
653
825
  flex: none;
654
826
  width: 6px;
655
827
  height: 6px;
@@ -670,6 +842,19 @@ body::before {
670
842
  }
671
843
  }
672
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
+
673
858
  .session-secondary {
674
859
  font-size: 12px;
675
860
  font-weight: 450;
@@ -1917,7 +2102,8 @@ body::before {
1917
2102
  .team-info-btn,
1918
2103
  .plan-indicator,
1919
2104
  .loop-badge,
1920
- .workflow-badge {
2105
+ .workflow-badge,
2106
+ .terminal-badge {
1921
2107
  width: 18px;
1922
2108
  height: 18px;
1923
2109
  display: inline-flex;
@@ -2491,48 +2677,306 @@ body::before {
2491
2677
  border-color 0.1s ease,
2492
2678
  color 0.1s ease;
2493
2679
  }
2494
- .row-actions button:hover {
2495
- background: var(--bg-hover);
2496
- border-color: var(--accent);
2497
- color: var(--accent-text);
2680
+ .row-actions button:hover {
2681
+ background: var(--bg-hover);
2682
+ border-color: var(--accent);
2683
+ color: var(--accent-text);
2684
+ }
2685
+ .row-actions button svg {
2686
+ width: 12px;
2687
+ height: 12px;
2688
+ display: block;
2689
+ }
2690
+ @media (hover: none) {
2691
+ .row-actions {
2692
+ opacity: 1;
2693
+ }
2694
+ }
2695
+
2696
+ /* #endregion */
2697
+
2698
+ /* #region OWNER_FILTER */
2699
+ .kanban {
2700
+ position: relative;
2701
+ }
2702
+
2703
+ .owner-filter-bar {
2704
+ display: none;
2705
+ position: absolute;
2706
+ top: 24px;
2707
+ right: 24px;
2708
+ z-index: 2;
2709
+ }
2710
+
2711
+ .owner-filter-bar.visible {
2712
+ display: flex;
2713
+ align-items: center;
2714
+ }
2715
+
2716
+ .owner-filter-bar .filter-dropdown {
2717
+ flex: none;
2718
+ width: auto;
2719
+ max-width: 180px;
2720
+ font-size: 13px;
2721
+ padding: 6px 10px;
2722
+ }
2723
+
2724
+ /* #endregion */
2725
+
2726
+ /* #region TERMINAL */
2727
+ .terminal-pane {
2728
+ position: relative;
2729
+ flex: 1;
2730
+ display: none;
2731
+ flex-direction: column;
2732
+ min-height: 0;
2733
+ padding: 8px 12px 12px;
2734
+ gap: 6px;
2735
+ }
2736
+
2737
+ .session-view.terminal-mode .kanban,
2738
+ .session-view.terminal-mode .agent-footer {
2739
+ display: none;
2740
+ }
2741
+
2742
+ .session-view.terminal-mode .terminal-pane {
2743
+ display: flex;
2744
+ }
2745
+
2746
+ .terminal-bar {
2747
+ display: flex;
2748
+ align-items: center;
2749
+ justify-content: space-between;
2750
+ gap: 8px;
2751
+ font-family: var(--font-mono);
2752
+ font-size: 12px;
2753
+ color: var(--text-muted);
2754
+ }
2755
+
2756
+ .terminal-host {
2757
+ flex: 1;
2758
+ min-height: 0;
2759
+ overflow: hidden;
2760
+ background: var(--bg-deep);
2761
+ }
2762
+
2763
+ .terminal-pane:has(.terminal-prompt.visible) .xterm {
2764
+ visibility: hidden;
2765
+ }
2766
+
2767
+ .terminal-host .xterm {
2768
+ height: 100%;
2769
+ }
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);
2774
+ }
2775
+
2776
+ .terminal-manager-modal {
2777
+ width: 90%;
2778
+ max-width: 720px;
2779
+ max-height: 85vh;
2780
+ display: flex;
2781
+ flex-direction: column;
2782
+ }
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);
2790
+ }
2791
+
2792
+ .terminal-manager-row:last-child {
2793
+ border-bottom: none;
2794
+ }
2795
+
2796
+ .terminal-manager-dot {
2797
+ flex-shrink: 0;
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;
2498
2935
  }
2499
- .row-actions button svg {
2500
- width: 12px;
2501
- height: 12px;
2502
- display: block;
2936
+
2937
+ .terminal-prompt-text {
2938
+ display: flex;
2939
+ flex-direction: column;
2940
+ gap: 4px;
2941
+ line-height: 1.5;
2503
2942
  }
2504
- @media (hover: none) {
2505
- .row-actions {
2506
- opacity: 1;
2507
- }
2943
+
2944
+ .terminal-prompt-title {
2945
+ color: var(--text-primary);
2946
+ font-size: 15px;
2947
+ font-weight: 600;
2508
2948
  }
2509
2949
 
2510
- /* #endregion */
2950
+ .terminal-prompt-actions {
2951
+ display: flex;
2952
+ justify-content: center;
2953
+ gap: 8px;
2954
+ flex-wrap: wrap;
2955
+ }
2511
2956
 
2512
- /* #region OWNER_FILTER */
2513
- .kanban {
2514
- position: relative;
2957
+ .terminal-prompt button:focus-visible {
2958
+ outline: none;
2515
2959
  }
2516
2960
 
2517
- .owner-filter-bar {
2518
- display: none;
2519
- position: absolute;
2520
- top: 24px;
2521
- right: 24px;
2522
- z-index: 2;
2961
+ .terminal-host:focus-within {
2962
+ box-shadow: inset 0 0 0 1px var(--accent);
2523
2963
  }
2524
2964
 
2525
- .owner-filter-bar.visible {
2526
- display: flex;
2527
- align-items: center;
2965
+ .terminal-prompt:has(.terminal-prompt-output) {
2966
+ width: min(640px, calc(100% - 32px));
2528
2967
  }
2529
2968
 
2530
- .owner-filter-bar .filter-dropdown {
2531
- flex: none;
2532
- width: auto;
2533
- max-width: 180px;
2534
- font-size: 13px;
2535
- padding: 6px 10px;
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);
2536
2980
  }
2537
2981
 
2538
2982
  /* #endregion */
@@ -3054,6 +3498,10 @@ body::before {
3054
3498
  font-family: var(--font-mono);
3055
3499
  font-size: 0.85rem;
3056
3500
  }
3501
+ .msg-detail-pre code.hljs {
3502
+ background: transparent;
3503
+ padding: 0;
3504
+ }
3057
3505
  .msg-detail-pre-tinted {
3058
3506
  background: color-mix(in srgb, var(--text-muted) 8%, transparent);
3059
3507
  border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
@@ -3858,6 +4306,12 @@ body::before {
3858
4306
  flex-shrink: 0;
3859
4307
  color: var(--text-secondary);
3860
4308
  }
4309
+ .terminal-badge {
4310
+ color: var(--text-secondary);
4311
+ }
4312
+ .terminal-badge:hover {
4313
+ color: var(--accent, var(--text-primary));
4314
+ }
3861
4315
  .agent-badge-waiting {
3862
4316
  color: var(--warning);
3863
4317
  animation: agent-badge-pulse 1.6s ease-in-out infinite;
@@ -4428,7 +4882,7 @@ body.light {
4428
4882
  --text-secondary: #444444;
4429
4883
  --text-tertiary: #666666;
4430
4884
  --text-muted: #888888;
4431
- --accent-text: #b85a20;
4885
+ --accent-text: #a0501c;
4432
4886
  --accent-dim: rgba(232, 111, 51, 0.18);
4433
4887
  --accent-glow: rgba(232, 111, 51, 0.5);
4434
4888
  --gold: #a8842f;
@@ -4499,7 +4953,7 @@ body.light .msg-assistant .msg-text {
4499
4953
  .search-input {
4500
4954
  width: 100%;
4501
4955
  padding: 9px 32px 9px 12px;
4502
- background: var(--bg-deep);
4956
+ background: var(--sidebar-item-bg, var(--bg-deep));
4503
4957
  border: 1px solid transparent;
4504
4958
  border-radius: 6px;
4505
4959
  color: var(--text-primary);
@@ -5345,6 +5799,232 @@ select.form-input option:checked {
5345
5799
 
5346
5800
  /* #endregion */
5347
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
+
5348
6028
  /* #region TOOL_STATS */
5349
6029
  .modal.tool-stats-modal {
5350
6030
  width: 90%;
@@ -5964,6 +6644,7 @@ pre.mermaid svg {
5964
6644
 
5965
6645
  .project-group-header .group-name,
5966
6646
  .session-group-header .group-name {
6647
+ flex: 1;
5967
6648
  overflow: hidden;
5968
6649
  text-overflow: ellipsis;
5969
6650
  white-space: nowrap;
@@ -5973,18 +6654,46 @@ pre.mermaid svg {
5973
6654
  flex: 1;
5974
6655
  }
5975
6656
 
5976
- .project-view-btn {
6657
+ .project-view-btn,
6658
+ .project-new-btn,
6659
+ .header-pad-btn {
5977
6660
  color: var(--text-muted);
5978
6661
  cursor: pointer;
5979
6662
  display: flex;
5980
6663
  align-items: center;
5981
- 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;
5982
6683
  }
5983
6684
 
5984
- .project-view-btn:hover {
6685
+ .header-pad-btn.has-pad {
5985
6686
  color: var(--accent);
5986
6687
  }
5987
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
+
5988
6697
  .project-group-header .group-count {
5989
6698
  font-weight: 400;
5990
6699
  color: var(--text-muted);
@@ -6114,6 +6823,16 @@ pre.mermaid svg {
6114
6823
  color: var(--accent);
6115
6824
  }
6116
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
+
6117
6836
  .pinned-sub-items.collapsed {
6118
6837
  display: none;
6119
6838
  }