@wwtdev/bsds-css 2.5.1 → 2.6.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 (34) hide show
  1. package/README.md +36 -8
  2. package/dist/components/_badge.scss +1 -1
  3. package/dist/components/_banner.scss +1 -1
  4. package/dist/components/_buttons.scss +85 -27
  5. package/dist/components/_circle-buttons.scss +108 -49
  6. package/dist/components/_dropdown-options.scss +1 -1
  7. package/dist/components/_dropdown.scss +1 -1
  8. package/dist/components/_filter-buttons.scss +15 -8
  9. package/dist/components/_form-booleans.scss +41 -76
  10. package/dist/components/_form-character-count.scss +1 -1
  11. package/dist/components/_form-hints.scss +7 -3
  12. package/dist/components/_form-input-composite.scss +1 -1
  13. package/dist/components/_form-text-fields.scss +1 -1
  14. package/dist/components/_modal.scss +2 -1
  15. package/dist/components/_timeline.scss +1 -1
  16. package/dist/components/badge.css +1 -1
  17. package/dist/components/banner.css +1 -1
  18. package/dist/components/buttons.css +84 -26
  19. package/dist/components/circle-buttons.css +108 -49
  20. package/dist/components/dropdown-options.css +1 -1
  21. package/dist/components/dropdown.css +1 -1
  22. package/dist/components/filter-buttons.css +15 -8
  23. package/dist/components/form-booleans.css +41 -76
  24. package/dist/components/form-character-count.css +1 -1
  25. package/dist/components/form-hints.css +7 -3
  26. package/dist/components/form-input-composite.css +1 -1
  27. package/dist/components/form-text-fields.css +1 -1
  28. package/dist/components/modal.css +2 -2
  29. package/dist/components/timeline.css +1 -1
  30. package/dist/wwt-bsds-preset.js +3 -0
  31. package/dist/wwt-bsds-wc-base.css +5 -2
  32. package/dist/wwt-bsds.css +280 -191
  33. package/dist/wwt-bsds.min.css +1 -1
  34. package/package.json +1 -1
package/dist/wwt-bsds.css CHANGED
@@ -6,6 +6,7 @@
6
6
  --bs-inherit: inherit;
7
7
  --bs-current: currentColor;
8
8
  --bs-white: #ffffff;
9
+ --bs-white-10: rgba(255, 255, 255, 0.1);
9
10
  --bs-black: #0a0b19;
10
11
  --bs-blue-10: rgba(0, 134, 234, 0.1);
11
12
  --bs-blue-100: #99cff7;
@@ -24,6 +25,7 @@
24
25
  --bs-plum-200: #7766b7;
25
26
  --bs-plum-300: #49339f;
26
27
  --bs-plum-400: #1c0087;
28
+ --bs-royal-10: rgba(22, 47, 180, 0.1);
27
29
  --bs-royal-100: #c5cceb;
28
30
  --bs-royal-200: #7585d1;
29
31
  --bs-royal-300: #5365c4;
@@ -44,6 +46,7 @@
44
46
  --bs-orange-300: #f97c4c;
45
47
  --bs-orange-400: #fb550e;
46
48
  --bs-orange-500: #c33d04;
49
+ --bs-pink-10: rgba(227, 28, 121, 0.1);
47
50
  --bs-pink-100: #f6cbe0;
48
51
  --bs-pink-200: #eb7eaf;
49
52
  --bs-pink-300: #e45e9b;
@@ -290,7 +293,7 @@ button {
290
293
 
291
294
  --bs-ink-accent: var(--bs-plum-400);
292
295
  --bs-ink-base: var(--bs-black);
293
- --bs-ink-disabled: var(--bs-gray-400);
296
+ --bs-ink-disabled: rgba(78, 79, 95, 0.6); /* --bs-gray-400 at .6 */
294
297
  --bs-ink-light: var(--bs-gray-400);
295
298
  --bs-ink-invert-base: var(--bs-gray-100);
296
299
  --bs-ink-invert-medium: var(--bs-gray-200);
@@ -394,7 +397,7 @@ button {
394
397
 
395
398
  --bs-ink-accent: var(--bs-gray-100);
396
399
  --bs-ink-base: var(--bs-gray-100);
397
- --bs-ink-disabled: var(--bs-gray-300);
400
+ --bs-ink-disabled: rgba(163, 164, 183, 0.6); /* --bs-gray-300 at .6 opacity */
398
401
  --bs-ink-invert-base: var(--bs-black);
399
402
  --bs-ink-invert-medium: var(--bs-gray-500);
400
403
  --bs-ink-invert-light: var(--bs-gray-400);
@@ -956,7 +959,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
956
959
  border-block-start-color: transparent;
957
960
  }
958
961
  .bs-badge {
959
- --badge-bg: var(--bs-red-base);
962
+ --badge-bg: var(--bs-red-400);
960
963
  --badge-text: var(--bs-white);
961
964
  display: inline-block;
962
965
  }
@@ -1061,7 +1064,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1061
1064
  padding-right: 1.25rem;
1062
1065
  }
1063
1066
  .bs-banner :where(.bs-banner-content p a) {
1064
- color: var(--bs-pink-light);
1067
+ color: var(--bs-blue-lightest);
1065
1068
  text-decoration: underline;
1066
1069
  }
