claude-code-kanban 4.21.0 → 4.23.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
@@ -29,6 +29,22 @@
29
29
  --team-dim: rgba(96, 165, 250, 0.18);
30
30
  --plan: #86a886;
31
31
  --plan-dim: rgba(134, 168, 134, 0.18);
32
+ --ansi-black: var(--text-muted);
33
+ --ansi-red: #e06c66;
34
+ --ansi-green: #3ecf8e;
35
+ --ansi-yellow: #e0b04a;
36
+ --ansi-blue: #60a5fa;
37
+ --ansi-magenta: #c98ce0;
38
+ --ansi-cyan: #4dc9c9;
39
+ --ansi-white: var(--text-secondary);
40
+ --ansi-bright-black: var(--text-tertiary);
41
+ --ansi-bright-red: #ff8a84;
42
+ --ansi-bright-green: #5ee3a8;
43
+ --ansi-bright-yellow: #f0c56a;
44
+ --ansi-bright-blue: #8bbdfb;
45
+ --ansi-bright-magenta: #e0a8f0;
46
+ --ansi-bright-cyan: #7ddede;
47
+ --ansi-bright-white: var(--text-primary);
32
48
  --mono: 'IBM Plex Mono', monospace;
33
49
  --serif: 'Playfair Display', serif;
34
50
  --card-gap: 7px;
@@ -546,6 +562,7 @@ body::before {
546
562
  }
547
563
 
