@webority/theme 0.86.1 → 0.87.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webority/theme",
3
- "version": "0.86.1",
3
+ "version": "0.87.0",
4
4
  "description": "Webority shared design system — Bootstrap 5.3 SCSS overrides, --wui-* tokens, and shared component CSS. The single source of brand chrome for React portals and Razor sites.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "publishConfig": {
package/scss/_tokens.scss CHANGED
@@ -44,7 +44,7 @@
44
44
  --wui-text-3: #687088;
45
45
  /// meaning: Decorative faint ink, not for text a person must read.
46
46
  --wui-text-4: #99A1B7;
47
- /// meaning: Faintest ink, for decorative marks and the strong border tone.
47
+ /// meaning: Faintest ink, for decorative marks.
48
48
  --wui-text-5: #C4CADA;
49
49
 
50
50
  // Surfaces
@@ -72,6 +72,8 @@
72
72
  --wui-border-light: #EBEDF3;
73
73
  /// meaning: Softest border, for inner dividers.
74
74
  --wui-border-soft: #F4F6F8;
75
+ /// meaning: Strong border for emphasised separators, chart axes and unselected control outlines.
76
+ --wui-border-strong: #C4CADA;
75
77
  // The unfilled part of a progress bar / meter. Darker than every surface it can sit on
76
78
  // (card, page, muted fill) so the empty track reads as a track, yet light enough that the
77
79
  // mid-yellow warning fill still separates from it.
@@ -316,12 +318,47 @@
316
318
  // Corner radii (DESIGN.md scale) — portal aliases as --radius-*
317
319
  /// meaning: Small step of the corner radius scale.
318
320
  --wui-radius-sm: 8px;
319
- /// meaning: Default step of the corner radius scale.
320
- --wui-radius: 10px;
321
+ /// meaning: Medium step of the corner radius scale, the default corner.
322
+ --wui-radius-md: 10px;
321
323
  /// meaning: Large step of the corner radius scale.
322
324
  --wui-radius-lg: 14px;
323
325
  /// meaning: Extra-large step of the corner radius scale.
324
326
  --wui-radius-xl: 16px;
327
+ /// meaning: Fully rounded corner, for pills and round buttons.
328
+ --wui-radius-pill: 9999px;
329
+
330
+ // Spacing scale, shared with the phone library and every Canvas theme.
331
+ /// meaning: No space.
332
+ --wui-space-none: 0px;
333
+ /// meaning: Hairline step of the spacing scale.
334
+ --wui-space-xxs: 2px;
335
+ /// meaning: Extra-small step of the spacing scale.
336
+ --wui-space-xs: 4px;
337
+ /// meaning: Small step of the spacing scale.
338
+ --wui-space-sm: 8px;
339
+ /// meaning: Medium step of the spacing scale.
340
+ --wui-space-md: 12px;
341
+ /// meaning: Large step of the spacing scale.
342
+ --wui-space-lg: 16px;
343
+ /// meaning: Extra-large step of the spacing scale.
344
+ --wui-space-xl: 24px;
345
+ /// meaning: Double extra-large step of the spacing scale.
346
+ --wui-space-2xl: 32px;
347
+ /// meaning: Triple extra-large step of the spacing scale.
348
+ --wui-space-3xl: 48px;
349
+ /// meaning: Largest step of the spacing scale.
350
+ --wui-space-4xl: 64px;
351
+
352
+ /// meaning: Regular text weight.
353
+ --wui-fw-normal: 400;
354
+ /// meaning: Medium text weight.
355
+ --wui-fw-medium: 500;
356
+ /// meaning: Semibold text weight, for labels and titles.
357
+ --wui-fw-semibold: 600;
358
+ /// meaning: Bold text weight.
359
+ --wui-fw-bold: 700;
360
+ /// meaning: Tight line height, for headings and single-line labels.
361
+ --wui-lh-tight: 1.2;
325
362
 
326
363
  // Field (input/select/datepicker/…) radius — a flat 8px corner across every
327
364
  // size, for a crisp plain-rounded field (no squircle). Change here to restyle
