@webority/theme 0.39.0 → 0.40.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.
@@ -44,7 +44,7 @@
44
44
  height: 48px;
45
45
  border-radius: var(--radius-lg);
46
46
  background: var(--color-primary-soft);
47
- color: var(--color-primary);
47
+ color: var(--color-primary-ink);
48
48
  display: inline-flex;
49
49
  align-items: center;
50
50
  justify-content: center;
@@ -69,7 +69,7 @@
69
69
  height: 50px;
70
70
  border-radius: 50%;
71
71
  background: color-mix(in srgb, var(--color-primary) 10%, transparent);
72
- color: var(--color-primary);
72
+ color: var(--color-primary-ink);
73
73
  margin-bottom: 16px;
74
74
  }
75
75
  .tbl-empty-title {
@@ -583,7 +583,7 @@
583
583
  }
584
584
  .tpg-arrow:hover:not(:disabled) {
585
585
  background: color-mix(in srgb, var(--color-primary) 10%, transparent);
586
- color: var(--color-primary);
586
+ color: var(--color-primary-ink);
587
587
  }
588
588
  .tpg-arrow:focus-visible {
589
589
  outline: 2px solid var(--color-primary);
@@ -618,7 +618,7 @@
618
618
  }
619
619
  .tpg-page:hover:not(.is-active) {
620
620
  background: color-mix(in srgb, var(--color-primary) 10%, transparent);
621
- color: var(--color-primary);
621
+ color: var(--color-primary-ink);
622
622
  }
623
623
  .tpg-page:focus-visible {
624
624
  outline: 2px solid var(--color-primary);
@@ -1084,7 +1084,7 @@
1084
1084
  }
1085
1085
  .u-action:hover:not(:disabled) {
1086
1086
  background: color-mix(in srgb, var(--color-primary) 10%, transparent);
1087
- color: var(--color-primary);
1087
+ color: var(--color-primary-ink);
1088
1088
  }
1089
1089
  .u-action:focus-visible {
1090
1090
  outline: 2px solid var(--color-primary);
@@ -1103,7 +1103,7 @@
1103
1103
  }
1104
1104
  .u-action.u-action-preview {
1105
1105
  background: var(--color-primary-soft);
1106
- color: var(--color-primary);
1106
+ color: var(--color-primary-ink);
1107
1107
  }
1108
1108
  .u-action.u-action-download {
1109
1109
  background: var(--color-success-soft);
@@ -1115,7 +1115,7 @@
1115
1115
  }
1116
1116
  .u-action.u-action-preview:hover:not(:disabled) {
1117
1117
  background: var(--color-primary-soft);
1118
- color: var(--color-primary);
1118
+ color: var(--color-primary-ink);
1119
1119
  }
1120
1120
  .u-action.u-action-download:hover:not(:disabled) {
1121
1121
  background: var(--color-success-soft);
@@ -1145,7 +1145,7 @@
1145
1145
  place-items: center;
1146
1146
  font-size: 16px;
1147
1147
  font-weight: 600;
1148
- color: var(--color-primary);
1148
+ color: var(--color-primary-ink);
1149
1149
  background: color-mix(in srgb, var(--color-primary) 20%, transparent);
1150
1150
  }
