@webority/theme 0.98.0 → 0.100.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.
Files changed (75) hide show
  1. package/README.md +11 -40
  2. package/dist/published-theme.json +8 -31
  3. package/dist/purge-safelist.json +1 -0
  4. package/dist/webority-theme.css +1 -1
  5. package/index.scss +4 -3
  6. package/package.json +6 -3
  7. package/scss/_bootstrap.generated.scss +18 -0
  8. package/scss/_components.scss +38 -38
  9. package/scss/_marketing.scss +8 -8
  10. package/scss/_tokens.generated.scss +831 -0
  11. package/scss/_tokens.scss +4 -639
  12. package/scss/_variables.scss +7 -12
  13. package/scss/_wui-components.scss +1 -1
  14. package/scss/_wui-residual.scss +8 -0
  15. package/scss/wui/_avatar-picker.scss +2 -2
  16. package/scss/wui/_calendar.scss +6 -6
  17. package/scss/wui/_card.scss +1 -1
  18. package/scss/wui/_carousel.scss +2 -2
  19. package/scss/wui/_chart-card.scss +2 -2
  20. package/scss/wui/_chart.scss +8 -8
  21. package/scss/wui/_chat.scss +2 -2
  22. package/scss/wui/_choice.scss +78 -78
  23. package/scss/wui/_code-block.scss +2 -2
  24. package/scss/wui/_command-palette.scss +9 -9
  25. package/scss/wui/_comment-thread.scss +5 -5
  26. package/scss/wui/_consent-banner.scss +2 -2
  27. package/scss/wui/_controls.scss +52 -52
  28. package/scss/wui/_data.scss +38 -38
  29. package/scss/wui/_disclosure.scss +6 -6
  30. package/scss/wui/_display.scss +51 -51
  31. package/scss/wui/_dock.scss +4 -4
  32. package/scss/wui/_drawer.scss +3 -3
  33. package/scss/wui/_file-viewer.scss +2 -2
  34. package/scss/wui/_filter-popover.scss +1 -1
  35. package/scss/wui/_floating.scss +1 -1
  36. package/scss/wui/_flow.scss +60 -60
  37. package/scss/wui/_groups.scss +7 -7
  38. package/scss/wui/_hover-card.scss +1 -1
  39. package/scss/wui/_image-crop.scss +3 -3
  40. package/scss/wui/_interaction.scss +3 -3
  41. package/scss/wui/_kanban.scss +4 -4
  42. package/scss/wui/_lightbox.scss +2 -2
  43. package/scss/wui/_media.scss +28 -31
  44. package/scss/wui/_mention-input.scss +4 -4
  45. package/scss/wui/_menu-motion.scss +1 -1
  46. package/scss/wui/_modal-remote.scss +2 -2
  47. package/scss/wui/_navigation-menu.scss +4 -4
  48. package/scss/wui/_navigation.scss +25 -25
  49. package/scss/wui/_notification-center.scss +4 -4
  50. package/scss/wui/_onboarding-checklist.scss +2 -2
  51. package/scss/wui/_overlays.scss +21 -21
  52. package/scss/wui/_pending.scss +1 -1
  53. package/scss/wui/_rich-text.scss +7 -7
  54. package/scss/wui/_rolling-number.scss +1 -1
  55. package/scss/wui/_score-scale.scss +1 -1
  56. package/scss/wui/_sections.scss +8 -8
  57. package/scss/wui/_shell-parts.scss +15 -15
  58. package/scss/wui/_shell.scss +20 -20
  59. package/scss/wui/_shortcuts.scss +1 -1
  60. package/scss/wui/_sortable.scss +2 -2
  61. package/scss/wui/_split-view.scss +4 -4
  62. package/scss/wui/_theme-toggle.scss +1 -1
  63. package/scss/wui/_tone-pill.scss +2 -2
  64. package/scss/wui/_toolbar.scss +2 -2
  65. package/scss/wui/_tree.scss +3 -3
  66. package/scss/wui/_typography.scss +6 -6
  67. package/scss/wui/_utilities.scss +27 -19
  68. package/scss/wui/_whats-new.scss +4 -4
  69. package/scss/wui/_workspace.scss +16 -16
  70. package/scss/wui/tour/_advance.scss +1 -1
  71. package/scss/wui/tour/_base.scss +1 -1
  72. package/scss/wui/tour/_end.scss +1 -1
  73. package/scss/wui/tour/_motion.scss +1 -1
  74. package/token-meanings.json +56 -64
  75. package/scss/_wui-aliases.scss +0 -495
