@wwtdev/bsds-css 2.18.1 → 2.20.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 (31) hide show
  1. package/dist/components/_accordions.scss +20 -11
  2. package/dist/components/_alert.scss +128 -0
  3. package/dist/components/_banner.scss +25 -11
  4. package/dist/components/_circle-buttons.scss +6 -0
  5. package/dist/components/_dropdown.scss +7 -0
  6. package/dist/components/_form-field-details.scss +0 -1
  7. package/dist/components/_form-input-composite.scss +24 -13
  8. package/dist/components/_form-input-phone.scss +5 -0
  9. package/dist/components/_form-text-fields.scss +21 -19
  10. package/dist/components/_horizontal-navigation-mobile.scss +194 -0
  11. package/dist/components/_horizontal-navigation.scss +213 -0
  12. package/dist/components/_modal.scss +1 -1
  13. package/dist/components/_vertical-navigation.scss +231 -0
  14. package/dist/components/accordions.css +20 -11
  15. package/dist/components/alert.css +124 -0
  16. package/dist/components/banner.css +24 -10
  17. package/dist/components/circle-buttons.css +6 -0
  18. package/dist/components/dropdown.css +7 -0
  19. package/dist/components/form-field-details.css +0 -1
  20. package/dist/components/form-input-composite.css +24 -13
  21. package/dist/components/form-input-phone.css +5 -0
  22. package/dist/components/form-text-fields.css +21 -19
  23. package/dist/components/horizontal-navigation-mobile.css +190 -0
  24. package/dist/components/horizontal-navigation.css +209 -0
  25. package/dist/components/modal.css +1 -1
  26. package/dist/components/vertical-navigation.css +227 -0
  27. package/dist/wwt-bsds-preset.js +2 -1
  28. package/dist/wwt-bsds-wc-base.css +2 -0
  29. package/dist/wwt-bsds.css +2259 -1547
  30. package/dist/wwt-bsds.min.css +1 -1
  31. package/package.json +1 -1
@@ -18,7 +18,8 @@
18
18
 
19
19
  /* Accordion Panel (Icon, Title, Caret) */
20
20
 