1067
1070
  .bs-banner :where(.bs-banner-content button) {
@@ -1101,7 +1104,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1101
1104
  --dropdown-width: 100%;
1102
1105
  --dropdown-transform: translate(0, 100%);
1103
1106
 
1104
- background-color: var(--bs-bg-base-elevated);
1107
+ background-color: var(--bs-bg-base-to-medium);
1105
1108
  border-radius: 4px;
1106
1109
  bottom: var(--dropdown-bottom);
1107
1110
  box-shadow: var(--bs-shadow-contentMedium);
@@ -1296,7 +1299,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1296
1299
  /* Hover or data-selected */
1297
1300
  .bs-dropdown-options :where(li:not([role="separator"]):hover),
1298
1301
  .bs-dropdown-options :where(li[data-selected]) {
1299
- background-color: var(--bs-bg-medium);
1302
+ background-color: var(--bs-bg-medium-to-light);
1300
1303
  border-left: 4px solid var(--bs-ink-blue);
1301
1304
  color: var(--bs-ink-blue);
1302
1305
  outline: none;
@@ -1414,32 +1417,6 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1414
1417
  padding-left: 0.5rem;
1415
1418
  }
1416
1419
  }
1417
- :where(label, legend),
1418
- label:where(.bs-label) {
1419
- display: inline-block;
1420
- width: 100%;
1421
- }
1422
- .bs-label,
1423
- :where(label, legend) {
1424
- --label-color: var(--bs-ink-base);
1425
- color: var(--label-color);
1426
- font-size: var(--bs-text-sm);
1427
- font-weight: 600;
1428
- line-height: var(--bs-leading-base);
1429
- }
1430
- /* Required asterisk */
1431
- :where(label, legend) :where([data-required]:not([data-required="false"])),
1432
- .bs-label :where([data-required="true"]) {
1433
- color: var(--label-asterisk-color, var(--bs-ink-red));
1434
- }
1435
- /* Disabled state */
1436
- :where(label[data-disabled]:not([data-disabled="false"])),
1437
- :where(label[data-disabled]:not([data-disabled="false"])) *,
1438
- .bs-label:where([data-disabled="true"]),
1439
- .bs-label:where([data-disabled="true"]) * {
1440
- --label-asterisk-color: transparent;
1441
- --label-color: var(--bs-ink-disabled);
1442
- }
1443
1420
  /* Generally applicable (all input types) */
