claude-code-kanban 7.20.0 → 7.22.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
@@ -13,7 +13,7 @@
13
13
  --text-primary: #f0f1f3;
14
14
  --text-secondary: #c2c4c9;
15
15
  --text-tertiary: #9a9da5;
16
- --text-muted: #7d808a;
16
+ --text-muted: #868994;
17
17
  --accent: #e86f33;
18
18
  --accent-text: #f0a070;
19
19
  --accent-dim: rgba(232, 111, 51, 0.25);
@@ -62,6 +62,7 @@
62
62
  --font-serif: var(--serif);
63
63
  /* reading-surface scale for the message-detail and preview modals (Ctrl +/-/0) */
64
64
  --modal-zoom: 1;
65
+ --show-zoom: 1;
65
66
  --review-panel-w: 320px;
66
67
  }
67
68
 
@@ -290,11 +291,11 @@ body::before {
290
291
  padding: 4px 10px;
291
292
  font: inherit;
292
293
  font-size: 11px;
293
- font-weight: 500;
294
+ font-weight: 600;
294
295
  letter-spacing: 0.04em;
295
- color: var(--text-secondary);
296
+ color: var(--accent-text);
296
297
  background: transparent;
297
- border: 1px dashed color-mix(in srgb, var(--text-secondary) 40%, var(--border));
298
+ border: 1px solid var(--accent-text);
298
299
  border-radius: 999px;
299
300
  white-space: nowrap;
300
301
  cursor: pointer;
@@ -1097,7 +1098,7 @@ body.booting .boot-splash {
1097
1098
  }
1098
1099
 
1099
1100
  .session-item.warm .session-time {
1100
- color: var(--success);
1101
+ color: color-mix(in srgb, var(--success) 70%, var(--text-primary));
1101
1102
  }
1102
1103
 
1103
1104
  .session-item.warm .session-time::before {
@@ -1134,13 +1135,14 @@ body.booting .boot-splash {
1134
1135
  background: var(--warning);
1135
1136
  }
1136
1137
 
1138
+ /* Stale rows render at 0.85 opacity, which takes --text-muted below 4.5:1. */
1137
1139
  .session-item.stale .session-time {
1138
- color: var(--text-muted);
1140
+ color: var(--text-tertiary);
1139
1141
  }
1140
1142
 
1141
1143
  .session-item.stale .session-time::before {
1142
1144
  background: transparent;
1143
- border: 1px solid var(--text-muted);
1145
+ border: 1px solid var(--text-tertiary);
1144
1146
  }
1145
1147
 
1146
1148
  .session-name {
@@ -1221,6 +1223,9 @@ body.booting .boot-splash {
1221
1223
  }
1222
1224
 
1223
1225
  .session-secondary {
1226
+ display: flex;
1227
+ align-items: baseline;
1228
+ gap: 5px;
1224
1229
  font-family: var(--sans);
1225
1230
  font-size: 12px;
1226
1231
  font-weight: 450;
@@ -1230,12 +1235,20 @@ body.booting .boot-splash {
1230
1235
  overflow: hidden;
1231
1236
  }
1232
1237
 
1238
+ .session-project {
1239
+ flex: none;
1240
+ max-width: 60%;
1241
+ overflow: hidden;
1242
+ text-overflow: ellipsis;
1243
+ }
1244
+
1233
1245
  /* inline-block, not inline-flex: a flex box ignores text-overflow, so a long worktree name
1234
1246
  ran past the card edge instead of truncating. */
1235
1247
  .wt-chip {
1236
1248
  display: inline-block;
1249
+ flex: 0 1 auto;
1250
+ align-self: center;
1237
1251
  max-width: 60%;
1238
- margin-left: 5px;
1239
1252
  padding: 0 5px;
1240
1253
  border: 1px solid var(--accent-dim);
1241
1254
  border-radius: 999px;
@@ -1244,17 +1257,15 @@ body.booting .boot-splash {
1244
1257
  font-family: var(--mono);
1245
1258
  font-size: 9px;
1246
1259
  line-height: 14px;
1247
- vertical-align: middle;
1248
1260
  white-space: nowrap;
1249
1261
  overflow: hidden;
1250
1262
  text-overflow: ellipsis;
1251
1263
  }
1252
1264
 
1253
1265
  .session-branch {
1266
+ min-width: 0;
1254
1267
  font-size: 10px;
1255
1268
  color: var(--text-secondary);
1256
- margin-top: var(--card-gap-tight);
1257
- display: block;
1258
1269
  font-family: var(--mono);
1259
1270
  white-space: nowrap;
1260
1271
  overflow: hidden;
@@ -1333,7 +1344,7 @@ body.booting .boot-splash {
1333
1344
  justify-content: space-between;
1334
1345
  gap: 6px;
1335
1346
  margin-top: 4px;
1336
- font-size: 10px;
1347
+ font-size: 11px;
1337
1348
  font-family: var(--font-mono);
1338
1349
  color: var(--text-tertiary);
1339
1350
  white-space: nowrap;
@@ -1936,7 +1947,7 @@ body.booting .boot-splash {
1936
1947
  .view-progress .progress-text {
1937
1948
  font-size: 14px;
1938
1949
  font-weight: 500;
1939
- color: var(--accent);
1950
+ color: var(--accent-text);
1940
1951
  }
1941
1952
 
1942
1953
  .icon-btn {
@@ -2111,7 +2122,7 @@ body.booting .boot-splash {
2111
2122
  color: var(--text-tertiary);
2112
2123
  }
2113
2124
  .column-title.in-progress {
2114
- color: var(--accent);
2125
+ color: var(--accent-text);
2115
2126
  }
2116
2127
  .column-title.completed {
2117
2128
  color: var(--success);
@@ -2131,7 +2142,7 @@ body.booting .boot-splash {
2131
2142
 
2132
2143
  .column-count.in-progress {
2133
2144
  background: var(--accent-dim);
2134
- color: var(--accent);
2145
+ color: var(--accent-text);
2135
2146
  }
2136
2147
 
2137
2148
  .column-count.completed {
@@ -2242,7 +2253,6 @@ body.booting .boot-splash {
2242
2253
  }
2243
2254
 
2244
2255
  .task-card.completed {
2245
- opacity: 0.85;
2246
2256
  border-left: 2px solid var(--success);
2247
2257
  }
2248
2258
 
@@ -2313,7 +2323,7 @@ body.booting .boot-splash {
2313
2323
  border-top: 1px solid var(--border);
2314
2324
  font-size: 11px;
2315
2325
  font-weight: 500;
2316
- color: var(--accent);
2326
+ color: var(--accent-text);
2317
2327
  }
2318
2328
 
2319
2329
  .task-active::before {
@@ -2343,7 +2353,7 @@ body.booting .boot-splash {
2343
2353
  }
2344
2354
 
2345
2355
  .task-chip-accent {
2346
- color: var(--accent);
2356
+ color: var(--accent-text);
2347
2357
  }
2348
2358
 
2349
2359
  .task-desc {
@@ -2554,7 +2564,7 @@ body.booting .boot-splash {
2554
2564
 
2555
2565
  .detail-status.in_progress {
2556
2566
  background: var(--accent-dim);
2557
- color: var(--accent);
2567
+ color: var(--accent-text);
2558
2568
  border: 1px solid var(--accent);
2559
2569
  }
2560
2570
 
@@ -2596,7 +2606,7 @@ body.booting .boot-splash {
2596
2606
  }
2597
2607
 
2598
2608
  .detail-box.active strong {
2599
- color: var(--accent);
2609
+ color: var(--accent-text);
2600
2610
  }
2601
2611
 
2602
2612
  .detail-desc {
@@ -2944,7 +2954,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
2944
2954
  font-weight: 600;
2945
2955
  text-transform: uppercase;
2946
2956
  letter-spacing: 0.05em;
2947
- color: var(--accent);
2957
+ color: var(--accent-text);
2948
2958
  margin: 0 0 8px 0;
2949
2959
  }
2950
2960
 
@@ -2994,7 +3004,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
2994
3004
  .shared-tasklist-badge {
2995
3005
  display: inline-flex;
2996
3006
  align-items: center;
2997
- color: var(--accent);
3007
+ color: var(--accent-text);
2998
3008
  flex-shrink: 0;
2999
3009
  }
3000
3010
 
@@ -3006,6 +3016,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3006
3016
  .loop-badge,
3007
3017
  .workflow-badge,
3008
3018
  .dispatched-badge,
3019
+ .fork-badge,
3009
3020
  .terminal-badge {
3010
3021
  width: 18px;
3011
3022
  height: 18px;
@@ -3021,6 +3032,17 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3021
3032
  transition: all 0.15s ease;
3022
3033
  }
3023
3034
 
3035
+ /* A 22×24px hit area around each 18px icon without growing the card. The 5px row gap
3036
+ keeps neighbouring areas from overlapping. */
3037
+ .session-indicators > [onclick] {
3038
+ position: relative;
3039
+ }
3040
+ .session-indicators > [onclick]::after {
3041
+ content: '';
3042
+ position: absolute;
3043
+ inset: -3px -2px;
3044
+ }
3045
+
3024
3046
  .team-info-btn:hover,
3025
3047
  .loop-badge:hover,
3026
3048
  .workflow-badge:hover {
@@ -3440,7 +3462,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3440
3462
 
3441
3463
  .team-member-card .member-tasks {
3442
3464
  font-size: 11px;
3443
- color: var(--accent);
3465
+ color: var(--accent-text);
3444
3466
  margin-top: 4px;
3445
3467
  }
3446
3468
 
@@ -3458,6 +3480,18 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3458
3480
  min-height: 0;
3459
3481
  padding-right: 8px;
3460
3482
  }
3483
+ /* Scroll shadows: the covers scroll with the content (local), the shadows stay at the edges,
3484
+ so a shadow shows only while more content is above or below. */
3485
+ .modal-help .modal-body {
3486
+ padding-bottom: 16px;
3487
+ --scroll-shadow: color-mix(in srgb, var(--text-primary) 30%, transparent);
3488
+ background:
3489
+ linear-gradient(var(--bg-surface) 30%, transparent) center top / 100% 40px no-repeat local,
3490
+ linear-gradient(transparent, var(--bg-surface) 70%) center bottom / 100% 40px no-repeat local,
3491
+ radial-gradient(farthest-side at 50% 0, var(--scroll-shadow), transparent) center top / 100% 18px no-repeat scroll,
3492
+ radial-gradient(farthest-side at 50% 100%, var(--scroll-shadow), transparent) center bottom / 100% 18px no-repeat
3493
+ scroll;
3494
+ }
3461
3495
  #team-modal .modal-footer {
3462
3496
  flex-shrink: 0;
3463
3497
  }
@@ -3532,6 +3566,10 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3532
3566
  border-top: 1px solid var(--border);
3533
3567
  }
3534
3568
 
3569
+ .team-modal-meta:first-child {
3570
+ margin-top: 0;
3571
+ }
3572
+
3535
3573
  .info-grid {
3536
3574
  display: grid;
3537
3575
  grid-template-columns: auto 1fr auto;
@@ -3541,10 +3579,11 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3541
3579
  }
3542
3580
  /* Shared hover-reveal icon-button group, also used by the linked-doc rows. Each host
3543
3581
  supplies its own reveal trigger — the base only sets the resting opacity. */
3582
+ /* 0.55 is the lowest opacity that keeps the icons at 3:1 in light and dark. */
3544
3583
  .row-actions {
3545
3584
  display: flex;
3546
3585
  gap: 4px;
3547
- opacity: 0.3;
3586
+ opacity: 0.55;
3548
3587
  transition: opacity 0.15s ease;
3549
3588
  }
3550
3589
  .info-grid:hover .row-actions {
@@ -3964,6 +4003,161 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3964
4003
  position: relative;
3965
4004
  }
3966
4005
 
4006
+ .terminal-pane {
4007
+ --dock-rail-w: 0px;
4008
+ --dock-panel-w: 0px;
4009
+ }
4010
+
4011
+ .terminal-pane.dock-rail-on {
4012
+ --dock-rail-w: 30px;
4013
+ }
4014
+
4015
+ .terminal-pane.show-docked {
4016
+ --dock-panel-w: var(--show-dock-w);
4017
+ }
4018
+
4019
+ .terminal-pane.dock-rail-on,
4020
+ .terminal-pane.show-docked {
4021
+ padding-top: 0;
4022
+ padding-right: 0;
4023
+ padding-bottom: 0;
4024
+ }
4025
+
4026
+ .terminal-pane.dock-rail-on .terminal-frame,
4027
+ .terminal-pane.show-docked .terminal-frame {
4028
+ width: calc(100% - var(--dock-panel-w) - var(--dock-rail-w));
4029
+ }
4030
+
4031
+ .terminal-pane.dock-rail-on .terminal-bar,
4032
+ .terminal-pane.show-docked .terminal-bar {
4033
+ top: 8px;
4034
+ right: calc(8px + var(--dock-panel-w) + var(--dock-rail-w));
4035
+ }
4036
+
4037
+ .dock-rail {
4038
+ position: absolute;
4039
+ z-index: 2;
4040
+ top: 0;
4041
+ right: 0;
4042
+ bottom: 0;
4043
+ box-sizing: border-box;
4044
+ width: var(--dock-rail-w);
4045
+ display: flex;
4046
+ flex-direction: column;
4047
+ align-items: center;
4048
+ gap: 6px;
4049
+ padding-top: 6px;
4050
+ border-left: 1px solid var(--border);
4051
+ background: var(--bg-surface);
4052
+ }
4053
+
4054
+ .dock-rail[hidden],
4055
+ .dock-addon[hidden],
4056
+ .dock-addon-frame[hidden] {
4057
+ display: none;
4058
+ }
4059
+
4060
+ .dock-rail-btn {
4061
+ position: relative;
4062
+ display: grid;
4063
+ place-items: center;
4064
+ width: 22px;
4065
+ height: 22px;
4066
+ padding: 0;
4067
+ border: 0;
4068
+ border-radius: 4px;
4069
+ background: transparent;
4070
+ color: var(--text-tertiary);
4071
+ font: 600 11px var(--font-mono);
4072
+ cursor: pointer;
4073
+ }
4074
+
4075
+ .dock-rail-btn:hover {
4076
+ color: var(--text-primary);
4077
+ background: var(--bg-hover);
4078
+ }
4079
+
4080
+ .dock-rail-btn.on {
4081
+ color: var(--accent);
4082
+ background: var(--bg-deep);
4083
+ box-shadow: inset 0 0 0 1px var(--border);
4084
+ }
4085
+
4086
+ .dock-rail-btn svg {
4087
+ width: 13px;
4088
+ height: 13px;
4089
+ }
4090
+
4091
+ .dock-rail-btn.dot::after {
4092
+ content: '';
4093
+ position: absolute;
4094
+ top: 1px;
4095
+ right: 1px;
4096
+ width: 6px;
4097
+ height: 6px;
4098
+ border-radius: 50%;
4099
+ background: var(--accent);
4100
+ }
4101
+
4102
+ .dock-addon {
4103
+ position: absolute;
4104
+ z-index: 2;
4105
+ box-sizing: border-box;
4106
+ display: flex;
4107
+ flex-direction: column;
4108
+ border-left: 1px solid var(--border);
4109
+ border-bottom: 1px solid var(--border);
4110
+ background: var(--bg-surface);
4111
+ color: var(--text-secondary);
4112
+ font-family: var(--font-mono);
4113
+ }
4114
+
4115
+ .dock-addon:focus-within,
4116
+ .dock-addon.focused {
4117
+ border-color: var(--accent);
4118
+ box-shadow:
4119
+ 0 0 0 1px var(--accent),
4120
+ 0 0 10px var(--accent-glow);
4121
+ }
4122
+
4123
+ .dock-addon-head:focus {
4124
+ outline: none;
4125
+ }
4126
+
4127
+ /* Stops above the prompt rows, as the expanded show card does. */
4128
+ .dock-addon.expanded {
4129
+ left: 0;
4130
+ bottom: calc(7.2 * var(--show-term-font, 13px));
4131
+ width: auto;
4132
+ border-bottom: 1px solid var(--border);
4133
+ }
4134
+
4135
+ .dock-addon.expanded .show-dock-edge {
4136
+ display: none;
4137
+ }
4138
+
4139
+ .dock-addon-body {
4140
+ position: relative;
4141
+ flex: 1;
4142
+ min-height: 0;
4143
+ }
4144
+
4145
+ .dock-addon-frame {
4146
+ display: block;
4147
+ width: 100%;
4148
+ height: 100%;
4149
+ border: 0;
4150
+ background: var(--bg-surface);
4151
+ }
4152
+
4153
+ .dock-addon-view {
4154
+ height: 100%;
4155
+ }
4156
+
4157
+ .show-card.open.under-addon {
4158
+ display: none;
4159
+ }
4160
+
3967
4161
  .show-card {
3968
4162
  --show-inset: 8px;
3969
4163
  /* Six terminal rows (prompt, its rules, status line) at xterm's cell height of about 1.2 × font size. */
@@ -3971,7 +4165,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3971
4165
  position: absolute;
3972
4166
  z-index: 2;
3973
4167
  top: var(--show-inset);
3974
- right: var(--show-inset);
4168
+ right: calc(var(--show-inset) + var(--dock-rail-w));
3975
4169
  display: none;
3976
4170
  flex-direction: column;
3977
4171
  box-sizing: border-box;
@@ -4020,6 +4214,27 @@ body.light .show-card {
4020
4214
  max-height: none;
4021
4215
  }
4022
4216
 
4217
+ /* Off the bottom edge: the Windows 11 window frame covers the last pixel row, which hides the
4218
+ bottom border there. */
4219
+ .dock-addon,
4220
+ .show-card.docked {
4221
+ top: 0;
4222
+ right: var(--dock-rail-w);
4223
+ bottom: 2px;
4224
+ width: var(--show-dock-drag, var(--show-dock-w));
4225
+ }
4226
+
4227
+ .show-card.docked {
4228
+ left: auto;
4229
+ height: auto;
4230
+ min-width: 0;
4231
+ max-width: none;
4232
+ max-height: none;
4233
+ border-width: 0 0 1px 1px;
4234
+ border-radius: 0;
4235
+ box-shadow: none;
4236
+ }
4237
+
4023
4238
  .show-card.collapsed {
4024
4239
  left: auto;
4025
4240
  bottom: auto;
@@ -4031,7 +4246,9 @@ body.light .show-card {
4031
4246
  .show-card.collapsed .show-body,
4032
4247
  .show-card.collapsed .show-review,
4033
4248
  .show-card.collapsed .show-grip,
4034
- .show-card.expanded .show-grip {
4249
+ .show-card.expanded .show-grip,
4250
+ .show-card.docked .show-grip,
4251
+ .show-card:not(.docked) .show-dock-edge {
4035
4252
  display: none;
4036
4253
  }
4037
4254
 
@@ -4121,6 +4338,12 @@ body.light .show-card.focused {
4121
4338
  0 0 10px var(--accent-glow);
4122
4339
  }
4123
4340
 
4341
+ .dock-addon:focus-within,
4342
+ .dock-addon.focused,
4343
+ .show-card.docked.focused {
4344
+ border-bottom-color: var(--border);
4345
+ }
4346
+
4124
4347
  .show-actions {
4125
4348
  flex: none;
4126
4349
  display: flex;
@@ -4159,6 +4382,10 @@ body.light .show-card.focused {
4159
4382
  height: 14px;
4160
4383
  }
4161
4384
 
4385
+ .show-btn.active {
4386
+ color: var(--accent);
4387
+ }
4388
+
4162
4389
  .show-btn.remove:hover:not(:disabled) {
4163
4390
  color: var(--text-primary);
4164
4391
  background: var(--bg-elevated);
@@ -4233,6 +4460,7 @@ body.light .show-card.focused {
4233
4460
  padding: 0.8em 1.1em 1em;
4234
4461
  /* The same scale as an HTML card's frame (the zoom in showBridge). */
4235
4462
  font-size: clamp(12.5px, calc(9.7px + 0.58cqi), 17.5px);
4463
+ zoom: var(--show-zoom, 1);
4236
4464
  line-height: 1.6;
4237
4465
  color: var(--text-secondary);
4238
4466
  overflow-wrap: anywhere;
@@ -4286,7 +4514,7 @@ body.light .show-card.focused {
4286
4514
  }
4287
4515
 
4288
4516
  .show-md a {
4289
- color: var(--accent);
4517
+ color: var(--accent-text);
4290
4518
  }
4291
4519
 
4292
4520
  .show-md blockquote {
@@ -4421,6 +4649,22 @@ body.light .show-card.focused {
4421
4649
  height: 9px;
4422
4650
  }
4423
4651
 
4652
+ .show-dock-edge {
4653
+ position: absolute;
4654
+ top: 0;
4655
+ left: 0;
4656
+ bottom: 0;
4657
+ width: 5px;
4658
+ cursor: col-resize;
4659
+ touch-action: none;
4660
+ transition: background 0.15s;
4661
+ }
4662
+
4663
+ .show-dock-edge:hover,
4664
+ body.show-resizing .show-dock-edge {
4665
+ background: var(--accent-dim);
4666
+ }
4667
+
4424
4668
  body.show-resizing {
4425
4669
  user-select: none;
4426
4670
  }
@@ -4968,7 +5212,7 @@ body.show-resizing iframe {
4968
5212
 
4969
5213
  .pane-tool:disabled,
4970
5214
  .pane-split-btn:disabled {
4971
- opacity: 0.35;
5215
+ opacity: 0.55;
4972
5216
  cursor: default;
4973
5217
  background: none;
4974
5218
  }
@@ -5470,6 +5714,27 @@ body.show-resizing iframe {
5470
5714
  .message-panel-content > * + * {
5471
5715
  margin-top: 8px;
5472
5716
  }
5717
+ /* Under the pinned block, rows scrolled past the top fade out instead of showing as a cut row.
5718
+ The fade grows over the first 64px of scroll, so an unscrolled list shows its first row whole.
5719
+ Its top 24px are fully clear, which covers the meta line of a cut row. */
5720
+ @property --msg-top-fade {
5721
+ syntax: '<length>';
5722
+ inherits: false;
5723
+ initial-value: 0px;
5724
+ }
5725
+ @keyframes msg-top-fade {
5726
+ to {
5727
+ --msg-top-fade: 64px;
5728
+ }
5729
+ }
5730
+ @supports (animation-timeline: scroll()) {
5731
+ #message-panel-pinned:not(:empty) + .message-panel-content {
5732
+ mask-image: linear-gradient(to bottom, transparent calc(var(--msg-top-fade) * 0.375), #000 var(--msg-top-fade));
5733
+ animation: msg-top-fade linear both;
5734
+ animation-timeline: scroll(self);
5735
+ animation-range: 0 64px;
5736
+ }
5737
+ }
5473
5738
  .msg-item {
5474
5739
  display: flex;
5475
5740
  gap: 8px;
@@ -5624,7 +5889,7 @@ body.show-resizing iframe {
5624
5889
  font-size: 9px;
5625
5890
  }
5626
5891
  .msg-agent-link {
5627
- color: var(--accent);
5892
+ color: var(--accent-text);
5628
5893
  font-size: 0.85rem;
5629
5894
  margin-left: 4px;
5630
5895
  opacity: 0.7;
@@ -5669,6 +5934,10 @@ body.show-resizing iframe {
5669
5934
  #message-panel-pinned {
5670
5935
  flex-shrink: 0;
5671
5936
  padding: 8px 16px;
5937
+ border-bottom: 1px solid var(--border);
5938
+ box-shadow: 0 4px 6px -4px color-mix(in srgb, var(--text-primary) 25%, transparent);
5939
+ position: relative;
5940
+ z-index: 1;
5672
5941
  }
5673
5942
  .pinned-section {
5674
5943
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
@@ -5679,7 +5948,7 @@ body.show-resizing iframe {
5679
5948
  padding: 6px 10px;
5680
5949
  font-size: 11px;
5681
5950
  font-weight: 600;
5682
- color: var(--accent);
5951
+ color: var(--accent-text);
5683
5952
  cursor: pointer;
5684
5953
  display: flex;
5685
5954
  align-items: center;
@@ -5807,7 +6076,7 @@ body.show-resizing iframe {
5807
6076
  border-bottom-color: var(--text-muted);
5808
6077
  }
5809
6078
  .agent-tab.active {
5810
- color: var(--accent);
6079
+ color: var(--accent-text);
5811
6080
  border-bottom-color: var(--accent);
5812
6081
  }
5813
6082
  .agent-tab-panel {
@@ -5852,7 +6121,7 @@ body.show-resizing iframe {
5852
6121
  padding: 8px 14px;
5853
6122
  font-size: 11px;
5854
6123
  color: var(--text-secondary);
5855
- z-index: 10000;
6124
+ z-index: 10020;
5856
6125
  opacity: 0;
5857
6126
  transform: translateY(10px);
5858
6127
  transition:
@@ -5900,7 +6169,7 @@ body.show-resizing iframe {
5900
6169
  }
5901
6170
  .toast.toast-info {
5902
6171
  border-color: var(--accent);
5903
- color: var(--accent);
6172
+ color: var(--accent-text);
5904
6173
  }
5905
6174
  .rendered-md h1,
5906
6175
  .rendered-md h2,
@@ -5931,7 +6200,7 @@ body.show-resizing iframe {
5931
6200
  list-style: none;
5932
6201
  }
5933
6202
  .rendered-md a {
5934
- color: var(--accent);
6203
+ color: var(--accent-text);
5935
6204
  }
5936
6205
  .rendered-md pre {
5937
6206
  margin: 0.6em 0;
@@ -6049,7 +6318,7 @@ body.show-resizing iframe {
6049
6318
  .expand-toggle-btn {
6050
6319
  background: none;
6051
6320
  border: none;
6052
- color: var(--accent);
6321
+ color: var(--accent-text);
6053
6322
  cursor: pointer;
6054
6323
  text-decoration: underline;
6055
6324
  margin-left: 6px;
@@ -6247,12 +6516,15 @@ body.show-resizing iframe {
6247
6516
  cursor: pointer;
6248
6517
  transition: all 0.15s ease;
6249
6518
  }
6519
+ /* --accent-text is tuned to 4.5:1 on --bg-surface, so the pair holds as fill and text in every theme. */
6250
6520
  .waiting-btn-allow {
6251
- color: var(--accent);
6252
- border-color: color-mix(in srgb, var(--accent) 40%, transparent);
6521
+ color: var(--bg-surface);
6522
+ background: var(--accent-text);
6523
+ border-color: var(--accent-text);
6524
+ font-weight: 600;
6253
6525
  }
6254
6526
  .waiting-btn-allow:hover:not(:disabled) {
6255
- background: color-mix(in srgb, var(--accent) 12%, transparent);
6527
+ background: color-mix(in srgb, var(--accent-text) 85%, var(--text-primary));
6256
6528
  }
6257
6529
  .waiting-btn-deny {
6258
6530
  color: var(--text-secondary);
@@ -6287,7 +6559,7 @@ body.show-resizing iframe {
6287
6559
  font-weight: 600;
6288
6560
  text-transform: uppercase;
6289
6561
  letter-spacing: 0.5px;
6290
- color: var(--accent);
6562
+ color: var(--accent-text);
6291
6563
  margin-bottom: 4px;
6292
6564
  }
6293
6565
  .waiting-question-text {
@@ -6447,7 +6719,7 @@ body.show-resizing iframe {
6447
6719
  }
6448
6720
  .waiting-option.selected .waiting-option-key {
6449
6721
  border-color: var(--accent);
6450
- color: var(--accent);
6722
+ color: var(--accent-text);
6451
6723
  }
6452
6724
  .waiting-qtabs {
6453
6725
  display: flex;
@@ -6562,12 +6834,12 @@ body.show-resizing iframe {
6562
6834
  .perm-wait {
6563
6835
  font-family: var(--mono);
6564
6836
  font-size: 11px;
6565
- color: var(--text-muted);
6837
+ color: var(--text-tertiary);
6566
6838
  }
6567
6839
  .perm-label {
6568
- font-size: 10px;
6840
+ font-size: 11px;
6569
6841
  letter-spacing: 0.3px;
6570
- color: var(--text-muted);
6842
+ color: var(--text-tertiary);
6571
6843
  font-family: var(--mono);
6572
6844
  word-break: break-all;
6573
6845
  }
@@ -6589,7 +6861,7 @@ body.show-resizing iframe {
6589
6861
  .perm-cwd {
6590
6862
  font-family: var(--mono);
6591
6863
  font-size: 11px;
6592
- color: var(--text-muted);
6864
+ color: var(--text-tertiary);
6593
6865
  }
6594
6866
  .perm-diff {
6595
6867
  border: 1px solid var(--border);
@@ -6705,8 +6977,8 @@ body.show-resizing iframe {
6705
6977
  color: var(--text-muted);
6706
6978
  }
6707
6979
  .msg-time {
6708
- font-size: 10px;
6709
- color: var(--text-muted);
6980
+ font-size: 11px;
6981
+ color: var(--text-tertiary);
6710
6982
  margin-top: 4px;
6711
6983
  }
6712
6984
  .msg-empty {
@@ -7105,13 +7377,6 @@ body.show-resizing iframe {
7105
7377
  color: var(--text-primary);
7106
7378
  }
7107
7379
 
7108
- .agent-dismiss-btn {
7109
- font-size: 12px;
7110
- padding: 4px 10px;
7111
- background: var(--bg-elevated);
7112
- color: var(--text-secondary);
7113
- border: 1px solid var(--border);
7114
- }
7115
7380
  .agent-badge {
7116
7381
  display: inline-flex;
7117
7382
  align-items: center;
@@ -7130,6 +7395,10 @@ body.show-resizing iframe {
7130
7395
  .dispatched-badge:not([onclick]) {
7131
7396
  cursor: default;
7132
7397
  }
7398
+ .fork-badge {
7399
+ cursor: pointer;
7400
+ }
7401
+ .fork-badge:hover,
7133
7402
  .dispatched-badge[onclick]:hover {
7134
7403
  color: var(--accent, var(--text-primary));
7135
7404
  }
@@ -7729,7 +7998,7 @@ body.light {
7729
7998
  --text-primary: #0a0a0a;
7730
7999
  --text-secondary: #2c2c2c;
7731
8000
  --text-tertiary: #565656;
7732
- --text-muted: #767676;
8001
+ --text-muted: #666666;
7733
8002
  --accent-text: #a0501c;
7734
8003
  --accent-dim: rgba(184, 90, 32, 0.18);
7735
8004
  --accent-glow: rgba(232, 111, 51, 0.5);
@@ -8067,6 +8336,12 @@ body.light .msg-assistant .msg-text {
8067
8336
  font-size: 11px;
8068
8337
  color: var(--text-muted);
8069
8338
  flex-shrink: 0;
8339
+ cursor: copy;
8340
+ align-self: flex-start;
8341
+ }
8342
+
8343
+ #preview-modal-meta:hover {
8344
+ color: var(--text-primary);
8070
8345
  }
8071
8346
 
8072
8347
  /* Rendered HTML pages need far more room than a markdown doc. */
@@ -8248,7 +8523,7 @@ body.light .msg-assistant .msg-text {
8248
8523
  }
8249
8524
 
8250
8525
  .preview-fm .fm-k {
8251
- color: var(--accent);
8526
+ color: var(--accent-text);
8252
8527
  font-weight: 600;
8253
8528
  }
8254
8529
 
@@ -8429,8 +8704,8 @@ body.light .msg-assistant .msg-text {
8429
8704
  small type, and scrolls its body (rule shared with #team-modal) instead of growing past
8430
8705
  the viewport cap. */
8431
8706
  .modal-help {
8432
- max-width: 900px;
8433
- height: min(700px, 90vh);
8707
+ max-width: 1080px;
8708
+ height: min(800px, 90vh);
8434
8709
  padding: 16px 20px 20px;
8435
8710
  display: flex;
8436
8711
  flex-direction: column;
@@ -8470,8 +8745,8 @@ body.light .msg-assistant .msg-text {
8470
8745
  .shortcuts {
8471
8746
  margin: 0;
8472
8747
  display: grid;
8473
- grid-template-columns: max-content 1fr 28px max-content 1fr;
8474
- column-gap: 14px;
8748
+ grid-template-columns: fit-content(160px) 1fr 32px fit-content(160px) 1fr;
8749
+ column-gap: 16px;
8475
8750
  }
8476
8751
 
8477
8752
  .shortcuts dt.sc-l {
@@ -8496,6 +8771,7 @@ body.light .msg-assistant .msg-text {
8496
8771
  .shortcuts dt {
8497
8772
  margin: 0;
8498
8773
  display: flex;
8774
+ flex-wrap: wrap;
8499
8775
  align-items: center;
8500
8776
  align-self: center;
8501
8777
  gap: 4px;
@@ -8621,9 +8897,10 @@ body.light .msg-assistant .msg-text {
8621
8897
  .modal-close {
8622
8898
  width: 32px;
8623
8899
  height: 32px;
8624
- border: none;
8900
+ flex-shrink: 0;
8901
+ border: 1px solid var(--border);
8625
8902
  background: none;
8626
- color: var(--text-secondary);
8903
+ color: var(--text-tertiary);
8627
8904
  cursor: pointer;
8628
8905
  display: flex;
8629
8906
  align-items: center;
@@ -8632,9 +8909,15 @@ body.light .msg-assistant .msg-text {
8632
8909
  transition: all 0.15s ease;
8633
8910
  }
8634
8911
 
8912
+ .modal-close svg {
8913
+ width: 16px;
8914
+ height: 16px;
8915
+ }
8916
+
8635
8917
  .modal-close:hover {
8636
8918
  background: var(--bg-hover);
8637
8919
  color: var(--text-primary);
8920
+ border-color: var(--text-muted);
8638
8921
  }
8639
8922
 
8640
8923
  .modal-body {
@@ -9163,6 +9446,10 @@ select.form-input option:checked {
9163
9446
  background: var(--bg-hover);
9164
9447
  }
9165
9448
 
9449
+ .sp-row:hover .sp-branch {
9450
+ background: var(--bg-elevated);
9451
+ }
9452
+
9166
9453
  .sp-row.selected {
9167
9454
  background: var(--bg-elevated);
9168
9455
  border-color: var(--accent);
@@ -9182,7 +9469,7 @@ select.form-input option:checked {
9182
9469
  }
9183
9470
 
9184
9471
  .sp-state.active {
9185
- color: var(--accent);
9472
+ color: var(--accent-text);
9186
9473
  }
9187
9474
 
9188
9475
  .sp-state.waiting {
@@ -9387,7 +9674,7 @@ select.form-input option:checked {
9387
9674
  }
9388
9675
 
9389
9676
  .ns-notched legend {
9390
- margin: 0 8px 0 auto;
9677
+ margin: 0 auto 0 8px;
9391
9678
  padding: 0 4px;
9392
9679
  font-size: 11px;
9393
9680
  font-weight: 500;
@@ -9502,7 +9789,7 @@ select.form-input option:checked {
9502
9789
  margin-top: 4px;
9503
9790
  font-family: var(--mono);
9504
9791
  font-size: 11px;
9505
- color: var(--text-muted);
9792
+ color: var(--text-tertiary);
9506
9793
  }
9507
9794
 
9508
9795
  .ns-body textarea.form-input {
@@ -9785,10 +10072,11 @@ select.form-input option:checked {
9785
10072
  gap: 6px;
9786
10073
  }
9787
10074
 
10075
+ /* The pure status colors on their own 15% tint measure 2.7–3.8:1 in light. Mixing in the text color keeps the hue and passes 4.5:1. */
9788
10076
  .badge-success {
9789
10077
  display: inline-block;
9790
10078
  background: color-mix(in srgb, var(--success) 15%, transparent);
9791
- color: var(--success);
10079
+ color: color-mix(in srgb, var(--success) 65%, var(--text-primary));
9792
10080
  border-radius: 4px;
9793
10081
  padding: 1px 6px;
9794
10082
  font-size: 12px;
@@ -9798,7 +10086,7 @@ select.form-input option:checked {
9798
10086
  .badge-failed {
9799
10087
  display: inline-block;
9800
10088
  background: color-mix(in srgb, var(--danger) 15%, transparent);
9801
- color: var(--danger);
10089
+ color: color-mix(in srgb, var(--danger) 65%, var(--text-primary));
9802
10090
  border-radius: 4px;
9803
10091
  padding: 1px 6px;
9804
10092
  font-size: 12px;
@@ -9808,7 +10096,7 @@ select.form-input option:checked {
9808
10096
  .badge-rejected {
9809
10097
  display: inline-block;
9810
10098
  background: color-mix(in srgb, var(--warning) 15%, transparent);
9811
- color: var(--warning);
10099
+ color: color-mix(in srgb, var(--warning) 65%, var(--text-primary));
9812
10100
  border-radius: 4px;
9813
10101
  padding: 1px 6px;
9814
10102
  font-size: 12px;
@@ -9832,7 +10120,7 @@ select.form-input option:checked {
9832
10120
  height: 100%;
9833
10121
  border-radius: 3px;
9834
10122
  background: var(--accent);
9835
- min-width: 2px;
10123
+ min-width: 4px;
9836
10124
  }
9837
10125
 
9838
10126
  .impact-pct {
@@ -10059,7 +10347,7 @@ select.form-input option:checked {
10059
10347
 
10060
10348
  .storage-tab.active,
10061
10349
  .help-tab.active {
10062
- color: var(--accent);
10350
+ color: var(--accent-text);
10063
10351
  border-bottom-color: var(--accent);
10064
10352
  }
10065
10353
 
@@ -10120,7 +10408,7 @@ select.form-input option:checked {
10120
10408
 
10121
10409
  .storage-item-badge.pinned {
10122
10410
  background: color-mix(in srgb, var(--accent) 15%, transparent);
10123
- color: var(--accent);
10411
+ color: var(--accent-text);
10124
10412
  }
10125
10413
 
10126
10414
  .storage-item-badge.sticky {
@@ -10242,7 +10530,7 @@ select.form-input option:checked {
10242
10530
  --text-primary: #0a0a0a;
10243
10531
  --text-secondary: #2c2c2c;
10244
10532
  --text-tertiary: #565656;
10245
- --text-muted: #767676;
10533
+ --text-muted: #666666;
10246
10534
  --accent-text: #a0501c;
10247
10535
  --accent-dim: rgba(184, 90, 32, 0.18);
10248
10536
  --accent-glow: rgba(232, 111, 51, 0.5);
@@ -10710,7 +10998,7 @@ pre.mermaid[data-mermaid-error]::before {
10710
10998
  }
10711
10999
 
10712
11000
  .session-group-header.sg-zen {
10713
- color: var(--accent);
11001
+ color: var(--accent-text);
10714
11002
  }
10715
11003
 
10716
11004
  .sg-sub-label {