1151
1151
  .u-meta {
@@ -1218,7 +1218,7 @@
1218
1218
  .table th.sortable[aria-sort="ascending"] .sort-icon,
1219
1219
  .table th.sortable[aria-sort="descending"] .sort-icon {
1220
1220
  opacity: 1;
1221
- color: var(--color-primary);
1221
+ color: var(--color-primary-ink);
1222
1222
  }
1223
1223
  .table th.sortable[aria-sort="descending"] .sort-icon {
1224
1224
  transform: rotate(180deg);
@@ -54,14 +54,14 @@
54
54
  transition: color 0.12s ease;
55
55
  }
56
56
  .faq-q:hover {
57
- color: var(--color-primary);
57
+ color: var(--color-primary-ink);
58
58
  }
59
59
  .faq-q:focus-visible {
60
60
  outline: 2px solid var(--color-primary);
61
61
  outline-offset: -2px;
62
62
  }
63
63
  .faq-item.open .faq-q {
64
- color: var(--color-primary);
64
+ color: var(--color-primary-ink);
65
65
  }
66
66
  // Chevron rotates to point up when the pane is open.
67
67
  .faq-q-icon {
@@ -73,7 +73,7 @@
73
73
  }
74
74
  .faq-item.open .faq-q-icon {
75
75
  transform: rotate(180deg);
76
- color: var(--color-primary);
76
+ color: var(--color-primary-ink);
77
77
  }
78
78
 
79
79
  // The animating track. `min-height: 0` on the inner element is required — a grid
@@ -25,14 +25,14 @@
25
25
  margin-bottom: 12px;
26
26
  border-radius: 999px;
27
27
  background: var(--color-primary-soft);
28
- color: var(--color-primary);
28
+ color: var(--color-primary-ink);
29
29
  }
30
30
  // Tone modifiers — same semantic vocabulary as .badge/.status-label (success / warning /
31
31
  // danger / info / primary / neutral). primary is the default look above, restated here so
32
32
  // an explicit icon-tone="primary" matches an omitted one.
33
33
  .kpi-icon-primary {
34
34
  background: var(--color-primary-soft);
35
- color: var(--color-primary);
35
+ color: var(--color-primary-ink);
36
36
  }
37
37
  .kpi-icon-success {
38
38
  background: var(--color-success-soft);
@@ -107,7 +107,7 @@
107
107
  width: 48px;
108
108
  height: 16px;
109
109
  margin-top: 8px;
110
- color: var(--color-primary);
110
+ color: var(--color-primary-ink);
111
111
  }