1444
1421
  :where([data-required]:not([data-required="false"])) {
1445
1422
  color: var(--bs-ink-red);
@@ -1495,7 +1472,7 @@ select,
1495
1472
  -webkit-appearance: none;
1496
1473
  -moz-appearance: none;
1497
1474
  appearance: none;
1498
- background-color: var(--input-bg, var(--bs-bg-base));
1475
+ background-color: var(--input-bg, transparent);
1499
1476
  border-color: var(--input-border, var(--bs-violet-medium));
1500
1477
  border-radius: 0.25rem;
1501
1478
  border-style: solid;
@@ -1613,7 +1590,7 @@ select,
1613
1590
  .bs-input-addon {
1614
1591
  --input-border: var(--bs-violet-300);
1615
1592
  align-items: center;
1616
- background-color: var(--input-bg, var(--bs-bg-base));
1593
+ background-color: var(--input-bg, transparent);
1617
1594
  border-radius: .25rem;
1618
1595
  color: var(--bs-ink-base);
1619
1596
  display: flex;
@@ -1945,7 +1922,7 @@ data-autosize-icons="true" - see above
1945
1922
  :where(:disabled, [data-disabled="true"]) + .bs-character-count,
1946
1923
  :where(:disabled, [data-disabled="true"]) .bs-character-count,
1947
1924
  .bs-character-count:where([data-disabled="true"]) {
1948
- color: var(--bs-ink-disabled);
1925
+ visibility: hidden;
1949
1926
  }
1950
1927
  .bs-character-count:where([data-error="true"]) {
1951
1928
  color: var(--bs-ink-red);
@@ -1959,8 +1936,8 @@ data-autosize-icons="true" - see above
1959
1936
  line-height: 115%;
1960
1937
  }
1961
1938
  .bs-boolean:where([data-size='sm']) input {
1962
- width: var(--bs-text-xs);
1963
- height: var(--bs-text-xs);
1939
+ height: .75rem;
1940
+ width: .75rem;
1964
1941
  }
1965
1942
  .bs-boolean label {
1966
1943
  font-size: var(--bs-text-base);
@@ -1982,15 +1959,10 @@ data-autosize-icons="true" - see above
1982
1959
  /* Checkbox & Radio Input */
1983
1960
  :where(input[type='checkbox'], input[type='radio']),
1984
1961
  :is(.bs-boolean :where(input), .bs-checkbox) { /* .bs-checkbox added to accommodate 'fake' cbs */
1985
- --box-shadow: var(--bs-ink-base);
1986
-
1987
1962
  -webkit-appearance: none;
1988
-
1989
1963
  -moz-appearance: none;
1990
-
1991
1964
  appearance: none;
1992
- background-color: var(--bs-bg-base);
1993
- box-shadow: inset 0 0 0 0.125rem var(--box-shadow);
1965
+ box-shadow: inset 0 0 0 0.125rem var(--box-shadow, var(--bs-ink-base));
1994
1966
  cursor: pointer;
1995
1967
  display: grid;
1996
1968
  height: 1rem;
@@ -2014,72 +1986,65 @@ data-autosize-icons="true" - see above
2014
1986
  .bs-boolean :where([type='radio']) {
2015
1987
  border-radius: 50%;
2016
1988
  }
2017
- /* Checkbox's checkmark */
1989
+ /* Checkbox's checkbox, checkmark. Checkmark is hidden unless checked/indeterminate. */
2018
1990
  input:where([type='checkbox'])::before,
2019
1991
  :is(.bs-boolean :where([type="checkbox"]), .bs-checkbox)::before {
2020
- --filled-size: 1rem;
2021
- --check-fill-color: var(--bs-blue-base);
2022
-
1992
+ --cb-filled-size: var(--filled-size, 1rem);
2023
1993
  content: '';
2024
1994
  border-radius: 0.125rem;
2025
- box-shadow: inset var(--filled-size) var(--filled-size) var(--check-fill-color);
2026
- height: var(--filled-size);
1995
+ box-shadow: inset var(--cb-filled-size) var(--cb-filled-size) var(--fill-bg-color, var(--bs-blue-base));
1996
+ height: var(--cb-filled-size);
2027
1997
  visibility: hidden;
2028
- width: var(--filled-size);
1998
+ width: var(--cb-filled-size);
2029
1999
  }
2030
2000
  input:where([type='checkbox'])::after,
2031
2001
  :is(.bs-boolean :where([type="checkbox"]), .bs-checkbox)::after {
2032
- border: solid var(--bs-white);
2002
+ border: solid var(--bs-bg-base);
2033
2003
  border-width: 0 0.125rem 0.125rem 0;
2034
2004
  content: '';
2035
- height: 0.75em;
2005
+ height: var(--inner-check-height, 0.75em);
2036
2006
  left: 50%;
2037
2007
  position: absolute;
2038
2008
  top: 50%;
2039
2009
  transform-origin: center;
2040
2010
  transform: translate(-50%, -60%) rotate(45deg);
2041
2011
  visibility: hidden;
2042
- width: 0.375em;
2012
+ width: var(--inner-check-width, 0.375em);
2043
2013
  }
2044
2014
  input:where([type='checkbox']):where(:indeterminate)::after,
2045
2015
  .bs-boolean :where([type="checkbox"]):where(:indeterminate)::after,
2046
2016
  .bs-checkbox:where([data-indeterminate="true"], :indeterminate)::after {
2047
2017
  border: none;
2048
- background-color: var(--bs-white);
2049
- height: 0.125rem;
2018
+ background-color: var(--bs-bg-base);
2019
+ height: var(--inner-dash-height, 0.125rem);
2050
2020
  transform: translate(-50%, -0.0625rem) rotate(0deg);
2051
- width: 0.625em;
2021
+ width: var(--inner-dash-width, 0.625em);
2052
2022
  }
2053
- /* Radio's dot */
2023
+ /* Radio outer circle, Radio dot. Dot is hidden unless checked. */
2054
2024
  input:where([type='radio'])::before,
2055
2025
  .bs-boolean :where([type="radio"])::before {
2056
- --filled-size: 1rem;
2057
- --radio-fill-color: var(--bs-blue-base);
2058
-
2059
- background-color: var(--radio-fill-color);
2026
+ --radio-filled-size: var(--filled-size, 1rem);
2027
+ background-color: var(--fill-bg-color, var(--bs-blue-base));
2060
2028
  border-radius: 50%;
2061
2029
  box-sizing: content-box;
2062
2030
  content: '';
2063
- height: var(--filled-size);
2031
+ height: var(--radio-filled-size);
2064
2032
  visibility: hidden;
2065
- width: var(--filled-size);
2033
+ width: var(--radio-filled-size);
2066
2034
  }
2067
2035
  input:where([type='radio'])::after,
2068
2036
  .bs-boolean :where([type="radio"])::after {
2069
- --inner-size: 0.375rem;
2070
- --inner-fill-color: var(--bs-white);
2071
-
2072
- background-color: var(--inner-fill-color);
2037
+ background-color: var(--bs-bg-base);
2073
2038
  border-radius: 50%;
2074
2039
  box-sizing: content-box;
2075
2040
  content: '';
2076
- height: var(--inner-size);
2041
+ height: var(--inner-dot-size, 0.375rem);
2077
2042
  left: 50%;
2078
2043
  position: absolute;
2079
2044
  top: 50%;
2080
2045
  transform: translate(-50%, -50%);
2081
2046
  visibility: hidden;
2082
- width: var(--inner-size);
2047
+ width: var(--inner-dot-size, 0.375rem);
2083
2048
  }
2084
2049
  /* Show checkmark, indeterminate mark, or radio dot */
2085
2050
  .bs-checkbox:where([data-indeterminate="true"], [data-checked="true"], :checked, :indeterminate)::before,
@@ -2090,49 +2055,30 @@ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='r
2090
2055
  .bs-boolean :where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::after {
2091
2056
  visibility: visible;
2092
2057
  }
2093
- .bs-boolean:where([data-size='sm']) input::before,
2094
- .bs-checkbox:where([data-size="sm"])::before {
2095
- --filled-size: var(--bs-text-xs);
2096
- }
2097
- .bs-boolean:where([data-size='sm']) input[type='checkbox']::after,
2098
- .bs-checkbox:where([data-size="sm"])::after {
2099
- height: 0.5625rem;
2100
- width: 0.3125rem;
2101
- }
2102
- .bs-boolean:where([data-size='sm']) input[type='checkbox']:where(:indeterminate)::after,
2103
- .bs-checkbox:where([data-size="sm"][data-indeterminate="true"], [data-size="sm"]:indeterminate)::after {
2104
- height: 0.125rem;
2105
- width: .75em;
2106
- }
2107
- .bs-boolean:where([data-size='sm']) input[type='radio']::after {
2108
- --inner-size: 0.25rem;
2109
- }
2110
- /* Disabled State */
2111
- input:where([type='checkbox'], [type='radio']):disabled,
2112
- .bs-boolean :where(input):disabled,
2113
- .bs-checkbox:is([data-disabled="true"], :disabled) {
2114
- --box-shadow: var(--bs-bg-disabled);
2058
+ /* ---------- Sizes ----------- */
2059
+ .bs-boolean:where([data-size="sm"]),
2060
+ .bs-checkbox:where([data-size="sm"]) {
2061
+ --filled-size: 0.75rem;
2062
+ --inner-check-height: 0.5625rem;
2063
+ --inner-check-width: 0.3125rem;
2064
+ --inner-dash-height: 0.125rem;
2065
+ --inner-dash-width: .75em;
2066
+ --inner-dot-size: 0.25rem;
2067
+ }
2068
+ /* ---------- Disabled State ----------- */
2069
+ :where(input[type="checkbox"], input[type="radio"]):disabled,
2070
+ .bs-boolean:where([data-disabled="true"]),
2071
+ .bs-checkbox:where([data-disabled="true"]) {
2072
+ --box-shadow: var(--bs-ink-disabled);
2073
+ --fill-bg-color: var(--bs-ink-disabled);
2115
2074
  background-color: transparent;
2116
2075
  cursor: default;
2117
- }
2118
- .bs-checkbox:where([data-disabled="true"]:not(input)) {
2119
2076
  pointer-events: none;
2120
2077
  }
2121
- input:where([type='checkbox']):checked:disabled::before,
2122
- input:where([type='checkbox']):indeterminate:disabled::before,
2123
- .bs-boolean :where(input[type="checkbox"]):checked:disabled::before,
2124
- .bs-boolean :where(input[type="checkbox"]):indeterminate:disabled::before,
2125
- .bs-checkbox:where([data-checked="true"][data-disabled="true"], :checked:disabled)::before,
2126
- .bs-checkbox:where([data-indeterminate="true"][data-disabled="true"], :indeterminate:disabled)::before {
2127
- --check-fill-color: var(--bs-bg-disabled);
2128
- }
2129
- input:where([type='radio']):checked:disabled::before,
2130
- .bs-boolean :where(input[type="radio"]):checked:disabled::before {
2131
- --radio-fill-color: var(--bs-bg-disabled);
2132
- }
2133
- /* Error state */
2078
+ /* ---------- Error state ----------- */
2134
2079
  input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-error="false"])),
2135
- .bs-boolean :where(input[data-error="true"]),
2080
+ .bs-boolean :where(input[data-error="true"]), /* deprecate this one in favor of next line */
2081
+ .bs-boolean:where([data-error="true"]),
2136
2082
  .bs-checkbox:where([data-error="true"]) {
2137
2083
  --box-shadow: var(--bs-red-base);
2138
2084
  --outline-color: var(--bs-red-base);
@@ -2273,35 +2219,90 @@ input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-erro
2273
2219
  }
2274
2220
  .bs-hint {
2275
2221
  --hint-color: var(--bs-ink-light);
2276
- min-width: 0;
2277
2222
  color: var(--hint-color);
2278
2223
  font-size: var(--bs-text-xs);
2279
- padding: 0;
2280
- margin: 0;
2281
2224
  list-style: none;
2225
+ margin: 0;
2226
+ min-width: 0;
2282
2227
  overflow-wrap: break-word;
2228
+ padding: 0;
2283
2229
  }
2284
2230
  .bs-hint:where([data-error]:not([data-error="false"])) {
2285
2231
  --hint-color: var(--bs-ink-red);
2286
2232
  }
2233
+ :where(:disabled, [data-disabled="true"]) .bs-hint {
2234
+ --hint-color: var(--bs-ink-disabled);
2235
+ }
2236
+ :where(label, legend),
2237
+ label:where(.bs-label) {
2238
+ display: inline-block;
2239
+ width: 100%;
2240
+ }
2241
+ .bs-label,
2242
+ :where(label, legend) {
2243
+ --label-color: var(--bs-ink-base);
2244
+ color: var(--label-color);
2245
+ font-size: var(--bs-text-sm);
2246
+ font-weight: 600;
2247
+ line-height: var(--bs-leading-base);
2248
+ }
2249
+ /* Required asterisk */
2250
+ :where(label, legend) :where([data-required]:not([data-required="false"])),
2251
+ .bs-label :where([data-required="true"]) {
2252
+ color: var(--label-asterisk-color, var(--bs-ink-red));
2253
+ }
2254
+ /* Disabled state */
2255
+ :where(label[data-disabled]:not([data-disabled="false"])),
2256
+ :where(label[data-disabled]:not([data-disabled="false"])) *,
2257
+ .bs-label:where([data-disabled="true"]),
2258
+ .bs-label:where([data-disabled="true"]) * {
2259
+ --label-asterisk-color: transparent;
2260
+ --label-color: var(--bs-ink-disabled);
2261
+ }
2262
+ /*
2263
+ --btn-main: (this is doing too much.. look into backwards-compatible way to break this up)
2264
+ background color (base)
2265
+ focus ring color
2266
+
2267
+ background colors:
2268
+ --btn-secondary: background color (active, hover)
2269
+ --btn-light: background color (ghost hover, ghost focus)
2270
+
2271
+ border / box-shadow:
2272
+ --btn-ghost-ink: the box shadow color for ghost buttons is synced to ink
2273
+ --btn-highlight: box shadow color (w/ --btn-main) (active)
2274
+
2275
+ padding:
2276
+ --btn-padding: padding (changes by size, and on text btns)
2277
+
2278
+ text color:
2279
+ --btn-ink: text color
2280
+ --btn-ghost-ink: text color (ghost)
2281
+
2282
+ */
2287
2283
  .bs-button {
2288
- --btn-main: var(--bs-blue-400);
2289
- --btn-secondary: var(--bs-blue-medium);
2290
- --btn-highlight: var(--bs-blue-100);
2291
- --btn-padding: .25rem .75rem;
2292
2284
  --btn-focus-pseudo-width: calc(100% + 0.5rem);
2293
2285
  --btn-ghost-ink: var(--bs-ink-blue);
2286
+ --btn-highlight: var(--bs-blue-100);
2294
2287
  --btn-ink: var(--bs-white);
2288
+ --btn-main: var(--bs-blue-400);
2289
+ --btn-padding: .25rem .75rem;
2290
+ --btn-secondary: var(--bs-blue-medium);
2291
+ --btn-text-size: var(--bs-text-md);
2292
+ --btn-weight: 600;
2293
+ --btn-height: 2.5rem;
2295
2294
  align-items: center;
2296
2295
  background-color: var(--btn-main);
2297
2296
  border: none;
2298
2297
  border-radius: 0.25rem;
2299
2298
  color: var(--btn-ink);
2299
+ -moz-column-gap: var(--bs-space-2);
2300
+ column-gap: var(--bs-space-2);
2300
2301
  cursor: pointer;
2301
2302
  display: inline-flex;
2302
- font-size: var(--btn-text-size, var(--bs-text-md));
2303
- font-weight: var(--btn-weight, 600);
2304
- height: var(--btn-height, 2.5rem);
2303
+ font-size: var(--btn-text-size);
2304
+ font-weight: var(--btn-weight);
2305
+ height: var(--btn-height);
2305
2306
  justify-content: center;
2306
2307
  line-height: 1.5;
2307
2308
  outline: 2px solid transparent;
@@ -2316,9 +2317,9 @@ input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-erro
2316
2317
  }
2317
2318
  .bs-button:active {
2318
2319
  background-color: var(--btn-secondary);
2319
- transform: scale(0.97);
2320
- transform-origin: center;
2321
2320
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
2321
+ transform-origin: center;
2322
+ transform: scale(0.97);
2322
2323
  }
2323
2324
  /* ------------ Focus Styles ------------ */
2324
2325
  .bs-button::before {
@@ -2352,7 +2353,7 @@ input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-erro
2352
2353
  --btn-light: var(--bs-blue-10);
2353
2354
  --btn-secondary: var(--bs-blue-10);
2354
2355
  background-color: transparent;
2355
- box-shadow: inset 0 0 0 1px var(--btn-main);
2356
+ box-shadow: inset 0 0 0 1px var(--btn-ghost-ink);
2356
2357
  }
2357
2358
  .bs-button:where([data-ghost]:not([data-ghost="false"]))::before {
2358
2359
  border-radius: 0.4375rem;
@@ -2368,45 +2369,69 @@ input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-erro
2368
2369
  }
2369
2370
  /* ------------ VARIANTS ------------ */
2370
2371
  .bs-button:where([data-variant^='secondary']) {
2372
+ --btn-ghost-ink: var(--bs-ink-plum);
2373
+ --btn-highlight: var(--bs-plum-100);
2374
+ --btn-light: var(--bs-plum-10);
2371
2375
  --btn-main: var(--bs-plum-400);
2372
2376
  --btn-secondary: var(--bs-plum-medium);
2373
- --btn-light: var(--bs-plum-10);
2374
- --btn-highlight: var(--bs-plum-100);
2375
- --btn-ghost-ink: var(--bs-ink-plum);
2376
2377
  }
2377
2378
  .dark .bs-button:where([data-variant^='secondary']) {
2379
+ --btn-highlight: var(--bs-plum-400);
2380
+ --btn-light: var(--bs-navy-400);
2378
2381
  --btn-main: var(--bs-plum-200);
2379
2382
  --btn-secondary: var(--bs-plum-300);
2380
- --btn-light: var(--bs-navy-400);
2381
- --btn-highlight: var(--bs-plum-400);
2382
2383
  }
2383
2384
  .bs-button:where([data-variant^='positive']) {
2385
+ --btn-ghost-ink: var(--bs-ink-purple);
2386
+ --btn-highlight: var(--bs-purple-100);
2387
+ --btn-light: var(--bs-purple-10);
2384
2388
  --btn-main: var(--bs-purple-400);
2385
2389
  --btn-secondary: var(--bs-purple-medium);
2386
- --btn-light: var(--bs-purple-10);
2387
- --btn-highlight: var(--bs-purple-100);
2388
- --btn-ghost-ink: var(--bs-ink-purple);
2389
2390
  }
2390
2391
  .bs-button:where([data-variant^='warning']) {
2392
+ --btn-ghost-ink: var(--bs-ink-orange);
2393
+ --btn-highlight: var(--bs-orange-100);
2394
+ --btn-light: var(--bs-orange-10);
2391
2395
  --btn-main: var(--bs-orange-warning);
2392
2396
  --btn-secondary: var(--bs-orange-base);
2393
- --btn-light: var(--bs-orange-10);
2394
- --btn-highlight: var(--bs-orange-100);
2395
- --btn-ghost-ink: var(--bs-ink-orange);
2396
2397
  }
2397
2398
  .bs-button:where([data-variant^='negative']) {
2399
+ --btn-ghost-ink: var(--bs-ink-red);
2400
+ --btn-highlight: var(--bs-red-100);
2401
+ --btn-light: var(--bs-red-10);
2398
2402
  --btn-main: var(--bs-red-400);
2399
2403
  --btn-secondary: var(--bs-red-medium);
2400
- --btn-light: var(--bs-red-10);
2401
- --btn-highlight: var(--bs-red-100);
2402
- --btn-ghost-ink: var(--bs-ink-red);
2404
+ }
2405
+ /* pink variant */
2406
+ .bs-button:where([data-variant^='pink']) {
2407
+ --btn-ghost-ink: var(--bs-ink-pink);
2408
+ --btn-highlight: var(--bs-pink-400);
2409
+ --btn-light: var(--bs-pink-10);
2410
+ --btn-main: var(--bs-pink-400);
2411
+ --btn-secondary: var(--bs-pink-300);
2412
+ }
2413
+ /* royal blue variant */
2414
+ .bs-button:where([data-variant^='royal']) {
2415
+ --btn-ghost-ink: var(--bs-ink-royal);
2416
+ --btn-highlight: var(--bs-royal-400);
2417
+ --btn-light: var(--bs-royal-10);
2418
+ --btn-main: var(--bs-royal-400);
2419
+ --btn-secondary: var(--bs-royal-300);
2420
+ }
2421
+ /* white variant - for dark backgrounds + ghost btn only */
2422
+ .bs-button:where([data-variant^='white'][data-ghost]:not([data-ghost="false"])) {
2423
+ --btn-ghost-ink: var(--bs-ink-white);
2424
+ --btn-highlight: var(--bs-ink-white);
2425
+ --btn-light: var(--bs-white-10);
2426
+ --btn-main: var(--bs-ink-white);
2403
2427
  }
2404
2428
  /* ------------ Text Button ------------ */
2405
2429
  .bs-button:where([data-text]:not([data-text="false"])) {
2430
+ --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
2406
2431
  --btn-height: auto;
2407
2432
  --btn-ink: var(--bs-ink-blue);
2408
2433
  --btn-padding: 0;
2409
- --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
2434
+ --btn-secondary: transparent;
2410
2435
  --btn-text-size: var(--bs-text-md);
2411
2436
  --btn-weight: 400;
2412
2437
  background-color: transparent;
@@ -2425,6 +2450,10 @@ input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-erro
2425
2450
  box-shadow: none;
2426
2451
  transform: none;
2427
2452
  }
2453
+ .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])),
2454
+ .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])):hover {
2455
+ --btn-ink: var(--bs-ink-red);
2456
+ }
2428
2457
  /* ------------ Button Sizes, Media-based Text Sizing -------------- */