@@ -23,7 +23,7 @@
23
23
  object-fit: cover;
24
24
  display: block;
25
25
  // Photo fades + scales in so a late-arriving blob doesn't pop.
26
- animation: wui-avatar-in 0.28s var(--wui-ease-out-quart, ease) both;
26
+ animation: wui-avatar-in 0.28s var(--wui-ease-out, ease) both;
27
27
  }
28
28
  .avatar {
29
29
  // `--avatar-size` drives the default (md, its 32px fallback) and any custom size. It is
@@ -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-ink);
38
+ color: var(--color-primary-text);
39
39
  // Initials take 37.5% of the disc but never go under the 12px text floor; a disc under 24px
40
40
  // takes half its size instead, the most two letters fit (the 20px preset sets 10px).
41
41
  font-size: max(min(12px, calc(var(--avatar-size, 32px) * 0.5)), calc(var(--avatar-size, 32px) * 0.375));
@@ -148,7 +148,7 @@
148
148
  -webkit-appearance: none;
149
149
  appearance: none;
150
150
  transition:
151
- transform 0.15s var(--wui-ease-out-quart, ease),
151
+ transform 0.15s var(--wui-ease-out, ease),
152
152
  box-shadow 0.15s ease;
153
153
  }
154
154
  .avatar-clickable:hover {
@@ -202,7 +202,7 @@
202
202
  left: 50%;
203
203
  transform: translateX(-50%) translateY(4px);
204
204
  padding: 4px 8px;
205
- border-radius: var(--radius-sm);
205
+ border-radius: var(--wui-radius-sm);
206
206
  background: var(--color-text);
207
207
  color: var(--color-surface);
208
208
  font-size: 12px;
@@ -214,7 +214,7 @@
214
214
  z-index: 30;
215
215
  transition:
216
216
  opacity 0.16s ease,
217
- transform 0.16s var(--wui-ease-out-quart, ease);
217
+ transform 0.16s var(--wui-ease-out, ease);
218
218
  }
219
219
  .avatar-label::after {
220
220
  content: "";
@@ -241,7 +241,7 @@
241
241
  .avatar-group > .avatar {
242
242
  margin-left: -10px;
243
243
  box-shadow: 0 0 0 2px var(--color-surface);
244
- transition: transform 0.15s var(--wui-ease-out-quart, ease);
244
+ transition: transform 0.15s var(--wui-ease-out, ease);
245
245
  }
246
246
  .avatar-group > .avatar:first-child {
247
247
  margin-left: 0;
@@ -305,7 +305,7 @@
305
305
  gap: 12px;
306
306
  padding: 12px 14px;
307
307
  border: 1px dashed var(--color-border);
308
- border-radius: var(--radius-lg);
308
+ border-radius: var(--wui-radius-lg);
309
309
  background: var(--color-surface);
310
310
  cursor: pointer;
311
311
  transition:
@@ -337,7 +337,7 @@
337
337
  justify-content: center;
338
338
  border-radius: 999px;
339
339
  background: var(--color-primary-soft);
340
- color: var(--color-primary-ink);
340
+ color: var(--color-primary-text);
341
341
  }
342
342
  .attach-drop:hover .attach-drop-icon {
343
343
  background: var(--color-surface);
@@ -369,7 +369,7 @@
369
369
  flex: 0 0 auto;
370
370
  font-size: 12px;
371
371
  font-weight: 600;
372
- color: var(--color-primary-ink);
372
+ color: var(--color-primary-text);
373
373
  border: 1px solid var(--color-border);
374
374
  border-radius: 999px;
375
375
  padding: 5px 14px;
@@ -380,7 +380,7 @@
380
380
  .attach-preview {
381
381
  width: 100%;
382
382
  border: 1px solid var(--color-border);
383
- border-radius: var(--radius-lg);
383
+ border-radius: var(--wui-radius-lg);
384
384
  background: var(--color-surface);
385
385
  overflow: hidden;
386
386
  }
@@ -475,7 +475,7 @@
475
475
  gap: 12px;
476
476
  padding: 8px 12px;
477
477
  border: 1px solid var(--color-border);
478
- border-radius: var(--radius-lg);
478
+ border-radius: var(--wui-radius-lg);
479
479
  background: var(--color-surface);
480
480
  min-width: 0;
481
481
  }
@@ -486,10 +486,10 @@
486
486
  display: inline-flex;
487
487
  align-items: center;
488
488
  justify-content: center;
489
- border-radius: var(--radius);
489
+ border-radius: var(--wui-radius-md);
490
490
  overflow: hidden;
491
491
  background: var(--color-bg-muted);
492
- color: var(--color-primary-ink);
492
+ color: var(--color-primary-text);
493
493
  }
