@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
@@ -14,7 +14,7 @@
14
14
  gap: 11px;
15
15
  padding: 20px;
16
16
  border: 1.5px solid var(--color-border);
17
- border-radius: var(--radius);
17
+ border-radius: var(--wui-radius-md);
18
18
  background: var(--color-surface);
19
19
  cursor: pointer;
20
20
  transition:
@@ -33,7 +33,7 @@
33
33
  background: color-mix(in srgb, var(--color-primary) 5%, transparent);
34
34
  }
35
35
  .struct-card.checked .struct-card-title {
36
- color: var(--color-primary-ink);
36
+ color: var(--color-primary-text);
37
37
  }
38
38
 
39
39
  // A card that cannot change: its input is disabled directly or by a disabled fieldset.
@@ -71,11 +71,11 @@
71
71
  }
72
72
  .struct-card.checked .struct-card-ic {
73
73
  background: var(--color-surface);
74
- color: var(--color-primary-ink);
74
+ color: var(--color-primary-text);
75
75
  }
76
76
  // Hover previews the chosen glyph colour; a card that cannot change keeps its grey.
77
77
  .struct-card:hover:not(:has(.struct-card-input:disabled)) .struct-card-ic {
78
- color: var(--color-primary-ink);
78
+ color: var(--color-primary-text);
79
79
  }
80
80
  // An image in the round icon disc (React iconNode={<img …/>}) keeps its own colours whether or not
81
81
  // the card is selected, fills the whole disc and is cropped to its circle, whatever the image's own
@@ -111,7 +111,7 @@
111
111
  align-items: center;
112
112
  justify-content: center;
113
113
  background: transparent;
114
- color: var(--color-primary-ink);
114
+ color: var(--color-primary-text);
115
115
  opacity: 0;
116
116
  transform: scale(0.5);
117
117
  transition:
@@ -267,10 +267,10 @@
267
267
  }
268
268
  .search-select-control.open {
269
269
  // White fill + the active/focus border, matching a focused text input (which lifts off the
270
- // muted resting fill onto white with a --color-focus-border border). Keeps the control seamless
270
+ // muted resting fill onto white with a --color-field-border-focus border). Keeps the control seamless
271
271
  // with the open menu and the floated label's white mask.
272
272
  background: var(--color-surface);
273
- border-color: var(--color-focus-border);
273
+ border-color: var(--color-field-border-focus);
274
274
  }
275
275
  // Closed again (a value picked, Escape), focus stays on the trigger: it returns to the resting
276
276
  // fill and border, as the date picker does. Only the open list shows the focus border; keyboard
@@ -308,23 +308,23 @@
308
308
  // Sizes — mirror AppInput's .input-sm / .input-lg so a select lines up with the
309
309
  // text fields beside it. md is the base .search-select-control height.
310
310
  .search-select-sm .search-select-control {
311
- height: var(--wui-control-height-sm);
312
- min-height: var(--wui-control-height-sm);
311
+ height: var(--wui-control-sm);
312
+ min-height: var(--wui-control-sm);
313
313
  font-size: 13px;
314
- border-radius: var(--wui-field-radius-sm);
314
+ border-radius: var(--wui-field-sm-radius);
315
315
  }
316
316
  .search-select-lg .search-select-control {
317
- height: var(--wui-control-height-lg);
318
- min-height: var(--wui-control-height-lg);
317
+ height: var(--wui-control-lg);
318
+ min-height: var(--wui-control-lg);
319
319
  font-size: 16px;
320
- border-radius: var(--wui-field-radius-lg);
320
+ border-radius: var(--wui-field-lg-radius);
321
321
  }
322
322
  // xl: the 52px select, the same height as an AppInput at size="xl". A literal height, as on the input.
323
323
  .wui-search-select-xl .search-select-control {
324
324
  height: 52px;
325
325
  min-height: 52px;
326
326
  font-size: 16px;
327
- border-radius: var(--wui-field-radius-lg);
327
+ border-radius: var(--wui-field-lg-radius);
328
328
  }
