@webority/theme 0.130.1 → 0.130.2

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.130.1",
3
+ "version": "0.130.2",
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.130.1",
50
+ "@webority/tokens": "0.130.2",
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.130.1 from its token source. Do not edit; run webority brand --library.
1
+ // Generated by @webority/tokens 0.130.2 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;
@@ -88,18 +88,18 @@
88
88
  --bs-btn-active-border-color: transparent;
89
89
  }
90
90
 
91
- // A soft-tinted affirmative, the success counterpart of .btn-soft-primary. Dark success text on a
92
- // faint success fill, so it reads as "resolved / confirmed" without the weight of a solid green.
91
+ // The solid affirmative (Approve, Confirm): a full fill on the deepened success token, which
92
+ // carries its on-colour at AA. The quiet tint is .btn-soft-success.
93
93
  .btn-success {
94
- --bs-btn-color: var(--color-success-text);
95
- --bs-btn-bg: color-mix(in srgb, var(--color-success) 14%, transparent);
96
- --bs-btn-border-color: transparent;
97
- --bs-btn-hover-color: var(--color-success-text);
98
- --bs-btn-hover-bg: color-mix(in srgb, var(--color-success) 20%, transparent);
99
- --bs-btn-hover-border-color: transparent;
100
- --bs-btn-active-color: var(--color-success-text);
101
- --bs-btn-active-bg: color-mix(in srgb, var(--color-success) 28%, transparent);
102
- --bs-btn-active-border-color: transparent;
94
+ --bs-btn-color: var(--color-on-success-strong);
95
+ --bs-btn-bg: var(--color-success-strong);
96
+ --bs-btn-border-color: var(--color-success-strong);
97
+ --bs-btn-hover-color: var(--color-on-success-strong);
98
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-success-strong) 88%, #000);
99
+ --bs-btn-hover-border-color: color-mix(in srgb, var(--color-success-strong) 88%, #000);
100
+ --bs-btn-active-color: var(--color-on-success-strong);
101
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-success-strong) 80%, #000);
102
+ --bs-btn-active-border-color: color-mix(in srgb, var(--color-success-strong) 80%, #000);
103
103
  }
104
104
 
105
105
  // A button-shaped label that does nothing: keeps the .btn chrome but takes no pointer, so it
@@ -215,6 +215,46 @@
215
215
  --bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-danger) 50%, transparent);
216
216
  }
217
217
 
218
+ // Soft success, warning and info: the soft-danger treatment in each tone's own ink.
219
+ .btn-soft-success {
220
+ --bs-btn-color: var(--color-success-text);
221
+ --bs-btn-bg: color-mix(in srgb, var(--color-success) 12%, transparent);
222
+ --bs-btn-border-color: transparent;
223
+ --bs-btn-hover-color: var(--color-success-text);
224
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-success) 18%, transparent);
225
+ --bs-btn-hover-border-color: transparent;
226
+ --bs-btn-active-color: var(--color-success-text);
227
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-success) 26%, transparent);
228
+ --bs-btn-active-border-color: transparent;
229
+ --bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-success) 50%, transparent);
230
+ }
231
+
232
+ .btn-soft-warning {
233
+ --bs-btn-color: var(--color-warning-text);
234
+ --bs-btn-bg: color-mix(in srgb, var(--color-warning) 12%, transparent);
235
+ --bs-btn-border-color: transparent;
236
+ --bs-btn-hover-color: var(--color-warning-text);
237
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-warning) 18%, transparent);
238
+ --bs-btn-hover-border-color: transparent;
239
+ --bs-btn-active-color: var(--color-warning-text);
240
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-warning) 26%, transparent);
241
+ --bs-btn-active-border-color: transparent;
242
+ --bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-warning) 50%, transparent);
243
+ }
244
+
245
+ .btn-soft-info {
246
+ --bs-btn-color: var(--color-info-text);
247
+ --bs-btn-bg: color-mix(in srgb, var(--color-info) 12%, transparent);
248
+ --bs-btn-border-color: transparent;
249
+ --bs-btn-hover-color: var(--color-info-text);
250
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-info) 18%, transparent);
251
+ --bs-btn-hover-border-color: transparent;
252
+ --bs-btn-active-color: var(--color-info-text);
253
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-info) 26%, transparent);
254
+ --bs-btn-active-border-color: transparent;
255
+ --bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-info) 50%, transparent);
256
+ }
257
+
218
258
  // Neutral grey button: the secondary button's shape in grey instead of the brand tint, for a