@@ -478,6 +515,8 @@
478
515
  --wui-fs-xs: clamp(0.75rem, 0.73rem + 0.1vw, 0.8125rem);
479
516
  /// meaning: Small step of the fluid type scale; a product opts in per element.
480
517
  --wui-fs-sm: clamp(0.8125rem, 0.79rem + 0.12vw, 0.875rem);
518
+ /// meaning: Step between the small and body sizes of the fluid type scale; a product opts in per element.
519
+ --wui-fs-smb: clamp(0.875rem, 0.8rem + 0.2vw, 0.9375rem);
481
520
  /// meaning: Body-size step of the fluid type scale, close to Bootstrap's 1rem.
482
521
  --wui-fs-base: clamp(0.95rem, 0.9rem + 0.25vw, 1.05rem);
483
522
  /// meaning: Large step of the fluid type scale; a product opts in per element.
@@ -488,12 +527,20 @@
488
527
  --wui-fs-2xl: clamp(1.5rem, 1.3rem + 1vw, 2rem);
489
528
  /// meaning: Triple extra-large step of the fluid type scale; a product opts in per element.
490
529
  --wui-fs-3xl: clamp(1.875rem, 1.5rem + 1.75vw, 2.75rem);
530
+ /// meaning: Step between the triple and fourth extra-large sizes of the fluid type scale; a product opts in per element.
531
+ --wui-fs-48: clamp(2.5rem, 2.2rem + 1.5vw, 3rem);
491
532
  /// meaning: Fourth extra-large step of the fluid type scale; a product opts in per element.
492
533
  --wui-fs-4xl: clamp(2.25rem, 1.7rem + 2.5vw, 3.5rem);
493
534
  /// meaning: Fifth extra-large step of the fluid type scale; a product opts in per element.
494
535
  --wui-fs-5xl: clamp(2.75rem, 1.9rem + 3.75vw, 4.5rem);
536
+ /// meaning: Step between the fifth and sixth extra-large sizes of the fluid type scale; a product opts in per element.
537
+ --wui-fs-64: clamp(3rem, 2.6rem + 2.5vw, 4rem);
495
538
  /// meaning: Sixth extra-large step of the fluid type scale; a product opts in per element.
496
539
  --wui-fs-6xl: clamp(3.5rem, 2.2rem + 5.5vw, 6rem);
540
+ /// meaning: First display step above the fluid type scale, 64px on a phone to 120px on a desktop.
541
+ --wui-fs-7xl: clamp(4rem, 2.7rem + 5.33vw, 7.5rem);
542
+ /// meaning: Largest display step of the fluid type scale, 72px on a phone to 144px on a desktop.
543
+ --wui-fs-8xl: clamp(4.5rem, 2.83rem + 6.86vw, 9rem);
497
544
 
498
545
  // ---- Font stacks ---------------------------------------------------
499
546
  // Sans-serif body font (Bootstrap's system stack or product override).
@@ -557,6 +604,21 @@
557
604
  --wui-first-day: 1;
558
605
  }
559
606
 
607
+ // The neutral surfaces follow the dark theme, so a neutral alert or table row stays dark on a dark
608
+ // page. The selectors match the dark theme (manual attribute, and the automatic media query).
609
+ :root[data-theme="dark"],
610
+ :root[data-bs-theme="dark"] {
611
+ --wui-neutral-bg-light: var(--wui-dark-bg-surface);
612
+ --wui-neutral-bg-dark: var(--wui-dark-bg-muted);
613
+ }
614
+
615
+ :root[data-theme="auto"] {
616
+ @media (prefers-color-scheme: dark) {
617
+ --wui-neutral-bg-light: var(--wui-dark-bg-surface);
618
+ --wui-neutral-bg-dark: var(--wui-dark-bg-muted);
619
+ }
620
+ }
621
+
560
622
  // A finger needs 44px: on a phone-width or touch screen the default control takes the lg rung. The
561
623
  // same query sizes the modal and drawer close buttons (wui/_overlays.scss).