329
329
  // Multi-select grows with its chips, so a size sets the FLOOR (min-height from the rule
330
330
  // above) but never a fixed height — reset height:auto so a second row of chips can appear.
@@ -335,13 +335,13 @@
335
335
  // AppSelectMini is <wui-select compact>: sm sits on the 32px sm rung, lg one rung below the lg
336
336
  // field, never under 32px. The compound selector outranks both the plain size rule and the compact rule.
337
337
  .search-select-compact.search-select-sm .search-select-control {
338
- height: var(--wui-control-height-sm);
339
- min-height: var(--wui-control-height-sm);
338
+ height: var(--wui-control-sm);
339
+ min-height: var(--wui-control-sm);
340
340
  font-size: 12px;
341
341
  }
342
342
  .search-select-compact.search-select-lg .search-select-control {
343
- height: var(--wui-control-height);
344
- min-height: var(--wui-control-height);
343
+ height: var(--wui-control-md);
344
+ min-height: var(--wui-control-md);
345
345
  font-size: 14px;
346
346
  }
347
347
 
@@ -413,8 +413,8 @@
413
413
  // pagination) so a compact wui select and a compact native select read as one control
414
414
  // rather than two sizes of the same idea.
415
415
  .search-select-compact .search-select-control {
416
- height: var(--wui-control-height-sm);
417
- min-height: var(--wui-control-height-sm);
416
+ height: var(--wui-control-sm);
417
+ min-height: var(--wui-control-sm);
418
418
  min-width: 64px;
419
419
  padding: 0 10px;
420
420
  font-size: 13px;
@@ -433,9 +433,9 @@
433
433
  right: 0;
434
434
  background: var(--color-surface);
435
435
  border: 1px solid var(--color-border);
436
- border-radius: var(--radius-lg);
436
+ border-radius: var(--wui-radius-lg);
437
437
  corner-shape: squircle;
438
- box-shadow: var(--shadow-overlay);
438
+ box-shadow: var(--wui-shadow-popover);
439
439
  padding: 4px;
440
440
  overflow: hidden;
441
441
  }
@@ -460,7 +460,7 @@
460
460
  padding: 0 12px;
461
461
  height: 40px;
462
462
  border: 1px solid var(--color-field-border);
463
- border-radius: var(--radius);
463
+ border-radius: var(--wui-radius-md);
464
464
  // AppInput's field model: muted resting fill that lifts to a clean surface on focus.
465
465
  background: var(--color-field-bg);
466
466
  color: var(--color-text-subtle);
@@ -472,10 +472,10 @@
472
472
  }
473
473
  .search-select-search:focus-within {
474
474
  background: var(--color-surface);
475
- border-color: var(--color-focus-border);
475
+ border-color: var(--color-field-border-focus);
476
476
  }
477
477
  .search-select-search:focus-within svg {
478
- color: var(--color-primary-ink);
478
+ color: var(--color-primary-text);
479
479
  }
