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/lib/file-url.js +38 -0
- package/package.json +1 -1
- package/public/app.js +991 -137
- package/public/style.css +470 -94
- package/server.js +202 -85
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:
|
|
578
|
-
height:
|
|
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
|
-
|
|
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 .
|
|
2392
|
+
.info-grid:hover .row-actions {
|
|
2309
2393
|
opacity: 1;
|
|
2310
2394
|
}
|
|
2311
|
-
.
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
/*
|
|
3739
|
-
|
|
3740
|
-
.
|
|
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-
|
|
3864
|
+
.linked-doc-item:hover .linked-doc-actions {
|
|
3763
3865
|
opacity: 1;
|
|
3764
3866
|
}
|
|
3765
3867
|
|
|
3766
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
-
/*
|
|
5224
|
-
|
|
5225
|
-
|
|
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
|
-
.
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
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-
|
|
5242
|
-
|
|
5540
|
+
.session-group-header:hover {
|
|
5541
|
+
background: var(--bg-hover);
|
|
5243
5542
|
}
|
|
5244
5543
|
|
|
5245
|
-
.
|
|
5246
|
-
|
|
5544
|
+
.session-group-header.kb-selected {
|
|
5545
|
+
outline: 1px solid var(--accent);
|
|
5546
|
+
outline-offset: -1px;
|
|
5247
5547
|
}
|
|
5248
5548
|
|
|
5249
|
-
.
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
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
|
-
.
|
|
5258
|
-
|
|
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
|
-
|
|
5261
|
-
.
|
|
5262
|
-
|
|
5570
|
+
|
|
5571
|
+
.sg-action.sg-rename {
|
|
5572
|
+
margin-left: auto;
|
|
5573
|
+
display: flex;
|
|
5263
5574
|
align-items: center;
|
|
5264
|
-
gap: 6px;
|
|
5265
5575
|
}
|
|
5266
|
-
|
|
5267
|
-
.
|
|
5268
|
-
|
|
5269
|
-
|
|
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
|
-
|
|
5275
|
-
|
|
5581
|
+
|
|
5582
|
+
.session-group-sessions {
|
|
5583
|
+
display: block;
|
|
5584
|
+
margin-left: 6px;
|
|
5276
5585
|
}
|
|
5277
|
-
|
|
5278
|
-
|
|
5586
|
+
|
|
5587
|
+
.session-group-sessions.collapsed {
|
|
5588
|
+
display: none;
|
|
5279
5589
|
}
|
|
5280
|
-
|
|
5281
|
-
|
|
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
|
-
|
|
5284
|
-
.
|
|
5285
|
-
|
|
5286
|
-
|
|
5287
|
-
opacity: 1;
|
|
5600
|
+
|
|
5601
|
+
.project-group-header.sg-nested {
|
|
5602
|
+
margin-top: 4px;
|
|
5603
|
+
padding-top: 4px;
|
|
5288
5604
|
}
|
|
5289
|
-
|
|
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
|
-
|
|
5293
|
-
|
|
5294
|
-
|
|
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 */
|