112
112
  .kpi-sparkline polyline {
113
113
  stroke-width: 1.5;
@@ -292,7 +292,7 @@ a.kpi:focus-visible {
292
292
  place-items: center;
293
293
  border-radius: 999px;
294
294
  background: var(--color-primary-soft);
295
- color: var(--color-primary);
295
+ color: var(--color-primary-ink);
296
296
  }
297
297
  .info-meta {
298
298
  display: flex;
@@ -325,7 +325,7 @@ a.info-row:hover {
325
325
  text-decoration: none;
326
326
  }
327
327
  a.info-row:hover .info-value {
328
- color: var(--color-primary);
328
+ color: var(--color-primary-ink);
329
329
  text-decoration: underline;
330
330
  }
331
331
 
@@ -481,7 +481,7 @@ a.info-row:hover .info-value {
481
481
  white-space: nowrap;
482
482
  }
483
483
  .segmented-option:hover {
484
- color: var(--color-primary);
484
+ color: var(--color-primary-ink);
485
485
  }
486
486
  // A per-option sub-label under the main text — optional, so a segment without one keeps the
487
487
  // plain single-line layout above untouched.
@@ -510,7 +510,7 @@ a.info-row:hover .info-value {
510
510
  .segmented-option:has(.segmented-input:checked) {
511
511
  background: var(--segmented-selected-bg);
512
512
  box-shadow: inset 0 0 0 2px var(--color-primary);
513
- color: var(--color-primary);
513
+ color: var(--color-primary-ink);
514
514
  }
515
515
  // The ring is drawn on the label because the input it belongs to has no box.
516
516
  .segmented-option:has(.segmented-input:focus-visible) {
@@ -1008,7 +1008,7 @@ a.info-row:hover .info-value {
1008
1008
  }
1009
1009
  .compare-table th.is-highlight {
1010
1010
  background: var(--color-primary-soft);
1011
- color: var(--color-primary);
1011
+ color: var(--color-primary-ink);
1012
1012
  }
1013
1013
  .compare-table td.is-highlight {
1014
1014
  background: color-mix(in srgb, var(--color-primary) 4%, var(--color-surface));
@@ -1074,7 +1074,7 @@ a.info-row:hover .info-value {
1074
1074
  place-items: center;
1075
1075
  border-radius: 999px;
1076
1076
  background: var(--color-primary-soft);
1077
- color: var(--color-primary);
1077
+ color: var(--color-primary-ink);
1078
1078
  transition: background 0.3s var(--wui-ease-out-quart);
1079
1079
  }
1080
1080
  // On hover the card takes the soft tint, so the icon inverts to the surface
@@ -1097,7 +1097,7 @@ a.info-row:hover .info-value {
1097
1097
  transition: color 0.3s var(--wui-ease-out-quart);
1098
1098
  }
1099
1099
  .res-card:hover .res-card-title {
1100
- color: var(--color-primary);
1100
+ color: var(--color-primary-ink);
1101
1101
  }
1102
1102
  .res-card-text {
1103
1103
  margin-top: 2px;
@@ -1214,14 +1214,14 @@ a.info-row:hover .info-value {
1214
1214
  align-items: center;
1215
1215
  gap: 0.35em;
1216
1216
  position: relative;
1217
- color: var(--color-primary);
1217
+ color: var(--color-primary-ink);
1218
1218
  font-weight: 500;
1219
1219
  cursor: pointer;
1220
1220
  border-radius: 4px;
1221
1221
  transition: color 0.25s var(--wui-ease-out-quart);
1222
1222
  }
1223
1223
  .wui-link:hover {
1224
- color: var(--color-primary);
1224
+ color: var(--color-primary-ink);
1225
1225
  }
1226
1226
  .wui-link:focus-visible {
1227
1227
  outline: 2px solid var(--color-primary);
@@ -1356,7 +1356,7 @@ a.info-row:hover .info-value {
1356
1356
  }
1357
1357
  .wui-link--fade:hover,
1358
1358
  .wui-link--fade:focus-visible {
1359
- color: var(--color-primary);
1359
+ color: var(--color-primary-ink);
1360
1360
  }
1361
1361
 
1362
1362
  // static — the same thin single line, always visible (no text-decoration, so it matches
@@ -1489,6 +1489,6 @@ a.info-row:hover .info-value {
1489
1489
  .wui-link--shine .wui-link__label {
1490
1490
  background-image: none;
1491
1491
  -webkit-text-fill-color: var(--color-primary);
1492
- color: var(--color-primary);
1492
+ color: var(--color-primary-ink);
1493
1493
  }
1494
1494
  }
@@ -46,7 +46,7 @@ wui-dock {
46
46
  .dock-item:hover,
47
47
  .dock-item:focus-visible {
48
48
  background: var(--color-primary-soft);
49
- color: var(--color-primary);
49
+ color: var(--color-primary-ink);
50
50
  }
51
51
  .dock-item:focus-visible {
52
52
  outline: 2px solid var(--color-primary);
@@ -465,7 +465,7 @@ wui-file-viewer:fullscreen {
465
465
  height: 96px;
466
466
  border-radius: 50%;
467
467
  background: color-mix(in srgb, var(--color-primary) 12%, transparent);
468
- color: var(--color-primary);
468
+ color: var(--color-primary-ink);
469
469
  }
470
470
  .wui-file-viewer-controls {
471
471
  flex: 0 0 auto;
@@ -49,10 +49,10 @@
49
49
  // var fallbacks instead — which now also default to primary. :where() keeps this at ZERO
50
50
  // specificity, so a .wui-step-tone-* class or an inline --wui-step-* override still wins.
51
51
  :where(.stepper:not(.wizard-stepper)) {
52
- --wui-step-accent: var(--color-primary);
53
- --wui-step-accent-fg: var(--color-primary-text);
52
+ --wui-step-accent: var(--color-primary-ink);
53
+ --wui-step-accent-fg: var(--color-on-primary-ink);
54
54
  --wui-step-soft: var(--color-primary-soft);
55
- --wui-step-soft-fg: var(--color-primary);
55
+ --wui-step-soft-fg: var(--color-primary-ink);
56
56
  }
57
57
  .step {
58
58
  position: relative;
@@ -78,7 +78,7 @@
78
78
  z-index: 0;
79
79
  }
80
80
  .step.done + .step::before {
81
- background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
81
+ background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
82
82
  }
83
83
  // The active circle's 4px ring would swallow the 4px gap, so both connectors touching the
84
84
  // active step start 4px further out and keep the same gap from the ring's edge.
@@ -104,18 +104,18 @@
104
104
  font-weight: 600;
105
105
  color: var(--color-text-subtle);
106
106
  }
107
- // An untoned wizard sets no --wui-step-* vars, so the ink fallback must pair with the primary
108
- // fill fallback: white on the dark theme's light primary is under AA.
107
+ // An untoned wizard sets no --wui-step-* vars, so the fallbacks fill with the primary ink (AA as
108
+ // text whatever the brand) under --color-on-primary-ink, which clears AA on it in both themes.
109
109
  .step.active .step-circle {
110
- border-color: var(--wui-step-accent, var(--color-primary));
111
- background: var(--wui-step-accent, var(--color-primary));
112
- color: var(--wui-step-accent-fg, var(--color-primary-text));
110
+ border-color: var(--wui-step-accent, var(--color-primary-ink));
111
+ background: var(--wui-step-accent, var(--color-primary-ink));
112
+ color: var(--wui-step-accent-fg, var(--color-on-primary-ink));
113
113
  box-shadow: 0 0 0 4px var(--wui-step-soft, var(--color-primary-soft));
114
114
  }
115
115
  .step.done .step-circle {
116
- border-color: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
117
- background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
118
- color: var(--wui-step-done-accent-fg, var(--wui-step-accent-fg, var(--color-primary-text)));
116
+ border-color: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
117
+ background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
118
+ color: var(--wui-step-done-accent-fg, var(--wui-step-accent-fg, var(--color-on-primary-ink)));
119
119
  }
120
120
  .step-label {
121
121
  max-width: 130px;
@@ -152,7 +152,7 @@ button.step:hover .step-circle {
152
152
  }
153
153
  a.step:hover .step-label,
154
154
  button.step:hover .step-label {
155
- color: var(--wui-step-accent, var(--color-primary));
155
+ color: var(--wui-step-accent, var(--color-primary-ink));
156
156
  }
157
157
  a.step:focus-visible,
158
158
  button.step:focus-visible {
@@ -163,7 +163,7 @@ a.step:focus-visible .step-circle,
163
163
  button.step:focus-visible .step-circle {
164
164
  box-shadow:
165
165
  0 0 0 4px var(--wui-step-soft, var(--color-primary-soft)),
166
- 0 0 0 6px var(--wui-step-accent, var(--color-primary));
166
+ 0 0 0 6px var(--wui-step-accent, var(--color-primary-ink));
167
167
  }
168
168
  // A completed step keeps its own colour while hovered or focused, so a done-tone step does
169
169
  // not flash the main accent. Unset, these resolve to the same accent as the rules above.
@@ -173,13 +173,13 @@ button.step.done:hover .step-circle {
173
173
  }
174
174
  a.step.done:hover .step-label,
175
175
  button.step.done:hover .step-label {
176
- color: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
176
+ color: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
177
177
  }
178
178
  a.step.done:focus-visible .step-circle,
179
179
  button.step.done:focus-visible .step-circle {
180
180
  box-shadow:
181
181
  0 0 0 4px var(--wui-step-done-soft, var(--wui-step-soft, var(--color-primary-soft))),
182
- 0 0 0 6px var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
182
+ 0 0 0 6px var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
183
183
  }
184
184
  // A step that failed its stage — a red circle with an alert, so an invalid step
185
185
  // reads as wrong at a glance rather than merely "not done".
@@ -236,11 +236,11 @@ button.step.done:focus-visible .step-circle {
236
236
  }
237
237
  .stepper-journey .step.done .step-circle {
238
238
  background: var(--wui-step-done-soft, var(--wui-step-soft, var(--color-primary-soft)));
239
- color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary)));
239
+ color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary-ink)));
240
240
  }
241
241
  .stepper-journey .step.active .step-circle {
242
- background: var(--wui-step-accent, var(--color-primary));
243
- color: var(--wui-step-accent-fg, var(--color-primary-text));
242
+ background: var(--wui-step-accent, var(--color-primary-ink));
243
+ color: var(--wui-step-accent-fg, var(--color-on-primary-ink));
244
244
  box-shadow: none;
245
245
  transform: scale(1.06);
246
246
  }
@@ -261,10 +261,10 @@ button.step.done:focus-visible .step-circle {
261
261
  color: var(--color-text-subtle);
262
262
  }
263
263
  .stepper-journey .step.done .step-index {
264
- color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary)));
264
+ color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary-ink)));
265
265
  }