219
259
  // supporting action (Back, Skip, Close) that should not carry the brand colour. The fill is the
220
260
  // text colour at 8%, 12% on hover and 16% pressed, so it follows the theme in light and dark.
@@ -305,10 +345,36 @@
305
345
  .btn-soft-primary.is-loading.disabled,
306
346
  .btn-soft-danger.is-loading:disabled,
307
347
  .btn-soft-danger.is-loading.disabled,
348
+ .btn-soft-success.is-loading:disabled,
349
+ .btn-soft-success.is-loading.disabled,
350
+ .btn-soft-warning.is-loading:disabled,
351
+ .btn-soft-warning.is-loading.disabled,
352
+ .btn-soft-info.is-loading:disabled,
353
+ .btn-soft-info.is-loading.disabled,
308
354
  .btn-ghost-primary.is-loading:disabled,
309
355
  .btn-ghost-primary.is-loading.disabled,
356
+ .btn-ghost-success.is-loading:disabled,
357
+ .btn-ghost-success.is-loading.disabled,
358
+ .btn-ghost-warning.is-loading:disabled,
359
+ .btn-ghost-warning.is-loading.disabled,
360
+ .btn-ghost-danger.is-loading:disabled,
361
+ .btn-ghost-danger.is-loading.disabled,
362
+ .btn-ghost-info.is-loading:disabled,
363
+ .btn-ghost-info.is-loading.disabled,
364
+ .btn-ghost-neutral.is-loading:disabled,
365
+ .btn-ghost-neutral.is-loading.disabled,
310
366
  .btn-link-primary.is-loading:disabled,
311
367
  .btn-link-primary.is-loading.disabled,
368
+ .btn-link-success.is-loading:disabled,
369
+ .btn-link-success.is-loading.disabled,
370
+ .btn-link-warning.is-loading:disabled,
371
+ .btn-link-warning.is-loading.disabled,
372
+ .btn-link-danger.is-loading:disabled,
373
+ .btn-link-danger.is-loading.disabled,
374
+ .btn-link-info.is-loading:disabled,
375
+ .btn-link-info.is-loading.disabled,
376
+ .btn-link-neutral.is-loading:disabled,
377
+ .btn-link-neutral.is-loading.disabled,
312
378
  .btn-soft-neutral.is-loading:disabled,
313
379
  .btn-soft-neutral.is-loading.disabled,
314
380
  .btn-neutral.is-loading:disabled,
@@ -789,15 +855,117 @@
789
855
  --bs-btn-disabled-bg: transparent;
790
856
  --bs-btn-disabled-border-color: transparent;
791
857
  }