494
494
  .attach-item-media img {
495
495
  width: 100%;
@@ -523,9 +523,6 @@
523
523
  }
524
524
  .attach-item-remove:hover {
525
525
  border-color: var(--color-danger);
526
- // The glyph is graphical (icon-only button, 3:1) so the brand hue would technically pass
527
- // at 3.36:1 — but "tint background ⇒ -text foreground" is worth keeping exceptionless, so
528
- // check-contrast can enforce it by inspection instead of case-by-case judgement.
529
526
  color: var(--color-danger-text);
530
527
  background: var(--color-danger-soft);
531
528
  }
@@ -561,7 +558,7 @@
561
558
  display: flex;
562
559
  align-items: stretch;
563
560
  width: 100%;
564
- border-radius: var(--radius-lg);
561
+ border-radius: var(--wui-radius-lg);
565
562
  corner-shape: squircle;
566
563
  border: 1px solid var(--color-field-border);
567
564
  // Match AppInput: muted resting fill, lifts to a clean surface on focus.
@@ -578,7 +575,7 @@
578
575
  }
579
576
  .file-input:focus-within {
580
577
  background: var(--color-surface);
581
- border-color: var(--color-focus-border);
578
+ border-color: var(--color-field-border-focus);
582
579
  box-shadow: none;
583
580
  }
584
581
  .file-input-btn {
@@ -640,7 +637,7 @@
640
637
  .file-input.file-input-tall:focus-within,
641
638
  .file-input.file-input-tall:active,
642
639
  .file-input.file-input-tall.dragging {
643
- border-color: var(--color-focus-border);
640
+ border-color: var(--color-field-border-focus);
644
641
  background: var(--color-surface);
645
642
  box-shadow: none;
646
643
  }
@@ -690,7 +687,7 @@
690
687
  background: var(--color-bg-muted);
691
688
  }
692
689
  .file-input.file-input-tall.has-files.dragging {
693
- border-color: var(--color-focus-border);
690
+ border-color: var(--color-field-border-focus);
694
691
  background: var(--color-surface);
695
692
  }
696
693
  // Width presets — put a .file-w-* class on the field (React className / Razor class) to cap the
@@ -731,7 +728,7 @@
731
728
  height: 54px;
732
729
  border-radius: 50%;
733
730
  background: var(--color-primary-soft);
734
- color: var(--color-primary-ink);
731
+ color: var(--color-primary-text);
735
732
  transition: transform 0.15s ease;
736
733
  }
737
734
  .file-input.file-input-tall.dragging .file-input-icon {
@@ -743,7 +740,7 @@
743
740
  color: var(--color-text);
744
741
  }
745
742
  .file-input-title .browse {
746
- color: var(--color-primary-ink);
743
+ color: var(--color-primary-text);
747
744
  }
748
745
  .file-input.file-input-tall .file-input-text {
749
746
  padding: 0;
@@ -763,7 +760,7 @@
763
760
  display: block;
764
761
  width: 100%;
765
762
  height: 200px;
766
- border-radius: var(--radius-lg);
763
+ border-radius: var(--wui-radius-lg);
767
764
  corner-shape: squircle;
768
765
  border: 1px solid var(--color-border);
769
766
  overflow: hidden;
@@ -857,7 +854,7 @@
857
854
  font-size: 14px;
858
855
  font-weight: 600;
859
856
  border-radius: 999px;
860
- box-shadow: var(--shadow-overlay);
857
+ box-shadow: var(--wui-shadow-popover);
861
858
  }
862
859
  .file-preview-remove {
863
860
  position: absolute;
@@ -918,7 +915,7 @@
918
915
  align-items: center;
919
916
  justify-content: center;
920
917
  background: color-mix(in srgb, var(--color-surface) 65%, transparent);
921
- color: var(--color-primary-ink);
918
+ color: var(--color-primary-text);
922
919
  cursor: progress;
923
920
  }