2429
2458
  /* Std button: Mobile text size, DT text size */
2430
2459
  .bs-button {
@@ -2471,7 +2500,7 @@ input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-erro
2471
2500
  }
2472
2501
  .bs-button:where([data-ghost]:not([data-ghost="false"])):disabled,
2473
2502
  .bs-button:where([data-ghost]:not([data-ghost="false"]))[aria-disabled="true"] {
2474
- box-shadow: inset 0 0 0 1px var(--bs-gray-400);
2503
+ --btn-ghost-ink: var(--bs-ink-disabled);
2475
2504
  }
2476
2505
  .bs-button:where([data-text]:not([data-text="false"])):disabled,
2477
2506
  .bs-button:where([data-text]:not([data-text="false"]))[aria-disabled="true"] {
@@ -2484,26 +2513,49 @@ a.bs-button {
2484
2513
  outline: none;
2485
2514
  vertical-align: middle;
2486
2515
  }
2487
- .bs-circle-button {
2488
- --btn-main: var(--bs-blue-base);
2489
- --btn-secondary: var(--bs-blue-medium);
2490
- --btn-highlight: var(--bs-blue-lightest);
2516
+ /*
2517
+ Properties : Defaults // Description
2518
+ ====================================
2519
+ --btn-icon-bg-color: var(--btn-main); // icon bg color (base state)
2520
+ --btn-icon-padding: .75rem; // padding around icon svg
2521
+ --btn-icon-size: 1.5rem; // svg width and height
2522
+ --btn-icon-stroke-color: var(--bs-white);
2523
+ --btn-main: var(--bs-blue-base); // many things... should probably break this up
2524
+ --btn-text-color: var(--bs-ink-base);
2525
+ --btn-text-size: var(--bs-text-md);
2526
+
2527
+ --btn-border-color: transparent; // focus state outline color - transparent base state, --btn-main base focus state
2528
+ --btn-border-color-focused: var(--btn-main); // focus state ring color set on variants
2529
+ --btn-secondary: var(--bs-blue-medium); // hover state icon bg
2530
+ --btn-shadow-color-active: var(--btn-main); // active state shadow color (icon bg)
2531
+ --btn-text-color-hovered: var(--bs-ink-base); // hover state text color
2532
+ */
2533
+ :where(.bs-circle-button) {
2534
+ --btn-border-color-focused: var(--btn-main);
2491
2535
  --btn-border-color: transparent;
2492
- --btn-border-radius: 50%;
2536
+ --btn-focus-inset: -0.25rem;
2537
+ --btn-gap: .5rem;
2493
2538
  --btn-icon-bg-color: var(--btn-main);
2494
2539
  --btn-icon-padding: .75rem;
2495
2540
  --btn-icon-size: 1.5rem;
2496
2541
  --btn-icon-stroke-color: var(--bs-white);
2542
+ --btn-main: var(--bs-blue-base);
2543
+ --btn-secondary: var(--bs-blue-medium);
2544
+ --btn-shadow-color-active: var(--btn-main);
2545
+ --btn-text-color-hovered: var(--bs-ink-base);
2497
2546
  --btn-text-color: var(--bs-ink-base);
2498
- --btn-text-size: var(--bs-text-md);
2547
+ --btn-text-size: 1.125rem;
2548
+ --btn-text-weight: 400;
2549
+ }
2550
+ .bs-circle-button {
2499
2551
  align-items: center;
2500
2552
  background-color: transparent;
2501
- border-radius: var(--btn-border-radius);
2502
2553
  color: var(--btn-text-color);
2503
2554
  cursor: pointer;
2504
2555
  display: inline-flex;
2505
2556
  font-size: var(--btn-text-size);
2506
- gap: .5rem;
2557
+ font-weight: var(--btn-text-weight);
2558
+ gap: var(--btn-gap);
2507
2559
  outline: none;
2508
2560
  position: relative;
2509
2561
  vertical-align: middle;
@@ -2514,17 +2566,6 @@ a.bs-circle-button {
2514
2566
  outline: none;
2515
2567
  text-decoration: none;
2516
2568
  }
2517
- .bs-circle-button :where(.bs-circle-button-icon)::before {
2518
- border-color: var(--btn-border-color);
2519
- border-radius: var(--btn-border-radius);
2520
- border-style: solid;
2521
- border-width: 0.125rem;
2522
- height: calc(100% + 0.5rem);
2523
- inset: -0.25rem;
2524
- position: absolute;
2525
- transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
2526
- width: calc(100% + 0.5rem);
2527
- }
2528
2569
  .bs-circle-button :where(.bs-circle-button-icon) {
2529
2570
  align-items: center;
2530
2571
  background-color: var(--btn-icon-bg-color);
@@ -2538,6 +2579,16 @@ a.bs-circle-button {
2538
2579
  position: relative;
2539
2580
  transition: all 100ms ease-in-out;
2540
2581
  }
2582
+ .bs-circle-button :where(.bs-circle-button-icon)::before {
2583
+ border-color: var(--btn-border-color);
2584
+ border-radius: 50%;
2585
+ border-style: solid;
2586
+ border-width: 0.125rem;
2587
+ content: '';
2588
+ inset: var(--btn-focus-inset);
2589
+ position: absolute;
2590
+ transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
2591
+ }
2541
2592
  .bs-circle-button :where(.bs-circle-button-icon) :where(.bs-icon) {
2542
2593
  --icon-size: var(--btn-icon-size);
2543
2594
  }
@@ -2554,26 +2605,20 @@ a.bs-circle-button {
2554
2605
  }
2555
2606
  /* Ghost Buttons */
2556
2607
  .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) {
2608
+ --btn-icon-bg-color: transparent;
2557
2609
  --btn-icon-stroke-color: var(--btn-main);
2558
2610
  --btn-light: var(--bs-blue-10);
2559
2611
  --btn-secondary: var(--bs-blue-10);
2560
2612
  }
2561
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) :where(.bs-circle-button-icon) {
2562
- background-color: transparent;
2563
- box-shadow: inset 0 0 0 1px transparent;
2564
- color: var(--btn-icon-stroke-color);
2565
- }
2566
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) :where(.bs-circle-button-icon)::before {
2567
- border-radius: 50%;
2568
- }
2569
2613
  /* Active, Hover, Focus states */
2570
2614
  .bs-circle-button:active, .bs-circle-button:hover {
2571
2615
  --btn-icon-bg-color: var(--btn-secondary);
2616
+ --btn-text-color: var(--btn-text-color-hovered);
2572
2617
  }
2573
2618
  .bs-circle-button:active :where(.bs-circle-button-icon) {
2574
- transform: scale(0.97);
2619
+ box-shadow: inset 0px 0px 4px 1px var(--btn-shadow-color-active);
2575
2620
  transform-origin: center;
2576
- box-shadow: inset 0px 0px 4px 1px var(--btn-main);
2621
+ transform: scale(0.97);
2577
2622
  }
2578
2623
  .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon),