858
+
859
+ // Ghost success, warning, danger, info and neutral: the ghost-primary treatment in each tone's own ink.
860
+ .btn-ghost-success {
861
+ --bs-btn-color: var(--color-success-text);
862
+ --bs-btn-bg: transparent;
863
+ --bs-btn-border-color: transparent;
864
+ --bs-btn-hover-color: var(--color-success-text);
865
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-success) 12%, transparent);
866
+ --bs-btn-hover-border-color: transparent;
867
+ --bs-btn-active-color: var(--color-success-text);
868
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-success) 18%, transparent);
869
+ --bs-btn-active-border-color: transparent;
870
+ --bs-btn-disabled-color: var(--color-success-text);
871
+ --bs-btn-disabled-bg: transparent;
872
+ --bs-btn-disabled-border-color: transparent;
873
+ }
874
+
875
+ .btn-ghost-warning {
876
+ --bs-btn-color: var(--color-warning-text);
877
+ --bs-btn-bg: transparent;
878
+ --bs-btn-border-color: transparent;
879
+ --bs-btn-hover-color: var(--color-warning-text);
880
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-warning) 12%, transparent);
881
+ --bs-btn-hover-border-color: transparent;
882
+ --bs-btn-active-color: var(--color-warning-text);
883
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-warning) 18%, transparent);
884
+ --bs-btn-active-border-color: transparent;
885
+ --bs-btn-disabled-color: var(--color-warning-text);
886
+ --bs-btn-disabled-bg: transparent;
887
+ --bs-btn-disabled-border-color: transparent;
888
+ }
889
+
890
+ .btn-ghost-danger {
891
+ --bs-btn-color: var(--color-danger-text);
892
+ --bs-btn-bg: transparent;
893
+ --bs-btn-border-color: transparent;
894
+ --bs-btn-hover-color: var(--color-danger-text);
895
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-danger) 12%, transparent);
896
+ --bs-btn-hover-border-color: transparent;
897
+ --bs-btn-active-color: var(--color-danger-text);
898
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-danger) 18%, transparent);
899
+ --bs-btn-active-border-color: transparent;
900
+ --bs-btn-disabled-color: var(--color-danger-text);
901
+ --bs-btn-disabled-bg: transparent;
902
+ --bs-btn-disabled-border-color: transparent;
903
+ }
904
+
905
+ .btn-ghost-info {
906
+ --bs-btn-color: var(--color-info-text);
907
+ --bs-btn-bg: transparent;
908
+ --bs-btn-border-color: transparent;
909
+ --bs-btn-hover-color: var(--color-info-text);
910
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-info) 12%, transparent);
911
+ --bs-btn-hover-border-color: transparent;
912
+ --bs-btn-active-color: var(--color-info-text);
913
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-info) 18%, transparent);
914
+ --bs-btn-active-border-color: transparent;
915
+ --bs-btn-disabled-color: var(--color-info-text);
916
+ --bs-btn-disabled-bg: transparent;
917
+ --bs-btn-disabled-border-color: transparent;
918
+ }
919
+
920
+ .btn-ghost-neutral {
921
+ --bs-btn-color: var(--color-text);
922
+ --bs-btn-bg: transparent;
923
+ --bs-btn-border-color: transparent;
924
+ --bs-btn-hover-color: var(--color-text);
925
+ --bs-btn-hover-bg: color-mix(in srgb, var(--color-text) 12%, transparent);
926
+ --bs-btn-hover-border-color: transparent;
927
+ --bs-btn-active-color: var(--color-text);
928
+ --bs-btn-active-bg: color-mix(in srgb, var(--color-text) 18%, transparent);
929
+ --bs-btn-active-border-color: transparent;
930
+ --bs-btn-disabled-color: var(--color-text);
931
+ --bs-btn-disabled-bg: transparent;
932
+ --bs-btn-disabled-border-color: transparent;
933
+ }
934
+
792
935
  // Bootstrap's link-style buttons can carry an underline; the ghost never does.
793
936
  .btn.btn-ghost-primary,
794
937
  .btn.btn-ghost-primary:hover,
795
938
  .btn.btn-ghost-primary:active,
