claude-code-kanban 7.19.0 → 7.21.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);
@@ -290,11 +290,11 @@ body::before {
290
290
  padding: 4px 10px;
291
291
  font: inherit;
292
292
  font-size: 11px;
293
- font-weight: 500;
293
+ font-weight: 600;
294
294
  letter-spacing: 0.04em;
295
- color: var(--text-secondary);
295
+ color: var(--accent-text);
296
296
  background: transparent;
297
- border: 1px dashed color-mix(in srgb, var(--text-secondary) 40%, var(--border));
297
+ border: 1px solid var(--accent-text);
298
298
  border-radius: 999px;
299
299
  white-space: nowrap;
300
300
  cursor: pointer;
@@ -1097,7 +1097,7 @@ body.booting .boot-splash {
1097
1097
  }
1098
1098
 
1099
1099
  .session-item.warm .session-time {
1100
- color: var(--success);
1100
+ color: color-mix(in srgb, var(--success) 70%, var(--text-primary));
1101
1101
  }
1102
1102
 
1103
1103
  .session-item.warm .session-time::before {
@@ -1134,13 +1134,14 @@ body.booting .boot-splash {
1134
1134
  background: var(--warning);
1135
1135
  }
1136
1136
 
1137
+ /* Stale rows render at 0.85 opacity, which takes --text-muted below 4.5:1. */
1137
1138
  .session-item.stale .session-time {
1138
- color: var(--text-muted);
1139
+ color: var(--text-tertiary);
1139
1140
  }
1140
1141
 
1141
1142
  .session-item.stale .session-time::before {
1142
1143
  background: transparent;
1143
- border: 1px solid var(--text-muted);
1144
+ border: 1px solid var(--text-tertiary);
1144
1145
  }
1145
1146
 
1146
1147
  .session-name {
@@ -1221,6 +1222,9 @@ body.booting .boot-splash {
1221
1222
  }
1222
1223
 
1223
1224
  .session-secondary {
1225
+ display: flex;
1226
+ align-items: baseline;
1227
+ gap: 5px;
1224
1228
  font-family: var(--sans);
1225
1229
  font-size: 12px;
1226
1230
  font-weight: 450;
@@ -1230,12 +1234,20 @@ body.booting .boot-splash {
1230
1234
  overflow: hidden;
1231
1235
  }
1232
1236
 
1237
+ .session-project {
1238
+ flex: none;
1239
+ max-width: 60%;
1240
+ overflow: hidden;
1241
+ text-overflow: ellipsis;
1242
+ }
1243
+
1233
1244
  /* inline-block, not inline-flex: a flex box ignores text-overflow, so a long worktree name
1234
1245
  ran past the card edge instead of truncating. */
1235
1246
  .wt-chip {
1236
1247
  display: inline-block;
1248
+ flex: 0 1 auto;
1249
+ align-self: center;
1237
1250
  max-width: 60%;
1238
- margin-left: 5px;
1239
1251
  padding: 0 5px;
1240
1252
  border: 1px solid var(--accent-dim);
1241
1253
  border-radius: 999px;
@@ -1244,17 +1256,15 @@ body.booting .boot-splash {
1244
1256
  font-family: var(--mono);
1245
1257
  font-size: 9px;
1246
1258
  line-height: 14px;
1247
- vertical-align: middle;
1248
1259
  white-space: nowrap;
1249
1260
  overflow: hidden;
1250
1261
  text-overflow: ellipsis;
1251
1262
  }
1252
1263
 
1253
1264
  .session-branch {
1265
+ min-width: 0;
1254
1266
  font-size: 10px;
1255
1267
  color: var(--text-secondary);
1256
- margin-top: var(--card-gap-tight);
1257
- display: block;
1258
1268
  font-family: var(--mono);
1259
1269
  white-space: nowrap;
1260
1270
  overflow: hidden;
@@ -1333,7 +1343,7 @@ body.booting .boot-splash {
1333
1343
  justify-content: space-between;
1334
1344
  gap: 6px;
1335
1345
  margin-top: 4px;
1336
- font-size: 10px;
1346
+ font-size: 11px;
1337
1347
  font-family: var(--font-mono);
1338
1348
  color: var(--text-tertiary);
1339
1349
  white-space: nowrap;
@@ -1936,7 +1946,7 @@ body.booting .boot-splash {
1936
1946
  .view-progress .progress-text {
1937
1947
  font-size: 14px;
1938
1948
  font-weight: 500;
1939
- color: var(--accent);
1949
+ color: var(--accent-text);
1940
1950
  }
1941
1951
 
1942
1952
  .icon-btn {
@@ -2111,7 +2121,7 @@ body.booting .boot-splash {
2111
2121
  color: var(--text-tertiary);
2112
2122
  }
2113
2123
  .column-title.in-progress {
2114
- color: var(--accent);
2124
+ color: var(--accent-text);
2115
2125
  }
2116
2126
  .column-title.completed {
2117
2127
  color: var(--success);
@@ -2131,7 +2141,7 @@ body.booting .boot-splash {
2131
2141
 
2132
2142
  .column-count.in-progress {
2133
2143
  background: var(--accent-dim);
2134
- color: var(--accent);
2144
+ color: var(--accent-text);
2135
2145
  }
2136
2146
 
2137
2147
  .column-count.completed {
@@ -2242,7 +2252,6 @@ body.booting .boot-splash {
2242
2252
  }
2243
2253
 
2244
2254
  .task-card.completed {
2245
- opacity: 0.85;
2246
2255
  border-left: 2px solid var(--success);
2247
2256
  }
2248
2257
 
@@ -2313,7 +2322,7 @@ body.booting .boot-splash {
2313
2322
  border-top: 1px solid var(--border);
2314
2323
  font-size: 11px;
2315
2324
  font-weight: 500;
2316
- color: var(--accent);
2325
+ color: var(--accent-text);
2317
2326
  }
2318
2327
 
2319
2328
  .task-active::before {
@@ -2343,7 +2352,7 @@ body.booting .boot-splash {
2343
2352
  }
2344
2353
 
2345
2354
  .task-chip-accent {
2346
- color: var(--accent);
2355
+ color: var(--accent-text);
2347
2356
  }
2348
2357
 
2349
2358
  .task-desc {
@@ -2554,7 +2563,7 @@ body.booting .boot-splash {
2554
2563
 
2555
2564
  .detail-status.in_progress {
2556
2565
  background: var(--accent-dim);
2557
- color: var(--accent);
2566
+ color: var(--accent-text);
2558
2567
  border: 1px solid var(--accent);
2559
2568
  }
2560
2569
 
@@ -2596,7 +2605,7 @@ body.booting .boot-splash {
2596
2605
  }
2597
2606
 
2598
2607
  .detail-box.active strong {
2599
- color: var(--accent);
2608
+ color: var(--accent-text);
2600
2609
  }
2601
2610
 
2602
2611
  .detail-desc {
@@ -2944,7 +2953,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
2944
2953
  font-weight: 600;
2945
2954
  text-transform: uppercase;
2946
2955
  letter-spacing: 0.05em;
2947
- color: var(--accent);
2956
+ color: var(--accent-text);
2948
2957
  margin: 0 0 8px 0;
2949
2958
  }
2950
2959
 
@@ -2994,7 +3003,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
2994
3003
  .shared-tasklist-badge {
2995
3004
  display: inline-flex;
2996
3005
  align-items: center;
2997
- color: var(--accent);
3006
+ color: var(--accent-text);
2998
3007
  flex-shrink: 0;
2999
3008
  }
3000
3009
 
@@ -3006,6 +3015,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3006
3015
  .loop-badge,
3007
3016
  .workflow-badge,
3008
3017
  .dispatched-badge,
3018
+ .fork-badge,
3009
3019
  .terminal-badge {
3010
3020
  width: 18px;
3011
3021
  height: 18px;
@@ -3021,6 +3031,17 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3021
3031
  transition: all 0.15s ease;
3022
3032
  }
3023
3033
 
3034
+ /* A 22×24px hit area around each 18px icon without growing the card. The 5px row gap
3035
+ keeps neighbouring areas from overlapping. */
3036
+ .session-indicators > [onclick] {
3037
+ position: relative;
3038
+ }
3039
+ .session-indicators > [onclick]::after {
3040
+ content: '';
3041
+ position: absolute;
3042
+ inset: -3px -2px;
3043
+ }
3044
+
3024
3045
  .team-info-btn:hover,
3025
3046
  .loop-badge:hover,
3026
3047
  .workflow-badge:hover {
@@ -3440,7 +3461,7 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3440
3461
 
3441
3462
  .team-member-card .member-tasks {
3442
3463
  font-size: 11px;
3443
- color: var(--accent);
3464
+ color: var(--accent-text);
3444
3465
  margin-top: 4px;
3445
3466
  }
3446
3467
 
@@ -3458,6 +3479,18 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3458
3479
  min-height: 0;
3459
3480
  padding-right: 8px;
3460
3481
  }
3482
+ /* Scroll shadows: the covers scroll with the content (local), the shadows stay at the edges,
3483
+ so a shadow shows only while more content is above or below. */
3484
+ .modal-help .modal-body {
3485
+ padding-bottom: 16px;
3486
+ --scroll-shadow: color-mix(in srgb, var(--text-primary) 30%, transparent);
3487
+ background:
3488
+ linear-gradient(var(--bg-surface) 30%, transparent) center top / 100% 40px no-repeat local,
3489
+ linear-gradient(transparent, var(--bg-surface) 70%) center bottom / 100% 40px no-repeat local,
3490
+ radial-gradient(farthest-side at 50% 0, var(--scroll-shadow), transparent) center top / 100% 18px no-repeat scroll,
3491
+ radial-gradient(farthest-side at 50% 100%, var(--scroll-shadow), transparent) center bottom / 100% 18px no-repeat
3492
+ scroll;
3493
+ }
3461
3494
  #team-modal .modal-footer {
3462
3495
  flex-shrink: 0;
3463
3496
  }
@@ -3532,6 +3565,10 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3532
3565
  border-top: 1px solid var(--border);
3533
3566
  }
3534
3567
 
3568
+ .team-modal-meta:first-child {
3569
+ margin-top: 0;
3570
+ }
3571
+
3535
3572
  .info-grid {
3536
3573
  display: grid;
3537
3574
  grid-template-columns: auto 1fr auto;
@@ -3541,10 +3578,11 @@ code.ct .ct-has[aria-expanded='false'] .ct-name::after {
3541
3578
  }
3542
3579
  /* Shared hover-reveal icon-button group, also used by the linked-doc rows. Each host
3543
3580
  supplies its own reveal trigger — the base only sets the resting opacity. */
3581
+ /* 0.55 is the lowest opacity that keeps the icons at 3:1 in light and dark. */
3544
3582
  .row-actions {
3545
3583
  display: flex;
3546
3584
  gap: 4px;
3547
- opacity: 0.3;
3585
+ opacity: 0.55;
3548
3586
  transition: opacity 0.15s ease;
3549
3587
  }
3550
3588
  .info-grid:hover .row-actions {
@@ -4286,7 +4324,7 @@ body.light .show-card.focused {
4286
4324
  }
4287
4325
 
4288
4326
  .show-md a {
4289
- color: var(--accent);
4327
+ color: var(--accent-text);
4290
4328
  }
4291
4329
 
4292
4330
  .show-md blockquote {
@@ -4460,6 +4498,181 @@ body.show-resizing iframe {
4460
4498
 
4461
4499
  /* #endregion */
4462
4500
 
4501
+ /* #region ASK */
4502
+ .ask-modal {
4503
+ position: absolute;
4504
+ inset: 0;
4505
+ z-index: 5;
4506
+ display: flex;
4507
+ align-items: center;
4508
+ justify-content: center;
4509
+ background: color-mix(in srgb, var(--bg-deep) 55%, transparent);
4510
+ }
4511
+
4512
+ .ask-modal[hidden] {
4513
+ display: none;
4514
+ }
4515
+
4516
+ .ask-box {
4517
+ display: flex;
4518
+ flex-direction: column;
4519
+ box-sizing: border-box;
4520
+ width: min(560px, calc(100% - 32px));
4521
+ max-height: calc(100% - 32px);
4522
+ background: var(--bg-surface);
4523
+ border: 1px solid var(--border);
4524
+ border-radius: 10px;
4525
+ box-shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.45);
4526
+ overflow: hidden;
4527
+ }
4528
+
4529
+ .ask-box[data-size='lg'] {
4530
+ width: min(960px, calc(100% - 32px));
4531
+ }
4532
+
4533
+ .ask-box[data-size='full'] {
4534
+ width: calc(100% - 32px);
4535
+ height: calc(100% - 32px);
4536
+ }
4537
+
4538
+ .ask-head,
4539
+ .ask-foot {
4540
+ display: flex;
4541
+ flex: none;
4542
+ align-items: center;
4543
+ gap: 8px;
4544
+ padding: 6px 8px 6px 12px;
4545
+ color: var(--text-tertiary);
4546
+ font-size: 11px;
4547
+ }
4548
+
4549
+ .ask-head {
4550
+ border-bottom: 1px solid var(--border);
4551
+ }
4552
+
4553
+ .ask-foot {
4554
+ justify-content: space-between;
4555
+ border-top: 1px solid var(--border);
4556
+ }
4557
+
4558
+ .ask-dot {
4559
+ display: inline-grid;
4560
+ place-items: center;
4561
+ flex: none;
4562
+ width: 16px;
4563
+ height: 16px;
4564
+ border-radius: 50%;
4565
+ background: var(--accent);
4566
+ color: #fff;
4567
+ font-size: 10px;
4568
+ font-weight: 700;
4569
+ }
4570
+
4571
+ .ask-title {
4572
+ flex: 1;
4573
+ min-width: 0;
4574
+ overflow: hidden;
4575
+ color: var(--text-primary);
4576
+ font-size: 12px;
4577
+ font-weight: 600;
4578
+ text-overflow: ellipsis;
4579
+ white-space: nowrap;
4580
+ }
4581
+
4582
+ .ask-x {
4583
+ display: inline-grid;
4584
+ place-items: center;
4585
+ width: 22px;
4586
+ height: 22px;
4587
+ padding: 0;
4588
+ border: 0;
4589
+ border-radius: 4px;
4590
+ background: transparent;
4591
+ color: var(--text-tertiary);
4592
+ cursor: pointer;
4593
+ }
4594
+
4595
+ .ask-x svg {
4596
+ width: 14px;
4597
+ height: 14px;
4598
+ }
4599
+
4600
+ .ask-foot button {
4601
+ padding: 3px 12px;
4602
+ border: 1px solid var(--border);
4603
+ border-radius: 5px;
4604
+ background: transparent;
4605
+ color: var(--text-secondary);
4606
+ font: inherit;
4607
+ cursor: pointer;
4608
+ }
4609
+
4610
+ .ask-x:hover,
4611
+ .ask-foot button:hover {
4612
+ background: var(--bg-hover);
4613
+ color: var(--text-primary);
4614
+ }
4615
+
4616
+ .ask-body {
4617
+ display: flex;
4618
+ flex: 1 1 auto;
4619
+ flex-direction: column;
4620
+ min-height: 0;
4621
+ }
4622
+
4623
+ .ask-frame {
4624
+ display: block;
4625
+ width: 100%;
4626
+ border: 0;
4627
+ background: var(--bg-surface);
4628
+ }
4629
+
4630
+ .ask-box[data-size='full'] .ask-frame {
4631
+ flex: 1;
4632
+ }
4633
+
4634
+ .ask-missing {
4635
+ margin: 0;
4636
+ padding: 16px;
4637
+ color: var(--text-tertiary);
4638
+ }
4639
+
4640
+ .ask-reopen {
4641
+ max-width: 240px;
4642
+ border-color: color-mix(in srgb, var(--accent) 50%, var(--border));
4643
+ color: var(--text-secondary);
4644
+ }
4645
+
4646
+ .ask-reopen-n {
4647
+ overflow: hidden;
4648
+ text-overflow: ellipsis;
4649
+ white-space: nowrap;
4650
+ }
4651
+
4652
+ .ask-reopen .ask-dot {
4653
+ width: 14px;
4654
+ height: 14px;
4655
+ font-size: 9px;
4656
+ animation: ask-pulse 1.6s ease-out infinite;
4657
+ }
4658
+
4659
+ @keyframes ask-pulse {
4660
+ 0% {
4661
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 60%, transparent);
4662
+ }
4663
+ 100% {
4664
+ box-shadow: 0 0 0 6px transparent;
4665
+ }
4666
+ }
4667
+
4668
+ @media (prefers-reduced-motion: reduce) {
4669
+ .ask-reopen .ask-dot {
4670
+ animation: none;
4671
+ }
4672
+ }
4673
+
4674
+ /* #endregion */
4675
+
4463
4676
  /* #region PANES */
4464
4677
  .pane-strip {
4465
4678
  display: none;
@@ -4793,7 +5006,7 @@ body.show-resizing iframe {
4793
5006
 
4794
5007
  .pane-tool:disabled,
4795
5008
  .pane-split-btn:disabled {
4796
- opacity: 0.35;
5009
+ opacity: 0.55;
4797
5010
  cursor: default;
4798
5011
  background: none;
4799
5012
  }
@@ -5295,6 +5508,27 @@ body.show-resizing iframe {
5295
5508
  .message-panel-content > * + * {
5296
5509
  margin-top: 8px;
5297
5510
  }
5511
+ /* Under the pinned block, rows scrolled past the top fade out instead of showing as a cut row.
5512
+ The fade grows over the first 64px of scroll, so an unscrolled list shows its first row whole.
5513
+ Its top 24px are fully clear, which covers the meta line of a cut row. */
5514
+ @property --msg-top-fade {
5515
+ syntax: '<length>';
5516
+ inherits: false;
5517
+ initial-value: 0px;
5518
+ }
5519
+ @keyframes msg-top-fade {
5520
+ to {
5521
+ --msg-top-fade: 64px;
5522
+ }
5523
+ }
5524
+ @supports (animation-timeline: scroll()) {
5525
+ #message-panel-pinned:not(:empty) + .message-panel-content {
5526
+ mask-image: linear-gradient(to bottom, transparent calc(var(--msg-top-fade) * 0.375), #000 var(--msg-top-fade));
5527
+ animation: msg-top-fade linear both;
5528
+ animation-timeline: scroll(self);
5529
+ animation-range: 0 64px;
5530
+ }
5531
+ }
5298
5532
  .msg-item {
5299
5533
  display: flex;
5300
5534
  gap: 8px;
@@ -5449,7 +5683,7 @@ body.show-resizing iframe {
5449
5683
  font-size: 9px;
5450
5684
  }
5451
5685
  .msg-agent-link {
5452
- color: var(--accent);
5686
+ color: var(--accent-text);
5453
5687
  font-size: 0.85rem;
5454
5688
  margin-left: 4px;
5455
5689
  opacity: 0.7;
@@ -5494,6 +5728,10 @@ body.show-resizing iframe {
5494
5728
  #message-panel-pinned {
5495
5729
  flex-shrink: 0;
5496
5730
  padding: 8px 16px;
5731
+ border-bottom: 1px solid var(--border);
5732
+ box-shadow: 0 4px 6px -4px color-mix(in srgb, var(--text-primary) 25%, transparent);
5733
+ position: relative;
5734
+ z-index: 1;
5497
5735
  }
5498
5736
  .pinned-section {
5499
5737
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
@@ -5504,7 +5742,7 @@ body.show-resizing iframe {
5504
5742
  padding: 6px 10px;
5505
5743
  font-size: 11px;
5506
5744
  font-weight: 600;
5507
- color: var(--accent);
5745
+ color: var(--accent-text);
5508
5746
  cursor: pointer;
5509
5747
  display: flex;
5510
5748
  align-items: center;
@@ -5632,7 +5870,7 @@ body.show-resizing iframe {
5632
5870
  border-bottom-color: var(--text-muted);
5633
5871
  }
5634
5872
  .agent-tab.active {
5635
- color: var(--accent);
5873
+ color: var(--accent-text);
5636
5874
  border-bottom-color: var(--accent);
5637
5875
  }
5638
5876
  .agent-tab-panel {
@@ -5725,7 +5963,7 @@ body.show-resizing iframe {
5725
5963
  }
5726
5964
  .toast.toast-info {
5727
5965
  border-color: var(--accent);
5728
- color: var(--accent);
5966
+ color: var(--accent-text);
5729
5967
  }
5730
5968
  .rendered-md h1,
5731
5969
  .rendered-md h2,
@@ -5756,7 +5994,7 @@ body.show-resizing iframe {
5756
5994
  list-style: none;
5757
5995
  }
5758
5996
  .rendered-md a {
5759
- color: var(--accent);
5997
+ color: var(--accent-text);
5760
5998
  }
5761
5999
  .rendered-md pre {
5762
6000
  margin: 0.6em 0;
@@ -5874,7 +6112,7 @@ body.show-resizing iframe {
5874
6112
  .expand-toggle-btn {
5875
6113
  background: none;
5876
6114
  border: none;
5877
- color: var(--accent);
6115
+ color: var(--accent-text);
5878
6116
  cursor: pointer;
5879
6117
  text-decoration: underline;
5880
6118
  margin-left: 6px;
@@ -6072,12 +6310,15 @@ body.show-resizing iframe {
6072
6310
  cursor: pointer;
6073
6311
  transition: all 0.15s ease;
6074
6312
  }
6313
+ /* --accent-text is tuned to 4.5:1 on --bg-surface, so the pair holds as fill and text in every theme. */
6075
6314
  .waiting-btn-allow {
6076
- color: var(--accent);
6077
- border-color: color-mix(in srgb, var(--accent) 40%, transparent);
6315
+ color: var(--bg-surface);
6316
+ background: var(--accent-text);
6317
+ border-color: var(--accent-text);
6318
+ font-weight: 600;
6078
6319
  }
6079
6320
  .waiting-btn-allow:hover:not(:disabled) {
6080
- background: color-mix(in srgb, var(--accent) 12%, transparent);
6321
+ background: color-mix(in srgb, var(--accent-text) 85%, var(--text-primary));
6081
6322
  }
6082
6323
  .waiting-btn-deny {
6083
6324
  color: var(--text-secondary);
@@ -6112,7 +6353,7 @@ body.show-resizing iframe {
6112
6353
  font-weight: 600;
6113
6354
  text-transform: uppercase;
6114
6355
  letter-spacing: 0.5px;
6115
- color: var(--accent);
6356
+ color: var(--accent-text);
6116
6357
  margin-bottom: 4px;
6117
6358
  }
6118
6359
  .waiting-question-text {
@@ -6272,7 +6513,7 @@ body.show-resizing iframe {
6272
6513
  }
6273
6514
  .waiting-option.selected .waiting-option-key {
6274
6515
  border-color: var(--accent);
6275
- color: var(--accent);
6516
+ color: var(--accent-text);
6276
6517
  }
6277
6518
  .waiting-qtabs {
6278
6519
  display: flex;
@@ -6387,12 +6628,12 @@ body.show-resizing iframe {
6387
6628
  .perm-wait {
6388
6629
  font-family: var(--mono);
6389
6630
  font-size: 11px;
6390
- color: var(--text-muted);
6631
+ color: var(--text-tertiary);
6391
6632
  }
6392
6633
  .perm-label {
6393
- font-size: 10px;
6634
+ font-size: 11px;
6394
6635
  letter-spacing: 0.3px;
6395
- color: var(--text-muted);
6636
+ color: var(--text-tertiary);
6396
6637
  font-family: var(--mono);
6397
6638
  word-break: break-all;
6398
6639
  }
@@ -6414,7 +6655,7 @@ body.show-resizing iframe {
6414
6655
  .perm-cwd {
6415
6656
  font-family: var(--mono);
6416
6657
  font-size: 11px;
6417
- color: var(--text-muted);
6658
+ color: var(--text-tertiary);
6418
6659
  }
6419
6660
  .perm-diff {
6420
6661
  border: 1px solid var(--border);
@@ -6530,8 +6771,8 @@ body.show-resizing iframe {
6530
6771
  color: var(--text-muted);
6531
6772
  }
6532
6773
  .msg-time {
6533
- font-size: 10px;
6534
- color: var(--text-muted);
6774
+ font-size: 11px;
6775
+ color: var(--text-tertiary);
6535
6776
  margin-top: 4px;
6536
6777
  }
6537
6778
  .msg-empty {
@@ -6930,13 +7171,6 @@ body.show-resizing iframe {
6930
7171
  color: var(--text-primary);
6931
7172
  }
6932
7173
 
6933
- .agent-dismiss-btn {
6934
- font-size: 12px;
6935
- padding: 4px 10px;
6936
- background: var(--bg-elevated);
6937
- color: var(--text-secondary);
6938
- border: 1px solid var(--border);
6939
- }
6940
7174
  .agent-badge {
6941
7175
  display: inline-flex;
6942
7176
  align-items: center;
@@ -6955,6 +7189,10 @@ body.show-resizing iframe {
6955
7189
  .dispatched-badge:not([onclick]) {
6956
7190
  cursor: default;
6957
7191
  }
7192
+ .fork-badge {
7193
+ cursor: pointer;
7194
+ }
7195
+ .fork-badge:hover,
6958
7196
  .dispatched-badge[onclick]:hover {
6959
7197
  color: var(--accent, var(--text-primary));
6960
7198
  }
@@ -7554,7 +7792,7 @@ body.light {
7554
7792
  --text-primary: #0a0a0a;
7555
7793
  --text-secondary: #2c2c2c;
7556
7794
  --text-tertiary: #565656;
7557
- --text-muted: #767676;
7795
+ --text-muted: #666666;
7558
7796
  --accent-text: #a0501c;
7559
7797
  --accent-dim: rgba(184, 90, 32, 0.18);
7560
7798
  --accent-glow: rgba(232, 111, 51, 0.5);
@@ -8073,7 +8311,7 @@ body.light .msg-assistant .msg-text {
8073
8311
  }
8074
8312
 
8075
8313
  .preview-fm .fm-k {
8076
- color: var(--accent);
8314
+ color: var(--accent-text);
8077
8315
  font-weight: 600;
8078
8316
  }
8079
8317
 
@@ -8254,8 +8492,8 @@ body.light .msg-assistant .msg-text {
8254
8492
  small type, and scrolls its body (rule shared with #team-modal) instead of growing past
8255
8493
  the viewport cap. */
8256
8494
  .modal-help {
8257
- max-width: 900px;
8258
- height: min(700px, 90vh);
8495
+ max-width: 1080px;
8496
+ height: min(800px, 90vh);
8259
8497
  padding: 16px 20px 20px;
8260
8498
  display: flex;
8261
8499
  flex-direction: column;
@@ -8295,8 +8533,8 @@ body.light .msg-assistant .msg-text {
8295
8533
  .shortcuts {
8296
8534
  margin: 0;
8297
8535
  display: grid;
8298
- grid-template-columns: max-content 1fr 28px max-content 1fr;
8299
- column-gap: 14px;
8536
+ grid-template-columns: fit-content(160px) 1fr 32px fit-content(160px) 1fr;
8537
+ column-gap: 16px;
8300
8538
  }
8301
8539
 
8302
8540
  .shortcuts dt.sc-l {
@@ -8321,6 +8559,7 @@ body.light .msg-assistant .msg-text {
8321
8559
  .shortcuts dt {
8322
8560
  margin: 0;
8323
8561
  display: flex;
8562
+ flex-wrap: wrap;
8324
8563
  align-items: center;
8325
8564
  align-self: center;
8326
8565
  gap: 4px;
@@ -8446,9 +8685,10 @@ body.light .msg-assistant .msg-text {
8446
8685
  .modal-close {
8447
8686
  width: 32px;
8448
8687
  height: 32px;
8449
- border: none;
8688
+ flex-shrink: 0;
8689
+ border: 1px solid var(--border);
8450
8690
  background: none;
8451
- color: var(--text-secondary);
8691
+ color: var(--text-tertiary);
8452
8692
  cursor: pointer;
8453
8693
  display: flex;
8454
8694
  align-items: center;
@@ -8457,9 +8697,15 @@ body.light .msg-assistant .msg-text {
8457
8697
  transition: all 0.15s ease;
8458
8698
  }
8459
8699
 
8700
+ .modal-close svg {
8701
+ width: 16px;
8702
+ height: 16px;
8703
+ }
8704
+
8460
8705
  .modal-close:hover {
8461
8706
  background: var(--bg-hover);
8462
8707
  color: var(--text-primary);
8708
+ border-color: var(--text-muted);
8463
8709
  }
8464
8710
 
8465
8711
  .modal-body {
@@ -8988,6 +9234,10 @@ select.form-input option:checked {
8988
9234
  background: var(--bg-hover);
8989
9235
  }
8990
9236
 
9237
+ .sp-row:hover .sp-branch {
9238
+ background: var(--bg-elevated);
9239
+ }
9240
+
8991
9241
  .sp-row.selected {
8992
9242
  background: var(--bg-elevated);
8993
9243
  border-color: var(--accent);
@@ -9007,7 +9257,7 @@ select.form-input option:checked {
9007
9257
  }
9008
9258
 
9009
9259
  .sp-state.active {
9010
- color: var(--accent);
9260
+ color: var(--accent-text);
9011
9261
  }
9012
9262
 
9013
9263
  .sp-state.waiting {
@@ -9212,7 +9462,7 @@ select.form-input option:checked {
9212
9462
  }
9213
9463
 
9214
9464
  .ns-notched legend {
9215
- margin: 0 8px 0 auto;
9465
+ margin: 0 auto 0 8px;
9216
9466
  padding: 0 4px;
9217
9467
  font-size: 11px;
9218
9468
  font-weight: 500;
@@ -9327,7 +9577,7 @@ select.form-input option:checked {
9327
9577
  margin-top: 4px;
9328
9578
  font-family: var(--mono);
9329
9579
  font-size: 11px;
9330
- color: var(--text-muted);
9580
+ color: var(--text-tertiary);
9331
9581
  }
9332
9582
 
9333
9583
  .ns-body textarea.form-input {
@@ -9610,10 +9860,11 @@ select.form-input option:checked {
9610
9860
  gap: 6px;
9611
9861
  }
9612
9862
 
9863
+ /* 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. */
9613
9864
  .badge-success {
9614
9865
  display: inline-block;
9615
9866
  background: color-mix(in srgb, var(--success) 15%, transparent);
9616
- color: var(--success);
9867
+ color: color-mix(in srgb, var(--success) 65%, var(--text-primary));
9617
9868
  border-radius: 4px;
9618
9869
  padding: 1px 6px;
9619
9870
  font-size: 12px;
@@ -9623,7 +9874,7 @@ select.form-input option:checked {
9623
9874
  .badge-failed {
9624
9875
  display: inline-block;
9625
9876
  background: color-mix(in srgb, var(--danger) 15%, transparent);
9626
- color: var(--danger);
9877
+ color: color-mix(in srgb, var(--danger) 65%, var(--text-primary));
9627
9878
  border-radius: 4px;
9628
9879
  padding: 1px 6px;
9629
9880
  font-size: 12px;
@@ -9633,7 +9884,7 @@ select.form-input option:checked {
9633
9884
  .badge-rejected {
9634
9885
  display: inline-block;
9635
9886
  background: color-mix(in srgb, var(--warning) 15%, transparent);
9636
- color: var(--warning);
9887
+ color: color-mix(in srgb, var(--warning) 65%, var(--text-primary));
9637
9888
  border-radius: 4px;
9638
9889
  padding: 1px 6px;
9639
9890
  font-size: 12px;
@@ -9657,7 +9908,7 @@ select.form-input option:checked {
9657
9908
  height: 100%;
9658
9909
  border-radius: 3px;
9659
9910
  background: var(--accent);
9660
- min-width: 2px;
9911
+ min-width: 4px;
9661
9912
  }
9662
9913
 
9663
9914
  .impact-pct {
@@ -9884,7 +10135,7 @@ select.form-input option:checked {
9884
10135
 
9885
10136
  .storage-tab.active,
9886
10137
  .help-tab.active {
9887
- color: var(--accent);
10138
+ color: var(--accent-text);
9888
10139
  border-bottom-color: var(--accent);
9889
10140
  }
9890
10141
 
@@ -9945,7 +10196,7 @@ select.form-input option:checked {
9945
10196
 
9946
10197
  .storage-item-badge.pinned {
9947
10198
  background: color-mix(in srgb, var(--accent) 15%, transparent);
9948
- color: var(--accent);
10199
+ color: var(--accent-text);
9949
10200
  }
9950
10201
 
9951
10202
  .storage-item-badge.sticky {
@@ -10067,7 +10318,7 @@ select.form-input option:checked {
10067
10318
  --text-primary: #0a0a0a;
10068
10319
  --text-secondary: #2c2c2c;
10069
10320
  --text-tertiary: #565656;
10070
- --text-muted: #767676;
10321
+ --text-muted: #666666;
10071
10322
  --accent-text: #a0501c;
10072
10323
  --accent-dim: rgba(184, 90, 32, 0.18);
10073
10324
  --accent-glow: rgba(232, 111, 51, 0.5);
@@ -10535,7 +10786,7 @@ pre.mermaid[data-mermaid-error]::before {
10535
10786
  }
10536
10787
 
10537
10788
  .session-group-header.sg-zen {
10538
- color: var(--accent);
10789
+ color: var(--accent-text);
10539
10790
  }
10540
10791
 
10541
10792
  .sg-sub-label {