@webority/theme 0.127.0 → 0.129.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.127.0",
3
+ "version": "0.129.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": {
@@ -47,7 +47,7 @@
47
47
  "postcss": "^8.5.31"
48
48
  },
49
49
  "devDependencies": {
50
- "@webority/tokens": "0.127.0",
50
+ "@webority/tokens": "0.129.0",
51
51
  "bootstrap": "5.3.3",
52
52
  "country-flag-icons": "^1.6.20",
53
53
  "sass-embedded": "^1.97.0",
@@ -1,4 +1,4 @@
1
- // Generated by @webority/tokens 0.127.0 from its token source. Do not edit; run webority brand --library.
1
+ // Generated by @webority/tokens 0.129.0 from its token source. Do not edit; run webority brand --library.
2
2
  $body-color: #252f4a !default;
3
3
  $body-secondary-color: #4b5675 !default;
4
4
  $body-tertiary-color: #626a82 !default;
@@ -8,8 +8,10 @@
8
8
  // retained because it's a tactile signal, not a depth cue.
9
9
  // A button is exactly as tall as a field of the same size (the --wui-control-md ladder, 32/36/44px), so a
10
10
  // button beside an input lines up in every form row. Heights are min-height with the label flex-centred; sm/lg
11
- // set theirs in their size blocks below.
12
- .btn:not(.btn-sm):not(.btn-lg):not(.btn-pill):not(.btn-pill-sm):not(.u-action):not(.btn-icon) {
11
+ // set theirs in their size blocks below, and so does a button sized by its group (.btn-group-sm/-lg).
12
+ .btn:not(.btn-sm):not(.btn-lg):not(.btn-group-sm > .btn):not(.btn-group-lg > .btn):not(.btn-pill):not(.btn-pill-sm):not(.u-action):not(
13
+ .btn-icon
14
+ ) {
13
15
  // The height is the field height and the label is flex-centred, so no vertical padding: it
14
16
  // would push a button past its field height.
15
17
  --bs-btn-padding-y: 0;
@@ -229,6 +231,24 @@
229
231
  --bs-btn-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
230
232
  }
231
233
 
234
+ // Light button: a raised surface in both themes. Bootstrap compiles btn-light from $light, so it
235
+ // stayed near-white on a dark page; these read the meaning tokens, and the border is a soft line.
236
+ .btn-light {
237
+ --bs-btn-color: var(--color-text);
238
+ --bs-btn-bg: var(--color-surface);
239
+ --bs-btn-border-color: var(--color-border);
240
+ --bs-btn-hover-color: var(--color-text);
241
+ --bs-btn-hover-bg: var(--color-bg-muted);
242
+ --bs-btn-hover-border-color: var(--color-border);
243
+ --bs-btn-active-color: var(--color-text);
244
+ --bs-btn-active-bg: var(--color-border);
245
+ --bs-btn-active-border-color: var(--color-border);
246
+ --bs-btn-disabled-color: var(--color-text-muted);
247
+ --bs-btn-disabled-bg: var(--color-surface);
248
+ --bs-btn-disabled-border-color: var(--color-border);
249
+ --bs-btn-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
250
+ }
251
+
232
252
  // Light outline for a dark banner/hero CTA, where .btn-outline-primary's brand-coloured
233
253
  // border/text would disappear against a dark background. White is used directly (not a
234
254
  // token) because it's the one colour that reads on any dark surface, brand-independent.
@@ -291,6 +311,8 @@
291
311
  .btn-text.is-loading.disabled,
292
312
  .btn-neutral.is-loading:disabled,
293
313
  .btn-neutral.is-loading.disabled,
314
+ .btn-light.is-loading:disabled,
315
+ .btn-light.is-loading.disabled,
294
316
  .btn-outline-primary.is-loading:disabled,
295
317
  .btn-outline-primary.is-loading.disabled,
296
318
  .btn-outline-danger.is-loading:disabled,
@@ -877,8 +899,9 @@
877
899
  // compiled $card-border-radius. Background is an ELEVATED surface, not the page
878
900
  // colour — so a card stays visible on a tinted page, and flips correctly in dark
879
901
  // mode because --color-surface is themed in the alias layer.
902
+ // A brand that draws rounder cards than its controls sets --wui-card-radius in its token file.
880
903
  .card {
881
- --bs-card-border-radius: var(--wui-radius-lg);
904
+ --bs-card-border-radius: var(--wui-card-radius, var(--wui-radius-lg));
882
905
  --bs-card-bg: var(--color-surface);
883
906
  }
884
907
 
@@ -897,6 +920,13 @@
897
920
  align-items: center;
898
921
  gap: 0.5rem;
899
922
  margin-left: auto;
923
+ // Natural width: a long title wraps beside the actions instead of squeezing a button. The cap keeps
924
+ // wide actions (a segmented filter) inside a phone-width header, where they shrink as before.
925
+ flex: 0 0 auto;
926
+ max-width: 100%;
927
+ }
928
+ .card-header-actions .btn {
929
+ white-space: nowrap;
900
930
  }
901
931
 
902
932
  // Close button (React `onClose` / Razor `dismissible`): the last control in the header, pushed
@@ -1,4 +1,4 @@
1
- // Generated by @webority/tokens 0.127.0 from its token source. Do not edit; run webority brand --library.
1
+ // Generated by @webority/tokens 0.129.0 from its token source. Do not edit; run webority brand --library.
2
2
 
3
3
  :root {
4
4
  --wui-primary: #4F46E5;
@@ -170,6 +170,7 @@
170
170
  --wui-font-display: "Webority Serif", Cambria, Georgia, "Times New Roman", "Noto Serif", serif;
171
171
  --wui-font-mono: "JetBrains Mono", SFMono-Regular, Menlo, Monaco, Consolas, monospace;
172
172
  --wui-shadow-card: none;
173
+ --wui-shadow-elevated: 0px 2px 8px -2px rgba(7, 20, 55, 0.10);
173
174
  --wui-shadow-popover: 0px 8px 28px -6px rgba(7, 20, 55, 0.14);
174
175
  --wui-shadow-modal: 0px 24px 60px -16px rgba(7, 20, 55, 0.28);
175
176
  --wui-shadow-drawer: 0px 24px 60px -16px rgba(7, 20, 55, 0.28);
@@ -210,6 +211,10 @@
210
211
  --color-surface-inverse: var(--wui-text-heading);
211
212
  --color-surface-inverse-raised: color-mix(in srgb, var(--color-text-inverse) 5%, var(--color-surface-inverse));
212
213
  --color-surface-inverse-elevated: color-mix(in srgb, var(--color-text-inverse) 9%, var(--color-surface-inverse));
214
+ --color-surface-inverse-wash-4: color-mix(in srgb, var(--color-text-inverse) 4%, transparent);
215
+ --color-surface-inverse-wash-8: color-mix(in srgb, var(--color-text-inverse) 8%, transparent);
216
+ --color-surface-inverse-wash-12: color-mix(in srgb, var(--color-text-inverse) 12%, transparent);
217
+ --color-surface-inverse-wash-24: color-mix(in srgb, var(--color-text-inverse) 24%, transparent);
213
218
  --color-surface-dark: var(--wui-text-heading);
214
219
  --color-surface-dark-border: color-mix(in srgb, var(--wui-bg-light) 14%, var(--wui-text-heading));
215
220
  --color-on-surface-dark: var(--wui-bg-light);
@@ -228,6 +233,7 @@
228
233
  --color-field-border-hover: var(--wui-field-border-hover);
229
234
  --color-field-border-focus: var(--wui-primary-30);
230
235
  --color-focus-ring: var(--color-primary-text);
236
+ --color-focus-ring-soft: color-mix(in srgb, var(--color-focus-ring) 25%, transparent);
231
237
  --color-scrim: color-mix(in srgb, var(--wui-text-heading) 45%, transparent);
232
238
  --color-scrim-strong: color-mix(in srgb, var(--wui-text-heading) 62%, transparent);
233
239
  --color-on-scrim: var(--wui-bg-light);
@@ -317,22 +323,32 @@
317
323
  --wui-lh-heading: 1.2;
318
324
  --wui-lh-body: 1.55;
319
325
  --wui-lh-display: 1.05;
320
- --wui-field-sm-radius: var(--wui-radius-sm);
321
- --wui-field-md-radius: var(--wui-radius-sm);
322
- --wui-field-lg-radius: var(--wui-radius-sm);
326
+ --wui-field-sm-radius: var(--wui-radius-md);
327
+ --wui-field-md-radius: var(--wui-radius-md);
328
+ --wui-field-lg-radius: var(--wui-radius-md);
323
329
  --wui-focus-ring-width: var(--wui-space-xxs);
324
330
  --wui-focus-ring-offset: var(--wui-space-xxs);
325
331
  --wui-focus-ring-shadow: 0 0 0 2px var(--color-primary-soft);
332
+ --wui-focus-ring-soft-shadow: 0 0 0 var(--wui-focus-ring-width) var(--color-focus-ring-soft);
326
333
  --wui-press-scale: 0.96;
327
334
  --wui-press-duration: 80ms;
328
335
  --wui-press-opacity: 0.5;
329
336
  --wui-thumb-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
330
337
  --wui-thumb-shadow-hover: 0 2px 12px rgba(0, 0, 0, 0.2);
338
+ --wui-card-pad: 20px;
339
+ --wui-card-title-fs: 16px;
340
+ --wui-card-title-lh: 1.3;
331
341
  --wui-card-shadow-lifted: none;
332
342
  --wui-card-shadow-lifted-hover: none;
333
343
  --wui-table-md-padding-x: var(--wui-table-pad);
344
+ --wui-modal-max-width: 440px;
345
+ --wui-drawer-max: 90;
346
+ --wui-step-tile-size: 34px;
347
+ --wui-kpi-value-size: 24px;
348
+ --wui-nav-menu-current-bg: transparent;
334
349
  --wui-container-md-padding-x: var(--wui-container-pad);
335
350
  --wui-disabled-opacity: 0.5;
351
+ --wui-toast-edge-offset: var(--wui-space-lg);
336
352
  }
337
353
 
338
354
  @media (min-width: 768px) {
@@ -387,6 +403,7 @@
387
403
  --wui-chart-diverging-mid: var(--wui-dark-chart-diverging-mid);
388
404
  --wui-chart-diverging-high: var(--wui-dark-chart-diverging-high);
389
405
  --wui-chart-neutral: var(--wui-dark-chart-neutral);
406
+ --wui-shadow-elevated: 0px 2px 8px -2px rgba(0, 0, 0, 0.45);
390
407
  --wui-shadow-popover: 0px 8px 28px -6px rgba(0, 0, 0, 0.55);
391
408
  --wui-shadow-modal: 0px 24px 60px -16px rgba(0, 0, 0, 0.7);
392
409
  --color-bg: var(--wui-dark-bg-page);
@@ -499,6 +516,11 @@
499
516
  --bs-secondary-bg-rgb: 24, 27, 35;
500
517
  --bs-tertiary-bg-rgb: 35, 39, 51;
501
518
  --bs-border-color-rgb: 42, 47, 58;
519
+ --bs-secondary-rgb: 180, 185, 198;
520
+ --bs-link-color: var(--color-link);
521
+ --bs-link-color-rgb: 149, 144, 239;
522
+ --bs-link-hover-color: var(--color-primary-hover);
523
+ --bs-link-hover-color-rgb: 162, 157, 241;
502
524
  color-scheme: dark;
503
525
  }
504
526
 
@@ -542,6 +564,7 @@
542
564
  --wui-chart-diverging-mid: var(--wui-dark-chart-diverging-mid);
543
565
  --wui-chart-diverging-high: var(--wui-dark-chart-diverging-high);
544
566
  --wui-chart-neutral: var(--wui-dark-chart-neutral);
567
+ --wui-shadow-elevated: 0px 2px 8px -2px rgba(0, 0, 0, 0.45);
545
568
  --wui-shadow-popover: 0px 8px 28px -6px rgba(0, 0, 0, 0.55);
546
569
  --wui-shadow-modal: 0px 24px 60px -16px rgba(0, 0, 0, 0.7);
547
570
  --color-bg: var(--wui-dark-bg-page);
@@ -654,6 +677,11 @@
654
677
  --bs-secondary-bg-rgb: 24, 27, 35;
655
678
  --bs-tertiary-bg-rgb: 35, 39, 51;
656
679
  --bs-border-color-rgb: 42, 47, 58;
680
+ --bs-secondary-rgb: 180, 185, 198;
681
+ --bs-link-color: var(--color-link);
682
+ --bs-link-color-rgb: 149, 144, 239;
683
+ --bs-link-hover-color: var(--color-primary-hover);
684
+ --bs-link-hover-color-rgb: 162, 157, 241;
657
685
  }