2579
2624
  .bs-circle-button:where([data-direction="right"]):hover::before {
@@ -2583,19 +2628,11 @@ a.bs-circle-button {
2583
2628
  .bs-circle-button:where([data-direction="left"]):hover::before {
2584
2629
  transform: translateX(-.25rem);
2585
2630
  }
2586
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):hover :where(.bs-circle-button-icon) {
2587
- background-color: var(--btn-light);
2588
- }
2589
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):active {
2590
- box-shadow:
2591
- inset 0 0 0 1px var(--btn-main),
2592
- inset 0px 0px 4px 1px var(--btn-highlight);
2631
+ .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):hover {
2632
+ --btn-icon-bg-color: var(--btn-light);
2593
2633
  }
2594
2634
  .bs-circle-button:where(:focus-visible) {
2595
- --btn-border-color: var(--btn-main);
2596
- }
2597
- .bs-circle-button:where(:focus-visible) :where(.bs-circle-button-icon)::before {
2598
- content: '';
2635
+ --btn-border-color: var(--btn-border-color-focused);
2599
2636
  }
2600
2637
  /* Disabled State */
2601
2638
  .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) /* for links as buttons */ {
@@ -2603,24 +2640,69 @@ a.bs-circle-button {
2603
2640
  --btn-text-color: var(--bs-ink-disabled);
2604
2641
  pointer-events: none;
2605
2642
  }
2606
- .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) :where(.bs-circle-button-icon) {
2607
- background-color: var(--bs-bg-disabled);
2643
+ .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) {
2644
+ --btn-icon-bg-color: var(--bs-bg-disabled);
2608
2645
  }