796
- .btn.btn-ghost-primary:focus-visible {
939
+ .btn.btn-ghost-primary:focus-visible,
940
+ .btn.btn-ghost-success,
941
+ .btn.btn-ghost-success:hover,
942
+ .btn.btn-ghost-success:active,
943
+ .btn.btn-ghost-success:focus-visible,
944
+ .btn.btn-ghost-warning,
945
+ .btn.btn-ghost-warning:hover,
946
+ .btn.btn-ghost-warning:active,
947
+ .btn.btn-ghost-warning:focus-visible,
948
+ .btn.btn-ghost-danger,
949
+ .btn.btn-ghost-danger:hover,
950
+ .btn.btn-ghost-danger:active,
951
+ .btn.btn-ghost-danger:focus-visible,
952
+ .btn.btn-ghost-info,
953
+ .btn.btn-ghost-info:hover,
954
+ .btn.btn-ghost-info:active,
955
+ .btn.btn-ghost-info:focus-visible,
956
+ .btn.btn-ghost-neutral,
957
+ .btn.btn-ghost-neutral:hover,
958
+ .btn.btn-ghost-neutral:active,
959
+ .btn.btn-ghost-neutral:focus-visible {
797
960
  text-decoration: none;
798
961
  }
799
962
  // No fill at rest, so keyboard focus gets the outline ring instead.
800
- .btn.btn-ghost-primary:focus-visible {
963
+ .btn.btn-ghost-primary:focus-visible,
964
+ .btn.btn-ghost-success:focus-visible,
965
+ .btn.btn-ghost-warning:focus-visible,
966
+ .btn.btn-ghost-danger:focus-visible,
967
+ .btn.btn-ghost-info:focus-visible,
968
+ .btn.btn-ghost-neutral:focus-visible {
801
969
  outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
802
970
  outline-offset: var(--wui-focus-ring-offset);
803
971
  box-shadow: none;
@@ -810,7 +978,17 @@
810
978
  opacity: var(--wui-disabled-opacity);
811
979
  }
812
980
  .btn.btn-ghost-primary.btn-ghost-primary.is-loading:disabled,
813
- .btn.btn-ghost-primary.btn-ghost-primary.is-loading.disabled {
981
+ .btn.btn-ghost-primary.btn-ghost-primary.is-loading.disabled,
982
+ .btn.btn-ghost-success.btn-ghost-success.is-loading:disabled,
983
+ .btn.btn-ghost-success.btn-ghost-success.is-loading.disabled,
984
+ .btn.btn-ghost-warning.btn-ghost-warning.is-loading:disabled,
985
+ .btn.btn-ghost-warning.btn-ghost-warning.is-loading.disabled,
986
+ .btn.btn-ghost-danger.btn-ghost-danger.is-loading:disabled,
987
+ .btn.btn-ghost-danger.btn-ghost-danger.is-loading.disabled,
988
+ .btn.btn-ghost-info.btn-ghost-info.is-loading:disabled,
989
+ .btn.btn-ghost-info.btn-ghost-info.is-loading.disabled,
990
+ .btn.btn-ghost-neutral.btn-ghost-neutral.is-loading:disabled,
991
+ .btn.btn-ghost-neutral.btn-ghost-neutral.is-loading.disabled {
814
992
  opacity: 1;
815
993
  }
816
994
 
@@ -833,45 +1011,182 @@
833
1011
  --bs-btn-disabled-bg: transparent;
834
1012
  --bs-btn-disabled-border-color: transparent;
835
1013
  }
1014
+
1015
+ // Text button tones: the link-primary treatment in each tone's own ink; neutral reads the text colour.
1016
+ .btn-link-success {
1017
+ --bs-btn-color: var(--color-success-text);
1018
+ --bs-btn-bg: transparent;
1019
+ --bs-btn-border-color: transparent;
1020
+ --bs-btn-hover-color: color-mix(in srgb, var(--color-success-text) 80%, var(--color-text));
1021
+ --bs-btn-hover-bg: transparent;
1022
+ --bs-btn-hover-border-color: transparent;
1023
+ --bs-btn-active-color: color-mix(in srgb, var(--color-success-text) 70%, var(--color-text));
1024
+ --bs-btn-active-bg: transparent;
1025
+ --bs-btn-active-border-color: transparent;
1026
+ --bs-btn-disabled-color: var(--color-success-text);
1027
+ --bs-btn-disabled-bg: transparent;
1028
+ --bs-btn-disabled-border-color: transparent;
1029
+ }
1030
+
1031
+ .btn-link-warning {
1032
+ --bs-btn-color: var(--color-warning-text);
1033
+ --bs-btn-bg: transparent;
1034
+ --bs-btn-border-color: transparent;
1035
+ --bs-btn-hover-color: color-mix(in srgb, var(--color-warning-text) 80%, var(--color-text));
1036
+ --bs-btn-hover-bg: transparent;
1037
+ --bs-btn-hover-border-color: transparent;
1038
+ --bs-btn-active-color: color-mix(in srgb, var(--color-warning-text) 70%, var(--color-text));
1039
+ --bs-btn-active-bg: transparent;
1040
+ --bs-btn-active-border-color: transparent;
1041
+ --bs-btn-disabled-color: var(--color-warning-text);
1042
+ --bs-btn-disabled-bg: transparent;
1043
+ --bs-btn-disabled-border-color: transparent;
1044
+ }
1045
+
1046
+ .btn-link-danger {
1047
+ --bs-btn-color: var(--color-danger-text);
1048
+ --bs-btn-bg: transparent;
1049
+ --bs-btn-border-color: transparent;
1050
+ --bs-btn-hover-color: color-mix(in srgb, var(--color-danger-text) 80%, var(--color-text));
1051
+ --bs-btn-hover-bg: transparent;
1052
+ --bs-btn-hover-border-color: transparent;
1053
+ --bs-btn-active-color: color-mix(in srgb, var(--color-danger-text) 70%, var(--color-text));
1054
+ --bs-btn-active-bg: transparent;
1055
+ --bs-btn-active-border-color: transparent;
1056
+ --bs-btn-disabled-color: var(--color-danger-text);
1057
+ --bs-btn-disabled-bg: transparent;
1058
+ --bs-btn-disabled-border-color: transparent;
1059
+ }
1060
+
1061
+ .btn-link-info {
1062
+ --bs-btn-color: var(--color-info-text);
1063
+ --bs-btn-bg: transparent;
1064
+ --bs-btn-border-color: transparent;
1065
+ --bs-btn-hover-color: color-mix(in srgb, var(--color-info-text) 80%, var(--color-text));
1066
+ --bs-btn-hover-bg: transparent;
1067
+ --bs-btn-hover-border-color: transparent;
1068
+ --bs-btn-active-color: color-mix(in srgb, var(--color-info-text) 70%, var(--color-text));
1069
+ --bs-btn-active-bg: transparent;
1070
+ --bs-btn-active-border-color: transparent;
1071
+ --bs-btn-disabled-color: var(--color-info-text);
1072
+ --bs-btn-disabled-bg: transparent;
1073
+ --bs-btn-disabled-border-color: transparent;
1074
+ }
1075
+
1076
+ .btn-link-neutral {
1077
+ --bs-btn-color: var(--color-text);
1078
+ --bs-btn-bg: transparent;
1079
+ --bs-btn-border-color: transparent;
1080
+ --bs-btn-hover-color: color-mix(in srgb, var(--color-text) 80%, transparent);
1081
+ --bs-btn-hover-bg: transparent;
1082
+ --bs-btn-hover-border-color: transparent;
1083
+ --bs-btn-active-color: color-mix(in srgb, var(--color-text) 70%, transparent);
1084
+ --bs-btn-active-bg: transparent;
1085
+ --bs-btn-active-border-color: transparent;
1086
+ --bs-btn-disabled-color: var(--color-text);
1087
+ --bs-btn-disabled-bg: transparent;
1088
+ --bs-btn-disabled-border-color: transparent;
1089
+ }
1090
+
836
1091
  // After the size rungs and at their weight, so sm and lg text buttons lose the side padding too.
837
- .btn.btn-link-primary {
1092
+ .btn.btn-link-primary,
1093
+ .btn.btn-link-success,
1094
+ .btn.btn-link-warning,
1095
+ .btn.btn-link-danger,
1096
+ .btn.btn-link-info,
1097
+ .btn.btn-link-neutral {
838
1098
  --bs-btn-padding-x: 0;
839
1099
  }
840
1100
  .btn.btn-link-primary,
841
1101
  .btn.btn-link-primary:hover,
842
1102
  .btn.btn-link-primary:active,
843
- .btn.btn-link-primary:focus-visible {
1103
+ .btn.btn-link-primary:focus-visible,
1104
+ .btn.btn-link-success,
1105
+ .btn.btn-link-success:hover,
1106
+ .btn.btn-link-success:active,
1107
+ .btn.btn-link-success:focus-visible,
1108
+ .btn.btn-link-warning,
1109
+ .btn.btn-link-warning:hover,
1110
+ .btn.btn-link-warning:active,
1111
+ .btn.btn-link-warning:focus-visible,
1112
+ .btn.btn-link-danger,
1113
+ .btn.btn-link-danger:hover,
1114
+ .btn.btn-link-danger:active,
1115
+ .btn.btn-link-danger:focus-visible,
1116
+ .btn.btn-link-info,
1117
+ .btn.btn-link-info:hover,
1118
+ .btn.btn-link-info:active,
1119
+ .btn.btn-link-info:focus-visible,
1120
+ .btn.btn-link-neutral,
1121
+ .btn.btn-link-neutral:hover,
1122
+ .btn.btn-link-neutral:active,
1123
+ .btn.btn-link-neutral:focus-visible {
844
1124
  text-decoration: none;
845
1125
  }
846
- .btn.btn-link-primary::before {
1126
+ .btn.btn-link-primary::before,
1127
+ .btn.btn-link-success::before,
1128
+ .btn.btn-link-warning::before,
1129
+ .btn.btn-link-danger::before,
1130
+ .btn.btn-link-info::before,
1131
+ .btn.btn-link-neutral::before {
847
1132
  display: none;
848
1133
  }
849
- .btn.btn-link-primary:hover:not(:disabled) {
1134
+ .btn.btn-link-primary:hover:not(:disabled),
1135
+ .btn.btn-link-success:hover:not(:disabled),
1136
+ .btn.btn-link-warning:hover:not(:disabled),
1137
+ .btn.btn-link-danger:hover:not(:disabled),
1138
+ .btn.btn-link-info:hover:not(:disabled),
1139
+ .btn.btn-link-neutral:hover:not(:disabled) {
850
1140
  transform: none;
851
1141
  }
852
- .btn.btn-link-primary:focus-visible {
1142
+ .btn.btn-link-primary:focus-visible,
1143
+ .btn.btn-link-success:focus-visible,
1144
+ .btn.btn-link-warning:focus-visible,
1145
+ .btn.btn-link-danger:focus-visible,
1146
+ .btn.btn-link-info:focus-visible,
1147
+ .btn.btn-link-neutral:focus-visible {
853
1148
  outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
854
1149
  outline-offset: var(--wui-focus-ring-offset);
855
1150
  box-shadow: none;
856
1151
  }
857
1152
  // A text button's icons follow the text: each icon is the text size, and the roll or pinned well
858
1153
  // is 18, 20 and 22px at sm, md and lg, a snug ring around the icon that never outweighs the label.
859
- .btn.btn-link-primary {
1154
+ .btn.btn-link-primary,
1155
+ .btn.btn-link-success,
1156
+ .btn.btn-link-warning,
1157
+ .btn.btn-link-danger,
1158
+ .btn.btn-link-info,
1159
+ .btn.btn-link-neutral {
860
1160
  --wui-btn-roll-well: 20px;
861
1161
  --wui-btn-well-pad: 3px;
862
1162
  --wui-btn-text-icon: 14px;
863
1163
  }
864
- .btn.btn-link-primary.btn-sm {
1164
+ .btn.btn-link-primary.btn-sm,
1165
+ .btn.btn-link-success.btn-sm,
1166
+ .btn.btn-link-warning.btn-sm,
1167
+ .btn.btn-link-danger.btn-sm,
1168
+ .btn.btn-link-info.btn-sm,
1169
+ .btn.btn-link-neutral.btn-sm {
865
1170
  --wui-btn-roll-well: 18px;
866
1171
  --wui-btn-well-pad: 3px;
867
1172
  --wui-btn-text-icon: 12px;
868
1173
  }
869
- .btn.btn-link-primary.btn-lg {
1174
+ .btn.btn-link-primary.btn-lg,
1175
+ .btn.btn-link-success.btn-lg,
1176
+ .btn.btn-link-warning.btn-lg,
1177
+ .btn.btn-link-danger.btn-lg,
1178
+ .btn.btn-link-info.btn-lg,
1179
+ .btn.btn-link-neutral.btn-lg {
870
1180
  --wui-btn-roll-well: 22px;
871
1181
  --wui-btn-well-pad: 3px;
872
1182
  --wui-btn-text-icon: 16px;
873
1183
  }
874
- .btn.btn-link-primary svg {
1184
+ .btn.btn-link-primary svg,
1185
+ .btn.btn-link-success svg,
1186
+ .btn.btn-link-warning svg,
1187
+ .btn.btn-link-danger svg,
1188
+ .btn.btn-link-info svg,
1189
+ .btn.btn-link-neutral svg {
875
1190
  width: var(--wui-btn-text-icon);
876
1191
  height: var(--wui-btn-text-icon);
877
1192
  }
@@ -882,6 +1197,32 @@
882
1197
  color: var(--color-primary-text);
883
1198
  opacity: var(--wui-disabled-opacity);
884
1199
  }
1200
+ // The ghost and link tones keep their own ink when disabled: the variant's disabled colour, not the primary one.
1201
+ .btn.btn-ghost-success.btn-ghost-success:disabled,
1202
+ .btn.btn-ghost-success.btn-ghost-success.disabled,
1203
+ .btn.btn-ghost-warning.btn-ghost-warning:disabled,
1204
+ .btn.btn-ghost-warning.btn-ghost-warning.disabled,
1205
+ .btn.btn-ghost-danger.btn-ghost-danger:disabled,
1206
+ .btn.btn-ghost-danger.btn-ghost-danger.disabled,
1207
+ .btn.btn-ghost-info.btn-ghost-info:disabled,
1208
+ .btn.btn-ghost-info.btn-ghost-info.disabled,
1209
+ .btn.btn-ghost-neutral.btn-ghost-neutral:disabled,
1210
+ .btn.btn-ghost-neutral.btn-ghost-neutral.disabled,
1211
+ .btn.btn-link-success.btn-link-success:disabled,
1212
+ .btn.btn-link-success.btn-link-success.disabled,
1213
+ .btn.btn-link-warning.btn-link-warning:disabled,
1214
+ .btn.btn-link-warning.btn-link-warning.disabled,
1215
+ .btn.btn-link-danger.btn-link-danger:disabled,
1216
+ .btn.btn-link-danger.btn-link-danger.disabled,
1217
+ .btn.btn-link-info.btn-link-info:disabled,
1218
+ .btn.btn-link-info.btn-link-info.disabled,
1219
+ .btn.btn-link-neutral.btn-link-neutral:disabled,
1220
+ .btn.btn-link-neutral.btn-link-neutral.disabled {
1221
+ background-color: transparent;
1222
+ border-color: transparent;
1223
+ color: var(--bs-btn-disabled-color);
1224
+ opacity: var(--wui-disabled-opacity);
1225
+ }
885
1226
 
886
1227
  // ---- Card hover-lift (name is historical) -----------------------------
887
1228
  // `.card-lifted` does NOT cast a shadow — in-page cards stay flat. It only
@@ -899,10 +1240,15 @@
899
1240
  // compiled $card-border-radius. Background is an ELEVATED surface, not the page
900
1241
  // colour — so a card stays visible on a tinted page, and flips correctly in dark
901
1242
  // 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.
1243
+ // A brand that draws rounder cards than its controls sets --wui-card-radius in its token file,
1244
+ // and one whose card text should follow the page text sets --wui-card-color (such as var(--color-text)).
1245
+ // A brand that draws its card corners as squircles sets --wui-card-corner-shape: squircle; a browser
1246
+ // without corner shaping keeps the plain round corner.
903
1247
  .card {
904
1248
  --bs-card-border-radius: var(--wui-card-radius, var(--wui-radius-lg));
905
1249
  --bs-card-bg: var(--color-surface);
1250
+ color: var(--wui-card-color, var(--bs-body-color));
1251
+ corner-shape: var(--wui-card-corner-shape, round);
906
1252
  }
907
1253
 
908
1254
  // Header actions slot (React `headerActions` prop / Razor <app-card-actions>). Both
@@ -1,4 +1,4 @@
1
- // Generated by @webority/tokens 0.130.1 from its token source. Do not edit; run webority brand --library.
1
+ // Generated by @webority/tokens 0.130.2 from its token source. Do not edit; run webority brand --library.
2
2
 
3
3
  :root {
4
4
  --wui-primary: #4F46E5;
@@ -35,10 +35,12 @@
35
35
  // re-flexed with utilities on each one.
36
36
  // The header and footer share the card's own fill (a muted card stays muted to its top edge),
37
37
  // and the header carries no rule of its own: Bootstrap's divider followed the card's border
38
- // width, so only the elevated variant drew one.
38
+ // width, so only the elevated variant drew one. A brand that fills its headers sets
39
+ // --wui-card-header-bg in its token file, and one that draws a line under every header sets
40
+ // --wui-card-header-divider to its width (such as 1px).
39
41
  .card-header {
40
- --bs-card-cap-bg: transparent;
41
- border-bottom: 0;
42
+ --bs-card-cap-bg: var(--wui-card-header-bg, transparent);
43
+ border-bottom: var(--wui-card-header-divider, 0px) solid var(--color-border-subtle);
42
44
  display: flex;
43
45
  align-items: center;
44
46
  justify-content: space-between;
@@ -139,9 +141,17 @@
139
141
  }
140
142
  // With no rule under the header, its bottom padding alone separates the title from the body;
141
143
  // the body's own top padding on top of it left a double gap. After the scale, so every
142
- // padding step keeps the single gap.
144
+ // padding step keeps the single gap. A header divider puts the gap back below the line: any divider
145
+ // width scaled up and capped at the card inset gives the full inset, and no divider gives 0.
146
+ .card {
147
+ --wui-card-gap-below-divider: min(calc(var(--wui-card-header-divider, 0px) * 1000), var(--wui-card-pad));
148
+ }
143
149
  .card > .card-header + .card-body {
144
- padding-top: 0;
150
+ padding-top: var(--wui-card-gap-below-divider);
151
+ }
152
+ // A card with no body (a list or a timeline straight after the header) takes the same gap.
153
+ .card > .card-header + :not(.card-body, .card-footer) {
154
+ margin-top: var(--wui-card-gap-below-divider);
145
155
  }
146
156
 
147
157
  // ── Constrained width ── (`maxWidth`): caps + centres a standalone card. Cards
@@ -9,6 +9,7 @@
9
9
  // ============================================================================
10
10
  .compare-table {
11
11
  position: relative;
12
+ inline-size: 100%;
12
13
  container-type: inline-size;
13
14
  overflow: clip;
14
15
  border: 1px solid var(--color-border);