claude-code-kanban 7.20.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 {
@@ -4968,7 +5006,7 @@ body.show-resizing iframe {
4968
5006
 
4969
5007
  .pane-tool:disabled,
4970
5008
  .pane-split-btn:disabled {
4971
- opacity: 0.35;
5009
+ opacity: 0.55;
4972
5010
  cursor: default;
4973
5011
  background: none;
4974
5012
  }
@@ -5470,6 +5508,27 @@ body.show-resizing iframe {
5470
5508
  .message-panel-content > * + * {
5471
5509
  margin-top: 8px;
5472
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
+ }
5473
5532
  .msg-item {
5474
5533
  display: flex;
5475
5534
  gap: 8px;
@@ -5624,7 +5683,7 @@ body.show-resizing iframe {
5624
5683
  font-size: 9px;
5625
5684
  }
5626
5685
  .msg-agent-link {
5627
- color: var(--accent);
5686
+ color: var(--accent-text);
5628
5687
  font-size: 0.85rem;
5629
5688
  margin-left: 4px;
5630
5689
  opacity: 0.7;
@@ -5669,6 +5728,10 @@ body.show-resizing iframe {
5669
5728
  #message-panel-pinned {
5670
5729
  flex-shrink: 0;
5671
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;
5672
5735
  }
5673
5736
  .pinned-section {
5674
5737
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
@@ -5679,7 +5742,7 @@ body.show-resizing iframe {
5679
5742
  padding: 6px 10px;
5680
5743
  font-size: 11px;
5681
5744
  font-weight: 600;
5682
- color: var(--accent);
5745
+ color: var(--accent-text);
5683
5746
  cursor: pointer;
5684
5747
  display: flex;
5685
5748
  align-items: center;
@@ -5807,7 +5870,7 @@ body.show-resizing iframe {
5807
5870
  border-bottom-color: var(--text-muted);
5808
5871
  }
5809
5872
  .agent-tab.active {
5810
- color: var(--accent);
5873
+ color: var(--accent-text);
5811
5874
  border-bottom-color: var(--accent);
5812
5875
  }
5813
5876
  .agent-tab-panel {
@@ -5900,7 +5963,7 @@ body.show-resizing iframe {
5900
5963
  }
5901
5964
  .toast.toast-info {
5902
5965
  border-color: var(--accent);
5903
- color: var(--accent);
5966
+ color: var(--accent-text);
5904
5967
  }
5905
5968
  .rendered-md h1,
5906
5969
  .rendered-md h2,
@@ -5931,7 +5994,7 @@ body.show-resizing iframe {
5931
5994
  list-style: none;
5932
5995
  }
5933
5996
  .rendered-md a {
5934
- color: var(--accent);
5997
+ color: var(--accent-text);
5935
5998
  }
5936
5999
  .rendered-md pre {
5937
6000
  margin: 0.6em 0;
@@ -6049,7 +6112,7 @@ body.show-resizing iframe {
6049
6112
  .expand-toggle-btn {
6050
6113
  background: none;
6051
6114
  border: none;
6052
- color: var(--accent);
6115
+ color: var(--accent-text);
6053
6116
  cursor: pointer;
6054
6117
  text-decoration: underline;
6055
6118
  margin-left: 6px;
@@ -6247,12 +6310,15 @@ body.show-resizing iframe {
6247
6310
  cursor: pointer;
6248
6311
  transition: all 0.15s ease;
6249
6312
  }
6313
+ /* --accent-text is tuned to 4.5:1 on --bg-surface, so the pair holds as fill and text in every theme. */
6250
6314
  .waiting-btn-allow {
6251
- color: var(--accent);
6252
- 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;
6253
6319
  }
6254
6320
  .waiting-btn-allow:hover:not(:disabled) {
6255
- background: color-mix(in srgb, var(--accent) 12%, transparent);
6321
+ background: color-mix(in srgb, var(--accent-text) 85%, var(--text-primary));
6256
6322
  }
6257
6323
  .waiting-btn-deny {
6258
6324
  color: var(--text-secondary);
@@ -6287,7 +6353,7 @@ body.show-resizing iframe {
6287
6353
  font-weight: 600;
6288
6354
  text-transform: uppercase;
6289
6355
  letter-spacing: 0.5px;
6290
- color: var(--accent);
6356
+ color: var(--accent-text);
6291
6357
  margin-bottom: 4px;
6292
6358
  }
6293
6359
  .waiting-question-text {
@@ -6447,7 +6513,7 @@ body.show-resizing iframe {
6447
6513
  }
6448
6514
  .waiting-option.selected .waiting-option-key {
6449
6515
  border-color: var(--accent);
6450
- color: var(--accent);
6516
+ color: var(--accent-text);
6451
6517
  }
6452
6518
  .waiting-qtabs {
6453
6519
  display: flex;
@@ -6562,12 +6628,12 @@ body.show-resizing iframe {
6562
6628
  .perm-wait {
6563
6629
  font-family: var(--mono);
6564
6630
  font-size: 11px;
6565
- color: var(--text-muted);
6631
+ color: var(--text-tertiary);
6566
6632
  }
6567
6633
  .perm-label {
6568
- font-size: 10px;
6634
+ font-size: 11px;
6569
6635
  letter-spacing: 0.3px;
6570
- color: var(--text-muted);
6636
+ color: var(--text-tertiary);
6571
6637
  font-family: var(--mono);
6572
6638
  word-break: break-all;
6573
6639
  }
@@ -6589,7 +6655,7 @@ body.show-resizing iframe {
6589
6655
  .perm-cwd {
6590
6656
  font-family: var(--mono);
6591
6657
  font-size: 11px;
6592
- color: var(--text-muted);
6658
+ color: var(--text-tertiary);
6593
6659
  }
6594
6660
  .perm-diff {
6595
6661
  border: 1px solid var(--border);
@@ -6705,8 +6771,8 @@ body.show-resizing iframe {
6705
6771
  color: var(--text-muted);
6706
6772
  }
6707
6773
  .msg-time {
6708
- font-size: 10px;
6709
- color: var(--text-muted);
6774
+ font-size: 11px;
6775
+ color: var(--text-tertiary);
6710
6776
  margin-top: 4px;
6711
6777
  }
6712
6778
  .msg-empty {
@@ -7105,13 +7171,6 @@ body.show-resizing iframe {
7105
7171
  color: var(--text-primary);
7106
7172
  }
7107
7173
 
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
7174
  .agent-badge {
7116
7175
  display: inline-flex;
7117
7176
  align-items: center;
@@ -7130,6 +7189,10 @@ body.show-resizing iframe {
7130
7189
  .dispatched-badge:not([onclick]) {
7131
7190
  cursor: default;
7132
7191
  }
7192
+ .fork-badge {
7193
+ cursor: pointer;
7194
+ }
7195
+ .fork-badge:hover,
7133
7196
  .dispatched-badge[onclick]:hover {
7134
7197
  color: var(--accent, var(--text-primary));
7135
7198
  }
@@ -7729,7 +7792,7 @@ body.light {
7729
7792
  --text-primary: #0a0a0a;
7730
7793
  --text-secondary: #2c2c2c;
7731
7794
  --text-tertiary: #565656;
7732
- --text-muted: #767676;
7795
+ --text-muted: #666666;
7733
7796
  --accent-text: #a0501c;
7734
7797
  --accent-dim: rgba(184, 90, 32, 0.18);
7735
7798
  --accent-glow: rgba(232, 111, 51, 0.5);
@@ -8248,7 +8311,7 @@ body.light .msg-assistant .msg-text {
8248
8311
  }
8249
8312
 
8250
8313
  .preview-fm .fm-k {
8251
- color: var(--accent);
8314
+ color: var(--accent-text);
8252
8315
  font-weight: 600;
8253
8316
  }
8254
8317
 
@@ -8429,8 +8492,8 @@ body.light .msg-assistant .msg-text {
8429
8492
  small type, and scrolls its body (rule shared with #team-modal) instead of growing past
8430
8493
  the viewport cap. */
8431
8494
  .modal-help {
8432
- max-width: 900px;
8433
- height: min(700px, 90vh);
8495
+ max-width: 1080px;
8496
+ height: min(800px, 90vh);
8434
8497
  padding: 16px 20px 20px;
8435
8498
  display: flex;
8436
8499
  flex-direction: column;
@@ -8470,8 +8533,8 @@ body.light .msg-assistant .msg-text {
8470
8533
  .shortcuts {
8471
8534
  margin: 0;
8472
8535
  display: grid;
8473
- grid-template-columns: max-content 1fr 28px max-content 1fr;
8474
- column-gap: 14px;
8536
+ grid-template-columns: fit-content(160px) 1fr 32px fit-content(160px) 1fr;
8537
+ column-gap: 16px;
8475
8538
  }
8476
8539
 
8477
8540
  .shortcuts dt.sc-l {
@@ -8496,6 +8559,7 @@ body.light .msg-assistant .msg-text {
8496
8559
  .shortcuts dt {
8497
8560
  margin: 0;
8498
8561
  display: flex;
8562
+ flex-wrap: wrap;
8499
8563
  align-items: center;
8500
8564
  align-self: center;
8501
8565
  gap: 4px;
@@ -8621,9 +8685,10 @@ body.light .msg-assistant .msg-text {
8621
8685
  .modal-close {
8622
8686
  width: 32px;
8623
8687
  height: 32px;
8624
- border: none;
8688
+ flex-shrink: 0;
8689
+ border: 1px solid var(--border);
8625
8690
  background: none;
8626
- color: var(--text-secondary);
8691
+ color: var(--text-tertiary);
8627
8692
  cursor: pointer;
8628
8693
  display: flex;
8629
8694
  align-items: center;
@@ -8632,9 +8697,15 @@ body.light .msg-assistant .msg-text {
8632
8697
  transition: all 0.15s ease;
8633
8698
  }
8634
8699
 
8700
+ .modal-close svg {
8701
+ width: 16px;
8702
+ height: 16px;
8703
+ }
8704
+
8635
8705
  .modal-close:hover {
8636
8706
  background: var(--bg-hover);
8637
8707
  color: var(--text-primary);
8708
+ border-color: var(--text-muted);
8638
8709
  }
8639
8710
 
8640
8711
  .modal-body {
@@ -9163,6 +9234,10 @@ select.form-input option:checked {
9163
9234
  background: var(--bg-hover);
9164
9235
  }
9165
9236
 
9237
+ .sp-row:hover .sp-branch {
9238
+ background: var(--bg-elevated);
9239
+ }
9240
+
9166
9241
  .sp-row.selected {
9167
9242
  background: var(--bg-elevated);
9168
9243
  border-color: var(--accent);
@@ -9182,7 +9257,7 @@ select.form-input option:checked {
9182
9257
  }
9183
9258
 
9184
9259
  .sp-state.active {
9185
- color: var(--accent);
9260
+ color: var(--accent-text);
9186
9261
  }
9187
9262
 
9188
9263
  .sp-state.waiting {
@@ -9387,7 +9462,7 @@ select.form-input option:checked {
9387
9462
  }
9388
9463
 
9389
9464
  .ns-notched legend {
9390
- margin: 0 8px 0 auto;
9465
+ margin: 0 auto 0 8px;
9391
9466
  padding: 0 4px;
9392
9467
  font-size: 11px;
9393
9468
  font-weight: 500;
@@ -9502,7 +9577,7 @@ select.form-input option:checked {
9502
9577
  margin-top: 4px;
9503
9578
  font-family: var(--mono);
9504
9579
  font-size: 11px;
9505
- color: var(--text-muted);
9580
+ color: var(--text-tertiary);
9506
9581
  }
9507
9582
 
9508
9583
  .ns-body textarea.form-input {
@@ -9785,10 +9860,11 @@ select.form-input option:checked {
9785
9860
  gap: 6px;
9786
9861
  }
9787
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. */
9788
9864
  .badge-success {
9789
9865
  display: inline-block;
9790
9866
  background: color-mix(in srgb, var(--success) 15%, transparent);
9791
- color: var(--success);
9867
+ color: color-mix(in srgb, var(--success) 65%, var(--text-primary));
9792
9868
  border-radius: 4px;
9793
9869
  padding: 1px 6px;
9794
9870
  font-size: 12px;
@@ -9798,7 +9874,7 @@ select.form-input option:checked {
9798
9874
  .badge-failed {
9799
9875
  display: inline-block;
9800
9876
  background: color-mix(in srgb, var(--danger) 15%, transparent);
9801
- color: var(--danger);
9877
+ color: color-mix(in srgb, var(--danger) 65%, var(--text-primary));
9802
9878
  border-radius: 4px;
9803
9879
  padding: 1px 6px;
9804
9880
  font-size: 12px;
@@ -9808,7 +9884,7 @@ select.form-input option:checked {
9808
9884
  .badge-rejected {
9809
9885
  display: inline-block;
9810
9886
  background: color-mix(in srgb, var(--warning) 15%, transparent);
9811
- color: var(--warning);
9887
+ color: color-mix(in srgb, var(--warning) 65%, var(--text-primary));
9812
9888
  border-radius: 4px;
9813
9889
  padding: 1px 6px;
9814
9890
  font-size: 12px;
@@ -9832,7 +9908,7 @@ select.form-input option:checked {
9832
9908
  height: 100%;
9833
9909
  border-radius: 3px;
9834
9910
  background: var(--accent);
9835
- min-width: 2px;
9911
+ min-width: 4px;
9836
9912
  }
9837
9913
 
9838
9914
  .impact-pct {
@@ -10059,7 +10135,7 @@ select.form-input option:checked {
10059
10135
 
10060
10136
  .storage-tab.active,
10061
10137
  .help-tab.active {
10062
- color: var(--accent);
10138
+ color: var(--accent-text);
10063
10139
  border-bottom-color: var(--accent);
10064
10140
  }
10065
10141
 
@@ -10120,7 +10196,7 @@ select.form-input option:checked {
10120
10196
 
10121
10197
  .storage-item-badge.pinned {
10122
10198
  background: color-mix(in srgb, var(--accent) 15%, transparent);
10123
- color: var(--accent);
10199
+ color: var(--accent-text);
10124
10200
  }
10125
10201
 
10126
10202
  .storage-item-badge.sticky {
@@ -10242,7 +10318,7 @@ select.form-input option:checked {
10242
10318
  --text-primary: #0a0a0a;
10243
10319
  --text-secondary: #2c2c2c;
10244
10320
  --text-tertiary: #565656;
10245
- --text-muted: #767676;
10321
+ --text-muted: #666666;
10246
10322
  --accent-text: #a0501c;
10247
10323
  --accent-dim: rgba(184, 90, 32, 0.18);
10248
10324
  --accent-glow: rgba(232, 111, 51, 0.5);
@@ -10710,7 +10786,7 @@ pre.mermaid[data-mermaid-error]::before {
10710
10786
  }
10711
10787
 
10712
10788
  .session-group-header.sg-zen {
10713
- color: var(--accent);
10789
+ color: var(--accent-text);
10714
10790
  }
10715
10791
 
10716
10792
  .sg-sub-label {