548
564
  .session-item {
565
+ position: relative;
549
566
  display: block;
550
567
  width: 100%;
551
568
  padding: 13px 15px;
@@ -558,11 +575,63 @@ body::before {
558
575
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
559
576
  }
560
577
 
578
+ /* `.active` is the open session, `.kb-selected` the keyboard cursor. The cursor
579
+ must win when both land on one card, which is why it is ordered second. */
561
580
  .session-item.active {
562
581
  background: var(--bg-deep);
563
582
  border-color: var(--accent);
564
583
  }
565
584
 
585
+ .session-item.kb-selected {
586
+ background: var(--bg-elevated);
587
+ border-color: var(--accent);
588
+ box-shadow: 0 0 0 1px var(--accent-dim);
589
+ }
590
+
591
+ .session-item.stale {
592
+ opacity: 0.85;
593
+ }
594
+
595
+ .session-item.stale:hover,
596
+ .session-item.stale.active,
597
+ .session-item.stale.kb-selected,
598
+ .session-item.stale:has(.session-pin-btn.sticky) {
599
+ opacity: 1;
600
+ }
601
+
602
+ .session-item.stale .session-time,
603
+ .session-item.warm .session-time {
604
+ display: inline-flex;
605
+ align-items: center;
606
+ gap: 6px;
607
+ }
608
+
609
+ .session-item.stale .session-time::before,
610
+ .session-item.warm .session-time::before {
611
+ content: '';
612
+ width: 6px;
613
+ height: 6px;
614
+ border-radius: 50%;
615
+ flex-shrink: 0;
616
+ }
617
+
618
+ .session-item.warm .session-time {
619
+ color: var(--success);
620
+ }
621
+
622
+ .session-item.warm .session-time::before {
623
+ background: var(--success);
624
+ }
625
+
626
+ .session-item.stale .session-time {
627
+ color: var(--text-muted);
628
+ }
629
+
630
+ .session-item.stale .session-time::before {
631
+ background: transparent;
632
+ border: 1px solid var(--text-muted);
633
+ }
634
+
566
635
  .session-name {
567
636
  font-size: 13px;
568
637
  color: var(--text-primary);
@@ -574,12 +643,11 @@ body::before {
574
643
  }
575
644
 
576
645
  .session-indicators .pulse {
577
- width: 8px;
578
- height: 8px;
646
+ width: 6px;
647
+ height: 6px;
579
648
  background: var(--accent);
580
649
  border-radius: 50%;
581
650
  animation: pulse 2s ease-in-out infinite;
582
- box-shadow: 0 0 12px var(--accent-glow);
583
651
  }
584
652
 
585
653
  @keyframes pulse {
@@ -623,7 +691,12 @@ body::before {
623
691
  text-overflow: ellipsis;
624
692
  }
625
693
 
694
+ /* inline-flex so only the text takes the click — a full-width row would swallow clicks
695
+ meant for the card itself */
626
696
  .session-goal {
697
+ display: inline-flex;
698
+ align-items: baseline;
699
+ max-width: 100%;
627
700
  font-size: 10px;
628
701
  margin-top: var(--card-gap-tight);
629
702
  white-space: nowrap;
@@ -635,8 +708,13 @@ body::before {
635
708
  .session-goal .session-goal-icon {
636
709
  margin-right: 3px;
637
710
  font-weight: 700;
711
+ flex-shrink: 0;
712
+ }
713
+ .session-goal .session-goal-text {
714
+ overflow: hidden;
715
+ text-overflow: ellipsis;
638
716
  }
639
- .session-goal:hover {
717
+ .session-goal:hover .session-goal-text {
640
718
  text-decoration: underline;
641
719
  text-underline-offset: 2px;
642
720
  }
@@ -668,6 +746,10 @@ body::before {
668
746
  transition: width 0.5s ease-out;
669
747
  }
670
748
 
749
+ .session-item:not(.active) .progress-fill {
750
+ background: color-mix(in srgb, var(--text-tertiary) 55%, transparent);
751
+ }
752
+
671
753
  .progress-text {
672
754
  font-size: 11px;
673
755
  font-weight: 500;
@@ -2299,16 +2381,18 @@ body::before {
2299
2381
  align-items: center;
2300
2382
  margin-bottom: 16px;
2301
2383
  }
2302
- .info-row-actions {
2384
+ /* Shared hover-reveal icon-button group, also used by the linked-doc rows. Each host
2385
+ supplies its own reveal trigger — the base only sets the resting opacity. */
2386
+ .row-actions {
2303
2387
  display: flex;
2304
2388
  gap: 4px;
2305
2389
  opacity: 0.3;
2306
2390
  transition: opacity 0.15s ease;
2307
2391
  }
2308
- .info-grid:hover .info-row-actions {
2392
+ .info-grid:hover .row-actions {
2309
2393
  opacity: 1;
2310
2394
  }
2311
- .info-row-actions button {
2395
+ .row-actions button {
2312
2396
  display: inline-flex;
2313
2397
  align-items: center;
2314
2398
  justify-content: center;
@@ -2325,18 +2409,18 @@ body::before {
2325
2409
  border-color 0.1s ease,
2326
2410
  color 0.1s ease;
2327
2411
  }
2328
- .info-row-actions button:hover {
2412
+ .row-actions button:hover {
2329
2413
  background: var(--bg-hover);
2330
2414
  border-color: var(--accent);
2331
2415
  color: var(--accent-text);
2332
2416
  }
2333
- .info-row-actions button svg {
2417
+ .row-actions button svg {
2334
2418
  width: 12px;
2335
2419
  height: 12px;
2336
2420
  display: block;
2337
2421
  }
2338
2422
  @media (hover: none) {
2339
- .info-row-actions {
2423
+ .row-actions {
2340
2424
  opacity: 1;
2341
2425
  }
2342
2426
  }
@@ -3569,6 +3653,25 @@ body::before {
3569
3653
  .agent-card:hover {
3570
3654
  border-color: color-mix(in srgb, var(--accent) 60%, var(--border));
3571
3655
  }
3656
+ .agent-card-log-btn {
3657
+ position: absolute;
3658
+ top: 4px;
3659
+ right: 4px;
3660
+ display: flex;
3661
+ padding: 2px;
3662
+ background: none;
3663
+ border: none;
3664
+ color: var(--text-muted);
3665
+ cursor: pointer;
3666
+ opacity: 0.45;
3667
+ transition:
3668
+ opacity 0.15s,
3669
+ color 0.15s;
3670
+ }
3671
+ .agent-card-log-btn:hover {
3672
+ opacity: 1;
3673
+ color: var(--accent);
3674
+ }
3572
3675
  .agent-card.selected,
3573
3676
  .agent-card.selected:hover {
3574
3677
  background: var(--bg-elevated);
@@ -3634,6 +3737,20 @@ body::before {
3634
3737
  font-size: 11px;
3635
3738
  color: var(--text-tertiary);
3636
3739
  }
3740
+ .agent-card-model {
3741
+ margin-left: auto;
3742
+ padding: 1px 6px;
3743
+ font-family: var(--font-mono, monospace);
3744
+ font-size: 9.5px;
3745
+ line-height: 1.4;
3746
+ color: var(--text-tertiary);
3747
+ border: 1px solid var(--border);
3748
+ border-radius: 999px;
3749
+ white-space: nowrap;
3750
+ overflow: hidden;
3751
+ text-overflow: ellipsis;
3752
+ max-width: 45%;
3753
+ }
3637
3754
  .agent-message {
3638
3755
  font-size: 11px;
3639
3756
  color: var(--text-muted);
@@ -3735,36 +3852,29 @@ body::before {
3735
3852
  min-width: 0;
3736
3853
  }
3737
3854
 
3738
- /* margin-left:auto pins every × to the same right edge, so they read as a column
3739
- however long the names in between are. */
3740
- .linked-doc-remove {
3855
+ /* Rides on the shared .row-actions group; only the reveal trigger differs — per row
3856
+ here, per grid in the session info. margin-left:auto pins the group to the same
3857
+ right edge however long the names in between are. */
3858
+ .linked-doc-actions {
3741
3859
  margin-left: auto;
3742
3860
  align-self: center;
3743
3861
  flex-shrink: 0;
3744
- width: 16px;
3745
- height: 16px;
3746
- display: inline-flex;
3747
- align-items: center;
3748
- justify-content: center;
3749
- padding: 0;
3750
- background: none;
3751
- border: none;
3752
- border-radius: 3px;
3753
- color: var(--text-muted);
3754
- font-family: var(--mono);
3755
- font-size: 14px;
3756
- line-height: 1;
3757
- cursor: pointer;
3758
- opacity: 0.45;
3759
- transition: all 0.15s ease;
3760
3862
  }
3761
3863
 
3762
- .linked-doc-item:hover .linked-doc-remove {
3864
+ .linked-doc-item:hover .linked-doc-actions {
3763
3865
  opacity: 1;
3764
3866
  }
3765
3867
 
3766
- .linked-doc-remove:hover {
3868
+ /* The × is a glyph, not an svg, so .row-actions button svg does not size it. */
3869
+ .linked-doc-remove {
3870
+ font-family: var(--mono);
3871
+ font-size: 15px;
3872
+ line-height: 1;
3873
+ }
3874
+
3875
+ .linked-doc-actions .linked-doc-remove:hover {
3767
3876
  background: var(--danger-dim);
3877
+ border-color: var(--danger);
3768
3878
  color: var(--danger);
3769
3879
  }
3770
3880
 
@@ -3876,6 +3986,136 @@ body::before {
3876
3986
 
3877
3987
  /* #endregion */
3878
3988
 
3989
+ /* #region ANSI */
3990
+
3991
+ /* SGR colours from terminal output, consumed by every pane that renders it.
3992
+ The palette itself lives with the other colour tokens in VARIABLES /
3993
+ LIGHT_THEME / MEDIA_QUERIES, so it flips with the theme like everything else. */
3994
+ .ansi-fg-black {
3995
+ color: var(--ansi-black);
3996
+ }
3997
+ .ansi-fg-red {
3998
+ color: var(--ansi-red);
3999
+ }
4000
+ .ansi-fg-green {
4001
+ color: var(--ansi-green);
4002
+ }
4003
+ .ansi-fg-yellow {
4004
+ color: var(--ansi-yellow);
4005
+ }
4006
+ .ansi-fg-blue {
4007
+ color: var(--ansi-blue);
4008
+ }
4009
+ .ansi-fg-magenta {
4010
+ color: var(--ansi-magenta);
4011
+ }
4012
+ .ansi-fg-cyan {
4013
+ color: var(--ansi-cyan);
4014
+ }
4015
+ .ansi-fg-white {
4016
+ color: var(--ansi-white);
4017
+ }
4018
+ .ansi-fg-bright-black {
4019
+ color: var(--ansi-bright-black);
4020
+ }
4021
+ .ansi-fg-bright-red {
4022
+ color: var(--ansi-bright-red);
4023
+ }
4024
+ .ansi-fg-bright-green {
4025
+ color: var(--ansi-bright-green);
4026
+ }
4027
+ .ansi-fg-bright-yellow {
4028
+ color: var(--ansi-bright-yellow);
4029
+ }
4030
+ .ansi-fg-bright-blue {
4031
+ color: var(--ansi-bright-blue);
4032
+ }
4033
+ .ansi-fg-bright-magenta {
4034
+ color: var(--ansi-bright-magenta);
4035
+ }
4036
+ .ansi-fg-bright-cyan {
4037
+ color: var(--ansi-bright-cyan);
4038
+ }
4039
+ .ansi-fg-bright-white {
4040
+ color: var(--ansi-bright-white);
4041
+ }
4042
+ .ansi-bg-black {
4043
+ background: var(--ansi-black);
4044
+ }
4045
+ .ansi-bg-red {
4046
+ background: var(--ansi-red);
4047
+ }
4048
+ .ansi-bg-green {
4049
+ background: var(--ansi-green);
4050
+ }
4051
+ .ansi-bg-yellow {
4052
+ background: var(--ansi-yellow);
4053
+ }
4054
+ .ansi-bg-blue {
4055
+ background: var(--ansi-blue);
4056
+ }
4057
+ .ansi-bg-magenta {
4058
+ background: var(--ansi-magenta);
4059
+ }
4060
+ .ansi-bg-cyan {
4061
+ background: var(--ansi-cyan);
4062
+ }
4063
+ .ansi-bg-white {
4064
+ background: var(--ansi-white);
4065
+ }
4066
+ .ansi-bg-bright-black {
4067
+ background: var(--ansi-bright-black);
4068
+ }
4069
+ .ansi-bg-bright-red {
4070
+ background: var(--ansi-bright-red);
4071
+ }
4072
+ .ansi-bg-bright-green {
4073
+ background: var(--ansi-bright-green);
4074
+ }
4075
+ .ansi-bg-bright-yellow {
4076
+ background: var(--ansi-bright-yellow);
4077
+ }
4078
+ .ansi-bg-bright-blue {
4079
+ background: var(--ansi-bright-blue);
4080
+ }
4081
+ .ansi-bg-bright-magenta {
4082
+ background: var(--ansi-bright-magenta);
4083
+ }
4084
+ .ansi-bg-bright-cyan {
4085
+ background: var(--ansi-bright-cyan);
4086
+ }
4087
+ .ansi-bg-bright-white {
4088
+ background: var(--ansi-bright-white);
4089
+ }
4090
+ .ansi-bg {
4091
+ padding: 0 1px;
4092
+ border-radius: 2px;
4093
+ }
4094
+ .ansi-inverse {
4095
+ background: var(--text-primary);
4096
+ color: var(--bg-deep);
4097
+ }
4098
+ .ansi-bold {
4099
+ font-weight: 700;
4100
+ }
4101
+ .ansi-dim {
4102
+ opacity: 0.65;
4103
+ }
4104
+ .ansi-italic {
4105
+ font-style: italic;
4106
+ }
4107
+ .ansi-underline {
4108
+ text-decoration: underline;
4109
+ }
4110
+ .ansi-strike {
4111
+ text-decoration: line-through;
4112
+ }
4113
+ .ansi-underline.ansi-strike {
4114
+ text-decoration: underline line-through;
4115
+ }
4116
+
4117
+ /* #endregion */
4118
+
3879
4119
  /* #region LIGHT_THEME */
3880
4120
  body.light {
3881
4121
  --bg-deep: #e8e6e3;
@@ -3898,6 +4138,18 @@ body.light {
3898
4138
  --danger: #c0392b;
3899
4139
  --danger-dim: rgba(192, 57, 43, 0.15);
3900
4140
  --plan: #5a7a5a;
4141
+ --ansi-red: #c0392b;
4142
+ --ansi-green: #1a8a5a;
4143
+ --ansi-yellow: #a8791a;
4144
+ --ansi-blue: #2b6cb0;
4145
+ --ansi-magenta: #8e44ad;
4146
+ --ansi-cyan: #1a7a7a;
4147
+ --ansi-bright-red: #e05548;
4148
+ --ansi-bright-green: #25a86f;
4149
+ --ansi-bright-yellow: #c2921f;
4150
+ --ansi-bright-blue: #3b82d6;
4151
+ --ansi-bright-magenta: #a855c9;
4152
+ --ansi-bright-cyan: #2a9a9a;
3901
4153
  --plan-dim: rgba(90, 122, 90, 0.15);
3902
4154
  }
3903
4155
 
@@ -4827,6 +5079,14 @@ select.form-input option:checked {
4827
5079
  transition: all 0.15s;
4828
5080
  }
4829
5081
 
5082
+ /* Icon buttons sit beside text ones here, and copyWithFeedback swaps the glyph for a
5083
+ checkmark, so both svgs need a size or the button jumps on click. */
5084
+ .storage-item-actions button svg {
5085
+ width: 12px;
5086
+ height: 12px;
5087
+ display: block;
5088
+ }
5089
+
4830
5090
  .storage-item-actions button:hover {
4831
5091
  background: var(--bg-hover);
4832
5092
  color: var(--text-primary);
@@ -4915,6 +5175,18 @@ select.form-input option:checked {
4915
5175
  --danger: #c0392b;
4916
5176
  --danger-dim: rgba(192, 57, 43, 0.15);
4917
5177
  --plan: #5a7a5a;
5178
+ --ansi-red: #c0392b;
5179
+ --ansi-green: #1a8a5a;
5180
+ --ansi-yellow: #a8791a;
5181
+ --ansi-blue: #2b6cb0;
5182
+ --ansi-magenta: #8e44ad;
5183
+ --ansi-cyan: #1a7a7a;
5184
+ --ansi-bright-red: #e05548;
5185
+ --ansi-bright-green: #25a86f;
5186
+ --ansi-bright-yellow: #c2921f;
5187
+ --ansi-bright-blue: #3b82d6;
5188
+ --ansi-bright-magenta: #a855c9;
5189
+ --ansi-bright-cyan: #2a9a9a;
4918
5190
  --plan-dim: rgba(90, 122, 90, 0.15);
4919
5191
  }
4920
5192
 
@@ -5048,23 +5320,29 @@ pre.mermaid svg {
5048
5320
  border-radius: 4px;
5049
5321
  }
5050
5322
 
5051
- .project-group-header .group-chevron {
5323
+ .project-group-header .group-chevron,
5324
+ .session-group-header .group-chevron {
5052
5325
  transition: transform 0.15s ease;
5053
5326
  flex-shrink: 0;
5054
5327
  display: block;
5055
5328
  }
5056
5329
 
5057
- .project-group-header.collapsed .group-chevron {
5330
+ .project-group-header.collapsed .group-chevron,
5331
+ .session-group-header.collapsed .group-chevron {
5058
5332
  transform: rotate(-90deg);
5059
5333
  }
5060
5334
 
5061
- .project-group-header .group-name {
5062
- flex: 1;
5335
+ .project-group-header .group-name,
5336
+ .session-group-header .group-name {
5063
5337
  overflow: hidden;
5064
5338
  text-overflow: ellipsis;
5065
5339
  white-space: nowrap;
5066
5340
  }
5067
5341
 
5342
+ .project-group-header .group-name {
5343
+ flex: 1;
5344
+ }
5345
+
5068
5346
  .project-view-btn {
5069
5347
  color: var(--text-muted);
5070
5348
  cursor: pointer;
@@ -5179,24 +5457,30 @@ pre.mermaid svg {
5179
5457
  letter-spacing: 0.3px;
5180
5458
  }
5181
5459
 
5182
- .pinned-ungroup-btn {
5183
- margin-left: auto;
5184
- font-size: 14px;
5185
- line-height: 1;
5460
+ .pinned-ungroup-btn,
5461
+ .sg-action {
5186
5462
  color: var(--text-muted);
5187
5463
  cursor: pointer;
5188
- padding: 0 2px;
5464
+ line-height: 1;
5189
5465
  opacity: 0;
5190
5466
  transition:
5191
5467
  opacity 0.15s,
5192
5468
  color 0.15s;
5193
5469
  }
5194
5470
 
5195
- .pinned-sub-header:hover .pinned-ungroup-btn {
5471
+ .pinned-ungroup-btn {
5472
+ margin-left: auto;
5473
+ font-size: 14px;
5474
+ padding: 0 2px;
5475
+ }
5476
+
5477
+ .pinned-sub-header:hover .pinned-ungroup-btn,
5478
+ .session-group-header:hover .sg-action {
5196
5479
  opacity: 1;
5197
5480
  }
5198
5481
 
5199
- .pinned-ungroup-btn:hover {
5482
+ .pinned-ungroup-btn:hover,
5483
+ .sg-action:hover {
5200
5484
  color: var(--accent);
5201
5485
  }
5202
5486
 
@@ -5220,77 +5504,169 @@ pre.mermaid svg {
5220
5504
  color: var(--accent);
5221
5505
  }
5222
5506
 
5223
- /* Session list hover accent bar */
5224
- .session-item {
5225
- position: relative;
5507
+ /* #endregion */
5508
+
5509
+ /* #region SESSION_GROUPS */
5510
+ .sg-section-label {
5511
+ padding: 10px 10px 2px;
5512
+ margin-top: 10px;
5513
+ font-size: 10px;
5514
+ font-weight: 600;
5515
+ letter-spacing: 0.6px;
5516
+ text-transform: uppercase;
5517
+ color: var(--text-muted);
5518
+ user-select: none;
5226
5519
  }
5227
5520
 
5228
- .session-item::before {
5229
- content: '';
5230
- position: absolute;
5231
- left: 0;
5232
- top: 50%;
5233
- transform: translateY(-50%);
5234
- width: 0;
5235
- height: 60%;
5236
- background: var(--accent);
5237
- border-radius: 0 2px 2px 0;
5238
- transition: width 0.15s ease;
5521
+ .sg-section-label:first-child {
5522
+ margin-top: 0;
5523
+ }
5524
+
5525
+ .session-group-header {
5526
+ display: flex;
5527
+ align-items: center;
5528
+ gap: 6px;
5529
+ padding: 7px 10px;
5530
+ margin-top: 2px;
5531
+ cursor: pointer;
5532
+ user-select: none;
5533
+ font-size: 11px;
5534
+ font-weight: 600;
5535
+ color: var(--text-primary);
5536
+ border-radius: 4px;
5537
+ background: transparent;
5239
5538
  }
5240
5539
 
5241
- .session-item:hover::before {
5242
- width: 0;
5540
+ .session-group-header:hover {
5541
+ background: var(--bg-hover);
5243
5542
  }
5244
5543
 
5245
- .sidebar-focused .session-item.active::before {
5246
- width: 0;
5544
+ .session-group-header.kb-selected {
5545
+ outline: 1px solid var(--accent);
5546
+ outline-offset: -1px;
5247
5547
  }
5248
5548
 
5249
- .session-item.kb-selected,
5250
- .session-item.kb-selected:hover,
5251
- .session-item.active.kb-selected {
5252
- background: var(--bg-elevated);
5253
- border-color: var(--accent);
5254
- box-shadow: 0 0 0 1px var(--accent-dim);
5549
+ .sg-sub-label {
5550
+ padding: 8px 10px 2px 8px;
5551
+ font-size: 10px;
5552
+ font-weight: 600;
5553
+ letter-spacing: 0.5px;
5554
+ text-transform: uppercase;
5555
+ color: var(--text-muted);
5556
+ user-select: none;
5255
5557
  }
5256
5558
 
5257
- .session-item.kb-selected::before {
5258
- width: 0;
5559
+ .sg-name-input {
5560
+ flex: 1;
5561
+ min-width: 0;
5562
+ padding: 1px 4px;
5563
+ font: inherit;
5564
+ color: var(--text-primary);
5565
+ background: var(--bg-deep);
5566
+ border: 1px solid var(--accent);
5567
+ border-radius: 3px;
5568
+ outline: none;
5259
5569
  }
5260
- .session-item.stale .session-time,
5261
- .session-item.warm .session-time {
5262
- display: inline-flex;
5570
+
5571
+ .sg-action.sg-rename {
5572
+ margin-left: auto;
5573
+ display: flex;
5263
5574
  align-items: center;
5264
- gap: 6px;
5265
5575
  }
5266
- .session-item.stale .session-time::before,
5267
- .session-item.warm .session-time::before {
5268
- content: '';
5269
- width: 6px;
5270
- height: 6px;
5271
- border-radius: 50%;
5272
- flex-shrink: 0;
5576
+
5577
+ .sg-action.sg-delete {
5578
+ font-size: 15px;
5579
+ padding: 0 2px;
5273
5580
  }
5274
- .session-item.warm .session-time {
5275
- color: var(--success);
5581
+
5582
+ .session-group-sessions {
5583
+ display: block;
5584
+ margin-left: 6px;
5276
5585
  }
5277
- .session-item.warm .session-time::before {
5278
- background: var(--success);
5586
+
5587
+ .session-group-sessions.collapsed {
5588
+ display: none;
5279
5589
  }
5280
- .session-item.stale {
5281
- opacity: 0.85;
5590
+
5591
+ .sg-empty {
5592
+ padding: 10px 8px;
5593
+ font-size: 11px;
5594
+ color: var(--text-muted);
5595
+ border: 1px dashed var(--border);
5596
+ border-radius: 4px;
5597
+ margin: 4px 2px;
5598
+ text-align: center;
5282
5599
  }
5283
- .session-item.stale:hover,
5284
- .session-item.stale.active,
5285
- .session-item.stale.kb-selected,
5286
- .session-item.stale:has(.session-pin-btn.sticky) {
5287
- opacity: 1;
5600
+
5601
+ .project-group-header.sg-nested {
5602
+ margin-top: 4px;
5603
+ padding-top: 4px;
5288
5604
  }
5289
- .session-item.stale .session-time {
5605
+
5606
+ /* Drag feedback */
5607
+ .session-item.sg-dragging,
5608
+ .project-group-header.sg-dragging,
5609
+ .session-group-header.sg-dragging {
5610
+ opacity: 0.45;
5611
+ }
5612
+
5613
+ .sg-drop-over {
5614
+ outline: 1px dashed var(--accent);
5615
+ outline-offset: -1px;
5616
+ background: var(--accent-dim);
5617
+ }
5618
+
5619
+ .sessions-list.sg-dragging-active .sg-ungroup-zone {
5620
+ border: 1px dashed var(--accent);
5621
+ border-radius: 4px;
5622
+ color: var(--text-primary);
5623
+ }
5624
+
5625
+ /* Move-to-group menu (right-click / long-press) */
5626
+ .sg-menu {
5627
+ position: fixed;
5628
+ z-index: 3000;
5629
+ min-width: 180px;
5630
+ max-width: 260px;
5631
+ padding: 4px;
5632
+ background: var(--bg-elevated);
5633
+ border: 1px solid var(--border);
5634
+ border-radius: 6px;
5635
+ box-shadow: 0 8px 24px rgb(0 0 0 / 35%);
5636
+ display: flex;
5637
+ flex-direction: column;
5638
+ gap: 1px;
5639
+ }
5640
+
5641
+ .sg-menu-label {
5642
+ padding: 6px 8px 4px;
5643
+ font-size: 10px;
5644
+ text-transform: uppercase;
5645
+ letter-spacing: 0.5px;
5290
5646
  color: var(--text-muted);
5291
5647
  }
5292
- .session-item.stale .session-time::before {
5293
- background: transparent;
5294
- border: 1px solid var(--text-muted);
5648
+
5649
+ .sg-menu-item {
5650
+ display: flex;
5651
+ align-items: center;
5652
+ gap: 6px;
5653
+ width: 100%;
5654
+ padding: 6px 8px;
5655
+ border: none;
5656
+ background: none;
5657
+ border-radius: 4px;
5658
+ font: inherit;
5659
+ font-size: 12px;
5660
+ color: var(--text-primary);
5661
+ text-align: left;
5662
+ cursor: pointer;
5663
+ }
5664
+
5665
+ .sg-menu-item:hover {
5666
+ background: var(--bg-hover);
5667
+ }
5668
+
5669
+ .sg-menu-remove {
5670
+ color: var(--text-secondary);
5295
5671
  }
5296
5672
  /* #endregion */