21
- .bs-accordion :where(header button) {
21
+ .bs-accordion :where(.bs-accordion-toggle),
22
+ .bs-accordion > :where(header) > :where(button) {
22
23
  align-items: center;
23
24
  background-color: var(--bs-bg-base);
24
25
  border: 0px solid transparent;
@@ -39,48 +40,56 @@
39
40
  width: 100%;
40
41
  }
41
42
 
42
- .bs-accordion :where(header button:focus-visible) {
43
+ .bs-accordion :where(.bs-accordion-toggle:focus-visible),
44
+ .bs-accordion > :where(header) > :where(button:focus-visible) {
43
45
  --accordion-outline-color: var(--bs-blue-base);
44
46
  }
45
47
 
46
- .bs-accordion :where(header button) > * {
48
+ .bs-accordion :where(.bs-accordion-toggle) > *,
49
+ .bs-accordion > :where(header) > :where(button) > * {
47
50
  font-size: inherit;
48
51
  font-weight: inherit;
49
52
  line-height: inherit;
50
53
  }
51
54
 
52
- .bs-accordion :where(header button) > :where(span) {
55
+ .bs-accordion :where(.bs-accordion-toggle) > *,
56
+ .bs-accordion > :where(header) > :where(button) > * {
53
57
  grid-area: main;
54
58
  margin-right: var(--bs-space-2);
55
59
  text-align: left;
56
60
  }
57
61
 
58
- .bs-accordion :where(header button) > :where(span) {
62
+ .bs-accordion :where(.bs-accordion-toggle) > *,
63
+ .bs-accordion > :where(header) > :where(button) > * {
59
64
  vertical-align: middle;
60
65
  }
61
66
 
62
67
  @media (min-width: 957px) {
63
- .bs-accordion :where(header button) > :where(span) {
68
+ .bs-accordion :where(.bs-accordion-toggle) > * ,
69
+ .bs-accordion > :where(header) > :where(button) > * {
64
70
  margin-right: var(--bs-space-3);
65
71
  }
66
72
  }
67
73
 
68
- .bs-accordion :where(header button) :where([data-position]) {
74
+ .bs-accordion :where(.bs-accordion-toggle) :where([data-position]),
75
+ .bs-accordion > :where(header) > :where(button) :where([data-position]) {
69
76
  width: var(--accordion-text-size);
70
77
  }
71
78
 
72
- .bs-accordion :where(header button) > :where([data-position="start"]) {
79
+ .bs-accordion :where(.bs-accordion-toggle) > :where([data-position="start"]),
80
+ .bs-accordion > :where(header) > :where(button) > :where([data-position="start"]) {
73
81
  grid-area: start;
74
82
  margin-right: var(--bs-space-2);
75
83
  }
76
84
 
77
- .bs-accordion :where(header button) > :where([data-position="end"]) {
85
+ .bs-accordion :where(.bs-accordion-toggle) > :where([data-position="end"]),
86
+ .bs-accordion > :where(header) > :where(button) > :where([data-position="end"]) {
78
87
  grid-area: end;
79
88
  transform: rotate(0);
80
89
  transition: var(--bs-trans-rotate180);
81
90
  }
82
91
 
83
- .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
92
+ .bs-accordion > :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
84
93
  transform: rotate(180deg);
85
94
  }
86
95
 
@@ -107,7 +116,7 @@
107
116
  /* Accordion Group */
108
117
  :where(.bs-accordion[data-stacked]:not([data-stacked="false"])) + .bs-accordion:where([data-stacked]:not([data-stacked="false"])) {
109
118
  border-block-start-color: transparent;
110
- }
119
+ }
111
120
 
112
121
  }
113
122
 
@@ -0,0 +1,128 @@
1
+ @mixin alert() {
2
+ .bs-alert {
3
+ /* bs-blue-100 @ 10% */
4
+ background-color: #99cff71a;
5
+ border-radius: 8px;
6
+ border: 2px solid var(--bs-ink-blue);
7
+ column-gap: 0.75rem;
8
+ display: grid;
9
+ grid-template-columns: 1.25rem 1fr 1rem;
10
+ grid-template-areas: "icon title close"
11
+ ". description ."
12
+ ". action .";
13
+ padding: 1rem;
14
+ }
15
+
16
+ @media (min-width: 752px) {
17
+ .bs-alert {
18
+ padding: 1.5rem;
19
+ }
20
+ }
21
+
22
+ .bs-alert:where([data-horizontal="true"]) {
23
+ grid-template-columns: 1.25rem 1fr 1rem;
24
+ grid-template-areas: "icon title close"
25
+ ". action .";
26
+ }
27
+
28
+ @media (min-width: 752px) {
29
+ .bs-alert:where([data-horizontal="true"]) {
30
+ grid-template-areas: "icon title action close";
31
+ grid-template-columns: 1.25rem max-content 1fr 1rem;
32
+ }
33
+ }
34
+
35
+ .bs-alert :where(.bs-alert-icon) {
36
+ align-self: center;
37
+ color: var(--bs-ink-blue);
38
+ grid-area: icon;
39
+ height: 1.25rem;
40
+ width: 1.25rem;
41
+ }
42
+
43
+ .bs-alert :where(.bs-alert-title) {
44
+ font-size: 1.125rem;
45
+ grid-area: title;
46
+ }
47
+
48
+ @media (min-width: 752px) {
49
+ .bs-alert :where(.bs-alert-title) {
50
+ font-size: 1.25rem;
51
+ }
52
+ }
53
+
54
+ .bs-alert :where(.bs-alert-description) {
55
+ font-size: 0.875rem;
56
+ grid-area: description;
57
+ margin-top: 0.5rem;
58
+ }
59
+
60
+ @media (min-width: 752px) {
61
+ .bs-alert :where(.bs-alert-description) {
62
+ font-size: 1rem;
63
+ }
64
+ }
65
+
66
+ .bs-alert:where([data-horizontal="true"]) :where(.bs-alert-description) {
67
+ display: none;
68
+ }
69
+
70
+ .bs-alert :where(.bs-alert-close) {
71
+ align-self: center;
72
+ background-color: transparent;
73
+ cursor: pointer;
74
+ grid-area: close;
75
+ height: 1rem;
76
+ width: 1rem;
77
+ }
78
+
79
+ .bs-alert :where(.bs-alert-action) {
80
+ grid-area: action;
81
+ margin-top: 1rem;
82
+ }
83
+
84
+ @media (min-width: 752px) {
85
+ .bs-alert:where([data-horizontal="true"]) :where(.bs-alert-action) {
86
+ margin-top: 0;
87
+ }
88
+ }
89
+
90
+ /* COLOR VARIANTS */
91
+ .bs-alert:where([data-variant="success"]) {
92
+ /* bs-purple-100 @ 10% */
93
+ background-color: #e0c5ef1a;
94
+ border-color: var(--bs-ink-purple);
95
+ }
96
+
97
+ .bs-alert:where([data-variant="success"]) :where(.bs-alert-icon) {
98
+ color: var(--bs-ink-purple);
99
+ }
100
+
101
+ .bs-alert:where([data-variant="warning"]) {
102
+ /* bs-orange-100 @ 10% */
103
+ background-color: #f3c4a81a;
104
+ border-color: var(--bs-ink-orange);
105
+ }
106
+ .bs-alert:where([data-variant="warning"]) :where(.bs-alert-icon) {
107
+ color: var(--bs-ink-orange);
108
+ }
109
+
110
+ .bs-alert:where([data-variant="negative"]) {
111
+ /* bs-red-100 @ 10% */
112
+ background-color: #f8a9aa1a;
113
+ border-color: var(--bs-ink-red);
114
+ }
115
+
116
+ .bs-alert:where([data-variant="negative"]) :where(.bs-alert-icon) {
117
+ color: var(--bs-ink-red);
118
+ }
119
+
120
+ /* DARK MODE SPECIAL CASE */
121
+ .dark .bs-alert :where(.bs-alert-action) {
122
+ --btn-border-color-focused: var(--bs-text-base);
123
+ --btn-text-color: var(--bs-text-base);
124
+ --btn-text-color-hovered: var(--bs-text-base);
125
+ }
126
+
127
+ }
128
+
@@ -1,13 +1,19 @@
1
1
  @mixin banner() {
2
- .bs-banner {
3
- background-color: var(--bs-royal-400);
4
- color: var(--bs-gray-100);
2
+ :where(.bs-banner) {
3
+ --banner-bg: var(--bs-royal-400);
4
+ --banner-icon-display: none;
5
+ --banner-padding: var(--banner-padding-m);
6
+ --banner-padding-m: 1rem 1.5rem;
7
+ --banner-padding-dt: .5rem 2.25rem;
8
+ }
9
+
10
+ .bs-banner {
11
+ background-color: var(--banner-bg);
12
+ color: var(--bs-ink-white);
5
13
  display: flex;
6
14
  justify-content: center;
7
- padding-bottom: 1rem;
8
- padding-left: 1.25rem;
9
- padding-right: 1.25rem;
10
- padding-top: 1rem;
15
+ min-height: 3rem;
16
+ padding: var(--banner-padding);
11
17
  }
12
18
 
13
19
  .bs-banner:where([data-dismissed]:not([data-dismissed="false"])) {
@@ -24,7 +30,7 @@
24
30
 
25
31
  .bs-banner :where(.bs-banner-content .bs-banner-warning-icon) {
26
32
  /* Do not display icon on smaller screens */
27
- display: none;
33
+ display: var(--banner-icon-display);
28
34
  margin-right: 0.625rem;
29
35
  }
30
36
 
@@ -34,19 +40,27 @@
34
40
  }
35
41
 
36
42
  .bs-banner :where(.bs-banner-content p a) {
37
- color: var(--bs-blue-lightest);
38
43
  text-decoration: underline;
39
44
  }
40
45
 
46
+ .bs-banner :where(a:hover) {
47
+ color: rgba(255, 255, 255, 0.8);
48
+ }
49
+
41
50
  .bs-banner :where(.bs-banner-content button) {
42
51
  background-color: inherit;
43
52
  color: inherit;
44
53
  cursor: pointer;
45
54
  }
46
55
 
56
+ .bs-banner:where([data-variant="negative"]) {
57
+ --banner-bg: var(--bs-red-300);
58
+ }
59
+
47
60
  @media (min-width: 957px) {
48
- .bs-banner :where(.bs-banner-content .bs-banner-warning-icon) {
49
- display: inline-flex;
61
+ .bs-banner {
62
+ --banner-icon-display: inline-flex;
63
+ --banner-padding: var(--banner-padding-dt);
50
64
  }
51
65
  }
52
66
 
@@ -197,6 +197,12 @@ a.bs-circle-button {
197
197
  --btn-text-color-hovered: var(--bs-pink-base);
198
198
  }
199
199
 
200
+ .bs-circle-button:where([data-variant="color-orange"]) {
201
+ --btn-border-color-focused: var(--bs-ink-orange);
202
+ --btn-text-color: var(--bs-ink-orange);
203
+ --btn-text-color-hovered: var(--bs-orange-base);
204
+ }
205
+
200
206
  .bs-circle-button:where([data-variant="color-red"]) {
201
207
  --btn-border-color-focused: var(--bs-ink-red);
202
208
  --btn-text-color: var(--bs-ink-red);
@@ -112,6 +112,13 @@
112
112
  --dropdown-wscreen-left: 50%;
113
113
  }
114
114
 
115
+ /* data-right */
116
+ .bs-dropdown-parent:where([data-right]:not([data-right="false"])) :where(.bs-dropdown) {
117
+ --dropdown-transform: translate(0, 0);
118
+ --dropdown-wscreen-left: auto;
119
+ --dropdown-wscreen-right: 0;
120
+ }
121
+
115
122
  /* Overrides mobile style when not min-width 1166 */
116
123
  .bs-dropdown:where([data-no-mobile="true"]) {
117
124
  --dropdown-bottom: var(--dropdown-wscreen-bottom, auto);
@@ -4,7 +4,6 @@
4
4
  justify-content: space-between;
5
5
  align-items: flex-start;
6
6
  gap: var(--bs-space-2);
7
- padding: 0 0.75rem;
8
7
  margin-top: 0.5rem;
9
8
  }
10
9
 
@@ -5,9 +5,9 @@
5
5
  }
6
6
 
7
7
  .bs-input-addon {
8
- --input-border: var(--bs-violet-300);
8
+ --input-border: var(--bs-border-input);
9
9
  align-items: center;
10
- background-color: var(--input-bg, transparent);
10
+ background-color: var(--input-bg, var(--bs-bg-base));
11
11
  border-radius: .25rem;
12
12
  color: var(--bs-ink-base);
13
13
  display: flex;
@@ -18,13 +18,17 @@
18
18
  position: relative;
19
19
  }
20
20
 
21
+ :where(.dark) .bs-input-addon {
22
+ background-color: var(--input-bg, transparent);
23
+ }
24
+
21
25
  .bs-input-addon * {
22
26
  background-color: transparent;
23
27
  }
24
28
 
25
29
  /* Fix issue in Windows, where <select> options would be invisible, due to background-color: transparent */
26
30
  .bs-input-addon :where(.bs-select, select) {
27
- background-color: var(--bs-bg-base);
31
+ background-color: var(--input-bg, var(--bs-bg-base));
28
32
  }
29
33
 
30
34
  /**
@@ -50,11 +54,16 @@ and issues with box-sizing
50
54
  }
51
55
 
52
56
  .bs-input-addon::after {
57
+ border-color: var(--input-border);
53
58
  border-radius: .25rem;
54
- border: 1px solid var(--input-border);
59
+ border-style: solid;
60
+ border-width: var(--input-border-width, 1px);
55
61
  }
62
+
56
63
  .bs-input-addon :where(.bs-input-addon)::after {
57
- border: 1px solid var(--input-addon-nested-border);
64
+ border-color: var(--input-addon-nested-border);
65
+ border-style: solid;
66
+ border-width: var(--input-border-width, 1px);
58
67
  }
59
68
 
60
69
  .bs-input-addon > * {
@@ -112,7 +121,7 @@ and issues with box-sizing
112
121
  /** Inner borders should be straight; shown only if variant: "inner-bordered" */
113
122
 
114
123
  .bs-input-addon:where([data-variant="inner-bordered"]) {
115
- --input-addon-nested-border: var(--bs-violet-lightest);
124
+ --input-addon-nested-border: var(--bs-violet-200);
116
125
  }
117
126
 
118
127
  .bs-input-addon > :where(.bs-input-addon:not(:last-child, :focus-within, [data-part="right"])),
@@ -177,13 +186,6 @@ and issues with box-sizing
177
186
  width: 1rem;
178
187
  }
179
188
 
180
- /* -------- Hover styles -------- */
181
- .bs-input-addon:hover,
182
- :where(label):hover + .bs-input-addon,
183
- :where(label):hover + * .bs-input-addon:where(:not(label .bs-input-addon, label + .bs-input-addon)) {
184
- --input-bg: var(--bs-bg-input-hover);
185
- }
186
-
187
189
  /* -------- Focus styles -------- */
188
190
  .bs-input-addon {
189
191
  --focus-border: var(--bs-blue-base);
@@ -248,6 +250,15 @@ and issues with box-sizing
248
250
  .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) * {
249
251
  pointer-events: none;
250
252
  }
253
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"]))::after,
254
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"]))::before,
255
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])):where([data-variant="inner-bordered"]) {
256
+ --input-border-width: 0;
257
+ }
258
+
259
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])):where([data-variant="inner-bordered"]) > :where(:not(:focus, :focus-within))::after {
260
+ border-right-width: 0;
261
+ }
251
262
 
252
263
  /* -------- Error styles -------- */
253
264
  .bs-input-addon:where([data-error]:not([data-error="false"])),
@@ -8,6 +8,11 @@
8
8
  min-width: 6rem;
9
9
  padding: 0 1rem;
10
10
  }