658
686
 
659
687
  // Zero specificity, so a component's own class on a themed section or inside it keeps its colour.
@@ -670,25 +698,26 @@ $wui-dark-layer-names: (
670
698
  wui-danger-5, wui-chart-1, wui-chart-2, wui-chart-3, wui-chart-4, wui-chart-5,
671
699
  wui-chart-6, wui-chart-7, wui-chart-8, wui-chart-seq-0, wui-chart-seq-1, wui-chart-seq-2,
672
700
  wui-chart-seq-3, wui-chart-seq-4, wui-chart-seq-5, wui-chart-seq-6, wui-chart-diverging-low, wui-chart-diverging-mid,
673
- wui-chart-diverging-high, wui-chart-neutral, wui-shadow-popover, wui-shadow-modal, color-bg, color-bg-subtle,
674
- color-bg-muted, color-surface, color-surface-inverse, color-text, color-text-body, color-text-muted,
675
- color-text-subtle, color-text-inverse, color-link, color-border, color-border-subtle, color-border-strong,
676
- color-field-bg, color-field-border, color-field-border-hover, color-field-border-focus, color-scrim, color-scrim-strong,
677
- color-progress-track, color-progress-label, color-thumb, color-scrollbar, color-scrollbar-hover, color-scrollbar-active,
678
- color-primary, color-primary-hover, color-primary-soft, color-primary-text, color-on-primary, color-success,
679
- color-success-pressed, color-success-soft, color-success-border, color-success-text, color-success-text-on-soft, color-success-strong,
680
- color-on-success, color-on-success-strong, color-warning, color-warning-pressed, color-warning-soft, color-warning-border,
681
- color-warning-text, color-warning-text-on-soft, color-warning-strong, color-warning-strong-hover, color-on-warning, color-on-warning-strong,
682
- color-danger, color-danger-pressed, color-danger-soft, color-danger-border, color-danger-text, color-danger-text-on-soft,
683
- color-danger-strong, color-danger-strong-hover, color-on-danger, color-on-danger-strong, color-info, color-info-pressed,
684
- color-info-soft, color-info-border, color-info-text, color-info-text-on-soft, color-info-strong, color-on-info,
685
- color-on-info-strong, color-chart-1, color-chart-2, color-chart-3, color-chart-4, color-chart-5,
686
- color-chart-6, color-chart-7, color-chart-8, color-chart-seq-0, color-chart-seq-1, color-chart-seq-2,
687
- color-chart-seq-3, color-chart-seq-4, color-chart-seq-5, color-chart-seq-6, color-chart-diverging-low, color-chart-diverging-mid,
688
- color-chart-diverging-high, color-chart-neutral, wui-close-filter, wui-thumb-shadow, wui-thumb-shadow-hover, bs-body-color,
689
- bs-emphasis-color, bs-secondary-color, bs-tertiary-color, bs-heading-color, bs-body-bg, bs-border-color,
690
- bs-secondary-bg, bs-tertiary-bg, bs-primary, bs-body-bg-rgb, bs-primary-rgb, bs-body-color-rgb,
691
- bs-emphasis-color-rgb, bs-secondary-color-rgb, bs-tertiary-color-rgb, bs-secondary-bg-rgb, bs-tertiary-bg-rgb, bs-border-color-rgb
701
+ wui-chart-diverging-high, wui-chart-neutral, wui-shadow-elevated, wui-shadow-popover, wui-shadow-modal, color-bg,
702
+ color-bg-subtle, color-bg-muted, color-surface, color-surface-inverse, color-text, color-text-body,
703
+ color-text-muted, color-text-subtle, color-text-inverse, color-link, color-border, color-border-subtle,
704
+ color-border-strong, color-field-bg, color-field-border, color-field-border-hover, color-field-border-focus, color-scrim,
705
+ color-scrim-strong, color-progress-track, color-progress-label, color-thumb, color-scrollbar, color-scrollbar-hover,
706
+ color-scrollbar-active, color-primary, color-primary-hover, color-primary-soft, color-primary-text, color-on-primary,
707
+ color-success, color-success-pressed, color-success-soft, color-success-border, color-success-text, color-success-text-on-soft,
708
+ color-success-strong, color-on-success, color-on-success-strong, color-warning, color-warning-pressed, color-warning-soft,
709
+ color-warning-border, color-warning-text, color-warning-text-on-soft, color-warning-strong, color-warning-strong-hover, color-on-warning,
710
+ color-on-warning-strong, color-danger, color-danger-pressed, color-danger-soft, color-danger-border, color-danger-text,
711
+ color-danger-text-on-soft, color-danger-strong, color-danger-strong-hover, color-on-danger, color-on-danger-strong, color-info,
712
+ color-info-pressed, color-info-soft, color-info-border, color-info-text, color-info-text-on-soft, color-info-strong,
713
+ color-on-info, color-on-info-strong, color-chart-1, color-chart-2, color-chart-3, color-chart-4,
714
+ color-chart-5, color-chart-6, color-chart-7, color-chart-8, color-chart-seq-0, color-chart-seq-1,
715
+ color-chart-seq-2, color-chart-seq-3, color-chart-seq-4, color-chart-seq-5, color-chart-seq-6, color-chart-diverging-low,
716
+ color-chart-diverging-mid, color-chart-diverging-high, color-chart-neutral, wui-close-filter, wui-thumb-shadow, wui-thumb-shadow-hover,
717
+ bs-body-color, bs-emphasis-color, bs-secondary-color, bs-tertiary-color, bs-heading-color, bs-body-bg,
718
+ bs-border-color, bs-secondary-bg, bs-tertiary-bg, bs-primary, bs-body-bg-rgb, bs-primary-rgb,
719
+ bs-body-color-rgb, bs-emphasis-color-rgb, bs-secondary-color-rgb, bs-tertiary-color-rgb, bs-secondary-bg-rgb, bs-tertiary-bg-rgb,
720
+ bs-border-color-rgb, bs-secondary-rgb, bs-link-color, bs-link-color-rgb, bs-link-hover-color, bs-link-hover-color-rgb
692
721
  );