266
266
  .stepper-journey .step.active .step-index {
267
- color: var(--wui-step-accent, var(--color-primary));
267
+ color: var(--wui-step-accent, var(--color-primary-ink));
268
268
  }
269
269
  .stepper-journey .step.error .step-circle {
270
270
  background: var(--color-danger-soft);
@@ -309,7 +309,7 @@ button.step.done:focus-visible .step-circle {
309
309
  background: var(--color-border-strong);
310
310
  }
311
311
  .stepper-journey .step-line.done {
312
- background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
312
+ background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
313
313
  }
314
314
  // Below xl the four label+title pairs no longer fit side by side, so the bar
315
315
  // becomes a vertical list and the connectors go away.
@@ -387,7 +387,7 @@ button.step.done:focus-visible .step-circle {
387
387
  z-index: 0;
388
388
  }
389
389
  .stepper-vertical .step.done:not(:last-child)::after {
390
- background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
390
+ background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
391
391
  }
392
392
  // The journey bar stacked vertically reuses its own narrow-width treatment: a plain
393
393
  // column with the horizontal connectors dropped (a real vertical rail here would
@@ -429,8 +429,8 @@ button.step.done:focus-visible .step-circle {
429
429
  // active badge, a soft-primary done badge, a primary rail. Every colour routes through the
430
430
  // shared --wui-step-* vars, so a `.wui-step-tone-*` class or an override recolours it.
431
431
  .stepper-icons .step.active .step-circle {
432
- background: var(--wui-step-accent, var(--color-primary));
433
- color: var(--wui-step-accent-fg, var(--color-primary-text));
432
+ background: var(--wui-step-accent, var(--color-primary-ink));
433
+ color: var(--wui-step-accent-fg, var(--color-on-primary-ink));
434
434
  // The compact variant rings the active circle; here the solid fill carries it, so
435
435
  // drop the ring to match the flat badge look.
436
436
  box-shadow: none;
@@ -438,7 +438,7 @@ button.step.done:focus-visible .step-circle {
438
438
  .stepper-icons .step.done .step-circle {
439
439
  border: none;
440
440
  background: var(--wui-step-done-soft, var(--wui-step-soft, var(--color-primary-soft)));
441
- color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary)));
441
+ color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary-ink)));
442
442
  }