924
921
 
@@ -974,7 +971,7 @@
974
971
  font-size: calc(var(--wui-logo-size) * 0.32);
975
972
  font-weight: 700;
976
973
  letter-spacing: -0.02em;
977
- color: var(--color-primary-ink);
974
+ color: var(--color-primary-text);
978
975
  background: var(--color-primary-soft);
979
976
  }
980
977
  // Avatar variant — the standard avatar disc (muted fill) instead of the soft-primary
@@ -1034,12 +1031,12 @@
1034
1031
  width: max-content;
1035
1032
  max-width: 160px;
1036
1033
  padding: 6px 10px;
1037
- border-radius: var(--radius, 10px);
1034
+ border-radius: var(--wui-radius-md, 10px);
1038
1035
  corner-shape: squircle;
1039
1036
  background: var(--color-surface);
1040
1037
  color: var(--color-text);
1041
- border: 1px solid var(--color-border-light);
1042
- box-shadow: var(--wui-shadow-overlay);
1038
+ border: 1px solid var(--color-border-subtle);
1039
+ box-shadow: var(--wui-shadow-popover);
1043
1040
  font-size: 0.75rem;
1044
1041
  font-weight: 500;
1045
1042
  line-height: 1.3;
@@ -1227,7 +1224,7 @@
1227
1224
  width: 104px;
1228
1225
  height: 104px;
1229
1226
  flex: none;
1230
- border-radius: var(--radius-lg);
1227
+ border-radius: var(--wui-radius-lg);
1231
1228
  border: 1.5px dashed var(--color-border-strong);
1232
1229
  background: var(--color-bg-subtle);
1233
1230
  display: grid;
@@ -1261,7 +1258,7 @@
1261
1258
  max-width: 100%;
1262
1259
  max-height: 100%;
1263
1260
  object-fit: contain;
1264
- border-radius: var(--radius);
1261
+ border-radius: var(--wui-radius-md);
1265
1262
  }
1266
1263
  // hover overlay (camera + label), like the Minimals avatar uploader
1267
1264
  .logo-dropzone-overlay {
@@ -27,9 +27,9 @@
27
27
  padding: 4px;
28
28
  background: var(--color-surface);
29
29
  border: 1px solid var(--color-border);
30
- border-radius: var(--radius-lg);
30
+ border-radius: var(--wui-radius-lg);
31
31
  corner-shape: squircle;
32
- box-shadow: var(--shadow-overlay);
32
+ box-shadow: var(--wui-shadow-popover);
33
33
  }