562
624
  @media (max-width: 575.98px), (pointer: coarse) {
@@ -25,7 +25,7 @@
25
25
  /// meaning: Softest border for inner dividers and list edges.
26
26
  --color-border-light: var(--wui-border-soft);
27
27
  /// meaning: Stronger border for emphasised separators.
28
- --color-border-strong: var(--wui-text-5);
28
+ --color-border-strong: var(--wui-border-strong);
29
29
  // The resting and hover border of an input-like control.
30
30
  // Decorative card and table borders stay on --color-border.
31
31
  /// meaning: Resting border of an input-like control such as a field or select.
@@ -251,7 +251,7 @@
251
251
 
252
252
  // Corner radii
253
253
  --radius-sm: var(--wui-radius-sm);
254
- --radius: var(--wui-radius);
254
+ --radius: var(--wui-radius-md);
255
255
  --radius-lg: var(--wui-radius-lg);
256
256
  --radius-xl: var(--wui-radius-xl);
257
257
  }
@@ -319,6 +319,13 @@
319
319
  font-size: 16px;
320
320
  border-radius: var(--wui-field-radius-lg);
321
321
  }
322
+ // xl: the 52px select, the same height as an AppInput at size="xl". A literal height, as on the input.
323
+ .wui-search-select-xl .search-select-control {
324
+ height: 52px;
325
+ min-height: 52px;
326
+ font-size: 16px;
327
+ border-radius: var(--wui-field-radius-lg);
328
+ }
322
329
  // Multi-select grows with its chips, so a size sets the FLOOR (min-height from the rule
323
330
  // above) but never a fixed height — reset height:auto so a second row of chips can appear.
324
331
  .search-select-sm .search-select-multi,
@@ -10,7 +10,7 @@
10
10
  display: block;
11
11
  min-width: 0;
12
12
  border: 1px solid var(--color-border);
13
- border-radius: var(--wui-radius);
13
+ border-radius: var(--wui-radius-md);
14
14
  background: var(--color-bg-subtle);
15
15
  color: var(--color-text);
16
16
  font-family: var(--bs-font-monospace);
@@ -423,6 +423,15 @@
423
423
  font-size: 16px;
424
424
  border-radius: var(--wui-field-radius-lg);
425
425
  }
426
+ // xl (size="xl"): the 52px control for large forms. A literal height, because the control-height
427
+ // ladder stops at 44px and its tokens live in the theme's token file. A floating label needs no
428
+ // rule of its own: it centres on the field's box, so it stays inside at 52px.
429
+ .wui-input-xl {
430
+ height: 52px;
431
+ padding: 9px 16px;
432
+ font-size: 16px;
433
+ border-radius: var(--wui-field-radius-lg);
434
+ }
426
435
  .textarea,
427
436
  textarea.form-control {
428
437
  height: auto;
@@ -850,7 +859,8 @@ $wui-field-error-glyph: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/
850
859
  --wui-input-icon-size: 14px;
851
860
  --wui-input-icon-gap: 10px;
852
861
  }