693
722
 
694
723
  // var() resolves where a name is declared, so the html copies keep the light values for a light box.
@@ -756,6 +785,7 @@ html {
756
785
  --wui-chart-diverging-mid: var(--wui-dark-chart-diverging-mid);
757
786
  --wui-chart-diverging-high: var(--wui-dark-chart-diverging-high);
758
787
  --wui-chart-neutral: var(--wui-dark-chart-neutral);
788
+ --wui-shadow-elevated: 0px 2px 8px -2px rgba(0, 0, 0, 0.45);
759
789
  --wui-shadow-popover: 0px 8px 28px -6px rgba(0, 0, 0, 0.55);
760
790
  --wui-shadow-modal: 0px 24px 60px -16px rgba(0, 0, 0, 0.7);
761
791
  --color-bg: var(--wui-dark-bg-page);
@@ -868,6 +898,348 @@ html {
868
898
  --bs-secondary-bg-rgb: 24, 27, 35;
869
899
  --bs-tertiary-bg-rgb: 35, 39, 51;
870
900
  --bs-border-color-rgb: 42, 47, 58;
901
+ --bs-secondary-rgb: 180, 185, 198;
902
+ --bs-link-color: var(--color-link);
903
+ --bs-link-color-rgb: 149, 144, 239;
904
+ --bs-link-hover-color: var(--color-primary-hover);
905
+ --bs-link-hover-color-rgb: 162, 157, 241;
871
906
  color-scheme: dark;
872
907
  }
873
908
  }