480
480
  .search-select-clear {
481
481
  display: grid;
@@ -529,7 +529,7 @@
529
529
  padding: 9px 14px;
530
530
  line-height: 1.4;
531
531
  border: none;
532
- border-radius: var(--radius);
532
+ border-radius: var(--wui-radius-md);
533
533
  corner-shape: squircle;
534
534
  background: transparent;
535
535
  font-size: 14px;
@@ -544,19 +544,19 @@
544
544
  .search-select-option:hover,
545
545
  .search-select-option.is-active {
546
546
  background: color-mix(in srgb, var(--color-primary-soft) 55%, transparent);
547
- color: var(--color-primary-ink);
548
- outline: 1px solid var(--color-focus-border);
547
+ color: var(--color-primary-text);
548
+ outline: 1px solid var(--color-field-border-focus);
549
549
  outline-offset: -1px;
550
550
  }
551
551
  .search-select-option.selected {
552
552
  background: var(--color-primary-soft);
553
- color: var(--color-primary-ink);
553
+ color: var(--color-primary-text);
554
554
  font-weight: 500;
555
555
  }
556
556
  // allow-custom's freeform row — reads as an action ("Add "…"") rather than a listed value.
557
557
  .search-select-option-custom {
558
558
  font-style: italic;
559
- color: var(--color-primary-ink);
559
+ color: var(--color-primary-text);
560
560
  }
561
561
  .search-select-empty {
562
562
  padding: 12px 10px;
@@ -617,7 +617,7 @@
617
617
  // this .open rule keeps it white (matching .search-select-control.open) instead of snapping
618
618
  // back to grey the moment the dropdown appears.
619
619
  background-color: var(--color-surface);
620
- border-color: var(--color-focus-border);
620
+ border-color: var(--color-field-border-focus);
621
621
  box-shadow: none;
622
622
  }
623
623
  // Closing hands focus back to the trigger (so the keyboard user lands where they started), which
@@ -645,9 +645,9 @@ wui-date-range:not([aria-invalid="true"]) .daterange:not(.open) .daterange-trigg
645
645
  padding: 18px;
646
646
  background: var(--color-surface);
647
647
  border: 1px solid var(--color-border);
648
- border-radius: var(--radius-xl);
648
+ border-radius: var(--wui-radius-xl);
649
649
  corner-shape: squircle;
650
- box-shadow: var(--shadow-overlay);
650
+ box-shadow: var(--wui-shadow-popover);
651
651
  animation: datepicker-in 0.14s ease;
652
652
  }
653
653
  .datepicker-pop.drop-up {
@@ -698,7 +698,7 @@ wui-date-range:not([aria-invalid="true"]) .daterange:not(.open) .daterange-trigg
698
698
  }
699
699
  button.datepicker-month:hover {
700
700
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 8%, transparent));
701
- color: var(--color-primary-ink);
701
+ color: var(--color-primary-text);
702
702
  }
703
703
  .datepicker-nav {
704
704
  display: inline-flex;
@@ -723,7 +723,7 @@ button.datepicker-month:hover {
723
723
  .datepicker-nav-btn:hover {
724
724
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 8%, transparent));
725
725
  border-color: var(--color-primary);
726
- color: var(--color-primary-ink);
726
+ color: var(--color-primary-text);
727
727
  }
728
728
  .datepicker-weekdays {
729
729
  display: grid;
@@ -775,7 +775,7 @@ button.datepicker-month:hover {
775
775
  }
776
776
  .datepicker-day:hover:not(:disabled):not(.is-selected) {
777
777
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 8%, transparent));
778
- color: var(--color-primary-ink);
778
+ color: var(--color-primary-text);
779
779
  }