11
+
12
+ .bs-input-phone .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) :where(button) :where(span) {
13
+ filter: grayscale(1);
14
+ }
15
+
11
16
  .bs-input-phone ul:where(.bs-dropdown-options) {
12
17
  min-width: 7.5rem;
13
18
  }
@@ -22,8 +22,8 @@ textarea,
22
22
  select,
23
23
  :is(.bs-input, .bs-select, .bs-textarea) {
24
24
  appearance: none;
25
- background-color: var(--input-bg, transparent);
26
- border-color: var(--input-border, var(--bs-violet-medium));
25
+ background-color: var(--input-bg, var(--bs-bg-base));
26
+ border-color: var(--input-border, var(--bs-border-input));
27
27
  border-radius: 0.25rem;
28
28
  border-style: solid;
29
29
  border-width: var(--input-border-width, 1px);
@@ -37,6 +37,13 @@ select,
37
37
  padding-inline: var(--input-padding-inline, 0.75rem);
38
38
  }
39
39
 
40
+ :where(.dark) input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
41
+ :where(.dark) textarea,
42
+ :where(.dark) select,
43
+ :where(.dark) :is(.bs-input, .bs-select, .bs-textarea) {
44
+ --input-bg: transparent;
45
+ }
46
+
40
47
  input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