909
+
910
+ // A light box under a dark page root takes literal light values: var() would resolve against the dark root.
911
+
912
+ :root[data-theme="dark"] [data-theme="light"],
913
+ :root[data-theme="dark"] [data-bs-theme="light"],
914
+ :root[data-bs-theme="dark"] [data-theme="light"],
915
+ :root[data-bs-theme="dark"] [data-bs-theme="light"] {
916
+ --wui-primary-50: #818CF8;
917
+ --wui-primary-30: #A5B4FC;
918
+ --wui-primary-20: #C7D2FE;
919
+ --wui-primary-15: #DDE1FD;
920
+ --wui-primary-10: #E0E7FF;
921
+ --wui-primary-5: #EEF2FF;
922
+ --wui-surface-soft: #F2EFFE;
923
+ --wui-surface-violet-soft: #FCFCFC;
924
+ --wui-surface-mute: #F9FBFC;
925
+ --wui-neutral-bg-dark: #F5F6FA;
926
+ --wui-neutral-bg-light: #F9FBFC;
927
+ --wui-info-10: #E9F3FF;
928
+ --wui-info-5: #F3F9FF;
929
+ --wui-success-10: #E8FAEE;
930
+ --wui-success-5: #F3FCF6;
931
+ --wui-warning-10: #FFF8E6;
932
+ --wui-warning-5: #FEFBF2;
933
+ --wui-danger-10: #FFEAEF;
934
+ --wui-danger-5: #FEF4F6;
935
+ --wui-chart-1: var(--wui-primary);
936
+ --wui-chart-2: #eb6834;
937
+ --wui-chart-3: #1baf7a;
938
+ --wui-chart-4: #eda100;
939
+ --wui-chart-5: #e87ba4;
940
+ --wui-chart-6: #008300;
941
+ --wui-chart-7: #2a78d6;
942
+ --wui-chart-8: #e34948;
943
+ --wui-chart-seq-0: var(--wui-bg-muted);
944
+ --wui-chart-seq-1: var(--wui-primary-10);
945
+ --wui-chart-seq-2: var(--wui-primary-20);
946
+ --wui-chart-seq-3: var(--wui-primary-30);
947
+ --wui-chart-seq-4: var(--wui-primary-50);
948
+ --wui-chart-seq-5: var(--wui-primary-hover);
949
+ --wui-chart-seq-6: var(--wui-primary-pressed);
950
+ --wui-chart-diverging-low: #e34948;
951
+ --wui-chart-diverging-mid: #c4cada;
952
+ --wui-chart-diverging-high: #2a78d6;
953
+ --wui-chart-neutral: #99a1b7;
954
+ --wui-shadow-elevated: 0px 2px 8px -2px rgba(7, 20, 55, 0.10);
955
+ --wui-shadow-popover: 0px 8px 28px -6px rgba(7, 20, 55, 0.14);
956
+ --wui-shadow-modal: 0px 24px 60px -16px rgba(7, 20, 55, 0.28);
957
+ --color-bg: var(--wui-bg-page);
958
+ --color-bg-subtle: var(--wui-bg-elevated);
959
+ --color-bg-muted: var(--wui-bg-muted);
960
+ --color-surface: var(--wui-bg-light);
961
+ --color-surface-inverse: var(--wui-text-heading);
962
+ --color-text: var(--wui-text-heading);
963
+ --color-text-body: var(--wui-text-1);
964
+ --color-text-muted: var(--wui-text-2);
965
+ --color-text-subtle: var(--wui-text-3);
966
+ --color-text-inverse: var(--wui-bg-light);
967
+ --color-link: var(--wui-primary-ink);
968
+ --color-border: var(--wui-border-light);
969
+ --color-border-subtle: var(--wui-border-soft);
970
+ --color-border-strong: var(--wui-border-strong);
971
+ --color-field-bg: var(--wui-field-bg);
972
+ --color-field-border: var(--wui-field-border);
973
+ --color-field-border-hover: var(--wui-field-border-hover);
974
+ --color-field-border-focus: var(--wui-primary-30);
975
+ --color-scrim: color-mix(in srgb, var(--wui-text-heading) 45%, transparent);
976
+ --color-scrim-strong: color-mix(in srgb, var(--wui-text-heading) 62%, transparent);
977
+ --color-progress-track: var(--wui-progress-track);
978
+ --color-progress-label: var(--wui-bg-light);
979
+ --color-thumb: var(--wui-bg-light);
980
+ --color-scrollbar: var(--wui-scrollbar);
981
+ --color-scrollbar-hover: var(--wui-scrollbar-hover);
982
+ --color-scrollbar-active: var(--wui-scrollbar-active);
983
+ --color-primary: var(--wui-primary);
984
+ --color-primary-hover: var(--wui-primary-pressed);
985
+ --color-primary-soft: var(--wui-primary-10);
986
+ --color-primary-text: var(--wui-primary-ink);
987
+ --color-on-primary: var(--wui-primary-text);
988
+ --color-success: var(--wui-success);
989
+ --color-success-pressed: var(--wui-success-active);
990
+ --color-success-soft: var(--wui-success-10);
991
+ --color-success-border: var(--wui-success-30);
992
+ --color-success-text: var(--wui-success-text);
993
+ --color-success-text-on-soft: var(--wui-success-text);
994
+ --color-success-strong: var(--wui-success-strong);
995
+ --color-on-success: #FFFFFF;
996
+ --color-on-success-strong: #FFFFFF;
997
+ --color-warning: var(--wui-warning);
998
+ --color-warning-pressed: var(--wui-warning-active);
999
+ --color-warning-soft: var(--wui-warning-10);
1000
+ --color-warning-border: var(--wui-warning-30);
1001
+ --color-warning-text: var(--wui-warning-text);
1002
+ --color-warning-text-on-soft: var(--wui-warning-text);
1003
+ --color-warning-strong: var(--wui-warning-strong);
1004
+ --color-warning-strong-hover: var(--wui-warning-strong-hover);
1005
+ --color-on-warning: #FFFFFF;
1006
+ --color-on-warning-strong: #FFFFFF;
1007
+ --color-danger: var(--wui-danger);
1008
+ --color-danger-pressed: var(--wui-danger-active);
1009
+ --color-danger-soft: var(--wui-danger-10);
1010
+ --color-danger-border: var(--wui-danger-30);
1011
+ --color-danger-text: var(--wui-danger-text);
1012
+ --color-danger-text-on-soft: var(--wui-danger-text);
1013
+ --color-danger-strong: var(--wui-danger-strong);
1014
+ --color-danger-strong-hover: var(--wui-danger-strong-hover);
1015
+ --color-on-danger: #FFFFFF;
1016
+ --color-on-danger-strong: #FFFFFF;
1017
+ --color-info: var(--wui-info);
1018
+ --color-info-pressed: var(--wui-info-active);
1019
+ --color-info-soft: var(--wui-info-10);
1020
+ --color-info-border: var(--wui-info-30);
1021
+ --color-info-text: var(--wui-info-text);
1022
+ --color-info-text-on-soft: var(--wui-info-text);
1023
+ --color-info-strong: var(--wui-info-active);
1024
+ --color-on-info: #FFFFFF;
1025
+ --color-on-info-strong: #FFFFFF;
1026
+ --color-chart-1: var(--wui-primary);
1027
+ --color-chart-2: var(--wui-chart-2);
1028
+ --color-chart-3: var(--wui-chart-3);
1029
+ --color-chart-4: var(--wui-chart-4);
1030
+ --color-chart-5: var(--wui-chart-5);
1031
+ --color-chart-6: var(--wui-chart-6);
1032
+ --color-chart-7: var(--wui-chart-7);
1033
+ --color-chart-8: var(--wui-chart-8);
1034
+ --color-chart-seq-0: var(--wui-bg-muted);
1035
+ --color-chart-seq-1: var(--wui-primary-10);
1036
+ --color-chart-seq-2: var(--wui-primary-20);
1037
+ --color-chart-seq-3: var(--wui-primary-30);
1038
+ --color-chart-seq-4: var(--wui-primary-50);
1039
+ --color-chart-seq-5: var(--wui-primary-hover);
1040
+ --color-chart-seq-6: var(--wui-primary-pressed);
1041
+ --color-chart-diverging-low: var(--wui-chart-diverging-low);
1042
+ --color-chart-diverging-mid: var(--wui-chart-diverging-mid);
1043
+ --color-chart-diverging-high: var(--wui-chart-diverging-high);
1044
+ --color-chart-neutral: var(--wui-chart-neutral);
1045
+ --wui-close-filter: none;
1046
+ --wui-thumb-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
1047
+ --wui-thumb-shadow-hover: 0 2px 12px rgba(0, 0, 0, 0.2);
1048
+ --bs-body-color: var(--color-text);
1049
+ --bs-emphasis-color: var(--color-text);
1050
+ --bs-secondary-color: var(--color-text-muted);
1051
+ --bs-tertiary-color: var(--color-text-subtle);
1052
+ --bs-heading-color: var(--color-text);
1053
+ --bs-body-bg: var(--color-bg);
1054
+ --bs-border-color: var(--color-border);
1055
+ --bs-secondary-bg: var(--color-surface);
1056
+ --bs-tertiary-bg: var(--color-bg-muted);
1057
+ --bs-primary: var(--color-primary);
1058
+ --bs-body-bg-rgb: 244, 246, 248;
1059
+ --bs-primary-rgb: 79, 70, 229;
1060
+ --bs-body-color-rgb: 7, 20, 55;
1061
+ --bs-emphasis-color-rgb: 7, 20, 55;
1062
+ --bs-secondary-color-rgb: 75, 86, 117;
1063
+ --bs-tertiary-color-rgb: 98, 106, 130;
1064
+ --bs-secondary-bg-rgb: 255, 255, 255;
1065
+ --bs-tertiary-bg-rgb: 245, 246, 250;
1066
+ --bs-border-color-rgb: 235, 237, 243;
1067
+ --bs-link-color: var(--color-link);
1068
+ --bs-link-color-rgb: 79, 70, 229;
1069
+ --bs-link-hover-color: var(--color-primary-hover);
1070
+ --bs-link-hover-color-rgb: 67, 56, 202;
1071
+ }
1072
+
1073
+ :where(:root[data-theme="dark"] [data-theme="light"]),
1074
+ :where(:root[data-theme="dark"] [data-bs-theme="light"]),
1075
+ :where(:root[data-bs-theme="dark"] [data-theme="light"]),
1076
+ :where(:root[data-bs-theme="dark"] [data-bs-theme="light"]) {
1077
+ color-scheme: light;
1078
+ color: var(--color-text);
1079
+ }
1080
+
1081
+ @media (prefers-color-scheme: dark) {
1082
+ :root[data-theme="auto"] [data-theme="light"],
1083
+ :root[data-theme="auto"] [data-bs-theme="light"] {
1084
+ --wui-primary-50: #818CF8;
1085
+ --wui-primary-30: #A5B4FC;
1086
+ --wui-primary-20: #C7D2FE;
1087
+ --wui-primary-15: #DDE1FD;
1088
+ --wui-primary-10: #E0E7FF;
1089
+ --wui-primary-5: #EEF2FF;
1090
+ --wui-surface-soft: #F2EFFE;
1091
+ --wui-surface-violet-soft: #FCFCFC;
1092
+ --wui-surface-mute: #F9FBFC;
1093
+ --wui-neutral-bg-dark: #F5F6FA;
1094
+ --wui-neutral-bg-light: #F9FBFC;
1095
+ --wui-info-10: #E9F3FF;
1096
+ --wui-info-5: #F3F9FF;
1097
+ --wui-success-10: #E8FAEE;
1098
+ --wui-success-5: #F3FCF6;
1099
+ --wui-warning-10: #FFF8E6;
1100
+ --wui-warning-5: #FEFBF2;
1101
+ --wui-danger-10: #FFEAEF;
1102
+ --wui-danger-5: #FEF4F6;
1103
+ --wui-chart-1: var(--wui-primary);
1104
+ --wui-chart-2: #eb6834;
1105
+ --wui-chart-3: #1baf7a;
1106
+ --wui-chart-4: #eda100;
1107
+ --wui-chart-5: #e87ba4;
1108
+ --wui-chart-6: #008300;
1109
+ --wui-chart-7: #2a78d6;
1110
+ --wui-chart-8: #e34948;
1111
+ --wui-chart-seq-0: var(--wui-bg-muted);
1112
+ --wui-chart-seq-1: var(--wui-primary-10);
1113
+ --wui-chart-seq-2: var(--wui-primary-20);
1114
+ --wui-chart-seq-3: var(--wui-primary-30);
1115
+ --wui-chart-seq-4: var(--wui-primary-50);
1116
+ --wui-chart-seq-5: var(--wui-primary-hover);
1117
+ --wui-chart-seq-6: var(--wui-primary-pressed);
1118
+ --wui-chart-diverging-low: #e34948;
1119
+ --wui-chart-diverging-mid: #c4cada;
1120
+ --wui-chart-diverging-high: #2a78d6;
1121
+ --wui-chart-neutral: #99a1b7;
1122
+ --wui-shadow-elevated: 0px 2px 8px -2px rgba(7, 20, 55, 0.10);
1123
+ --wui-shadow-popover: 0px 8px 28px -6px rgba(7, 20, 55, 0.14);
1124
+ --wui-shadow-modal: 0px 24px 60px -16px rgba(7, 20, 55, 0.28);
1125
+ --color-bg: var(--wui-bg-page);
1126
+ --color-bg-subtle: var(--wui-bg-elevated);
1127
+ --color-bg-muted: var(--wui-bg-muted);
1128
+ --color-surface: var(--wui-bg-light);
1129
+ --color-surface-inverse: var(--wui-text-heading);
1130
+ --color-text: var(--wui-text-heading);
1131
+ --color-text-body: var(--wui-text-1);
1132
+ --color-text-muted: var(--wui-text-2);
1133
+ --color-text-subtle: var(--wui-text-3);
1134
+ --color-text-inverse: var(--wui-bg-light);
1135
+ --color-link: var(--wui-primary-ink);
1136
+ --color-border: var(--wui-border-light);
1137
+ --color-border-subtle: var(--wui-border-soft);
1138
+ --color-border-strong: var(--wui-border-strong);
1139
+ --color-field-bg: var(--wui-field-bg);
1140
+ --color-field-border: var(--wui-field-border);
1141
+ --color-field-border-hover: var(--wui-field-border-hover);
1142
+ --color-field-border-focus: var(--wui-primary-30);
1143
+ --color-scrim: color-mix(in srgb, var(--wui-text-heading) 45%, transparent);
1144
+ --color-scrim-strong: color-mix(in srgb, var(--wui-text-heading) 62%, transparent);
1145
+ --color-progress-track: var(--wui-progress-track);
1146
+ --color-progress-label: var(--wui-bg-light);
1147
+ --color-thumb: var(--wui-bg-light);
1148
+ --color-scrollbar: var(--wui-scrollbar);
1149
+ --color-scrollbar-hover: var(--wui-scrollbar-hover);
1150
+ --color-scrollbar-active: var(--wui-scrollbar-active);
1151
+ --color-primary: var(--wui-primary);
1152
+ --color-primary-hover: var(--wui-primary-pressed);
1153
+ --color-primary-soft: var(--wui-primary-10);
1154
+ --color-primary-text: var(--wui-primary-ink);
1155
+ --color-on-primary: var(--wui-primary-text);
1156
+ --color-success: var(--wui-success);
1157
+ --color-success-pressed: var(--wui-success-active);
1158
+ --color-success-soft: var(--wui-success-10);
1159
+ --color-success-border: var(--wui-success-30);
1160
+ --color-success-text: var(--wui-success-text);
1161
+ --color-success-text-on-soft: var(--wui-success-text);
1162
+ --color-success-strong: var(--wui-success-strong);
1163
+ --color-on-success: #FFFFFF;
1164
+ --color-on-success-strong: #FFFFFF;
1165
+ --color-warning: var(--wui-warning);
1166
+ --color-warning-pressed: var(--wui-warning-active);
1167
+ --color-warning-soft: var(--wui-warning-10);
1168
+ --color-warning-border: var(--wui-warning-30);
1169
+ --color-warning-text: var(--wui-warning-text);
1170
+ --color-warning-text-on-soft: var(--wui-warning-text);
1171
+ --color-warning-strong: var(--wui-warning-strong);
1172
+ --color-warning-strong-hover: var(--wui-warning-strong-hover);
1173
+ --color-on-warning: #FFFFFF;
1174
+ --color-on-warning-strong: #FFFFFF;
1175
+ --color-danger: var(--wui-danger);
1176
+ --color-danger-pressed: var(--wui-danger-active);
1177
+ --color-danger-soft: var(--wui-danger-10);
1178
+ --color-danger-border: var(--wui-danger-30);
1179
+ --color-danger-text: var(--wui-danger-text);
1180
+ --color-danger-text-on-soft: var(--wui-danger-text);
1181
+ --color-danger-strong: var(--wui-danger-strong);
1182
+ --color-danger-strong-hover: var(--wui-danger-strong-hover);
1183
+ --color-on-danger: #FFFFFF;
1184
+ --color-on-danger-strong: #FFFFFF;
1185
+ --color-info: var(--wui-info);
1186
+ --color-info-pressed: var(--wui-info-active);
1187
+ --color-info-soft: var(--wui-info-10);
1188
+ --color-info-border: var(--wui-info-30);
1189
+ --color-info-text: var(--wui-info-text);
1190
+ --color-info-text-on-soft: var(--wui-info-text);
1191
+ --color-info-strong: var(--wui-info-active);
1192
+ --color-on-info: #FFFFFF;
1193
+ --color-on-info-strong: #FFFFFF;
1194
+ --color-chart-1: var(--wui-primary);
1195
+ --color-chart-2: var(--wui-chart-2);
1196
+ --color-chart-3: var(--wui-chart-3);
1197
+ --color-chart-4: var(--wui-chart-4);
1198
+ --color-chart-5: var(--wui-chart-5);
1199
+ --color-chart-6: var(--wui-chart-6);
1200
+ --color-chart-7: var(--wui-chart-7);
1201
+ --color-chart-8: var(--wui-chart-8);
1202
+ --color-chart-seq-0: var(--wui-bg-muted);
1203
+ --color-chart-seq-1: var(--wui-primary-10);
1204
+ --color-chart-seq-2: var(--wui-primary-20);
1205
+ --color-chart-seq-3: var(--wui-primary-30);
1206
+ --color-chart-seq-4: var(--wui-primary-50);
1207
+ --color-chart-seq-5: var(--wui-primary-hover);
1208
+ --color-chart-seq-6: var(--wui-primary-pressed);
1209
+ --color-chart-diverging-low: var(--wui-chart-diverging-low);
1210
+ --color-chart-diverging-mid: var(--wui-chart-diverging-mid);
1211
+ --color-chart-diverging-high: var(--wui-chart-diverging-high);
1212
+ --color-chart-neutral: var(--wui-chart-neutral);
1213
+ --wui-close-filter: none;
1214
+ --wui-thumb-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
1215
+ --wui-thumb-shadow-hover: 0 2px 12px rgba(0, 0, 0, 0.2);
1216
+ --bs-body-color: var(--color-text);
1217
+ --bs-emphasis-color: var(--color-text);
1218
+ --bs-secondary-color: var(--color-text-muted);
1219
+ --bs-tertiary-color: var(--color-text-subtle);
1220
+ --bs-heading-color: var(--color-text);
1221
+ --bs-body-bg: var(--color-bg);
1222
+ --bs-border-color: var(--color-border);
1223
+ --bs-secondary-bg: var(--color-surface);
1224
+ --bs-tertiary-bg: var(--color-bg-muted);
1225
+ --bs-primary: var(--color-primary);
1226
+ --bs-body-bg-rgb: 244, 246, 248;
1227
+ --bs-primary-rgb: 79, 70, 229;
1228
+ --bs-body-color-rgb: 7, 20, 55;
1229
+ --bs-emphasis-color-rgb: 7, 20, 55;
1230
+ --bs-secondary-color-rgb: 75, 86, 117;
1231
+ --bs-tertiary-color-rgb: 98, 106, 130;
1232
+ --bs-secondary-bg-rgb: 255, 255, 255;
1233
+ --bs-tertiary-bg-rgb: 245, 246, 250;
1234
+ --bs-border-color-rgb: 235, 237, 243;
1235
+ --bs-link-color: var(--color-link);
1236
+ --bs-link-color-rgb: 79, 70, 229;
1237
+ --bs-link-hover-color: var(--color-primary-hover);
1238
+ --bs-link-hover-color-rgb: 67, 56, 202;
1239
+ }
1240
+ :where(:root[data-theme="auto"] [data-theme="light"]),
1241
+ :where(:root[data-theme="auto"] [data-bs-theme="light"]) {
1242
+ color-scheme: light;
1243
+ color: var(--color-text);
1244
+ }
1245
+ }
@@ -179,23 +179,26 @@ $link-color: $wui-primary-ink !default;
179
179
  $link-hover-color: mix(black, $wui-primary-ink, 12%) !global;