780
780
  .datepicker-day.is-outside {
781
781
  color: var(--color-text-subtle);
@@ -783,12 +783,12 @@ button.datepicker-month:hover {
783
783
  }
784
784
  .datepicker-day.is-today {
785
785
  font-weight: 700;
786
- color: var(--color-primary-ink);
786
+ color: var(--color-primary-text);
787
787
  box-shadow: inset 0 0 0 1.5px var(--color-primary);
788
788
  }
789
789
  .datepicker-day.is-selected {
790
790
  background: var(--color-primary);
791
- color: var(--color-primary-text);
791
+ color: var(--color-on-primary);
792
792
  font-weight: 600;
793
793
  }
794
794
  .datepicker-day:disabled {
@@ -814,10 +814,10 @@ button.datepicker-month:hover {
814
814
  border: none;
815
815
  background: transparent;
816
816
  padding: 6px 12px;
817
- border-radius: var(--radius);
817
+ border-radius: var(--wui-radius-md);
818
818
  font-size: 13px;
819
819
  font-weight: 600;
820
- color: var(--color-primary-ink);
820
+ color: var(--color-primary-text);
821
821
  cursor: pointer;
822
822
  transition: background 0.12s;
823
823
  }
@@ -842,7 +842,7 @@ button.datepicker-month:hover {
842
842
  justify-content: center;
843
843
  height: 48px;
844
844
  border: none;
845
- border-radius: var(--radius-lg, 12px);
845
+ border-radius: var(--wui-radius-lg, 12px);
846
846
  background: transparent;
847
847
  font-size: 13px;
848
848
  font-weight: 500;
@@ -855,16 +855,16 @@ button.datepicker-month:hover {
855
855
  }
856
856
  .datepicker-cell:hover:not(:disabled):not(.is-selected) {
857
857
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 8%, transparent));
858
- color: var(--color-primary-ink);
858
+ color: var(--color-primary-text);
859
859
  }
860
860
  .datepicker-cell.is-today {
861
861
  box-shadow: inset 0 0 0 1.5px var(--color-primary);
862
- color: var(--color-primary-ink);
862
+ color: var(--color-primary-text);
863
863
  font-weight: 700;
864
864
  }
865
865
  .datepicker-cell.is-selected {
866
866
  background: var(--color-primary);
867
- color: var(--color-primary-text);
867
+ color: var(--color-on-primary);
868
868
  font-weight: 600;
869
869
  }
870
870
  .datepicker-cell:disabled {
@@ -960,7 +960,7 @@ button.datepicker-month:hover {
960
960
  .daterange.open .daterange-trigger {
961
961
  // Stay white while the two-month popover is open — see the note on .datepicker.open above.
962
962
  background-color: var(--color-surface);
963
- border-color: var(--color-focus-border);
963
+ border-color: var(--color-field-border-focus);
964
964
  box-shadow: none;
965
965
  }
966
966
  .daterange-pop {
@@ -974,9 +974,9 @@ button.datepicker-month:hover {
974
974
  padding: 18px;
975
975
  background: var(--color-surface);
976
976
  border: 1px solid var(--color-border);
977
- border-radius: var(--radius-xl);
977
+ border-radius: var(--wui-radius-xl);
978
978
  corner-shape: squircle;
979
- box-shadow: var(--shadow-overlay);
979
+ box-shadow: var(--wui-shadow-popover);
980
980
  animation: datepicker-in 0.14s ease;
981
981
  }
982
982
  .daterange-pop.drop-up {
@@ -1008,13 +1008,13 @@ button.datepicker-month:hover {
1008
1008
  // Days inside the chosen span get a soft rail; the two endpoints get the solid fill.
1009
1009
  .datepicker-day.in-range {
1010
1010
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 12%, transparent));
1011
- color: var(--color-primary-ink);
1011
+ color: var(--color-primary-text);
1012
1012
  border-radius: 6px;
1013
1013
  }
1014
1014
  .datepicker-day.is-range-start,
1015
1015
  .datepicker-day.is-range-end {
1016
1016
  background: var(--color-primary);
1017
- color: var(--color-primary-text);
1017
+ color: var(--color-on-primary);
1018
1018
  font-weight: 600;
1019
1019
  }
1020
1020
  .daterange-hint {
@@ -1046,7 +1046,7 @@ button.datepicker-month:hover {
1046
1046
  border: none;
1047
1047
  background: transparent;
1048
1048
  padding: 7px 10px;
1049
- border-radius: var(--radius);
1049
+ border-radius: var(--wui-radius-md);
1050
1050
  font-size: 13px;
1051
1051
  font-weight: 500;
1052
1052
  text-align: left;
@@ -1057,11 +1057,11 @@ button.datepicker-month:hover {
1057
1057
  }
1058
1058
  .wui-daterange-preset:hover:not(:disabled) {
1059
1059
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 8%, transparent));
1060
- color: var(--color-primary-ink);
1060
+ color: var(--color-primary-text);
1061
1061
  }
1062
1062
  .wui-daterange-preset.is-active {
1063
1063
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 12%, transparent));
1064
- color: var(--color-primary-ink);
1064
+ color: var(--color-primary-text);
1065
1065
  font-weight: 600;
1066
1066
  }
1067
1067
  .wui-daterange-preset:disabled {
@@ -1117,10 +1117,10 @@ button.datepicker-month:hover {
1117
1117
  display: flex;
1118
1118
  align-items: center;
1119
1119
  width: 100%;
1120
- height: var(--wui-control-height);
1120
+ height: var(--wui-control-md);
1121
1121
  border: 1px solid var(--color-field-border);
1122
- // Match AppInput's field-radius ladder exactly (18px md), not the generic --radius (10px).
1123
- border-radius: var(--wui-field-radius);
1122
+ // Match AppInput's field-radius ladder exactly (18px md), not the generic --wui-radius-md (10px).
1123
+ border-radius: var(--wui-field-md-radius);
1124
1124
  // Match AppInput exactly: muted resting fill that lifts to a clean surface on focus.
1125
1125
  background: var(--color-field-bg);
1126
1126
  // Clip the inner control to the shell's rounded shape — a full-height child was painting
@@ -1144,7 +1144,7 @@ button.datepicker-month:hover {
1144
1144
  // Match AppInput's focus: clean surface fill + a soft primary border.
1145
1145
  .app-phone-number-input .phone-input-wrap:focus-within {
1146
1146
  background: var(--color-surface);
1147
- border-color: var(--color-focus-border);
1147
+ border-color: var(--color-field-border-focus);
1148
1148
  }
1149
1149
  .app-phone-number-input .phone-input-wrap:has(> .input:disabled) {
1150
1150
  background: var(--color-bg-muted);
@@ -1254,7 +1254,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1254
1254
  .country-toggle:focus-visible {
1255
1255
  outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
1256
1256
  outline-offset: var(--wui-focus-ring-offset);
1257
- border-radius: var(--radius-sm);
1257
+ border-radius: var(--wui-radius-sm);
1258
1258
  }
1259
1259
  .country-toggle:disabled {
1260
1260
  cursor: not-allowed;
@@ -1296,8 +1296,8 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1296
1296
  // shell height/radius, the tel font, the dial-code text, and the adornment pad so
1297
1297
  // the whole field steps together — md is the base block above.
1298
1298
  .app-phone-number-input.phone-sm .phone-input-wrap {
1299
- height: var(--wui-control-height-sm);
1300
- border-radius: var(--wui-field-radius-sm);
1299
+ height: var(--wui-control-sm);
1300
+ border-radius: var(--wui-field-sm-radius);
1301
1301
  }
1302
1302
  .app-phone-number-input.phone-sm {
1303
1303
  --wui-phone-font-size: 13px;
@@ -1306,8 +1306,8 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1306
1306
  padding-left: 10px;
1307
1307
  }
1308
1308
  .app-phone-number-input.phone-lg .phone-input-wrap {
1309
- height: var(--wui-control-height-lg);
1310
- border-radius: var(--wui-field-radius-lg);
1309
+ height: var(--wui-control-lg);
1310
+ border-radius: var(--wui-field-lg-radius);
1311
1311
  }
1312
1312
  .app-phone-number-input.phone-lg {
1313
1313
  --wui-phone-font-size: 16px;
@@ -1328,10 +1328,10 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1328
1328
  max-width: calc(100vw - 16px);
1329
1329
  padding: 4px;
1330
1330
  border: 1px solid var(--color-border);
1331
- border-radius: var(--radius-lg);
1331
+ border-radius: var(--wui-radius-lg);
1332
1332
  corner-shape: squircle;
1333
1333
  background: var(--color-surface);
1334
- box-shadow: var(--shadow-overlay);
1334
+ box-shadow: var(--wui-shadow-popover);
1335
1335
  overflow: hidden;
1336
1336
  }
1337
1337
  .dropdown-search-wrapper {
@@ -1349,14 +1349,14 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1349
1349
  transition: color 0.12s ease;
1350
1350
  }
1351
1351
  .dropdown-search-wrapper:focus-within .dropdown-search-icon {
1352
- color: var(--color-primary-ink);
1352
+ color: var(--color-primary-text);
1353
1353
  }
1354
1354
  .dropdown-search-input {
1355
1355
  width: 100%;
1356
1356
  height: 40px;
1357
1357
  padding: 0 12px 0 36px;
1358
1358
  border: 1px solid var(--color-field-border);
1359
- border-radius: var(--radius);
1359
+ border-radius: var(--wui-radius-md);
1360
1360
  font-size: 14px;
1361
1361
  color: var(--color-text);
1362
1362
  // AppInput's field model: muted resting fill that lifts to a clean surface on focus.
@@ -1371,7 +1371,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1371
1371
  // AppInput's exact focus: clean surface fill + its soft primary border token.
1372
1372
  .dropdown-search-input:focus {
1373
1373
  background: var(--color-surface);
1374
- border-color: var(--color-focus-border);
1374
+ border-color: var(--color-field-border-focus);
1375
1375
  }
1376
1376
  // AppInput's placeholder colour, not the browser default grey.
1377
1377
  .dropdown-search-input::placeholder {
@@ -1403,7 +1403,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1403
1403
  align-items: center;
1404
1404
  gap: 10px;
1405
1405
  padding: 9px 14px !important;
1406
- border-radius: var(--radius) !important;
1406
+ border-radius: var(--wui-radius-md) !important;
1407
1407
  corner-shape: squircle;
1408
1408
  cursor: pointer;
1409
1409
  color: var(--color-text) !important;
@@ -1423,7 +1423,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1423
1423
  .country-dropdown-item:focus,
1424
1424
  .country-dropdown-item.is-active {
1425
1425
  background: var(--color-primary-soft) !important;
1426
- color: var(--color-primary-ink) !important;
1426
+ color: var(--color-primary-text) !important;
1427
1427
  }
1428
1428
  // The tint alone is about 1.2:1; keyboard focus adds the ring, inset inside the scrolling list.
1429
1429
  .country-dropdown-item:focus-visible {
@@ -1432,7 +1432,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1432
1432
  }
1433
1433
  .country-dropdown-item.selected {
1434
1434
  background: var(--color-primary-soft) !important;
1435
- color: var(--color-primary-ink) !important;
1435
+ color: var(--color-primary-text) !important;
1436
1436
  font-weight: 500;
1437
1437
  }
1438
1438
  .country-dropdown-menu .wui-flag {
@@ -1462,7 +1462,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1462
1462
  .selected-check-icon {
1463
1463
  margin-left: auto;
1464
1464
  display: flex;
1465
- color: var(--color-primary-ink);
1465
+ color: var(--color-primary-text);
1466
1466
  }
1467
1467
  .country-empty {
1468
1468
  padding: 10px 16px;
@@ -1498,7 +1498,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1498
1498
  width: 44px;
1499
1499
  padding: 0;
1500
1500
  border: none;
1501
- border-radius: 0 var(--wui-field-radius) var(--wui-field-radius) 0;
1501
+ border-radius: 0 var(--wui-field-md-radius) var(--wui-field-md-radius) 0;
1502
1502
  background: transparent;
1503
1503
  color: var(--color-text-subtle);
1504
1504
  cursor: pointer;
@@ -1509,7 +1509,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1509
1509
  }
1510
1510
  .wui-timepicker-toggle:hover:not(:disabled),
1511
1511
  .timepicker.open .wui-timepicker-toggle {
1512
- color: var(--color-primary-ink);
1512
+ color: var(--color-primary-text);
1513
1513
  }
1514
1514
  .wui-timepicker-toggle:focus-visible {
1515
1515
  outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
@@ -1538,7 +1538,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1538
1538
  .timepicker.open .timepicker-trigger {
1539
1539
  // Stay white while the columns are open — see the note on .datepicker.open above.
1540
1540
  background-color: var(--color-surface);
1541
- border-color: var(--color-focus-border);
1541
+ border-color: var(--color-field-border-focus);
1542
1542
  box-shadow: none;
1543
1543
  }
1544
1544
  // Refused typed text keeps the soft danger border while the columns are open, as the shell's
@@ -1554,9 +1554,9 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1554
1554
  padding: 8px;
1555
1555
  background: var(--color-surface);
1556
1556
  border: 1px solid var(--color-border);
1557
- border-radius: var(--radius-lg);
1557
+ border-radius: var(--wui-radius-lg);
1558
1558
  corner-shape: squircle;
1559
- box-shadow: var(--shadow-overlay);
1559
+ box-shadow: var(--wui-shadow-popover);
1560
1560
  animation: timepicker-in 0.14s ease;
1561
1561
  }
1562
1562
  .timepicker-pop.drop-up {
@@ -1615,7 +1615,7 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1615
1615
  font-variant-numeric: tabular-nums;
1616
1616
  color: var(--color-text);
1617
1617
  cursor: pointer;
1618
- border-radius: var(--radius-sm);
1618
+ border-radius: var(--wui-radius-sm);
1619
1619
  transition:
1620
1620
  background 0.1s,
1621
1621
  color 0.1s;
@@ -1629,11 +1629,11 @@ wui-timepicker[aria-invalid="true"] .timepicker.open .timepicker-trigger {
1629
1629
  .timepicker-option:hover:not(:disabled),
1630
1630
  .timepicker-option.is-active {
1631
1631
  background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary) 8%, transparent));
1632
- color: var(--color-primary-ink);
1632
+ color: var(--color-primary-text);
1633
1633
  }
1634
1634
  .timepicker-option.is-selected {
1635
1635
  background: var(--color-primary);
1636
- color: var(--color-primary-text);
1636
+ color: var(--color-on-primary);
1637
1637
  font-weight: 600;
1638
1638
  }
1639
1639
  .timepicker-option:disabled {
@@ -52,7 +52,7 @@
52
52
  min-width: 0;
53
53
  overflow: hidden;
54
54
  color: var(--color-text-muted);
55
- font-family: var(--font-sans);
55
+ font-family: var(--wui-font-ui);
56
56
  font-size: 12px;
57
57
  text-overflow: ellipsis;
58
58
  white-space: nowrap;
@@ -126,7 +126,7 @@
126
126
  }
127
127
  .wui-code-t-keyword,
128
128
  .wui-code-t-tag {
129
- color: var(--color-primary-ink);
129
+ color: var(--color-primary-text);
130
130
  }
131
131
  .wui-code-t-function,
132
132
  .wui-code-t-type,
@@ -60,7 +60,7 @@ wui-command-palette {
60
60
  }
61
61
  .wui-cmd-spinner {
62
62
  flex: 0 0 auto;
63
- color: var(--color-primary-ink);
63
+ color: var(--color-primary-text);
64
64
  }
65
65
 
66
66
  // Nested pages: the Back button and the path to the open page. The element fills the trail and
@@ -84,7 +84,7 @@ wui-command-palette {
84
84
  height: 28px;
85
85
  padding: 0;
86
86
  border: 0;
87
- border-radius: var(--radius);
87
+ border-radius: var(--wui-radius-md);
88
88
  corner-shape: squircle;
89
89
  background: transparent;
90
90
  color: var(--color-text-muted);
@@ -173,7 +173,7 @@ button.wui-cmd-crumb:focus-visible {
173
173
  align-items: center;
174
174
  gap: 12px;
175
175
  padding: 8px 10px;
176
- border-radius: var(--radius);
176
+ border-radius: var(--wui-radius-md);
177
177
  corner-shape: squircle;
178
178
  color: var(--color-text);
179
179
  cursor: pointer;
@@ -184,7 +184,7 @@ button.wui-cmd-crumb:focus-visible {
184
184
  // an inset ring makes it plain; inset, because the list scrolls and would clip an outer ring.
185
185
  .wui-cmd-item[aria-selected="true"] {
186
186
  background: var(--color-primary-soft);
187
- color: var(--color-primary-ink);
187
+ color: var(--color-primary-text);
188
188
  outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
189
189
  outline-offset: var(--wui-focus-ring-inset);
190
190
  }
@@ -199,14 +199,14 @@ button.wui-cmd-crumb:focus-visible {
199
199
  place-items: center;
200
200
  width: 32px;
201
201
  height: 32px;
202
- border-radius: var(--radius);
202
+ border-radius: var(--wui-radius-md);
203
203
  corner-shape: squircle;
204
204
  background: var(--color-bg-muted);
205
205
  color: var(--color-text-muted);
206
206
  }
207
207
  .wui-cmd-item[aria-selected="true"] .wui-cmd-item-icon {
208
208
  background: var(--color-surface);
209
- color: var(--color-primary-ink);
209
+ color: var(--color-primary-text);
210
210
  }
211
211
  .wui-cmd-item-text {
212
212
  display: flex;
@@ -242,9 +242,9 @@ button.wui-cmd-crumb:focus-visible {
242
242
  flex: 0 0 auto;
243
243
  }
244
244
  .wui-cmd-item[aria-selected="true"] > .wui-kbd {
245
- border-color: var(--color-primary-ink);
245
+ border-color: var(--color-primary-text);
246
246
  background: var(--color-surface);
247
- color: var(--color-primary-ink);
247
+ color: var(--color-primary-text);
248
248
  }
249
249
  // A phone has no keyboard to press them on.
250
250
  @media (hover: none) and (pointer: coarse) {
@@ -303,5 +303,5 @@ button.wui-cmd-crumb:focus-visible {
303
303
 
304
304
  // The shared pressed wash of wui/interaction, restated here so it ships with this on-demand layer.
305
305
  :is(.wui-cmd-back, button.wui-cmd-crumb):active:not(:disabled, [aria-disabled="true"]) {
306
- background-image: linear-gradient(var(--color-pressed-overlay), var(--color-pressed-overlay)) !important;
306
+ background-image: linear-gradient(var(--wui-pressed-overlay), var(--wui-pressed-overlay)) !important;
307
307
  }
@@ -84,7 +84,7 @@
84
84
  padding: 0 2px;
85
85
  border-radius: var(--wui-radius-sm);
86
86
  background: var(--color-primary-soft);
87
- color: var(--color-primary-ink);
87
+ color: var(--color-primary-text);
88
88
  font-weight: 500;
89
89
  }
90
90
 
@@ -142,9 +142,9 @@ button.wui-reaction:hover,
142
142
  padding: 4px;
143
143
  background: var(--color-surface);
144
144
  border: 1px solid var(--color-border);
145
- border-radius: var(--radius-lg);
145
+ border-radius: var(--wui-radius-lg);
146
146
  corner-shape: squircle;
147
- box-shadow: var(--shadow-overlay);
147
+ box-shadow: var(--wui-shadow-popover);
148
148
  }
149
149
  .wui-reaction-picker[hidden] {
150
150
  display: none;
@@ -156,7 +156,7 @@ button.wui-reaction:hover,
156
156
  width: 36px;
157
157
  height: 36px;
158
158
  border: 0;
159
- border-radius: var(--radius);
159
+ border-radius: var(--wui-radius-md);
160
160
  background: transparent;
161
161
  font-size: 18px;
162
162
  cursor: pointer;
@@ -184,7 +184,7 @@ button.wui-reaction:hover,
184
184
  cursor: pointer;
185
185
  }
186
186
  .wui-comment-action:hover {
187
- color: var(--color-primary-ink);
187
+ color: var(--color-primary-text);
188
188
  }
189
189
 
190
190
  .wui-comment-confirm {
@@ -53,7 +53,7 @@ wui-consent-banner[tour-open] {
53
53
  background: var(--color-surface);
54
54
  border: 1px solid var(--color-border);
55
55
  border-radius: var(--wui-radius-lg);
56
- box-shadow: var(--wui-shadow-overlay-lg);
56
+ box-shadow: var(--wui-shadow-modal);
57
57
  color: var(--color-text);
58
58
  text-align: start;
59
59
  pointer-events: auto;
@@ -78,7 +78,7 @@ wui-consent-banner[tour-open] {
78
78
  }
79
79
 
80
80
  .wui-consent-banner-policy {
81
- color: var(--color-primary-ink);
81
+ color: var(--color-primary-text);
82
82
  font-weight: 500;
83
83
  }
84
84