41
48
  textarea,
42
49
  select,
@@ -61,15 +68,21 @@ textarea {
61
68
  :is(input, textarea, select)::placeholder,
62
69
  :is(.bs-input, .bs-select, .bs-textarea)::placeholder,
63
70
  :is(.bs-input, .bs-select, .bs-textarea):where([data-placeholder="true"]) {
64
- color: var(--input-placeholder, var(--bs-violet-lightest));
71
+ color: var(--input-placeholder, var(--bs-violet-100));
65
72
  }
73
+
74
+ :where(.dark) :is(input, textarea, select)::placeholder,
75
+ :where(.dark) :is(.bs-input, .bs-select, .bs-textarea)::placeholder,
76
+ :where(.dark) :is(.bs-input, .bs-select, .bs-textarea):where([data-placeholder="true"]) {
77
+ --input-placeholder: var(--bs-violet-200);
78
+ }
79
+
66
80
  :is(input, textarea, select):where(:focus-visible)::placeholder,
67
81
  :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible)::placeholder {
68
82
  opacity: 0;
69
83
  }
70
84
 
71
85
  /* FOCUS state */
72
-
73
86
  :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:focus-visible),
74
87
  :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible),
75
88
  :is(select, .bs-select):where(:focus) {
@@ -78,15 +91,7 @@ textarea {
78
91
  outline-width: 0px;
79
92
  }
80
93
 
81
- /* HOVER state */
82
-
83
- :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:hover),
84
- :is(.bs-input, .bs-select, .bs-textarea):where(:hover) {
85
- --input-bg: var(--bs-bg-input-hover);
86
- }
87
-
88
94
  /* DISABLED state */