443
443
  .stepper-icons .step.error .step-circle {
444
444
  background: var(--color-danger-soft);
@@ -460,10 +460,10 @@ button.step.done:focus-visible .step-circle {
460
460
  color: var(--color-text-subtle);
461
461
  }
462
462
  .stepper-icons .step.active .step-index {
463
- color: var(--wui-step-accent, var(--color-primary));
463
+ color: var(--wui-step-accent, var(--color-primary-ink));
464
464
  }
465
465
  .stepper-icons .step.done .step-index {
466
- color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary)));
466
+ color: var(--wui-step-done-soft-fg, var(--wui-step-soft-fg, var(--color-primary-ink)));
467
467
  }
468
468
  .stepper-icons .step.error .step-index {
469
469
  color: var(--color-danger-text);
@@ -489,7 +489,7 @@ button.step.done:focus-visible .step-circle {
489
489
  background: var(--wui-step-connector, var(--color-border));
490
490
  }
491
491
  .stepper-icons .step.done + .step::before {
492
- background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary)));
492
+ background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
493
493
  }
494
494
  // The compact hover ring is calibrated to the 28px badge; the 56px icon badge just
495
495
  // lifts on hover instead.
@@ -542,10 +542,10 @@ button.step.done:focus-visible .step-circle {
542
542
  // class recolours every variant consistently; error steps stay red regardless (semantic).
543
543
  // ----------------------------------------------------------------------------
544
544
  .wui-step-tone-primary {
545
- --wui-step-accent: var(--color-primary);
546
- --wui-step-accent-fg: var(--color-primary-text);
545
+ --wui-step-accent: var(--color-primary-ink);
546
+ --wui-step-accent-fg: var(--color-on-primary-ink);
547
547
  --wui-step-soft: var(--color-primary-soft);
548
- --wui-step-soft-fg: var(--color-primary);
548
+ --wui-step-soft-fg: var(--color-primary-ink);
549
549
  }
550
550
  // Like primary, each tone fills with its deep shade (the -text token) under white ink in light mode,
551
551
  // and with the bright fill under near-black ink in dark mode; both pairs clear AA.
@@ -580,10 +580,10 @@ button.step.done:focus-visible .step-circle {
580
580
  // Error and skipped steps keep their own look.
581
581
  // ----------------------------------------------------------------------------
582
582
  .wui-step-done-tone-primary {
583
- --wui-step-done-accent: var(--color-primary);
584
- --wui-step-done-accent-fg: var(--color-primary-text);
583
+ --wui-step-done-accent: var(--color-primary-ink);
584
+ --wui-step-done-accent-fg: var(--color-on-primary-ink);
585
585
  --wui-step-done-soft: var(--color-primary-soft);
586
- --wui-step-done-soft-fg: var(--color-primary);
586
+ --wui-step-done-soft-fg: var(--color-primary-ink);
587
587
  }
588
588
  .wui-step-done-tone-success {
589
589
  --wui-step-done-accent: var(--color-success-text);
@@ -765,7 +765,7 @@ button.step.done:focus-visible .step-circle {
765
765
  .plan-feature-icon {
766
766
  flex: none;
767
767
  margin-top: 2px;
768
- color: var(--color-primary);
768
+ color: var(--color-primary-ink);
769
769
  }
770
770
  // A feature the tier does NOT include, kept in the list so every card has the
771
771
  // same rows and the columns line up when read across.
@@ -851,7 +851,7 @@ button.step.done:focus-visible .step-circle {
851
851
  place-items: center;
852
852
  border-radius: var(--radius-sm);
853
853
  background: var(--color-primary-soft);
854
- color: var(--color-primary);
854
+ color: var(--color-primary-ink);
855
855
  font-size: 12px;
856
856
  font-weight: 700;
857
857
  }
@@ -35,7 +35,7 @@
35
35
  height: var(--avatar-size, 32px);
36
36
  border-radius: 999px;
37
37
  background: color-mix(in srgb, var(--color-primary) 15%, var(--color-surface));
38
- color: var(--color-primary);
38
+ color: var(--color-primary-ink);
39
39
  font-size: calc(var(--avatar-size, 32px) * 0.375);
40
40
  font-weight: 600;
41
41
  display: inline-flex;
@@ -329,7 +329,7 @@
329
329
  justify-content: center;
330
330
  border-radius: 999px;
331
331
  background: var(--color-primary-soft);
332
- color: var(--color-primary);
332
+ color: var(--color-primary-ink);
333
333
  }
334
334
  .attach-drop:hover .attach-drop-icon {
335
335
  background: var(--color-surface);
@@ -358,7 +358,7 @@
358
358
  flex: 0 0 auto;
359
359
  font-size: 12px;
360
360
  font-weight: 600;
361
- color: var(--color-primary);
361
+ color: var(--color-primary-ink);
362
362
  border: 1px solid var(--color-border);
363
363
  border-radius: 999px;
364
364
  padding: 5px 14px;
@@ -478,7 +478,7 @@
478
478
  border-radius: var(--radius);
479
479
  overflow: hidden;
480
480
  background: var(--color-bg-muted);
481
- color: var(--color-primary);
481
+ color: var(--color-primary-ink);
482
482
  }
483
483
  .attach-item-media img {
484
484
  width: 100%;
@@ -705,7 +705,7 @@
705
705
  height: 54px;
706
706
  border-radius: 50%;
707
707
  background: var(--color-primary-soft);
708
- color: var(--color-primary);
708
+ color: var(--color-primary-ink);
709
709
  transition: transform 0.15s ease;
710
710
  }
711
711
  .file-input.file-input-tall.dragging .file-input-icon {
@@ -717,7 +717,7 @@
717
717
  color: var(--color-text);
718
718
  }
719
719
  .file-input-title .browse {
720
- color: var(--color-primary);
720
+ color: var(--color-primary-ink);
721
721
  }
722
722
  .file-input.file-input-tall .file-input-text {
723
723
  padding: 0;
@@ -887,7 +887,7 @@
887
887
  align-items: center;
888
888
  justify-content: center;
889
889
  background: color-mix(in srgb, var(--color-surface) 65%, transparent);
890
- color: var(--color-primary);
890
+ color: var(--color-primary-ink);
891
891
  cursor: progress;
892
892
  }
893
893
 
@@ -943,7 +943,7 @@
943
943
  font-size: calc(var(--wui-logo-size) * 0.32);
944
944
  font-weight: 700;
945
945
  letter-spacing: -0.02em;
946
- color: var(--color-primary);
946
+ color: var(--color-primary-ink);
947
947
  background: var(--color-primary-soft);
948
948
  }
949
949
  // Avatar variant — the standard avatar disc (muted fill) instead of the soft-primary
@@ -109,7 +109,7 @@
109
109
  border-radius: var(--radius);
110
110
  corner-shape: squircle;
111
111
  background: var(--color-primary-soft);
112
- color: var(--color-primary);
112
+ color: var(--color-primary-ink);
113
113
  }
114
114
  // Sticky tools zone: search + section meta stay put while the list scrolls.
115
115
  .drawer-tools {
@@ -238,7 +238,7 @@
238
238
  text-decoration: none;
239
239
  }
240
240
  .app-tab.active {
241
- color: var(--color-primary);
241
+ color: var(--color-primary-ink);
242
242
  // The active tab carries weight as well as colour — colour alone is a weak
243
243
  // signal for anyone who reads the strip at a glance or cannot distinguish it.
244
244
  font-weight: 600;
@@ -349,7 +349,7 @@
349
349
  }
350
350
  .app-tab.active .app-tab-count {
351
351
  background: var(--color-primary-soft);
352
- color: var(--color-primary);
352
+ color: var(--color-primary-ink);
353
353
  }
354
354
  // Semantic tone tints — React `tone` / Razor `Tone`, matching the vocabulary
355
355
  // `.status-label` uses (success | warning | danger | info).
@@ -540,7 +540,7 @@
540
540
  transition: color 0.12s ease;
541
541
  }