853
- .input-icon:has(> .input-lg) {
862
+ .input-icon:has(> .input-lg),
863
+ .input-icon:has(> .wui-input-xl) {
854
864
  --wui-input-icon-slot: 48px;
855
865
  --wui-input-icon-size: 18px;
856
866
  --wui-input-icon-gap: 14px;
@@ -1318,6 +1328,17 @@ wui-select[compact] {
1318
1328
  }
1319
1329
  }
1320
1330
 
1331
+ // Under 16px, iOS Safari zooms the whole page when a text field takes focus. On the same screens
1332
+ // that raise the control to 44px, every text-entry element gets a 16px floor. Component rules set
1333
+ // their own sizes at higher specificity, so the floor needs !important to hold for all of them.
1334
+ @media (max-width: 575.98px), (pointer: coarse) {
1335
+ input:not([type="checkbox"], [type="radio"], [type="range"], [type="button"], [type="submit"], [type="reset"], [type="file"], [type="color"], [type="image"], [type="hidden"]),
1336
+ textarea,
1337
+ select {
1338
+ font-size: 16px !important;
1339
+ }
1340
+ }
1341
+
1321
1342
  // red border around a non-input group (e.g. a structure-form card row)
1322
1343
  .group-invalid {
1323
1344
  border: 1px solid var(--color-danger);
@@ -1372,6 +1393,9 @@ wui-select[compact] {
1372
1393
  .input-with-unit .num-input.input-lg {
1373
1394
  height: calc(var(--wui-control-height-lg) - 2px);
1374
1395
  }
1396
+ .input-with-unit .num-input.wui-input-xl {
1397
+ height: calc(52px - 2px);
1398
+ }
1375
1399
  .input-with-unit .num-input:focus {
1376
1400
  box-shadow: none;
1377
1401
  }
@@ -25,7 +25,7 @@ wui-hover-card {
25
25
  overflow: auto;
26
26
  padding: 12px 14px;
27
27
  border: 1px solid var(--color-border);
28
- border-radius: var(--wui-radius);
28
+ border-radius: var(--wui-radius-md);
29
29
  background: var(--color-surface);
30
30
  color: var(--color-text);
31
31
  box-shadow: var(--wui-shadow-overlay);
@@ -11,7 +11,7 @@
11
11
  // ---- Default ring -----------------------------------------------------------
12
12
  // Anything focusable that no partial styles gets the shared ring instead of the browser's.
13
13
  // Zero specificity, so every component rule (including a panel's deliberate `outline: none`)
14
- // still wins. Text fields are not in this list; the Text fields block below rings them.
14
+ // still wins. Text fields are not in this list; their focus border marks them.
15
15
  :where(
16
16
  a[href],
17
17
  area[href],
@@ -83,30 +83,8 @@
83
83
  }
84
84
 
85
85
  // ---- Text fields --------------------------------------------------------------
86
- // A text field keeps its soft focus border and also draws the shared ring. Browsers match
87
- // :focus-visible on a text field after a pointer click too, so the ring shows whenever the caret is
88
- // in the field. A field drawn inside a shell (phone, unit, stepper, input group, one-time code) rings
89
- // the shell and the bare input inside it draws nothing; so does the borderless .input-bare, which
90
- // sits inside another control's chrome.
91
- :is(.form-control, .form-select, .input, .select, .textarea):not(.input-bare):focus-visible {
92
- outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
93
- outline-offset: var(--wui-focus-ring-offset);
94
- }
95
- .app-phone-number-input .phone-input-wrap:has(> .input:focus-visible),
96
- .input-with-unit:has(.num-input:focus-visible),
97
- .num-wrap:has(.num-input:focus-visible),
98
- .wui-input-group:has(> :is(.form-control, .input):focus-visible),
99
- .otp:has(.otp-field:focus-visible) .otp-slot.active {
100
- outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
101
- outline-offset: var(--wui-focus-ring-offset);
102
- }
103
- // After the ring rule: these tie with it on specificity, so source order decides.
104
- .app-phone-number-input .phone-input-wrap > .input:focus-visible,
105
- .input-with-unit .num-input:focus-visible,
106
- .num-wrap .num-input:focus-visible,
107
- .wui-input-group > :is(.form-control, .input):focus-visible {
108
- outline: none;
109
- }
86
+ // A text field (and a shell around one: phone, unit, stepper, input group, one-time code) draws no
87
+ // outer ring. Its soft focus border in _controls.scss is the focus cue.
110
88
 
111
89
  // ---- Not obscured (WCAG 2.4.11) ---------------------------------------------
112
90
  // A control focused by Tab scrolls clear of the sticky shell topbar (72px) and a sticky form
@@ -183,7 +183,7 @@
183
183
  height: 32px;
184
184
  padding: 0;
185
185
  border: 0;
186
- border-radius: var(--wui-radius);
186
+ border-radius: var(--wui-radius-md);
187
187
  background: transparent;
188
188
  color: var(--color-text-muted);
189
189
  cursor: pointer;
@@ -240,7 +240,7 @@
240
240
  margin: 0 8px 8px;
241
241
  padding: 16px 8px;
242
242
  border: 1px dashed var(--color-border);
243
- border-radius: var(--wui-radius);
243
+ border-radius: var(--wui-radius-md);
244
244
  color: var(--color-text-muted);
245
245
  font-size: 0.8125rem;
246
246
  text-align: center;
@@ -251,7 +251,7 @@
251
251
  padding: 12px;
252
252
  background: var(--color-surface);
253
253
  border: 1px solid var(--color-border);
254
- border-radius: var(--wui-radius);
254
+ border-radius: var(--wui-radius-md);
255
255
  color: var(--color-text);
256
256
  cursor: grab;
257
257
  touch-action: manipulation;
@@ -299,7 +299,7 @@
299
299
  margin: 0 8px 8px;
300
300
  padding: 6px 10px;
301
301
  border: 0;
302
- border-radius: var(--wui-radius);
302
+ border-radius: var(--wui-radius-md);
303
303
  background: transparent;
304
304
  color: var(--color-text-muted);
305
305
  font-size: 0.8125rem;
@@ -347,7 +347,7 @@
347
347
  position: absolute;
348
348
  inset: auto 0 0;
349
349
  height: 3px;
350
- border-radius: 0 0 var(--wui-radius) var(--wui-radius);
350
+ border-radius: 0 0 var(--wui-radius-md) var(--wui-radius-md);
351
351
  background: linear-gradient(90deg, transparent, var(--color-primary), transparent);
352
352
  background-size: 200% 100%;
353
353
  animation: wui-kanban-saving 1.1s linear infinite;
@@ -384,7 +384,7 @@
384
384
  .wui-kanban-drop-note {
385
385
  margin: 0 8px 8px;
386
386
  padding: 8px 10px;
387
- border-radius: var(--wui-radius);
387
+ border-radius: var(--wui-radius-md);
388
388
  background: var(--color-surface);
389
389
  color: var(--color-text-muted);
390
390
  font-size: 0.8125rem;
@@ -17,7 +17,7 @@
17
17
  aspect-ratio: 4 / 3;
18
18
  overflow: hidden;
19
19
  border: 1px solid var(--color-border);
20
- border-radius: var(--wui-radius);
20
+ border-radius: var(--wui-radius-md);
21
21
  background: var(--color-bg-muted);
22
22
  cursor: zoom-in;
23
23
  img {
@@ -145,7 +145,7 @@ wui-navigation-menu {
145
145
  max-width: min(36rem, calc(100vw - 16px));
146
146
  padding: 8px;
147
147
  border: 1px solid var(--color-border);
148
- border-radius: var(--wui-radius);
148
+ border-radius: var(--wui-radius-md);
149
149
  corner-shape: squircle;
150
150
  background: var(--color-surface);
151
151
  box-shadow: var(--wui-shadow-overlay);
@@ -19,7 +19,7 @@
19
19
  .wui-onboarding-card {
20
20
  padding: 12px 16px 8px;
21
21
  border: 1px solid var(--color-border);
22
- border-radius: var(--wui-radius);
22
+ border-radius: var(--wui-radius-md);
23
23
  corner-shape: squircle;
24
24
  background: var(--color-surface);
25
25
  color: var(--color-text);
@@ -91,7 +91,7 @@ wui-rich-text[readonly] .wui-rich-text-toolbar {
91
91
  height: 32px;
92
92
  padding: 0 6px;
93
93
  border: 0;
94
- border-radius: var(--wui-radius);
94
+ border-radius: var(--wui-radius-md);
95
95
  background: transparent;
96
96
  color: var(--color-text-muted);
97
97
  font: inherit;
@@ -170,7 +170,7 @@ wui-rich-text[readonly] .wui-rich-text-toolbar {
170
170
  height: 32px;
171
171
  padding: 0 10px;
172
172
  border: 0;
173
- border-radius: var(--wui-radius);
173
+ border-radius: var(--wui-radius-md);
174
174
  background: transparent;
175
175
  color: var(--color-text-muted);
176
176
  font: inherit;
@@ -271,7 +271,7 @@ wui-rich-text[readonly] .wui-rich-text-prose {
271
271
  .wui-rich-text-prose pre {
272
272
  margin: 0 0 0.75em;
273
273
  padding: 10px 12px;
274
- border-radius: var(--wui-radius);
274
+ border-radius: var(--wui-radius-md);
275
275
  background: var(--color-bg-muted);
276
276
  overflow-x: auto;
277
277
  }
@@ -384,7 +384,8 @@
384
384
  align-items: center;
385
385
  gap: 12px;
386
386
  // Comfortable row: 44px, which with the 2px group gap is a 46px pitch. Compact sets its own below.
387
- min-height: var(--wui-control-height-lg);
387
+ // An explicit itemHeight sets --wui-nav-item-height on the shell and replaces all three heights.
388
+ min-height: var(--wui-nav-item-height, var(--wui-control-height-lg));
388
389
  padding: 9px 14px;
389
390
  border-radius: var(--radius-xl);
390
391
  corner-shape: squircle;
@@ -400,11 +401,11 @@
400
401
  }
401
402
  // Compact: 40px rows, a 42px pitch. The touch floor holds on a coarse pointer whatever the density.
402
403
  .app-shell[data-density="compact"] .app-nav-item:not(.app-nav-subitem) {
403
- min-height: 40px;
404
+ min-height: var(--wui-nav-item-height, 40px);
404
405
  }
405
406
  @media (pointer: coarse) {
406
407
  .app-shell[data-density="compact"] .app-nav-item:not(.app-nav-subitem) {
407
- min-height: var(--wui-control-height-lg);
408
+ min-height: var(--wui-nav-item-height, var(--wui-control-height-lg));
408
409
  }
409
410
  }
410
411
  .app-nav-item:hover {
@@ -840,7 +841,7 @@
840
841
  clip-path: inset(50%);
841
842
  white-space: nowrap;
842
843
  padding: 8px 12px;
843
- border-radius: var(--wui-radius);
844
+ border-radius: var(--wui-radius-md);
844
845
  background: var(--color-surface);
845
846
  color: var(--color-text);
846
847
  }
@@ -82,7 +82,7 @@
82
82
  z-index: var(--wui-z-dropdown, 1000);
83
83
  width: min(320px, calc(100vw - 32px));
84
84
  border: 1px solid var(--color-border);
85
- border-radius: var(--wui-radius);
85
+ border-radius: var(--wui-radius-md);
86
86
  corner-shape: squircle;
87
87
  background: var(--color-surface);
88
88
  color: var(--color-text);
@@ -24,7 +24,7 @@ wui-sortable[orientation="horizontal"] {
24
24
  padding: 6px 12px 6px 6px;
25
25
  background: var(--color-surface);
26
26
  border: 1px solid var(--color-border);
27
- border-radius: var(--wui-radius);
27
+ border-radius: var(--wui-radius-md);
28
28
  corner-shape: squircle;
29
29
  color: var(--color-text);
30
30
  // Dragging a body text selection is never what a drag on an item means.
@@ -15,7 +15,7 @@
15
15
  height: var(--wui-split-height, min(760px, calc(100dvh - 12rem)));
16
16
  min-height: 320px;
17
17
  border: 1px solid var(--color-border);
18
- border-radius: var(--wui-radius);
18
+ border-radius: var(--wui-radius-md);
19
19
  corner-shape: squircle;
20
20
  background: var(--color-surface);
21
21
  color: var(--color-text);
@@ -26,7 +26,7 @@
26
26
  align-items: center;
27
27
  height: 36px;
28
28
  padding-inline: 9px;
29
- border-radius: var(--wui-radius);
29
+ border-radius: var(--wui-radius-md);
30
30
  color: var(--color-text-muted);
31
31
  cursor: pointer;
32
32
  margin-bottom: 0;
@@ -108,7 +108,7 @@
108
108
  height: 36px;
109
109
  padding: 0;
110
110
  border: none;
111
- border-radius: var(--wui-radius);
111
+ border-radius: var(--wui-radius-md);
112
112
  background: transparent;
113
113
  color: var(--color-text-muted);
114
114
  cursor: pointer;
@@ -819,6 +819,16 @@
819
819
  // AA-safe text colour for the heading and an accented <strong>.
820
820
  --alert-text: var(--color-danger-text-on-soft);
821
821
  }
822
+ // Neutral (`variant="neutral"`): a plain notice with no semantic colour. It sits on the neutral surface
823
+ // pair, its body and heading take the same ink as the status variants, and its edge is the muted text
824
+ // colour, so nothing in it reads as a status.
825
+ .alert-neutral {
826
+ --bs-alert-bg: var(--wui-neutral-bg-light);
827
+ --bs-alert-border-color: var(--wui-neutral-bg-dark);
828
+ --bs-alert-color: var(--color-text-body);
829
+ --alert-accent: var(--color-text-muted);
830
+ --alert-text: var(--color-text-body);
831
+ }
822
832
 
823
833
  // AppErrorSummary: a danger alert holding a heading and one link per field error. It takes
824
834
  // focus when it appears, so its focus ring is the alert's own edge rather than an outline.
@@ -1001,6 +1011,9 @@
1001
1011
  .alert-danger .alert-heading {
1002
1012
  color: var(--alert-text);
1003
1013
  }
1014
+ .alert-neutral .alert-heading {
1015
+ color: var(--alert-text);
1016
+ }
1004
1017
 
1005
1018
  // Heading and body type step with the size: sm 13px / 11px, md 14px / 12px (the base above),
1006
1019
  // lg 16px / 14px. Declared after the base heading rule so these override it.
@@ -85,6 +85,7 @@
85
85
  "--wui-bg-page": "Page background behind every surface in light mode.",
86
86
  "--wui-border-light": "Default hairline border of cards, tables and dividers.",
87
87
  "--wui-border-soft": "Softest border, for inner dividers.",
88
+ "--wui-border-strong": "Strong border for emphasised separators, chart axes and unselected control outlines.",
88
89
  "--wui-chart-1": "Colour of chart series 1, the brand primary.",
89
90
  "--wui-chart-2": "Colour of chart series 2 of the eight categorical series.",
90
91
  "--wui-chart-3": "Colour of chart series 3 of the eight categorical series.",
@@ -180,14 +181,23 @@
180
181
  "--wui-font-mono": "Monospace typeface for code, identifiers and figures that must line up.",
181
182
  "--wui-fs-2xl": "Double extra-large step of the fluid type scale; a product opts in per element.",
182
183
  "--wui-fs-3xl": "Triple extra-large step of the fluid type scale; a product opts in per element.",
184
+ "--wui-fs-48": "Step between the triple and fourth extra-large sizes of the fluid type scale; a product opts in per element.",
183
185
  "--wui-fs-4xl": "Fourth extra-large step of the fluid type scale; a product opts in per element.",
184
186
  "--wui-fs-5xl": "Fifth extra-large step of the fluid type scale; a product opts in per element.",
187
+ "--wui-fs-64": "Step between the fifth and sixth extra-large sizes of the fluid type scale; a product opts in per element.",
185
188
  "--wui-fs-6xl": "Sixth extra-large step of the fluid type scale; a product opts in per element.",
189
+ "--wui-fs-7xl": "First display step above the fluid type scale, 64px on a phone to 120px on a desktop.",
190
+ "--wui-fs-8xl": "Largest display step of the fluid type scale, 72px on a phone to 144px on a desktop.",
186
191
  "--wui-fs-base": "Body-size step of the fluid type scale, close to Bootstrap's 1rem.",
187
192
  "--wui-fs-lg": "Large step of the fluid type scale; a product opts in per element.",
188
193
  "--wui-fs-sm": "Small step of the fluid type scale; a product opts in per element.",
194
+ "--wui-fs-smb": "Step between the small and body sizes of the fluid type scale; a product opts in per element.",
189
195
  "--wui-fs-xl": "Extra-large step of the fluid type scale; a product opts in per element.",
190
196
  "--wui-fs-xs": "Extra-small step of the fluid type scale; a product opts in per element.",
197
+ "--wui-fw-bold": "Bold text weight.",
198
+ "--wui-fw-medium": "Medium text weight.",
199
+ "--wui-fw-normal": "Regular text weight.",
200
+ "--wui-fw-semibold": "Semibold text weight, for labels and titles.",
191
201
  "--wui-hero-gradient": "Background gradient of the hero band on marketing pages.",
192
202
  "--wui-info": "Vivid info fill for badges, dots and info buttons.",
193
203
  "--wui-info-10": "Info tint 10, the soft background of info alerts and badges.",
@@ -198,6 +208,7 @@
198
208
  "--wui-info-active": "Info ink for icons and active states on light surfaces.",
199
209
  "--wui-info-text": "Info colour as text on light surfaces.",
200
210
  "--wui-ink": "Pure black ink, the highest-contrast text colour.",
211
+ "--wui-lh-tight": "Tight line height, for headings and single-line labels.",
201
212
  "--wui-neutral-bg-dark": "Muted background of table emphasis rows and mega-menu hover.",
202
213
  "--wui-neutral-bg-light": "Faint background for table emphasis and mega-menu hover.",
203
214
  "--wui-neutral-border-dark": "Border tone of table emphasis rows and dividers.",
@@ -216,8 +227,9 @@
216
227
  "--wui-primary-pressed": "Primary fill while a control is pressed or active.",
217
228
  "--wui-primary-text": "Text and icon colour on a solid primary fill, such as a primary button label.",
218
229
  "--wui-progress-track": "Unfilled track of a progress bar or meter.",
219
- "--wui-radius": "Default step of the corner radius scale.",
220
230
  "--wui-radius-lg": "Large step of the corner radius scale.",
231
+ "--wui-radius-md": "Medium step of the corner radius scale, the default corner.",
232
+ "--wui-radius-pill": "Fully rounded corner, for pills and round buttons.",
221
233
  "--wui-radius-sm": "Small step of the corner radius scale.",
222
234
  "--wui-radius-xl": "Extra-large step of the corner radius scale.",
223
235
  "--wui-scrollbar": "Resting thumb colour of a thin scrollbar.",
@@ -230,6 +242,16 @@
230
242
  "--wui-shadow-overlay-lg": "Larger overlay shadow, for the largest floating surfaces.",
231
243
  "--wui-shadow-thumb": "Shadow under a slider thumb and other small interactive elements.",
232
244
  "--wui-shadow-thumb-hover": "Shadow under a slider thumb while it is hovered.",
245
+ "--wui-space-2xl": "Double extra-large step of the spacing scale.",
246
+ "--wui-space-3xl": "Triple extra-large step of the spacing scale.",
247
+ "--wui-space-4xl": "Largest step of the spacing scale.",
248
+ "--wui-space-lg": "Large step of the spacing scale.",
249
+ "--wui-space-md": "Medium step of the spacing scale.",
250
+ "--wui-space-none": "No space.",
251
+ "--wui-space-sm": "Small step of the spacing scale.",
252
+ "--wui-space-xl": "Extra-large step of the spacing scale.",
253
+ "--wui-space-xs": "Extra-small step of the spacing scale.",
254
+ "--wui-space-xxs": "Hairline step of the spacing scale.",
233
255
  "--wui-success": "Vivid success fill for badges, dots and success buttons.",
234
256
  "--wui-success-10": "Success tint 10, the soft background of success alerts and badges.",
235
257
  "--wui-success-20": "Success tint 20 for soft fills behind success alerts and badges.",
@@ -248,7 +270,7 @@
248
270
  "--wui-text-2": "Secondary text for descriptions, sub-labels and muted copy.",
249
271
  "--wui-text-3": "Tertiary text for hints, captions, labels, timestamps and placeholders.",
250
272
  "--wui-text-4": "Decorative faint ink, not for text a person must read.",
251
- "--wui-text-5": "Faintest ink, for decorative marks and the strong border tone.",
273
+ "--wui-text-5": "Faintest ink, for decorative marks.",
252
274
  "--wui-text-heading": "Heading ink for page and section titles.",
253
275
  "--wui-warning": "Vivid warning fill for badges and dots.",
254
276
  "--wui-warning-10": "Warning tint 10, the soft background of warning alerts and badges.",