89
-
90
95
  :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled),
91
96
  :is(.bs-input, .bs-select, .bs-textarea):where(:disabled) {
92
97
  --input-border: var(--bs-ink-disabled);
@@ -95,7 +100,10 @@ textarea {
95
100
  }
96
101
 
97
102
  /* Text inputs should not have a border when disabled */
98
- :is(input:where(:not([type]),[type="text"],[type="number"],[type="email"],[type="password"],[type="url"])):where(:disabled) {
103
+ :is(input:where(:not([type]),[type="text"],[type="number"],[type="email"],[type="password"],[type="url"])):where(:disabled),
104
+ textarea:where(:disabled),
105
+ select:where(:disabled),
106
+ :is(.bs-input, .bs-select, .bs-textarea):where(:disabled) {
99
107
  --input-border-width: 0px;
100
108
  }
101
109
 
@@ -146,16 +154,10 @@ select[multiple],
146
154
 
147
155
  :where(.dark) select,
148
156
  :where(.dark) .bs-select {
149
- --input-bg: var(--bs-bg-base);
150
157
  /* URL Encoded SVG dropdown caret so there is something there */
151
158
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath fill='%23ffffff' d='M8.048 13.375a.745.745 0 0 1-.526-.217L0 5.686l1.053-1.061 6.995 6.95 6.897-6.85 1.053 1.06-7.423 7.373a.745.745 0 0 1-.527.217Z'/%3E%3C/svg%3E");
152
159
  }
153
160
 
154
- :where(.dark .box) select,
155
- :where(.dark .box) .bs-select {
156
- --input-bg: var(--bg-color, var(--bs-bg-subtle));
157
- }
158
-
159
161
  :where(.dark) select:where(:disabled),
160
162
  :where(.dark) .bs-select:where(:disabled) {
161
163
  /* URL Encoded SVG dropdown caret so there is something there */
@@ -0,0 +1,194 @@
1
+ @mixin horizontal-navigation-mobile() {
2
+ .bs-horizontal-nav-mobile {
3
+ --bg-color: var(--bs-bg-light);
4
+ --top-offset: 48px;
5
+ -ms-overflow-style: none; /* Internet Explorer 10+ */
6
+ background-color: var(--bg-color);
7
+ display: flex;
8
+ flex-direction: column;
9
+ height: auto;
10
+ left: 0;
11
+ max-height: calc(100vh - var(--top-offset));
12
+ overflow: scroll;
13
+ position: fixed;
14
+ right: 0;
15
+ scrollbar-width: none; /* Firefox */
16
+ top: var(--top-offset);
17
+ z-index: 1001;
18
+ }
19
+
20
+ .bs-horizontal-nav-mobile:where([data-shown="true"]) {
21
+ height: 100vh;
22
+ }
23
+
24
+ @media (min-width: 752px) {
25
+ .bs-horizontal-nav-mobile {
26
+ display: none;
27
+ }
28
+ }
29
+
30
+ /* ===== Nav List ===== */
31
+ .bs-horizontal-nav-mobile :where(ul) {
32
+ display: none;
33
+ flex-direction: column;
34
+ list-style: none;
35
+ }
36
+
37
+ .bs-horizontal-nav-mobile:where([data-shown="true"]) :where(ul) {
38
+ display: flex;
39
+ }
40
+
41
+ /* ===== Toggle ===== */
42
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-toggle) {
43
+ align-items: center;
44
+ color: var(--bs-ink-light);
45
+ cursor: pointer;
46
+ display: flex;
47
+ height: 48px;
48
+ justify-content: space-between;
49
+ padding-bottom: 0.5rem;
50
+ padding-left: 2.25rem;
51
+ padding-right: 2.25rem;
52
+ padding-top: 0.5rem;
53
+ width: 100%;
54
+ }
55
+
56
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-toggle-title) {
57
+ align-items: center;
58
+ display: flex;
59
+ gap: 0.5rem;
60
+ }
61
+
62
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-toggle-title-icon) {
63
+ color: var(--bs-ink-blue);
64
+ height: 1rem;
65
+ width: 1rem;
66
+ }
67
+
68
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-toggle-caret) {
69
+ height: 0.75rem;
70
+ transform: none;
71
+ transition-duration: 0.2s;
72
+ transition-property: transform;
73
+ transition-timing-function: ease-in-out;
74
+ width: 0.75rem;
75
+ }
76
+
77
+ .bs-horizontal-nav-mobile:where([data-shown="true"]) :where(.bs-horizontal-nav-mobile-toggle-caret) {
78
+ transform: rotate(180deg);
79
+ }
80
+
81
+ /* ===== Nav Items ===== */
82
+ .bs-horizontal-nav-mobile :where(ul > li) {
83
+ border-top: 1px solid var(--bs-border-base);
84
+ }
85
+
86
+ .bs-horizontal-nav-mobile :where(ul:not(.bs-horizontal-nav-mobile-nested-menu) > li:last-child) {
87
+ border-bottom: 1px solid var(--bs-border-base);
88
+ }
89
+
90
+ .bs-horizontal-nav-mobile :where(ul > li > a) {
91
+ color: var(--bs-ink-light);
92
+ cursor: pointer;
93
+ display: flex;
94
+ font-weight: 400;
95
+ padding-bottom: 0.75rem;
96
+ padding-left: 2.25rem;
97
+ padding-right: 2.25rem;
98
+ padding-top: 0.75rem;
99
+ }
100
+
101
+ .bs-horizontal-nav-mobile :where(ul > li > a:hover) {
102
+ color: var(--bs-ink-blue);
103
+ }
104
+
105
+ .bs-horizontal-nav-mobile :where(ul > li > a[data-active="true"]) {
106
+ color: var(--bs-ink-base);
107
+ font-weight: 600;
108
+ }
109
+
110
+ .bs-horizontal-nav-mobile :where(ul > li > a[data-active="true"]:hover) {
111
+ color: var(--bs-ink-blue);
112
+ }
113
+
114
+ /* ===== Nested Nav Items ===== */
115
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-toggle) {
116
+ align-items: center;
117
+ color: var(--bs-ink-light);
118
+ cursor: pointer;
119
+ display: flex;
120
+ justify-content: space-between;
121
+ padding-bottom: 0.75rem;
122
+ padding-left: 2.25rem;
123
+ padding-right: 2.25rem;
124
+ padding-top: 0.75rem;
125
+ width: 100%;
126
+ }
127
+
128
+ .bs-horizontal-nav-mobile :where(ul li .bs-horizontal-nav-mobile-nested-toggle[data-active="true"]) {
129
+ font-weight: 600;
130
+ }
131
+
132
+ .bs-horizontal-nav-mobile :where(ul li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-toggle) {
133
+ background-color: var(--bs-bg-medium);
134
+ color: var(--bs-ink-blue);
135
+ font-weight: 600;
136
+ }
137
+
138
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-toggle:hover) {
139
+ color: var(--bs-ink-blue);
140
+ }
141
+
142
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-toggle-caret) {
143
+ height: 0.75rem;
144
+ transform: none;
145
+ transition-duration: 0.2s;
146
+ transition-property: transform;
147
+ transition-timing-function: ease-in-out;
148
+ width: 0.75rem;
149
+ }
150
+
151
+ .bs-horizontal-nav-mobile :where(ul li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-toggle-caret) {
152
+ transform: rotate(180deg);
153
+ }
154
+
155
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu) {
156
+ background-color: var(--bs-bg-medium);
157
+ display: none;
158
+ }
159
+
160
+ .bs-horizontal-nav-mobile :where(ul li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-menu) {
161
+ display: block;
162
+ }
163
+
164
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu > li) {
165
+ border-top: none;
166
+ }
167
+
168
+ /* ===== External Links ===== */
169
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-link) {
170
+ align-items: center;
171
+ display: flex;
172
+ gap: 0.5rem;
173
+ }
174
+
175
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-link-icon) {
176
+ height: 1rem;
177
+ width: 1rem;
178
+ }
179
+
180
+ /* ===== Slotted Items ===== */
181
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-slotted-items) {
182
+ display: none;
183
+ padding-bottom: 0.75rem;
184
+ padding-left: 2.25rem;
185
+ padding-right: 2.25rem;
186
+ padding-top: 0.75rem;
187
+ }
188
+
189
+ .bs-horizontal-nav-mobile:where([data-shown="true"]) :where(.bs-horizontal-nav-mobile-slotted-items) {
190
+ display: block;
191
+ }
192
+
193
+ }
194
+