180
180
  }
181
181
 
182
+ // Bootstrap $ defaults generated from the token source (`corepack pnpm run tokens`). Imported here, before the first
183
+ // read of $body-color, $border-color, $border-radius* and $wui-shadow-overlay* below, because a !default value is
184
+ // only visible to lines after it. Every value is !default, so a brand $ set before this file still wins; this file
185
+ // must not reassign them (scripts/check-theme-shadow.mjs).
186
+ @import "bootstrap.generated";
187
+
182
188
 
183
189
  // ---- Body / text ----------------------------------------------------
184
190
  // $body-bg left at Bootstrap's $white — do not restate pure defaults here.
185
- $body-color: #252F4A; // text-1 from locked palette
191
+ // $body-color comes from bootstrap.generated (color.text-body).
186
192
 
187
193
 
188
194
  // ---- Borders --------------------------------------------------------
189
- $border-color: #EBEDF3;
195
+ // $border-color comes from bootstrap.generated (token source).
190
196
 
191
197
  // One ladder; every component derives from it (Bootstrap's own model). Set a
192
198
  // component's radius by pointing it at a rung, never by hardcoding a px value —
193
199
  // that is what let buttons drift to ~3x Bootstrap's.
194
- // Only rungs that DIFFER from Bootstrap 5.3 are set: BS is 0.375/0.25/0.5/1/2rem;
195
- // $border-radius-xl (1rem) and the font-weight ladder match BS and are left alone.
196
- $border-radius: 0.5rem; // 8px — buttons, inputs, dropdowns (BS 0.375)
197
- $border-radius-sm: 0.375rem; // 6px (BS 0.25)
198
- $border-radius-lg: 0.75rem; // 12px — cards, toasts (BS 0.5)
200
+ // $border-radius, -sm, -lg and -pill come from bootstrap.generated (token source radius.md, sm, lg, pill);
201
+ // only $border-radius-2xl is set here.
199
202
  $border-radius-2xl: 1.5rem; // 24px (BS 2rem via $border-radius-xxl)