34
34
  .wui-mention-menu[hidden] {
35
35
  display: none;
@@ -40,7 +40,7 @@
40
40
  align-items: center;
41
41
  gap: 10px;
42
42
  padding: 8px 12px;
43
- border-radius: var(--radius);
43
+ border-radius: var(--wui-radius-md);
44
44
  corner-shape: squircle;
45
45
  color: var(--color-text);
46
46
  cursor: pointer;
@@ -48,7 +48,7 @@
48
48
  // The active row is the element's, not :hover, so keys and pointer agree on one row.
49
49
  .wui-mention-option.is-active {
50
50
  background: var(--color-primary-soft);
51
- color: var(--color-primary-ink);
51
+ color: var(--color-primary-text);
52
52
  }
53
53
  .wui-mention-option-photo {
54
54
  flex: none;
@@ -27,7 +27,7 @@
27
27
  :root {
28
28
  --wui-menu-anim: wui-menu-drop;
29
29
  --wui-menu-anim-duration: 200ms;
30
- --wui-menu-anim-ease: var(--wui-ease-out-quart);
30
+ --wui-menu-anim-ease: var(--wui-ease-out);
31
31
  }
32
32
  :root[data-wui-menu-motion="zoom"] {
33
33
  --wui-menu-anim: wui-menu-zoom;
@@ -13,7 +13,7 @@
13
13
  }
14
14
  .wui-modal-skeleton {
15
15
  height: 14px;
16
- border-radius: var(--radius-sm);
16
+ border-radius: var(--wui-radius-sm);
17
17
  }
18
18
  .wui-modal-skeleton--short {
19
19
  width: 60%;
@@ -80,7 +80,7 @@
80
80
  max-height: none;
81
81
  height: 100%;
82
82
  border-radius: 0;
83
- box-shadow: var(--shadow-overlay-lg);
83
+ box-shadow: var(--wui-shadow-modal);
84
84
  }
85
85
  @media (prefers-reduced-motion: reduce) {
86
86
  .modal.wui-remote-drawer .modal-dialog.wui-remote-drawer-dialog {
@@ -54,13 +54,13 @@ wui-navigation-menu {
54
54
  outline-offset: 1px;
55
55
  }
56
56
  &[aria-current="page"] {
57
- color: var(--color-primary-ink);
57
+ color: var(--color-primary-text);
58
58
  }
59
59
  }
60
60
  .wui-nav-menu-trigger > .wui-nav-menu-chevron {
61
61
  flex: none;
62
62
  margin-left: auto;
63
- transition: rotate 150ms var(--wui-ease-out-quart);
63
+ transition: rotate 150ms var(--wui-ease-out);
64
64
  }
65
65
  .wui-nav-menu-trigger[aria-expanded="true"] > .wui-nav-menu-chevron {
66
66
  rotate: 180deg;
@@ -100,7 +100,7 @@ wui-navigation-menu {
100
100
  outline-offset: var(--wui-focus-ring-inset);
101
101
  }
102
102
  &[aria-current="page"] .wui-nav-menu-link-label {
103
- color: var(--color-primary-ink);
103
+ color: var(--color-primary-text);
104
104
  }
105
105
  > .wui-icon {
106
106
  flex: none;
@@ -148,7 +148,7 @@ wui-navigation-menu {
148
148
  border-radius: var(--wui-radius-md);
149
149
  corner-shape: squircle;
150
150
  background: var(--color-surface);
151
- box-shadow: var(--wui-shadow-overlay);
151
+ box-shadow: var(--wui-shadow-popover);
152
152
  transform-origin: top left;
153
153
 
154
154
  &[data-open] {
@@ -106,10 +106,10 @@
106
106
  place-items: center;
107
107
  width: 30px;
108
108
  height: 30px;
109
- border-radius: var(--radius);
109
+ border-radius: var(--wui-radius-md);
110
110
  corner-shape: squircle;
111
111
  background: var(--color-primary-soft);
112
- color: var(--color-primary-ink);
112
+ color: var(--color-primary-text);
113
113
  }
114
114
  // Sticky tools zone: search + section meta stay put while the list scrolls.
115
115
  .drawer-tools {
@@ -192,7 +192,7 @@
192
192
  display: inline-flex;
193
193
  align-items: center;
194
194
  gap: 8px;
195
- min-height: var(--wui-control-height);
195
+ min-height: var(--wui-control-md);
196
196
  padding: 0 14px;
197
197
  border: 0;
198
198
  // Sits on the strip's own hairline rather than adding a second one.
@@ -211,7 +211,7 @@
211
211
  text-decoration: none;
212
212
  // A tab sits on the page surface with no fill of its own, so the shared 12% pressed wash
213
213
  // reads as a heavy grey block; half of it still answers the press.
214
- --color-pressed-overlay: color-mix(in srgb, currentColor 6%, transparent);
214
+ --wui-pressed-overlay: color-mix(in srgb, currentColor 6%, transparent);
215
215
  transition:
216
216
  color 0.12s ease,
217
217
  border-color 0.12s ease;
@@ -227,7 +227,7 @@
227
227
  width: 18px;
228
228
  height: 18px;
229
229
  object-fit: cover;
230
- border-radius: var(--radius-sm);
230
+ border-radius: var(--wui-radius-sm);
231
231
  }
232
232
  .app-tab:hover:not(:disabled):not(.disabled):not(.active) {
233
233
  color: var(--color-text);
@@ -242,7 +242,7 @@
242
242
  text-decoration: none;
243
243
  }
244
244
  .app-tab.active {
245
- color: var(--color-primary-ink);
245
+ color: var(--color-primary-text);
246
246
  // The active tab carries weight as well as colour — colour alone is a weak
247
247
  // signal for anyone who reads the strip at a glance or cannot distinguish it.
248
248
  font-weight: 600;
@@ -283,7 +283,7 @@
283
283
  .app-tab:focus-visible {
284
284
  outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
285
285
  outline-offset: var(--wui-focus-ring-inset);
286
- border-radius: var(--radius-sm);
286
+ border-radius: var(--wui-radius-sm);
287
287
  }
288
288
  // A destructive tab reads as destructive whether or not it is the active one.
289
289
  .app-tab.danger {
@@ -325,8 +325,8 @@
325
325
  // clip would shear off its rounded corner. A decelerating slide reaches the tab exactly and
326
326
  // never crosses the edge, so the radius is always intact.
327
327
  transition:
328
- transform 0.42s var(--wui-ease-out-quart),
329
- width 0.42s var(--wui-ease-out-quart),
328
+ transform 0.42s var(--wui-ease-out),
329
+ width 0.42s var(--wui-ease-out),
330
330
  opacity 0.15s ease;
331
331
  }
332
332
  .app-tabs[data-wui-tabs] .app-tab-indicator {
@@ -353,7 +353,7 @@
353
353
  }
354
354
  .app-tab.active .app-tab-count {
355
355
  background: var(--color-primary-soft);
356
- color: var(--color-primary-ink);
356
+ color: var(--color-primary-text);
357
357
  }
358
358
  // Semantic tone tints — React `tone` / Razor `Tone`, matching the vocabulary
359
359
  // `.status-label` uses (success | warning | danger | info).
@@ -376,7 +376,7 @@
376
376
 
377
377
  // ── Sizes ──
378
378
  .app-tabs-sm .app-tab {
379
- min-height: var(--wui-control-height-sm);
379
+ min-height: var(--wui-control-sm);
380
380
  padding: 0 10px;
381
381
  gap: 6px;
382
382
  font-size: 13px;
@@ -386,7 +386,7 @@
386
386
  height: 16px;
387
387
  }
388
388
  .app-tabs-lg .app-tab {
389
- min-height: var(--wui-control-height-lg);
389
+ min-height: var(--wui-control-lg);
390
390
  padding: 0 18px;
391
391
  font-size: 15px;
392
392
  }
@@ -431,7 +431,7 @@
431
431
  .app-tabs-pills .app-tab {
432
432
  border-bottom: 0;
433
433
  margin-bottom: 0;
434
- border-radius: var(--radius);
434
+ border-radius: var(--wui-radius-md);
435
435
  }
436
436
  // Fallback fill until the moving pill is wired.
437
437
  .app-tabs-pills .app-tab.active {
@@ -448,7 +448,7 @@
448
448
  // The pill fills the whole tab — no underline inset.
449
449
  --wui-tab-underline-inset: 0px;
450
450
  background: var(--color-primary-soft);
451
- border-radius: var(--radius);
451
+ border-radius: var(--wui-radius-md);
452
452
  }
453
453
  .app-tabs-pills[data-active-danger] .app-tab-indicator {
454
454
  background: var(--color-danger-soft);
@@ -485,8 +485,8 @@
485
485
  height: var(--wui-tab-h, 0);
486
486
  transform: translateY(var(--wui-tab-y, 0));
487
487
  transition:
488
- transform 0.42s var(--wui-ease-out-quart),
489
- height 0.42s var(--wui-ease-out-quart),
488
+ transform 0.42s var(--wui-ease-out),
489
+ height 0.42s var(--wui-ease-out),
490
490
  opacity 0.15s ease;
491
491
  }
492
492
  // Vertical pills: the moving pill fills the row width.
@@ -588,16 +588,16 @@
588
588
  max-width: min(320px, calc(100vw - 8px));
589
589
  padding: 4px;
590
590
  border: 1px solid var(--color-border);
591
- border-radius: var(--radius);
591
+ border-radius: var(--wui-radius-md);
592
592
  background: var(--color-surface);
593
- box-shadow: var(--wui-shadow-overlay);
593
+ box-shadow: var(--wui-shadow-popover);
594
594
  }
595
595
  .wui-overflow-item {
596
596
  display: block;
597
597
  width: 100%;
598
598
  padding: 8px 10px;
599
599
  border: 0;
600
- border-radius: var(--radius-sm);
600
+ border-radius: var(--wui-radius-sm);
601
601
  background: transparent;
602
602
  color: var(--color-text);
603
603
  font-family: inherit;
@@ -618,7 +618,7 @@
618
618
  outline-offset: var(--wui-focus-ring-inset);
619
619
  }
620
620
  .wui-overflow-item[aria-checked="true"] {
621
- color: var(--color-primary-ink);
621
+ color: var(--color-primary-text);
622
622
  font-weight: 600;
623
623
  }
624
624
  .wui-overflow-item[aria-disabled="true"] {
@@ -659,7 +659,7 @@
659
659
  transition: color 0.12s ease;
660
660
  }
661
661
  .search-wrap:focus-within > .search-icon {
662
- color: var(--color-primary-ink);
662
+ color: var(--color-primary-text);
663
663
  }
664
664
  .search-field,
665
665
  .search-input {
@@ -718,7 +718,7 @@
718
718
  height: 36px;
719
719
  padding: 0;
720
720
  border: 0;
721
- border-radius: var(--wui-field-radius);
721
+ border-radius: var(--wui-field-md-radius);
722
722
  background: transparent;
723
723
  color: var(--color-text-muted);
724
724
  cursor: pointer;
@@ -758,7 +758,7 @@
758
758
  // Sizes — sm / lg around the default, mirroring AppInput. The leading icon and clear button
759
759
  // track the height so they stay centred and clear of the text.
760
760
  .search-wrap.search-sm .search-input {
761
- height: var(--wui-control-height-sm);
761
+ height: var(--wui-control-sm);
762
762
  padding-left: calc(13px + var(--wui-search-icon-size, 12px) + 9px);
763
763
  padding-right: 32px;
764
764
  font-size: 13px;
@@ -773,7 +773,7 @@
773
773
  right: 6px;
774
774
  }
775
775
  .search-wrap.search-lg .search-input {
776
- height: var(--wui-control-height-lg);
776
+ height: var(--wui-control-lg);
777
777
  padding-left: calc(13px + var(--wui-search-icon-size, 24px) + 9px);
778
778
  padding-right: 40px;
779
779
  font-size: 16px;
@@ -820,7 +820,7 @@
820
820
  text-decoration: none;
821
821
  }
822
822
  .breadcrumb-item a:hover {
823
- color: var(--color-primary-ink);
823
+ color: var(--color-primary-text);
824
824
  text-decoration: underline;
825
825
  }
826
826
  .breadcrumb-item.active {
@@ -63,7 +63,7 @@
63
63
  border: 1px solid var(--color-border);
64
64
  border-radius: var(--wui-radius-lg);
65
65
  background: var(--color-surface);
66
- box-shadow: var(--wui-shadow-overlay);
66
+ box-shadow: var(--wui-shadow-popover);
67
67
  // Focus lands on the panel itself when it opens; the controls inside carry the visible focus.
68
68
  outline: none;
69
69
  transform-origin: top right;
@@ -100,7 +100,7 @@
100
100
  border: 0;
101
101
  border-radius: var(--wui-radius-sm);
102
102
  background: none;
103
- color: var(--color-primary-ink);
103
+ color: var(--color-primary-text);
104
104
  font: inherit;
105
105
  font-size: 14px;
106
106
  font-weight: 500;
@@ -146,7 +146,7 @@
146
146
  min-height: 44px;
147
147
  padding: 12px 16px;
148
148
  border: 0;
149
- border-bottom: 1px solid var(--color-border-light);
149
+ border-bottom: 1px solid var(--color-border-subtle);
150
150
  background: transparent;
151
151
  color: var(--color-text-body);
152
152
  font: inherit;
@@ -218,7 +218,7 @@
218
218
  justify-content: center;
219
219
  min-height: 44px;
220
220
  border-top: 1px solid var(--color-border);
221
- color: var(--color-primary-ink);
221
+ color: var(--color-primary-text);
222
222
  font-size: 14px;
223
223
  font-weight: 500;
224
224
  text-decoration: none;
@@ -130,7 +130,7 @@
130
130
  .wui-onboarding-step.is-current .wui-onboarding-mark {
131
131
  border-color: var(--color-primary);
132
132
  background: var(--color-primary-soft);
133
- color: var(--color-primary-ink);
133
+ color: var(--color-primary-text);
134
134
  }
135
135
  .wui-onboarding-step.is-done .wui-onboarding-mark {
136
136
  border-color: transparent;
@@ -158,7 +158,7 @@ a.wui-onboarding-label {
158
158
  text-underline-offset: 3px;
159
159
  }
160
160
  a.wui-onboarding-label:hover {
161
- color: var(--color-primary-ink);
161
+ color: var(--color-primary-text);
162
162
  text-decoration-color: currentColor;
163
163
  }
164
164
  a.wui-onboarding-label::after {