@wwtdev/bsds-css 3.0.0-rc.47 → 3.0.1

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.
@@ -142,7 +142,7 @@
142
142
  }
143
143
  /* data-variant="negative" list option keyboard navigation focus */
144
144
  .bs-dropdown-options-deprecated:where(:focus-visible) :where(li[data-variant~="negative"][data-active]) {
145
- --focus-border-color: var(--bs-negative-light);
145
+ --focus-border-color: var(--bs-red-light);
146
146
  }
147
147
  /* Multi-select divider */
148
148
  .bs-dropdown-options-deprecated :where(li[role="separator"]) {
@@ -847,12 +847,6 @@ Custom properties:
847
847
  .bs-toast-deprecated:where([data-variant^='positive']) :where(.bs-toast-header-deprecated .bs-toast-header-deprecated-icon) {
848
848
  color: var(--bs-ink-positive);
849
849
  }
850
- :where(.dark) .bs-toast-deprecated:where([data-variant^='positive']) {
851
- border-top: 4px solid var(--bs-positive-light);
852
- }
853
- :where(.dark) .bs-toast-deprecated:where([data-variant^='positive']) :where(.bs-toast-header-deprecated .bs-toast-header-deprecated-icon) {
854
- color: var(--bs-positive-light);
855
- }
856
850
  /* Negative Toast Styles */
857
851
  .bs-toast-deprecated:where([data-variant^='negative']) {
858
852
  border-top: 4px solid var(--bs-negative-dark);
@@ -1312,16 +1306,16 @@ This must go last to properly override the other classes
1312
1306
  -webkit-backdrop-filter: blur(4px);
1313
1307
  backdrop-filter: blur(4px);
1314
1308
  background: rgba(29, 30, 72, 0.05);
1315
- /*
1316
- Should be very rare, but below is an optional way for consumer to override z-index.
1317
- See note in popover.css for more info...most often (but still rare) the consumer
1318
- would override the --bs-popover-z-index instead, which would take care of this bs-backdrop too.
1319
- Should be a very very rare use case to need to override both independently to different values.
1320
- */
1321
- z-index: var(--bs-backdrop-z-index, var(--bs-popover-z-index));
1309
+ transition-property: opacity;
1310
+ transition-duration: var(--bs-backdrop-transition-duration);
1311
+ transition-timing-function: var(--bs-transition-cubic);
1312
+ }
1313
+ .bs-backdrop-enter-from,
1314
+ .bs-backdrop-leave-to {
1315
+ opacity: 0;
1322
1316
  }
1323
1317
  .bs-badge {
1324
- --badge-bg: var(--bs-negative-dark);
1318
+ --badge-bg: var(--bs-accent-6-base);
1325
1319
  --badge-text: var(--bs-white);
1326
1320
  display: inline-block;
1327
1321
  }
@@ -1449,10 +1443,7 @@ This must go last to properly override the other classes
1449
1443
  text-decoration: none;
1450
1444
  }
1451
1445
  .bs-banner:where([data-variant="negative"]) {
1452
- --banner-bg: var(--bs-red-300);
1453
- }
1454
- :where(.softchoice) .bs-banner:where([data-variant="negative"]) {
1455
- --banner-bg: var(--bs-maroon-400);
1446
+ --banner-bg: var(--bs-accent-6-medium);
1456
1447
  }