200
203
 
201
204
 
@@ -247,10 +250,8 @@ $spacers: (
247
250
  // Elevation rule: in-page surfaces are FLAT (borders only).
248
251
  // Bootstrap utility ladder (.shadow / .shadow-sm / .shadow-lg) is zeroed so
249
252
  // products cannot reintroduce random depth. Floating UI (dropdown / modal /
250
- // toast) uses the overlay rungs — same values as --wui-shadow-popover in tokens.
251
- $wui-shadow-overlay: 0 8px 28px -6px rgba(7, 20, 55, 0.14);
252
- $wui-shadow-overlay-lg: 0 24px 60px -16px rgba(7, 20, 55, 0.28);
253
-
253
+ // toast) uses the overlay rungs, $wui-shadow-overlay and $wui-shadow-overlay-lg, which
254
+ // come from bootstrap.generated (shadow.popover, shadow.modal).
254
255
  $box-shadow-sm: none;
255
256
  $box-shadow: none;
256
257
  $box-shadow-lg: none;
@@ -370,7 +371,3 @@ $zindex-toast: 1700;
370
371
  // `--bs-table-color` / `--bs-table-bg`; see the base `.table` rules.)
371
372
  $table-cell-padding-y: 0.75rem; // 12px
372
373
  $table-cell-padding-x: 0.75rem; // 12px
373
-
374
- // Bootstrap $ defaults generated from the token source. Every value is !default, so a brand $ set
375
- // before or after this file still wins.
376
- @import "bootstrap.generated";