542
542
  .search-wrap:focus-within > .search-icon {
543
- color: var(--color-primary);
543
+ color: var(--color-primary-ink);
544
544
  }
545
545
  .search-field,
546
546
  .search-input {
@@ -663,7 +663,7 @@
663
663
  text-decoration: none;
664
664
  }
665
665
  .breadcrumb-item a:hover {
666
- color: var(--color-primary);
666
+ color: var(--color-primary-ink);
667
667
  text-decoration: underline;
668
668
  }
669
669
  .breadcrumb-item.active {
@@ -159,7 +159,7 @@
159
159
  corner-shape: squircle;
160
160
  flex: none;
161
161
  background: var(--color-primary-soft);
162
- color: var(--color-primary);
162
+ color: var(--color-primary-ink);
163
163
  }
164
164
 
165
165
  // Break long unbroken names so they wrap within the heading instead of
@@ -183,7 +183,7 @@
183
183
  font-weight: 700;
184
184
  letter-spacing: 0.06em;
185
185
  text-transform: uppercase;
186
- color: var(--color-primary);
186
+ color: var(--color-primary-ink);
187
187
  margin-bottom: 2px;
188
188
  }
189
189
  // `tone` tints the header icon tile and the eyebrow, so a destructive or a success dialog
@@ -65,7 +65,7 @@
65
65
  text-decoration: none;