1457
1448
  @media (min-width: 957px) {
1458
1449
  .bs-banner {
@@ -1467,7 +1458,7 @@ This must go last to properly override the other classes
1467
1458
  --btn-ghost-ink: var(--bs-ink-primary);
1468
1459
  --btn-highlight: var(--bs-primary-lightest);
1469
1460
  --btn-ink: var(--bs-white);
1470
- --btn-main: var(--bs-primary-base-fixed);
1461
+ --btn-main: var(--bs-primary-base);
1471
1462
  --btn-padding: .25rem .75rem;
1472
1463
  --btn-secondary: var(--bs-primary-medium);
1473
1464
  --btn-text-size: var(--bs-text-md);
@@ -1568,50 +1559,67 @@ See: https://github.wwt.com/custom-apps/wwt-blue-steel/pull/917
1568
1559
  --btn-ghost-ink: var(--bs-ink-secondary);
1569
1560
  --btn-highlight: var(--bs-secondary-lightest);
1570
1561
  --btn-light: var(--bs-secondary-highlight);
1571
- --btn-main: var(--bs-secondary-base-fixed);
1562
+ --btn-main: var(--bs-secondary-base);
1572
1563
  --btn-secondary: var(--bs-secondary-medium);
1573
1564
  }
1574
- .dark .bs-button:where([data-variant^='secondary']) {
1575
- --btn-highlight: var(--bs-secondary-base-fixed);
1576
- --btn-light: var(--bs-navy-400);
1577
- }
1578
1565
  .bs-button:where([data-variant^='positive']) {
1579
1566
  --btn-ghost-ink: var(--bs-ink-positive);
1580
- --btn-highlight: var(--bs-positive-lightest);
1567
+ --btn-highlight: var(--bs-positive-highlight);
1581
1568
  --btn-light: var(--bs-positive-highlight);
1582
- --btn-main: var(--bs-positive-base-fixed);
1569
+ --btn-main: var(--bs-positive-base);
1583
1570
  --btn-secondary: var(--bs-positive-medium);
1584
1571
  }
1585
1572
  .bs-button:where([data-variant^='warning']) {
1586
1573
  --btn-ghost-ink: var(--bs-ink-warning);
1587
- --btn-highlight: var(--bs-warning-lightest);
1574
+ --btn-highlight: var(--bs-warning-highlight);
1588
1575
  --btn-light: var(--bs-warning-highlight);
1589
- --btn-main: var(--bs-warning-dark);
1576
+ --btn-main: var(--bs-warning-base);
1590
1577
  --btn-secondary: var(--bs-warning-medium);
1591
1578
  }
1592
1579
  .bs-button:where([data-variant^='negative']) {
1593
1580
  --btn-ghost-ink: var(--bs-ink-negative);
1594
- --btn-highlight: var(--bs-negative-lightest);
1581
+ --btn-highlight: var(--bs-negative-highlight);
1595
1582
  --btn-light: var(--bs-negative-highlight);
1596
- --btn-main: var(--bs-negative-dark);
1583
+ --btn-main: var(--bs-negative-base);
1597
1584
  --btn-secondary: var(--bs-negative-medium);
1598
1585
  }
1599
- /* pink variant */
1600
- .bs-button:where([data-variant^='pink']) {
1601
- --btn-ghost-ink: var(--bs-ink-accent-3);
1602
- --btn-highlight: var(--bs-accent-3-base-fixed);
1603
- --btn-light: var(--bs-accent-3-highlight);
1604
- --btn-main: var(--bs-accent-3-base-fixed);
1605
- --btn-secondary: var(--bs-accent-3-medium);
1586
+ .bs-button:where([data-variant^='accent-1']) {
1587
+ --btn-ghost-ink: var(--bs-ink-accent-1);
1588
+ --btn-highlight: var(--bs-accent-1-base);
1589
+ --btn-light: var(--bs-accent-1-highlight);
1590
+ --btn-main: var(--bs-accent-1-base);
1591
+ --btn-secondary: var(--bs-accent-1-medium);
1606
1592
  }
1607
- /* royal blue variant */
1593
+ /* DEPRECATED - royal blue variant (use accent-1 instead) */
1608
1594
  .bs-button:where([data-variant^='royal']) {
1609
1595
  --btn-ghost-ink: var(--bs-ink-accent-1);
1610
- --btn-highlight: var(--bs-accent-1-base-fixed);
1596
+ --btn-highlight: var(--bs-accent-1-base);
1611
1597
  --btn-light: var(--bs-accent-1-highlight);
1612
- --btn-main: var(--bs-accent-1-base-fixed);
1598
+ --btn-main: var(--bs-accent-1-base);
1613
1599
  --btn-secondary: var(--bs-accent-1-medium);
1614
1600
  }
1601
+ .bs-button:where([data-variant^='accent-2']) {
1602
+ --btn-ghost-ink: var(--bs-ink-accent-2);
1603
+ --btn-highlight: var(--bs-accent-2-base);
1604
+ --btn-light: var(--bs-accent-2-highlight);
1605
+ --btn-main: var(--bs-accent-2-base);
1606
+ --btn-secondary: var(--bs-accent-2-medium);
1607
+ }
1608
+ .bs-button:where([data-variant^='accent-3']) {
1609
+ --btn-ghost-ink: var(--bs-ink-accent-3);
1610
+ --btn-highlight: var(--bs-accent-3-base);
1611
+ --btn-light: var(--bs-accent-3-highlight);
1612
+ --btn-main: var(--bs-accent-3-base);
1613
+ --btn-secondary: var(--bs-accent-3-medium);
1614
+ }
1615
+ /* DEPRECATED - pink variant (use accent-3 instead) */
1616
+ .bs-button:where([data-variant^='pink']) {
1617
+ --btn-ghost-ink: var(--bs-ink-accent-3);
1618
+ --btn-highlight: var(--bs-accent-3-base);
1619
+ --btn-light: var(--bs-accent-3-highlight);
1620
+ --btn-main: var(--bs-accent-3-base);
1621
+ --btn-secondary: var(--bs-accent-3-medium);
1622
+ }
1615
1623
  /* white variant - for dark backgrounds + ghost btn or text btn only */
1616
1624
  .bs-button:where([data-variant^='white'][data-ghost]:not([data-ghost="false"])) {
1617
1625
  --btn-ghost-ink: var(--bs-ink-white);
@@ -2064,36 +2072,72 @@ a.bs-circle-button {
2064
2072
  --btn-secondary: transparent;
2065
2073
  --btn-shadow-color-active: transparent;
2066
2074
  }
2075
+ .bs-circle-button:where([data-variant="color-primary"]) {
2076
+ --btn-border-color-focused: var(--bs-ink-primary);
2077
+ --btn-text-color: var(--bs-ink-primary);
2078
+ --btn-text-color-hovered: var(--bs-primary-base);
2079
+ }
2080
+ /* DEPRECATED - blue variant (use primary instead) */
2067
2081
  .bs-circle-button:where([data-variant="color-blue"]) {
2068
2082
  --btn-border-color-focused: var(--bs-ink-primary);
2069
2083
  --btn-text-color: var(--bs-ink-primary);
2070
2084
  --btn-text-color-hovered: var(--bs-primary-base);
2071
2085
  }
2072
- .bs-circle-button:where([data-variant="color-royal"]) {
2073
- --btn-border-color-focused: var(--bs-ink-accent-1);
2074
- --btn-text-color: var(--bs-ink-accent-1);
2075
- --btn-text-color-hovered: var(--bs-accent-1-medium);
2086
+ .bs-circle-button:where([data-variant="color-positive"]) {
2087
+ --btn-border-color-focused: var(--bs-positive-base);
2088
+ --btn-text-color: var(--bs-ink-positive);
2089
+ --btn-text-color-hovered: var(--bs-positive-medium);
2076
2090
  }
2091
+ /* DEPRECATED - purple variant (use positive instead) */
2077
2092
  .bs-circle-button:where([data-variant="color-purple"]) {
2078
2093
  --btn-border-color-focused: var(--bs-positive-base);
2079
2094
  --btn-text-color: var(--bs-ink-positive);
2080
2095
  --btn-text-color-hovered: var(--bs-positive-medium);
2081
2096
  }
2082
- .bs-circle-button:where([data-variant="color-pink"]) {
2083
- --btn-border-color-focused: var(--bs-accent-3-base);
2084
- --btn-text-color: var(--bs-ink-accent-3);
2085
- --btn-text-color-hovered: var(--bs-accent-3-base);
2097
+ .bs-circle-button:where([data-variant="color-warning"]) {
2098
+ --btn-border-color-focused: var(--bs-ink-warning);
2099
+ --btn-text-color: var(--bs-ink-warning);
2100
+ --btn-text-color-hovered: var(--bs-warning-base);
2086
2101
  }
2102
+ /* DEPRECATED - orange variant (use warning instead) */
2087
2103
  .bs-circle-button:where([data-variant="color-orange"]) {
2088
2104
  --btn-border-color-focused: var(--bs-ink-warning);
2089
2105
  --btn-text-color: var(--bs-ink-warning);
2090
2106
  --btn-text-color-hovered: var(--bs-warning-base);
2091
2107
  }
2108
+ .bs-circle-button:where([data-variant="color-negative"]) {
2109
+ --btn-border-color-focused: var(--bs-ink-negative);
2110
+ --btn-text-color: var(--bs-ink-negative);
2111
+ --btn-text-color-hovered: var(--bs-negative-base);
2112
+ }
2113
+ /* DEPRECATED - red variant (use negative instead) */
2092
2114
  .bs-circle-button:where([data-variant="color-red"]) {
2093
2115
  --btn-border-color-focused: var(--bs-ink-regative);
2094
2116
  --btn-text-color: var(--bs-ink-negative);
2095
2117
  --btn-text-color-hovered: var(--bs-negative-base);
2096
2118
  }
2119
+ .bs-circle-button:where([data-variant="color-accent-1"]) {
2120
+ --btn-border-color-focused: var(--bs-ink-accent-1);
2121
+ --btn-text-color: var(--bs-ink-accent-1);
2122
+ --btn-text-color-hovered: var(--bs-accent-1-medium);
2123
+ }
2124
+ /* DEPRECATED - royal blue variant (use accent-1 instead) */
2125
+ .bs-circle-button:where([data-variant="color-royal"]) {
2126
+ --btn-border-color-focused: var(--bs-ink-accent-1);
2127
+ --btn-text-color: var(--bs-ink-accent-1);
2128
+ --btn-text-color-hovered: var(--bs-accent-1-medium);
2129
+ }
2130
+ .bs-circle-button:where([data-variant="color-accent-3"]) {
2131
+ --btn-border-color-focused: var(--bs-accent-3-base);
2132
+ --btn-text-color: var(--bs-ink-accent-3);
2133
+ --btn-text-color-hovered: var(--bs-accent-3-medium);
2134
+ }
2135
+ /* DEPRECATED - pink variant (use accent-3 instead) */
2136
+ .bs-circle-button:where([data-variant="color-pink"]) {
2137
+ --btn-border-color-focused: var(--bs-accent-3-base);
2138
+ --btn-text-color: var(--bs-ink-accent-3);
2139
+ --btn-text-color-hovered: var(--bs-accent-3-medium);
2140
+ }
2097
2141
  .bs-circle-button:where([data-variant="color-white"]) {
2098
2142
  --btn-border-color-focused: var(--bs-ink-white);
2099
2143
  --btn-text-color: var(--bs-ink-white);
@@ -2111,7 +2155,7 @@ a.bs-circle-button {
2111
2155
  }
2112
2156
  .bs-empty-state {
2113
2157
  --bs-empty-state-description-color: var(--bs-ink-light);
2114
- --bs-empty-state-icon-color: var(--bs-violet-300);
2158
+ --bs-empty-state-icon-color: var(--bs-accent-2-medium);
2115
2159
  --bs-empty-state-title-color: var(--bs-ink-base);
2116
2160
  --col-gap: var(--bs-space-6);
2117
2161
  --cta-spacing: var(--bs-space-4);
@@ -2832,7 +2876,7 @@ button:where(.bs-filter-button) {
2832
2876
  border-color: transparent;
2833
2877
  border-radius: var(--bs-space-1);
2834
2878
  border: 1px solid transparent;
2835
- color: var(--bs-royal-400);
2879
+ color: var(--bs-ink-accent-1);
2836
2880
  cursor: pointer;
2837
2881
  display: inline-flex;
2838
2882
  font-family: inherit;
@@ -2853,11 +2897,11 @@ button:where(.bs-filter-button) {
2853
2897
  }
2854
2898
  /* Hover */
2855
2899
  .bs-inline-tab:where(:not([data-selected]):hover) {
2856
- border-color: var(--bs-royal-400);
2900
+ border-color: var(--bs-ink-accent-1);
2857
2901
  }
2858
2902
  /* Keyboard Focus */
2859
2903
  .bs-inline-tab:where(:focus-visible) {
2860
- outline: 2px solid var(--bs-royal-400);
2904
+ outline: 2px solid var(--bs-ink-accent-1);
2861
2905
 
2862
2906
  &:where([data-selected]) {
2863
2907
  outline-offset: 2px;
@@ -2883,45 +2927,10 @@ button:where(.bs-filter-button) {
2883
2927
  /* -- Dark Mode Overrides -- */
2884
2928
  :where(.dark .bs-inline-tab) {
2885
2929
 
2886
- /* Ink */
2887
- &:not([data-selected], :disabled, [aria-disabled="true"]) {
2888
- color: var(--bs-royal-200);
2889
- }
2890
-
2891
2930
  /* Selected & Disabled */
2892
2931
  &[data-selected]:where(:disabled, [aria-disabled="true"]) {
2893
2932
  color: var(--bs-ink-invert-base);
2894
2933
  }
2895
-
2896
- /* Keyboard Focus */
2897
- &:not([disabled]):where(:focus-visible) {
2898
- outline-color: var(--bs-royal-200);
2899
- }
2900
-
2901
- /* Hover */
2902
- &:not([disabled]):where(:not([data-selected]):hover) {
2903
- border-color: var(--bs-royal-200);
2904
- }
2905
-
2906
- }
2907
- /* -- Softchoice Mode Overrides -- */
2908
- :where(.softchoice .bs-inline-tab) {
2909
-
2910
- /* Ink */
2911
- &:not([data-selected], :disabled, [aria-disabled="true"]) {
2912
- color: var(--bs-cobalt-400);
2913
- }
2914
-
2915
- /* Keyboard Focus */
2916
- &:not([disabled]):where(:focus-visible) {
2917
- outline-color: var(--bs-cobalt-400);
2918
- }
2919
-
2920
- /* Hover */
2921
- &:not([disabled]):where(:not([data-selected]):hover) {
2922
- border-color: var(--bs-cobalt-400);
2923
- }
2924
-
2925
2934
  }
2926
2935
  /* 0 0 1 for width to allow e.g. tailwind override */
2927
2936
  :is(div, *):where(.bs-input-addon) {
@@ -3028,7 +3037,7 @@ and issues with box-sizing
3028
3037
  /* -------- Inner-bordered styles -------- */
3029
3038
  /** Inner borders should be straight; shown only if variant: "inner-bordered" */
3030
3039
  .bs-input-addon:where([data-variant="inner-bordered"]) {
3031
- --input-addon-nested-border: var(--bs-violet-200);
3040
+ --input-addon-nested-border: var(--bs-border-input);
3032
3041
  }
3033
3042
  .bs-input-addon > :where(.bs-input-addon:not(:last-child, :focus-within, [data-part="right"])),
3034
3043
  .bs-input-addon > :where(:not(:last-child, :focus-within, [data-part="right"]))::after {
@@ -3122,7 +3131,7 @@ and issues with box-sizing
3122
3131
  /* Straight-lined ::before border to fill the gap below the rounded ::after border */
3123
3132
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :where(:focus-within)::before {
3124
3133
  border-bottom-width: 1px;
3125
- border-color: var(--bs-violet-300);
3134
+ border-color: var(--bs-border-input);
3126
3135
  border-radius: 0;
3127
3136
  border-top-width: 1px;
3128
3137
  z-index: 1;
@@ -3325,8 +3334,8 @@ data-autosize-icons="true" - see above
3325
3334
  .bs-boolean :where(input[data-error="true"]), /* deprecate this one in favor of next line */
3326
3335
  .bs-boolean:where([data-error="true"]),
3327
3336
  .bs-checkbox:where([data-error="true"]) {
3328
- --box-shadow: var(--bs-negative-base);
3329
- --outline-color: var(--bs-negative-base);
3337
+ --box-shadow: var(--bs-ink-negative);
3338
+ --outline-color: var(--bs-ink-negative);
3330
3339
  }
3331
3340
  /*
3332
3341
  HEADS-UP! Styling to look like an input is inherited from .bs-input
@@ -3425,73 +3434,88 @@ data-autosize-icons="true" - see above
3425
3434
  .bs-input-phone ul:where(.bs-dropdown-options-deprecated) {
3426
3435
  min-width: 7.5rem;
3427
3436
  }
3428
- :where(.bs-input-search) {
3429
- display: inline-block;
3437
+ .bs-input-search {
3438
+ display: grid;
3439
+ grid-template-columns: 1fr 2.5rem;
3440
+ align-items: center;
3430
3441
  width: 100%;
3442
+ height: var(--input-search-height, 2.5rem);
3431
3443
  }
3432
- .bs-input-search :where(.bs-icon svg) {
3433
- box-sizing: content-box;
3434
- }
3435
- .bs-input-search :where([data-component="bs-icon-search"]) {
3444
+ /* -- Icon -- */
3445
+ .bs-input-search-icon {
3436
3446
  --icon-size: var(--search-icon-size, 1.75rem);
3447
+ position: relative;
3448
+ grid-area: 1 / 1;
3437
3449
  padding: var(--search-icon-padding, 0 0 0 .75rem);
3450
+ height: 100%;
3451
+ pointer-events: none;
3452
+ z-index: 1;
3438
3453
  }
3439
- /* Clear Button */
3440
- .bs-input-search button {
3441
- align-items: center;
3442
- background-color: transparent;
3443
- border-color: transparent;
3444
- color: inherit;
3445
- cursor: pointer;
3454
+ .bs-input-search-icon :where(svg) {
3455
+ box-sizing: content-box;
3456
+ }
3457
+ /* -- Input -- */
3458
+ .bs-input-search-input {
3459
+ --input-padding-inline: .75rem;
3460
+ grid-area: 1 / 1 / 1 / -1;
3461
+ pointer-events: auto;
3462
+ }
3463
+ /* make room for search icon */
3464
+ /* can't use 0,1,0 here due to :is() usage in input-text.css trumping it */
3465
+ .bs-input-search-icon + .bs-input-search-input {
3466
+ padding-inline-start: 2.25rem;
3467
+ }
3468
+ /* make room for X button (so text doesn't overlap) */
3469
+ /* can't use 0,1,0 here due to :is() usage in input-text.css trumping it */
3470
+ .bs-input-search-input:has(+ .bs-input-search-button) {
3471
+ padding-inline-end: 2.25rem;
3472
+ }
3473
+ .bs-input-search:where(:focus-within) :where(.bs-input-search-input) {
3474
+ --input-border: var(--bs-blue-base);
3475
+ }
3476
+ /* -- Button -- */
3477
+ .bs-input-search-button {
3478
+ grid-area: 1 / 2 / 1 / -1;
3446
3479
  display: flex;
3447
- font-family: inherit;
3448
- font-size: var(--bs-text-base);
3480
+ align-items: center;
3481
+ justify-content: center;
3449
3482
  height: 100%;
3450
- padding-bottom: var(--bs-space-0);
3451
- padding-left: 0.75rem;
3452
- padding-right: 0.75rem;
3453
- padding-top: var(--bs-space-0);
3454
- position: relative;
3455
- text-decoration: none;
3483
+ cursor: pointer;
3484
+ background-color: inherit;
3456
3485
  transition: transform var(--bs-transition-fast) var(--bs-transition-ease);
3457
3486
  }
3458
- .bs-input-search button:where(:active) {
3459
- transform: scale(0.97);
3460
- transform-origin: center;
3461
- box-shadow: inset 0px 0px 4px 1px var(--bs-primary-base);
3462
- }
3463
- .bs-input-search button:where(:focus) {
3487
+ .bs-input-search-button:where(:focus-visible) {
3488
+ outline: none;
3464
3489
  border-radius: .25rem;
3465
- box-shadow: var(--focus-border) 0px 0px 0px 1px inset;
3466
- z-index: 1;
3490
+ box-shadow: var(--bs-blue-base) 0px 0px 0px 1px inset;
3467
3491
  }
3468
- /* Filter variant */
3469
- .bs-input-search:where([data-variant="filter"]) {
3492
+ /* -- Disabled -- */
3493
+ .bs-input-search:where(:has(:disabled)) {
3494
+ color: var(--bs-ink-disabled);
3495
+ }
3496
+ /* -- Filter Variant -- */
3497
+ .bs-input-search:where([data-variant="filter"]) :where(.bs-input-search-input) {
3470
3498
  --focus-border: transparent;
3471
3499
  --input-border: transparent;
3472
3500
  --input-addon-height: 1.5rem;
3473
- --input-caret: var(--bs-primary-base);
3501
+ --input-caret: var(--bs-blue-base);
3474
3502
  --input-padding-block: 0 0.125rem;
3475
- --input-padding-inline: 0.5rem;
3503
+ --input-padding-inline: 2.5rem 0.5rem;
3476
3504
  --input-placeholder: var(--bs-ink-light);
3477
3505
  --input-text-size: var(--bs-text-sm);
3478
3506
  --search-icon-size: 1rem;
3479
3507
  --search-icon-padding: 0;
3480
3508
  }
3481
- /* Filter variant: persist placeholder text color (`ink-light`) in dark mode */
3482
- :where(.dark) .bs-input-search:where([data-variant="filter"]) :is(input.bs-input)::-moz-placeholder {
3483
- --input-placeholder: var(--bs-ink-light);
3509
+ .bs-input-search:where([data-variant="filter"]):where(:focus-within) .bs-input-search-input {
3510
+ --input-border: transparent;
3484
3511
  }
3485
- :where(.dark) .bs-input-search:where([data-variant="filter"]) :is(input.bs-input)::placeholder {
3512
+ :where(.dark) .bs-input-search:where([data-variant="filter"]) .bs-input-search-input::-moz-placeholder {
3486
3513
  --input-placeholder: var(--bs-ink-light);
3487
3514
  }
3488
- /* Filter variant: cancels out base hover state styles */
3489
- .bs-input-addon:where([data-variant="filter"]):hover {
3490
- --input-bg: var(--bs-bg-base);
3515
+ :where(.dark) .bs-input-search:where([data-variant="filter"]) .bs-input-search-input::placeholder {
3516
+ --input-placeholder: var(--bs-ink-light);
3491
3517
  }
3492
- /* -------- Disabled styles -------- */
3493
- .bs-input-addon:where([data-variant="filter"][data-disabled="true"]),
3494
- .bs-input-addon:where([data-variant="filter"][data-disabled="true"]) :is(.bs-button, .bs-input) {
3518
+ .bs-input-search:where([data-variant="filter"]):where(:has(:disabled)) .bs-input-search-input {
3495
3519
  --input-bg: var(--bs-bg-base);
3496
3520
  --input-border: transparent;
3497
3521
  }
@@ -3724,11 +3748,17 @@ label:where(.bs-label) {
3724
3748
  }
3725
3749
  }
3726
3750
  .bs-option-group {
3727
- margin: var(--bs-space-3) 0;
3751
+ margin-bottom: var(--bs-space-6);
3728
3752
  padding-top: var(--bs-space-3);
3729
3753
  border-top: 1px solid var(--bs-border-base);
3754
+ display: flex;
3755
+ flex-direction: column;
3756
+ }
3757
+ .bs-option-group:where(:first-child) {
3758
+ padding-top: 0;
3759
+ border-top: none;
3730
3760
  }
3731
- .bs-option-group:where(:last-child) {
3761
+ .bs-option-group:where(:nth-last-child(1 of [data-visible="true"])) {
3732
3762
  margin-bottom: 0;
3733
3763
  }
3734
3764
  .bs-option-group:where(:has(.bs-option-group-title)) {
@@ -3744,27 +3774,47 @@ label:where(.bs-label) {
3744
3774
  display: flex;
3745
3775
  font-size: var(--bs-text-xs);
3746
3776
  font-weight: var(--bs-font-semibold);
3747
- margin: 0 0 var(--bs-space-3);
3748
- min-height: var(--bs-space-8);
3749
- padding: var(--bs-space-1) var(--bs-space-3);
3777
+ height: var(--bs-space-8);
3778
+ margin: 0 0 var(--bs-space-2);
3779
+ padding: var(--bs-space-1) var(--bs-space-3) var(--bs-space-1) 1.75rem;
3750
3780
  position: sticky;
3751
3781
  top: 0;
3782
+ order: -2;
3783
+ z-index: 1;
3784
+ }
3785
+ /* Separator for multiple selected options */
3786
+ .bs-option-group-multiple-hr {
3787
+ margin: 0 var(--bs-space-3) var(--bs-space-3);
3788
+ border-bottom: 0.0625rem solid var(--bs-border-base);
3789
+ }
3790
+ @media (min-width: 1166px) {
3791
+ .bs-option-group-title {
3792
+ padding: var(--bs-space-1) var(--bs-space-3);
3793
+ }
3752
3794
  }
3753
3795
  .bs-option {
3754
- padding: var(--bs-space-1) var(--bs-space-2);
3755
- color: var(--bs-ink-base);
3756
3796
  --description-color: var(--bs-ink-light);
3757
- cursor: pointer;
3758
3797
  border-left: 4px solid transparent;
3759
3798
  border-right: 4px solid transparent;
3799
+ color: var(--bs-ink-base);
3800
+ cursor: pointer;
3760
3801
  overflow-wrap: break-word;
3802
+ padding: var(--bs-space-1) var(--bs-space-3) var(--bs-space-1) var(--bs-space-6);
3761
3803
  scroll-margin-bottom: var(--bs-space-3);
3804
+ /* Make sure options are visible when scrolling with group title */
3805
+ /* This is group title height + margin + padding + border */
3806
+ scroll-margin-top: 2.5rem;
3807
+ }
3808
+ @media (min-width: 1166px) {
3809
+ .bs-option {
3810
+ padding: var(--bs-space-1) var(--bs-space-2);
3811
+ }
3762
3812
  }
3763
3813
  .bs-option {
3764
3814
  margin-bottom: var(--bs-space-2); /* ask ux: 12px is too much, can't see many menu options in view */
3765
3815
  }
3766
- /* is basically doing a last visible child selector, since filtered options and groups are hidden by v-show */
3767
- .bs-option:where(:not(:has(~ [data-visible="true"]))) {
3816
+ /* is basically doing a last visible child selector ignoring selectToTop, since filtered options and groups are hidden by v-show */
3817
+ .bs-option:where(:nth-last-child(1 of [data-visible="true"][data-selected-to-top="false"])) {
3768
3818
  margin-bottom: 0;
3769
3819
  }
3770
3820
  /* -- DISABLED -- */
@@ -3950,10 +4000,11 @@ label:where(.bs-label) {
3950
4000
  padding-right: 2px;
3951
4001
  width: auto;
3952
4002
  }
4003
+ /* todo: waiting to hear back from UX on disabled, but there is at least 1 exmple in code of a pill w/ disable */
3953
4004
  .bs-pill {
3954
4005
  --pill-background: var(--bs-bg-medium);
3955
4006
  --pill-border: transparent;
3956
- --pill-text: var(--bs-royal-400);
4007
+ --pill-text: var(--bs-ink-accent-1);
3957
4008
  --pill-gap: var(--bs-space-2);
3958
4009
 
3959
4010
  align-items: center;
@@ -3975,33 +4026,24 @@ label:where(.bs-label) {
3975
4026
  position: relative;
3976
4027
  text-decoration: none;
3977
4028
  }
3978
- :where(.bs-pill .bs-icon) {
3979
- height: 1rem;
3980
- width: 1rem;
3981
- }
3982
- /* ------------------------------- Dark mode (basic & status types only) ------------------------------- */
3983
- :where(.dark) .bs-pill {
3984
- --pill-text: var(--bs-royal-200);
4029
+ .bs-pill-content {
4030
+ display: inline-flex;
4031
+ align-items: center;
4032
+ gap: var(--pill-gap);
3985
4033
  }
3986
- /* ------------------------------- Softchoice mode (basic & status types only) ------------------------------- */
3987
- :where(.softchoice) .bs-pill {
3988
- --pill-text: var(--bs-cobalt-400);
4034
+ .bs-pill :where(.bs-icon) {
4035
+ height: 0.75rem;
4036
+ width: 0.75rem;
4037
+ flex-shrink: 0;
3989
4038
  }
3990
4039
  /* ------------------------------ Auto-truncation for content ------------------------------ */
3991
4040
  .bs-pill:has([data-truncate="true"]) {
3992
4041
  max-width: 100%;
3993
4042
  }
3994
- .bs-pill > :where([data-truncate="true"]) {
3995
- display: inline-block;
4043
+ .bs-pill-content:where([data-truncate="true"]) {
4044
+ white-space: nowrap;
3996
4045
  overflow: hidden;
3997
4046
  text-overflow: ellipsis;
3998
- white-space: nowrap;
3999
- }
4000
- /* If false, pass thru .bs-pill display styles */
4001
- .bs-pill > :where([data-truncate="false"]) {
4002
- display: inline-flex;
4003
- align-items: center;
4004
- gap: var(--pill-gap);
4005
4047
  }
4006
4048
  /* ------------------------------ Button and Link Styles ------------------------------ */
4007
4049
  :is(a, button).bs-pill {
@@ -4021,37 +4063,47 @@ label:where(.bs-label) {
4021
4063
  }
4022
4064
  /* ------------------------------ Status Styles ------------------------------ */
4023
4065
  .bs-pill:where([data-status]) {
4024
- --status-color: var(--bs-primary-base-fixed);
4025
- }
4026
- .bs-pill:where([data-status])::before {
4027
- background-color: var(--status-color);
4028
- border-radius: 100%;
4029
- content: '';
4030
- height: 12px;
4031
- width: 12px;
4066
+ font-size: var(--bs-text-xs);
4067
+ font-weight: var(--bs-font-semibold);
4068
+ color: var(--status-color);
4032
4069
  }
4033
4070
  /* ----- Status Colors ----- */
4034
- .bs-pill:where([data-status^="active"]) {
4035
- --status-color: var(--bs-primary-base-fixed);
4071
+ /* Disabled is being renamed to Neutral */
4072
+ .bs-pill:where([data-status^="neutral"], [data-status^="disabled"]) {
4073
+ --status-color: var(--bs-ink-light);
4074
+ --pill-background: var(--bs-accent-7-highlight);
4036
4075
  }
4037
- .bs-pill:where([data-status^="complete"]) {
4038
- --status-color: var(--bs-positive-base-fixed);
4039
- }
4040
- .bs-pill:where([data-status^="disabled"]) {
4041
- --status-color: var(--bs-ink-disabled);
4042
- }
4043
- .bs-pill:where([data-status^="error"]) {
4044
- --status-color: var(--bs-negative-dark);
4076
+ .bs-pill:where([data-status^="active"]) {
4077
+ --status-color: var(--bs-ink-primary);
4078
+ --pill-background: var(--bs-primary-highlight);
4045
4079
  }
4046
4080
  .bs-pill:where([data-status^="positive"]) {
4047
- --status-color: var(--bs-ecomm-positive-base-fixed);
4081
+ --status-color: var(--bs-ink-positive);
4082
+ --pill-background: var(--bs-positive-highlight);
4048
4083
  }
4049
4084
  .bs-pill:where([data-status^="warning"]) {
4050
- --status-color: var(--bs-warning-dark);
4085
+ --status-color: var(--bs-ink-warning);
4086
+ --pill-background: var(--bs-warning-highlight);
4087
+ }
4088
+ /* Error is being renamed to Negative */
4089
+ .bs-pill:where([data-status^="negative"],[data-status^="error"]) {
4090
+ --status-color: var(--bs-ink-negative);
4091
+ --pill-background: var(--bs-negative-highlight);
4051
4092
  }
4052
4093
  /* Deprecated; use "data-status disabled" instead */
4053
4094
  .bs-pill:where([data-status^="inactive"]) {
4054
- --status-color: var(--bs-gray-300);
4095
+ --status-color: var(--bs-gray-400);
4096
+ --pill-background: var(--bs-gray-100);
4097
+ }
4098
+ /* Deprecated; use "data-status positive" instead */
4099
+ .bs-pill:where([data-status^="complete"]) {
4100
+ --status-color: var(--bs-purple-500);
4101
+ --pill-background: var(--bs-purple-100);
4102
+ }
4103
+ /* Dark mode selector for complete */
4104
+ :where(.dark) .bs-pill:where([data-status^="complete"]) {
4105
+ --status-color: var(--bs-purple-100);
4106
+ --pill-background: var(--bs-purple-500);
4055
4107
  }
4056
4108
  /* ------------------------------ Filter Styles ------------------------------ */
4057
4109
  .bs-pill:where([data-variant^="filter"]) {
@@ -4065,6 +4117,10 @@ label:where(.bs-label) {
4065
4117
  :is(a, button).bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
4066
4118
  --pill-border: var(--bs-ink-base);
4067
4119
  }
4120
+ /* ------------------------------ Variant: "White" Styles ------------------------------ */
4121
+ .bs-pill:where([data-variant="white"]) {
4122
+ background-color: var(--bs-bg-base-to-medium);
4123
+ }
4068
4124
  /* ------------------------------ Variant: "Filter Add" Styles ------------------------------ */
4069
4125
  /* Black + */
4070
4126
  .bs-pill:where([data-variant^="filter"][data-variant*="add"])::after {
@@ -4083,7 +4139,7 @@ label:where(.bs-label) {
4083
4139
  :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):not(:disabled, [aria-disabled="true"])::after {
4084
4140
  content: url("data:image/svg+xml,%3Csvg width='8' height='8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 .703 7.297 0 4 3.297.703 0 0 .703 3.297 4 0 7.297.703 8 4 4.703 7.297 8 8 7.297 4.703 4 8 .703Z' fill='%23ffffff'/%3E%3C/svg%3E%0A");
4085
4141
  }
4086
- /* ------------------------------ Variant: "Filter Active" Styles ------------------------------ */
4142
+ /* ------------------------------ Variant: "Filter Active" Styles DEPRECATED ------------------------------ */
4087
4143
  .bs-pill:where([data-variant^="filter"][data-active]:not([data-active="false"])) {
4088
4144
  --pill-background: var(--bs-primary-base-fixed);
4089
4145
  --pill-border: transparent;
@@ -4110,6 +4166,8 @@ label:where(.bs-label) {
4110
4166
  --pill-text: var(--bs-white);
4111
4167
  --pill-gap: var(--bs-space-1);
4112
4168
  text-transform: uppercase;
4169
+ font-size: var(--bs-text-xs);
4170
+ font-weight: var(--bs-font-semibold);
4113
4171
  }
4114
4172
  .bs-pill:where([data-variant^="live"]):hover {
4115
4173
  --pill-border: transparent;
@@ -4123,6 +4181,7 @@ label:where(.bs-label) {
4123
4181
  width: 12px;
4124
4182
  }
4125
4183
  /* ------------------------------ Variant: "Inactive" Styles ------------------------------ */
4184
+ /* Deprecated; use Status Neutral instead */
4126
4185
  .bs-pill:where([data-variant^="inactive"]) {
4127
4186
  --pill-background: var(--bs-neutral-base);
4128
4187
  --pill-text: var(--bs-ink-invert-base);
@@ -5077,7 +5136,7 @@ a.bs-text-button {
5077
5136
  /* ------------ Status colors ------------ */
5078
5137
  .bs-timeline :where(.bs-step-item[data-status="in-progress"]) {
5079
5138
  --step-color: var(--bs-ink-base);
5080
- --progress-step-bg: var(--bs-positive-light);
5139
+ --progress-step-bg: var(--bs-accent-4-base);
5081
5140
  }
5082
5141
  .bs-progress-bar :where(.bs-step-item[data-status="not-started"]) {
5083
5142
  --step-color: var(--bs-ink-light);
@@ -5093,11 +5152,11 @@ a.bs-text-button {
5093
5152
  .bs-timeline :where(.bs-step-item[data-status="complete"]),
5094
5153
  .bs-timeline :where(.bs-step-item[data-status="paused"]),
5095
5154
  .bs-timeline :where(.bs-step-item[data-status="ongoing"]) {
5096
- --step-color: var(--bs-ink-positive);
5097
- --progress-step-bg: var(--bs-positive-medium);
5155
+ --step-color: var(--bs-ink-accent-4);
5156
+ --progress-step-bg: var(--bs-accent-4-medium);
5098
5157
  }
5099
5158
  :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="base"]) {
5100
- --progress-step-bg: var(--bs-positive-base);
5159
+ --progress-step-bg: var(--bs-accent-4-base);
5101
5160
  }
5102
5161
  .bs-timeline :where(.bs-step-item[data-status="warning"]) {
5103
5162
  --step-color: var(--bs-ink-warning);
@@ -5124,6 +5183,27 @@ a.bs-text-button {
5124
5183
  --toggle-color: var(--bs-white);
5125
5184
  --top-offset: 48px;
5126
5185
  }
5186
+ .bs-vertical-nav-wrapper:where([data-bg-variant="bg-base"]) {
5187
+ --active-color: var(--bs-blue-10);
5188
+ --bg-color: var(--bs-bg-base);
5189
+ --border-color: var(--bs-border-medium);
5190
+ --text-color: var(--bs-ink-medium);
5191
+ --link-color: var(--bs-ink-medium);
5192
+ --link-hover-color: var(--bs-ink-blue);
5193
+ --link-active-color: var(--bs-ink-blue);
5194
+ --toggle-bg-color: var(--bs-bg-base);
5195
+ --toggle-color: var(--bs-ink-medium);
5196
+ }
5197
+ .dark :where(.bs-vertical-nav-wrapper),
5198
+ .dark :where(.bs-vertical-nav-wrapper:where([data-bg-variant="bg-base"])) {
5199
+ --active-color: rgba(255, 255, 255, 0.25);
5200
+ --bg-color: var(--bs-bg-base);
5201
+ --border-color: var(--bs-border-medium);
5202
+ --text-color: var(--bs-white);
5203
+ --link-color: var(--bs-white);
5204
+ --link-hover-color: var(--bs-white);
5205
+ --link-active-color: var(--bs-white);
5206
+ }
5127
5207
  .bs-vertical-nav {
5128
5208
  -ms-overflow-style: none; /* Internet Explorer 10+ */
5129
5209
  background-color: var(--bg-color);
@@ -5147,30 +5227,25 @@ a.bs-text-button {
5147
5227
  /* Slight delay for visibility to change prior to opacity */
5148
5228
  transition: opacity var(--bs-transition-medium) var(--bs-transition-ease) 10ms;
5149
5229
  visibility: hidden;
5230
+ pointer-events: none;
5150
5231
  width: auto;
5151
- z-index: 1000;
5232
+ z-index: 999;
5152
5233
  }
5153
5234
  .bs-vertical-nav:where([data-mobile-shown="true"]) {
5154
5235
  opacity: 1;
5155
5236
  visibility: visible;
5237
+ pointer-events: auto;
5156
5238
  }
5157
5239
  .bs-vertical-nav:where([data-collapsible="true"]) {
5158
5240
  transition: opacity 200ms ease 10ms, width 350ms cubic-bezier(0.4, 0, 0.2, 1);
5159
5241
  }
5160
- .dark .bs-vertical-nav-wrapper {
5161
- --active-color: rgba(255, 255, 255, 0.25);
5162
- --bg-color: var(--bs-bg-base);
5163
- --border-color: var(--bs-border-medium);
5164
- }
5165
5242
  @media (min-width: 1166px) {
5166
5243
  .bs-vertical-nav {
5167
5244
  opacity: 1;
5168
- padding-bottom: 1rem;
5169
- padding-left: 0.5rem;
5170
- padding-right: 0.5rem;
5171
- padding-top: 1rem;
5245
+ padding: 1rem;
5172
5246
  right: auto;
5173
5247
  visibility: visible;
5248
+ pointer-events: auto;
5174
5249
  width: var(--bs-vertical-nav-width);
5175
5250
  }
5176
5251
 
@@ -5201,7 +5276,7 @@ a.bs-text-button {
5201
5276
  position: fixed;
5202
5277
  left: calc(var(--bs-vertical-nav-width) - 0.5rem);
5203
5278
  pointer-events: auto; /* Ensure button is clickable */
5204
- top: calc(var(--top-offset) + 3rem); /* top-offset + 3rem */
5279
+ top: calc(var(--top-offset) + 1.125rem); /* top-offset + 18px */
5205
5280
  transition: left 300ms ease-out, opacity 100ms ease-out;
5206
5281
  z-index: 1002; /* Above nav to prevent hover conflicts */
5207
5282
  }
@@ -5211,11 +5286,11 @@ a.bs-text-button {
5211
5286
  opacity: 1;
5212
5287
  transition: left 300ms ease-out, opacity 100ms ease-out;
5213
5288
  }
5214
-
5289
+
5215
5290
  .bs-vertical-nav-toggle:where([data-collapsed="true"]) {
5216
5291
  left: calc(var(--bs-vertical-nav-collapsed-width) - 0.5rem);
5217
5292
  }
5218
-
5293
+
5219
5294
  /* Adjust position for narrow variant when NOT collapsed */
5220
5295
  .bs-vertical-nav-toggle:where([data-narrow="true"]:not([data-collapsed="true"])) {
5221
5296
  left: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem);
@@ -5231,18 +5306,18 @@ a.bs-text-button {
5231
5306
  }
5232
5307
  /* ===== Sections ===== */
5233
5308
  .bs-vertical-nav :where(.bs-vertical-nav-section) {
5234
- border-top: 2px solid var(--border-color);
5309
+ border-top: 1px solid var(--border-color);
5235
5310
  margin-top: 0.5rem;
5236
5311
  padding-top: 0.5rem;
5237
5312
  }
5238
5313
  @media (min-width: 1166px) {
5239
5314
  .bs-vertical-nav :where(.bs-vertical-nav-section) {
5240
- margin-top: 0.25rem;
5315
+ margin-top: 0.5rem;
5241
5316
  }
5242
5317
  }
5243
5318
  /* Divider-only sections have no additional padding since no toggle button */
5244
5319
  .bs-vertical-nav :where(.bs-vertical-nav-section[data-divider-only="true"]) {
5245
- padding-top: 0.25rem;
5320
+ padding-top: 0.5rem;
5246
5321
  }
5247
5322
  /* Don't show border if the very first item is a section */
5248
5323
  .bs-vertical-nav :where(ul li:first-child) {
@@ -5272,7 +5347,7 @@ a.bs-text-button {
5272
5347
  @media (min-width: 1166px) {
5273
5348
  .bs-vertical-nav :where(.bs-vertical-nav-section-toggle) {
5274
5349
  /* nav width - nav left padding - nav right padding */
5275
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
5350
+ width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem);
5276
5351
  }
5277
5352
 
5278
5353
  .bs-vertical-nav :where(.bs-vertical-nav-section-toggle span:first-child) {
@@ -5280,7 +5355,7 @@ a.bs-text-button {
5280
5355
  text-align: start;
5281
5356
  text-overflow: ellipsis;
5282
5357
  /* nav width - nav left padding - nav right padding - link left padding - link right padding - caret width */
5283
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem - 0.75rem);
5358
+ width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem - 0.75rem - 0.75rem - 0.75rem);
5284
5359
  }
5285
5360
  }
5286
5361
  .bs-vertical-nav :where(.bs-vertical-nav-section-toggle-caret) {
@@ -5303,11 +5378,6 @@ a.bs-text-button {
5303
5378
  margin-top: 0;
5304
5379
  padding-left: 0;
5305
5380
  }
5306
- @media (min-width: 1166px) {
5307
- .bs-vertical-nav :where(ul) {
5308
- gap: 0.25rem;
5309
- }
5310
- }
5311
5381
  /* ===== Nav List Items / Links */
5312
5382
  .bs-vertical-nav :where(ul li a) {
5313
5383
  align-items: center;
@@ -5337,13 +5407,13 @@ a.bs-text-button {
5337
5407
  min-height: 2.5rem; /* Fixed minimum height to prevent height changes */
5338
5408
  padding: 0.5rem 0.75rem; /* Explicit padding for consistency */
5339
5409
  /* nav width - nav left padding - nav right padding */
5340
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
5410
+ width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem);
5341
5411
  }
5342
5412
 
5343
5413
  /* Collapsed state width */
5344
5414
  .bs-vertical-nav:where([data-collapsed="true"]) :where(ul li a) {
5345
5415
  /* collapsed width - nav left padding - nav right padding */
5346
- width: calc(var(--bs-vertical-nav-collapsed-width) - 0.5rem - 0.5rem);
5416
+ width: calc(var(--bs-vertical-nav-collapsed-width) - 1rem - 1rem);
5347
5417
  }
5348
5418
 
5349
5419
  /* Text overflow - normal width - no icon */
@@ -5352,7 +5422,7 @@ a.bs-text-button {
5352
5422
  text-overflow: ellipsis;
5353
5423
  white-space: nowrap;
5354
5424
  /* nav width - nav left padding - nav right padding - link left padding - link right padding */
5355
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem);
5425
+ width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem - 0.75rem - 0.75rem);
5356
5426
  }
5357
5427
 
5358
5428
  /* Text overflow - normal width - with icon */
@@ -5361,7 +5431,7 @@ a.bs-text-button {
5361
5431
  text-overflow: ellipsis;
5362
5432
  white-space: nowrap;
5363
5433
  /* nav width - nav left padding - nav right padding - link left padding - link right padding - icon width - icon gap */
5364
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem - 1rem - 0.5rem);
5434
+ width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem - 0.75rem - 0.75rem - 1rem - 0.5rem);
5365
5435
  }
5366
5436
 
5367
5437
  .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a) {
@@ -5372,7 +5442,7 @@ a.bs-text-button {
5372
5442
  padding: 0.5rem 0.75rem; /* 8px 12px - matches Figma */
5373
5443
  text-align: center;
5374
5444
  /* nav width - nav left padding - nav right padding */
5375
- width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
5445
+ width: calc(var(--bs-vertical-nav-narrow-width) - 1rem - 1rem);
5376
5446
  }
5377
5447
 
5378
5448
  /* Text overflow - narrow width */
@@ -5385,10 +5455,21 @@ a.bs-text-button {
5385
5455
  width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
5386
5456
  }
5387
5457
  }
5458
+ .bs-vertical-nav-section:where([data-app-links="true"]) {
5459
+ padding-top: 1rem;
5460
+ }
5461
+ .bs-vertical-nav-section:where([data-app-links="true"]) :where(ul li a) {
5462
+ padding: 0.375rem 0.5rem;
5463
+ font-size: 0.75rem;
5464
+ font-weight: 600;
5465
+ }
5388
5466
  .bs-vertical-nav :where(ul li a:hover) {
5389
5467
  color: var(--link-hover-color);
5390
5468
  font-weight: 600;
5391
5469
  }
5470
+ .bs-vertical-nav-section:where([data-app-links="true"]) :where(ul li a:hover) {
5471
+ color: var(--bs-ink-blue);
5472
+ }
5392
5473
  .bs-vertical-nav :where(ul li a[data-active="true"]) {
5393
5474
  background-color: var(--active-color);
5394
5475
  color: var(--link-active-color);
@@ -5406,7 +5487,6 @@ a.bs-text-button {
5406
5487
  .bs-vertical-nav:not([data-narrow="true"]) :where(.bs-vertical-nav-link-icon) {
5407
5488
  height: 0.875rem;
5408
5489
  width: 0.875rem;
5409
- margin-left: 0.25rem; /* Visual centering adjustment */
5410
5490
  }
5411
5491
 
5412
5492
  /* Narrow variant icons - 16px (inherits from base) */
@@ -5415,6 +5495,11 @@ a.bs-text-button {
5415
5495
  width: 1rem;
5416
5496
  }
5417
5497
  }
5498
+ .bs-vertical-nav-section:where([data-app-links="true"]) .bs-vertical-nav-link-icon {
5499
+ height: 1.5rem;
5500
+ width: 1.5rem;
5501
+ margin-left: 0;
5502
+ }
5418
5503
  /* Default: Show text on mobile */
5419
5504
  .bs-vertical-nav :where(ul li a > span:last-child) {
5420
5505
  opacity: 1;
@@ -5465,7 +5550,7 @@ a.bs-text-button {
5465
5550
 
5466
5551
  /* Expand link widths on hover when collapsed */
5467
5552
  .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"]) :where(ul li a) {
5468
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
5553
+ width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem);
5469
5554
  }
5470
5555
 
5471
5556
  /* Narrow variant links should respect narrow width on hover */
@@ -5478,7 +5563,6 @@ a.bs-text-button {
5478
5563
  opacity: 1;
5479
5564
  visibility: visible;
5480
5565
  width: auto;
5481
- overflow: visible;
5482
5566
  }
5483
5567
 
5484
5568
  /* Hide toggle button on hover when collapsed - but NOT when hovering the button itself */
@@ -5492,6 +5576,16 @@ a.bs-text-button {
5492
5576
  display: flex;
5493
5577
  }
5494
5578
  }
5579
+ /* ===== Top Content ===== */
5580
+ .bs-vertical-nav :where(.bs-vertical-nav-top-content) {
5581
+ margin-bottom: 0.5rem;
5582
+ padding: 0;
5583
+ }
5584
+ @media (min-width: 1166px) {
5585
+ .bs-vertical-nav :where(.bs-vertical-nav-top-content) {
5586
+ margin-bottom: 0.75rem;
5587
+ }
5588
+ }
5495
5589
  /* ===== End Items ===== */
5496
5590
  .bs-vertical-nav :where(.bs-vertical-nav-end-items) {
5497
5591
  display: flex;
@@ -5563,9 +5657,6 @@ a.bs-text-button {
5563
5657
  overflow: hidden;
5564
5658
  z-index: var(--bs-popover-z-index);
5565
5659
  }
5566
- .bs-popover-wrap .bs-backdrop {
5567
- z-index: -1;
5568
- }
5569
5660
  .bs-popover {
5570
5661
  /* absolute positioning is needed for floating-ui, i.e. to anchor to element (is unset if anchored to viewport) */
5571
5662
  position: absolute;
@@ -5655,13 +5746,6 @@ a.bs-text-button {
5655
5746
  .bs-popover-leave-active {
5656
5747
  transition-duration: var(--bs-popover-transition-duration)
5657
5748
  }
5658
- .bs-popover-enter-active .bs-backdrop,
5659
- .bs-popover-leave-active .bs-backdrop {
5660
- transition-property: opacity;
5661
- transition-duration: var(--bs-popover-transition-duration);
5662
- transition-timing-function: var(--bs-transition-cubic);
5663
- }
5664
- .bs-popover-enter-from .bs-backdrop,
5665
5749
  .bs-popover-leave-to .bs-backdrop {
5666
5750
  opacity: 0;
5667
5751
  }
@@ -5798,13 +5882,6 @@ a.bs-text-button {
5798
5882
  .bs-flyout-leave-active {
5799
5883
  transition-duration: var(--bs-popover-transition-duration);
5800
5884
  }
5801
- .bs-flyout-enter-active .bs-backdrop,
5802
- .bs-flyout-leave-active .bs-backdrop {
5803
- transition-property: opacity;
5804
- transition-duration: var(--bs-transition-leisurely);
5805
- transition-timing-function: var(--bs-transition-cubic);
5806
- }
5807
- .bs-flyout-enter-from .bs-backdrop,
5808
5885
  .bs-flyout-leave-to .bs-backdrop {
5809
5886
  opacity: 0;
5810
5887
  }
@@ -5880,13 +5957,6 @@ a.bs-text-button {
5880
5957
  .bs-modal-leave-active {
5881
5958
  transition-duration: var(--bs-popover-transition-duration);
5882
5959
  }
5883
- .bs-modal-enter-active .bs-backdrop,
5884
- .bs-modal-leave-active .bs-backdrop {
5885
- transition-property: opacity;
5886
- transition-duration: var(--bs-transition-leisurely);
5887
- transition-timing-function: var(--bs-transition-cubic);
5888
- }
5889
- .bs-modal-enter-from .bs-backdrop,
5890
5960
  .bs-modal-leave-to .bs-backdrop {
5891
5961
  opacity: 0;
5892
5962
  }
@@ -5972,14 +6042,10 @@ a.bs-text-button {
5972
6042
  --toast-icon-color: var(--bs-ink-positive);
5973
6043
  --toast-variant-color: var(--bs-positive-base);
5974
6044
  }
5975
- .dark :where(.bs-toast[data-variant="positive"]) {
5976
- --toast-icon-color: var(--bs-positive-light);
5977
- --toast-variant-color: var(--bs-positive-light);
5978
- }
5979
6045
  .bs-toast:where([data-variant="negative"]) {
5980
6046
  --toast-icon: var(--toast-icon-warning);
5981
- --toast-icon-color: var(--bs-negative-dark);
5982
- --toast-variant-color: var(--bs-negative-dark);
6047
+ --toast-icon-color: var(--bs-negative-base);
6048
+ --toast-variant-color: var(--bs-negative-base);
5983
6049
  }
5984
6050
  /* Toast Header - auto-add the icon */
5985
6051
  .bs-toast :where(.bs-pop-header:not(:has(.bs-pop-title, .bs-pop-subtitle)))::before,
@@ -6018,52 +6084,185 @@ a.bs-text-button {
6018
6084
  BsDropdown inherits base styles from its BsPopover root element
6019
6085
  ...so some of these styles override those defaults.
6020
6086
  */
6087
+ /* -- DROPDOWN -- */
6088
+ /* Note: Assumes mobile sheet by default */
6089
+ /* Note: Some heights for reference */
6090
+ /* filter (desktop): 4rem (64px) */
6091
+ /* filter (mobile sheet): 5.5rem (88px) */
6092
+ /* mobile header (heading and description): 6rem (96px) */
6093
+ /* mobile header (just heading text): 4.25rem (68px) */
6094
+ /* mobile sheet footer: 3rem (48px) */
6021
6095
  .bs-dropdown {
6096
+ --bs-popover-width: 100dvw;
6022
6097
  background-color: var(--bs-bg-base-to-medium);
6023
- max-height: 20rem;
6098
+ height: 60dvh;
6099
+ margin: 0;
6100
+ max-width: 100dvw;
6024
6101
  padding: 0;
6025
6102
  }
6026
- /* filter could be "display: none" if mounted for it's logic, yet hidden due to using an outside input/model */
6027
- .bs-dropdown:where(:has(.bs-dropdown-filter:not([style*="display: none"]))) {
6028
- padding-top: 0;
6103
+ /* Don't use mobile sheet at any breakpoint */
6104
+ .bs-dropdown:where(:not([data-mobile-sheet])) {
6105
+ --bs-popover-width: 20rem;
6106
+ height: unset;
6107
+ max-height: 20rem; /* 320px */
6108
+ max-width: calc(100dvw - 3rem);
6029
6109
  }
6030
- .bs-dropdown :where(hr) {
6031
- margin: var(--bs-space-3) 0;
6110
+ @media (min-width: 752px) {
6111
+ /* Remove bottom drawer at tablet breakpoint */
6112
+ .bs-dropdown:where([data-mobile-sheet="mobile"]) {
6113
+ --bs-popover-width: 20rem;
6114
+ height: unset;
6115
+ max-height: 20rem; /* 320px */
6116
+ max-width: calc(100dvw - 3rem);
6117
+ }
6032
6118
  }
6033
- .bs-dropdown:where(:focus-visible) {
6034
- outline: none;
6119
+ @media (min-width: 1166px) {
6120
+ /* Remove bottom drawer at desktop breakpoint */
6121
+ .bs-dropdown:where([data-mobile-sheet="tablet"]) {
6122
+ --bs-popover-width: 20rem;
6123
+ height: unset;
6124
+ max-height: 20rem; /* 320px */
6125
+ max-width: calc(100dvw - 3rem);
6126
+ }
6035
6127
  }
6128
+ /* Here if a consumer adds their own hr between BsOptions. Just don't override the internal option group separator. */
6129
+ .bs-dropdown :where(hr:not(.bs-option-group-multiple-hr)) {
6130
+ margin: var(--bs-space-3) 0;
6131
+ }
6132
+ /* -- LIST -- */
6036
6133
  .bs-dropdown-list {
6037
- max-height: 20rem;
6134
+ display: flex;
6135
+ flex-direction: column;
6136
+ }
6137
+ /* Only add padding, etc when there is at least one child visible */
6138
+ .bs-dropdown-list:where(:has(.bs-option[data-visible="true"], .bs-option-group[data-visible="true"])) {
6139
+ flex: 1;
6038
6140
  overflow-y: auto;
6039
6141
  overscroll-behavior: contain;
6040
6142
  padding: var(--bs-space-3) 0;
6041
6143
  }
6144
+ .bs-dropdown-list:where(:has( .bs-option-group)) {
6145
+ padding-top: 0;
6146
+ }
6042
6147
  .bs-dropdown-list:where(:focus-visible) {
6043
6148
  outline: none;
6044
6149
  }
6045
6150
  .bs-dropdown:where(:has(.bs-dropdown-filter)) :where(.bs-dropdown-list) {
6046
6151
  padding-top: 0;
6047
- /* filter input is 4rem, so 20rem (default) - 4rem = 16rem */
6048
- max-height: 16rem;
6152
+ }
6153
+ /* Move selected options to the top */
6154
+ .bs-dropdown-list:where([aria-multiselectable="true"]) :where(.bs-option:where([data-selected-to-top="true"])) {
6155
+ order: -1;
6156
+ }
6157
+ /* Separator for multiple selected options */
6158
+ .bs-dropdown-multiple-hr {
6159
+ margin: 0 var(--bs-space-3) var(--bs-space-3);
6160
+ border-bottom: 0.0625rem solid var(--bs-accent-7-light);
6161
+ }
6162
+ /* -- MOBILE HEADER -- */
6163
+ /* Mobile sheet header */
6164
+ .bs-dropdown :where(.bs-dropdown-mobile-header) {
6165
+ border-bottom: 1px solid var(--bs-border-base);
6166
+ padding: var(--bs-space-6);
6167
+ }
6168
+ /* Hide header if not using mobile sheet */
6169
+ .bs-dropdown:where(:not([data-mobile-sheet])) :where(.bs-dropdown-mobile-header) {
6170
+ display: none;
6171
+ }
6172
+ /* Hide header at tablet breakpoint if only using mobile sheet */
6173
+ @media (min-width: 752px) {
6174
+ .bs-dropdown:where([data-mobile-sheet="mobile"]) :where(.bs-dropdown-mobile-header) {
6175
+ display: none;
6176
+ }
6177
+ }
6178
+ /* Hide header at desktop breakpoint if only using tablet sheet */
6179
+ @media (min-width: 1166px) {
6180
+ .bs-dropdown:where([data-mobile-sheet="tablet"]) :where(.bs-dropdown-mobile-header) {
6181
+ display: none;
6182
+ }
6183
+ }
6184
+ .bs-dropdown :where(.bs-dropdown-mobile-heading) {
6185
+ font-size: var(--bs-text-lg);
6186
+ line-height: var(--bs-leading-none);
6187
+ }
6188
+ .bs-dropdown :where(.bs-dropdown-mobile-description) {
6189
+ color: var(--bs-ink-light);
6190
+ font-size: var(--bs-text-base);
6191
+ padding-top: var(--bs-space-1);
6192
+ }
6193
+ /* -- MOBILE FOOTER -- */
6194
+ /* Mobile sheet footer, show by default */
6195
+ .bs-dropdown-mobile-footer {
6196
+ display: flex;
6197
+ }
6198
+ /* Hide footer if not using mobile sheet */
6199
+ .bs-dropdown:where(:not([data-mobile-sheet])) :where(.bs-dropdown-mobile-footer) {
6200
+ display: none;
6201
+ }
6202
+ @media (min-width: 752px) {
6203
+ /* Hide footer at tablet breakpoint if only using mobile sheet */
6204
+ .bs-dropdown:where([data-mobile-sheet="mobile"]) :where(.bs-dropdown-mobile-footer) {
6205
+ display: none;
6206
+ }
6207
+ }
6208
+ @media (min-width: 1166px) {
6209
+ /* Hide footer at desktop breakpoint if only using tablet sheet */
6210
+ .bs-dropdown:where([data-mobile-sheet="tablet"]) :where(.bs-dropdown-mobile-footer) {
6211
+ display: none;
6212
+ }
6213
+ }
6214
+ .bs-dropdown-mobile-footer :where(.bs-button) {
6215
+ margin: var(--bs-space-2) var(--bs-space-6);
6216
+ width: 100%;
6217
+ }
6218
+ /* -- CLOSE BUTTON -- */
6219
+ /* Override popover button positioning for mobile drawer */
6220
+ .bs-dropdown :where(.bs-popover-close-button) {
6221
+ right: var(--bs-space-4);
6222
+ top: var(--bs-space-4);
6049
6223
  }
6050
6224
  /* -- FILTER -- */
6051
6225
  .bs-dropdown-filter {
6052
6226
  position: sticky;
6053
6227
  top: 0;
6054
- padding: var(--bs-space-3);
6055
- /* fade to transparent in bottom padding area, so scrolling menu items under filter looks better */
6056
- background-image: linear-gradient(
6057
- var(--bs-bg-base-to-medium) calc(100% - var(--bs-space-3)),
6058
- transparent 100%
6059
- );
6228
+ padding: var(--bs-space-6) var(--bs-space-3);
6060
6229
  z-index: 1;
6061
6230
  }
6231
+ /* No mobile sheet, so always use desktop padding */
6232
+ .bs-dropdown:where(:not([data-mobile-sheet])) :where(.bs-dropdown-filter) {
6233
+ padding: var(--bs-space-3);
6234
+ }
6235
+ /* Mobile sheet, so use desktop padding at tablet breakpoint */
6236
+ @media (min-width: 752px) {
6237
+ .bs-dropdown:where([data-mobile-sheet="mobile"]) :where(.bs-dropdown-filter) {
6238
+ padding: var(--bs-space-3);
6239
+ }
6240
+ }
6241
+ /* Tablet sheet, so use desktop padding at desktop breakpoint */
6242
+ @media (min-width: 1166px) {
6243
+ .bs-dropdown:where([data-mobile-sheet="tablet"]) :where(.bs-dropdown-filter) {
6244
+ padding: var(--bs-space-3);
6245
+ }
6246
+ }
6247
+ .bs-dropdown-filter:where([data-hide-input="true"]) {
6248
+ padding-top: 0;
6249
+ }
6062
6250
  .bs-dropdown-filter-icon {
6063
6251
  margin-left: var(--bs-space-3);
6064
6252
  }
6065
6253
  .bs-dropdown-filter-input {
6254
+ overflow: hidden;
6066
6255
  padding-inline: var(--bs-space-2);
6256
+ text-overflow: ellipsis;
6257
+ white-space: nowrap;
6258
+ }
6259
+ .bs-dropdown-filter-hint {
6260
+ color: var(--bs-ink-light);
6261
+ font-size: var(--bs-text-xs);
6262
+ padding-top: var(--bs-space-2);
6263
+ }
6264
+ .bs-dropdown-filter:where([data-hide-input="true"]) :where(.bs-dropdown-filter-hint) {
6265
+ padding-top: var(--bs-space-4);
6067
6266
  }
6068
6267
  /* override form-text-fields.css style that hides placeholder when inputs are focused */
6069
6268
  .bs-dropdown-filter-input::-moz-placeholder {
@@ -6087,14 +6286,19 @@ a.bs-text-button {
6087
6286
  box-shadow: 0px 0px 0px 1px inset var(--bs-primary-base);
6088
6287
  }
6089
6288
  /* -- SIZING -- */
6090
- .bs-dropdown:where([data-size="sm"]) {
6091
- --bs-popover-width: 10rem; /* 160px */
6092
- }
6093
- .bs-dropdown:where([data-size="md"]) {
6094
- --bs-popover-width: 20rem; /* 320px */
6095
- }
6096
- .bs-dropdown:where([data-size="lg"]) {
6097
- --bs-popover-width: 28rem; /* 448px */
6289
+ /* Only applies to non-mobile */
6290
+ @media (min-width: 1166px) {
6291
+ .bs-dropdown:where([data-size="sm"]) {
6292
+ --bs-popover-width: 10rem; /* 160px */
6293
+ }
6294
+
6295
+ .bs-dropdown:where([data-size="md"]) {
6296
+ --bs-popover-width: 20rem; /* 320px */
6297
+ }
6298
+
6299
+ .bs-dropdown:where([data-size="lg"]) {
6300
+ --bs-popover-width: 28rem; /* 448px */
6301
+ }
6098
6302
  }
6099
6303
  /*
6100
6304
  HEADS-UP:
@@ -6102,16 +6306,14 @@ a.bs-text-button {
6102
6306
  so some of these styles are there to override those defaults.
6103
6307
  */
6104
6308
  .bs-tooltip {
6309
+ display: block;
6105
6310
  padding: var(--bs-space-4);
6106
6311
  font-size: var(--bs-text-sm);
6107
- color: var(--bs-ink-violet);
6312
+ color: var(--bs-ink-accent-2);
6108
6313
  text-align: center;
6109
6314
  line-height: var(--bs-leading-lg);
6110
6315
  background-color: var(--bs-bg-base-to-medium);
6111
6316
  }
6112
- .dark :where(.bs-tooltip) {
6113
- color: var(--bs-ink-base);
6114
- }
6115
6317
  /* Prevent tiny empty tooltip from showing if empty string is rendered into slot. */
6116
6318
  .bs-tooltip:where(:empty) {
6117
6319
  display: none;