2609
2646
  /* Button Size */
2610
2647
  .bs-circle-button:where([data-size^='sm']) {
2611
2648
  --btn-icon-padding: .375rem;
2612
2649
  --btn-icon-size: .75rem;
2613
- --btn-text-size: var(--bs-text-sm);
2650
+ --btn-text-size: .875rem;
2614
2651
  }
2615
2652
  .bs-circle-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
2616
2653
  --btn-icon-padding: .3125rem;
2617
2654
  --btn-icon-size: .625rem;
2618
- --btn-text-size: var(--bs-text-base);
2655
+ --btn-text-size: 1rem;
2619
2656
  }
2620
2657
  .bs-circle-button:where([data-size='xs'][data-text]:not([data-text="false"])) {
2621
2658
  --btn-icon-padding: .25rem;
2622
2659
  --btn-icon-size: .5rem;
2623
- --btn-text-size: var(--bs-text-sm);
2660
+ --btn-text-size: .875rem;
2661
+ }
2662
+ /* Color Variants */
2663
+ .bs-circle-button:where([data-variant^="color"]) {
2664
+ --btn-focus-inset: .125rem;
2665
+ --btn-gap: 0;
2666
+ --btn-icon-bg-color: transparent;
2667
+ --btn-icon-padding: .5rem;
2668
+ --btn-icon-size: .75rem; /* stays the same for all sizes */
2669
+ --btn-icon-stroke-color: var(--btn-text-color);
2670
+ --btn-secondary: transparent;
2671
+ --btn-shadow-color-active: transparent;
2672
+ }
2673
+ .bs-circle-button:where([data-variant="color-blue"]) {
2674
+ --btn-border-color-focused: var(--bs-ink-blue);
2675
+ --btn-text-color: var(--bs-ink-blue);
2676
+ --btn-text-color-hovered: var(--bs-blue-base);
2677
+ }
2678
+ .bs-circle-button:where([data-variant="color-royal"]) {
2679
+ --btn-border-color-focused: var(--bs-ink-royal);
2680
+ --btn-text-color: var(--bs-ink-royal);
2681
+ --btn-text-color-hovered: var(--bs-royal-medium);
2682
+ }
2683
+ .bs-circle-button:where([data-variant="color-purple"]) {
2684
+ --btn-border-color-focused: var(--bs-purple-400);
2685
+ --btn-text-color: var(--bs-ink-purple);
2686
+ --btn-text-color-hovered: var(--bs-purple-medium);
2687
+ }
2688
+ .bs-circle-button:where([data-variant="color-pink"]) {
2689
+ --btn-border-color-focused: var(--bs-pink-400);
2690
+ --btn-text-color: var(--bs-ink-pink);
2691
+ --btn-text-color-hovered: var(--bs-pink-base);
2692
+ }
2693
+ .bs-circle-button:where([data-variant="color-red"]) {
2694
+ --btn-border-color-focused: var(--bs-ink-red);
2695
+ --btn-text-color: var(--bs-ink-red);
2696
+ --btn-text-color-hovered: var(--bs-red-base);
2697
+ }
2698
+ .bs-circle-button:where([data-variant^="color"]):where(:disabled, [aria-disabled]:not([aria-disabled="false"])) {
2699
+ --btn-icon-bg-color: transparent;
2700
+ --btn-text-color: var(--bs-ink-disabled);
2701
+ }
2702
+ /* size XXS only supported for color variants */
2703
+ .bs-circle-button:where([data-variant^="color"]):where([data-size='xxs'][data-text]:not([data-text="false"])) {
2704
+ --btn-text-size: .75rem;
2705
+ --btn-text-weight: 600;
2624
2706
  }