66
66
  }
67
67
  .wui-tabbar-item.active {
68
- color: var(--color-primary);
68
+ color: var(--color-primary-ink);
69
69
  font-weight: 600;
70
70
  }
71
71
  .wui-tabbar-item:focus-visible {
@@ -272,7 +272,7 @@
272
272
  padding: 0 4px;
273
273
  border: 0;
274
274
  background: none;
275
- color: var(--color-primary);
275
+ color: var(--color-primary-ink);
276
276
  font: inherit;
277
277
  font-size: 14px;
278
278
  font-weight: 500;
@@ -353,7 +353,7 @@ a.wui-bell-item:hover {
353
353
  justify-content: center;
354
354
  min-height: 44px;
355
355
  border-top: 1px solid var(--color-border);
356
- color: var(--color-primary);
356
+ color: var(--color-primary-ink);
357
357
  font-size: 14px;
358
358
  font-weight: 500;
359
359
  text-decoration: none;
@@ -394,7 +394,7 @@
394
394
  }
395
395
  .app-nav-item.active {
396
396
  background: var(--color-primary-soft);
397
- color: var(--color-primary);
397
+ color: var(--color-primary-ink);
398
398
  font-weight: 600;
399
399
  }
400
400
  .app-nav-item:focus-visible {
@@ -408,7 +408,7 @@
408
408
  color: var(--color-text-subtle);
409
409
  }
410
410
  .app-nav-item.active .app-nav-icon {
411
- color: var(--color-primary);
411
+ color: var(--color-primary-ink);
412
412
  }
413
413
  .app-nav-text {
414
414
  // Grows to fill the row so every trailing element — badge, trailing marker,
@@ -433,7 +433,7 @@
433
433
  // tinted badge on top of it would vanish.
434
434
  .app-nav-item.active .app-nav-badge {
435
435
  background: var(--color-surface);
436
- color: var(--color-primary);
436
+ color: var(--color-primary-ink);
437
437
  }
438
438
 
439
439
  // Collapsed rail: icons only, centred. The label is removed from the flow rather
@@ -507,7 +507,7 @@
507
507
  color: var(--color-text-subtle);
508
508
  }
509
509
  .app-nav-item.active .app-nav-trailing {
510
- color: var(--color-primary);
510
+ color: var(--color-primary-ink);
511
511
  }
512
512
 
513
513
  // ── Expandable sub-items ─────────────────────────────────────────────────────
@@ -646,7 +646,7 @@
646
646
  pointer-events: none;
647
647
  }
648
648
  .app-sidebar-toggle:hover {
649
- color: var(--color-primary);
649
+ color: var(--color-primary-ink);
650
650
  background: var(--color-bg-muted);
651
651
  }
652
652
  .app-sidebar-toggle:focus-visible {
@@ -70,7 +70,7 @@ wui-sortable[disabled] .wui-sortable-item,
70
70
  // Lifted by the keyboard.
71
71
  .wui-sortable-handle[aria-pressed="true"] {
72
72
  background: var(--color-primary-soft);
73
- color: var(--color-primary);
73
+ color: var(--color-primary-ink);
74
74
  }
75
75
  .wui-sortable-handle:disabled {
76
76
  cursor: not-allowed;
@@ -7,7 +7,7 @@
7
7
  // $text exists because `primary` has no on-tint token: --color-{status}-text-on-soft is the
8
8
  // on-tint hue (equal to -text in light, lifted in dark), but --color-primary-text
9
9
  // is the text-on-SOLID-primary color (near-black in dark mode) and fails AA on the
10
- // soft tint — primary pills pass var(--color-primary) instead.
10
+ // soft tint — primary pills pass var(--color-primary-ink) instead.
11
11
  //
12
12
  // Component-specific overrides (e.g. .badge-primary's colored border) are applied
13
13
  // after the mixin call.