2625
2707
  /*
2626
2708
  custom properties:
@@ -2633,26 +2715,33 @@ custom properties:
2633
2715
  --filterbtn-weight
2634
2716
  */
2635
2717
  button:where(.bs-filter-button) {
2718
+ --filterbtn-caret-size: 1rem;
2719
+ --filterbtn-caret-transform: rotate(0deg);
2720
+ --filterbtn-color: var(--bs-ink-blue);
2721
+ --filterbtn-focus-color: transparent;
2722
+ --filterbtn-height: 1.5rem;
2723
+ --filterbtn-text-size: var(--bs-text-base);
2724
+ --filterbtn-weight: 400;
2636
2725
  flex-shrink: 0;
2637
2726
  position: relative;
2638
2727
  }
2639
2728
  .bs-filter-button {
2640
2729
  align-items: center;
2641
- color: var(--filterbtn-color, var(--bs-ink-blue));
2730
+ color: var(--filterbtn-color);
2642
2731
  -moz-column-gap: 0.5rem;
2643
2732
  column-gap: 0.5rem;
2644
2733
  cursor: pointer;
2645
2734
  display: inline-flex;
2646
- font-size: var(--filterbtn-text-size, var(--bs-text-base));
2647
- font-weight: var(--filterbtn-weight, 400);
2648
- height: var(--filterbtn-height, 1.5rem);
2735
+ font-size: var(--filterbtn-text-size);
2736
+ font-weight: var(--filterbtn-weight);
2737
+ height: var(--filterbtn-height);
2649
2738
  line-height: 1.5;
2650
2739
  transition: outline-color 100ms ease-in-out;
2651
2740
  width: -moz-max-content;
2652
2741
  width: max-content;
2653
2742
  }
2654
2743
  .bs-filter-button::after {
2655
- border: solid var(--filterbtn-focus-color, transparent) 2px;
2744
+ border: solid var(--filterbtn-focus-color) 2px;
2656
2745
  border-radius: 0.25rem;
2657
2746
  content: '';
2658
2747
  display: block;
@@ -2664,12 +2753,12 @@ button:where(.bs-filter-button) {
2664
2753
  .bs-filter-button :where(.bs-icon),
2665
2754
  .bs-filter-button :where(span:has(svg:only-child)) {
2666
2755
  display: block;
2667
- height: var(--filterbtn-caret-size, 1rem);
2756
+ height: var(--filterbtn-caret-size);
2668
2757
  line-height: 1;
2669
- transform: var(--filterbtn-caret-transform, rotate(0deg));
2758
+ transform: var(--filterbtn-caret-transform);
2670
2759
  transform-origin: center;
2671
2760
  transition: var(--bs-trans-rotate180);
2672
- width: var(--filterbtn-caret-size, 1rem);
2761
+ width: var(--filterbtn-caret-size);
2673
2762
  }
2674
2763
  .bs-filter-button:where([data-size="sm"],[data-size="xs"]) {
2675
2764
 
@@ -2716,7 +2805,7 @@ button:where(.bs-filter-button) {
2716
2805
  --badge-text: var(--bs-ink-disabled);
2717
2806
  }
2718
2807
  .bs-modal {
2719
- background-color: var(--bs-bg-base-elevated);
2808
+ background-color: var(--bs-bg-base-to-medium);
2720
2809
  border-radius: 4px;
2721
2810
  box-shadow: var(--bs-shadow-contentHigh);
2722
2811
  left: 1.5rem;
@@ -3551,7 +3640,7 @@ table:where([data-sticky^="left"]) :is(td:first-child, th:first-child) {
3551
3640
  /* -- Step Items in Timeline -- */
3552
3641
  .bs-timeline :where(.bs-step-item) {
3553
3642
  align-items: center;
3554
- color: var(--step-color, var(--bs-ink-disabled));
3643
+ color: var(--step-color, var(--bs-ink-light));
3555
3644
  display: flex;
3556
3645
  flex-direction: column;
3557
3646
  padding-inline: 1rem;