@wwtdev/bsds-css 0.3.0 → 1.0.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.
@@ -0,0 +1,137 @@
1
+ @mixin form-switches() {
2
+ .bs-switch {
3
+ --box-shadow: var(--bs-ink-base);
4
+ --ball-background: var(--bs-white);
5
+ --ball-diameter: 1rem;
6
+ --inner-text-width: 1rem;
7
+ --inner-text-padding: 0.5rem;
8
+ --offset: 0.25rem;
9
+ --switch-background: var(--bs-gray-400);
10
+
11
+ border: none;
12
+ border-radius: 100vw;
13
+ cursor: pointer;
14
+ height: calc(var(--ball-diameter) + var(--offset) * 2);
15
+ position: relative;
16
+ }
17
+
18
+ .bs-switch:where([data-size="sm"]) {
19
+ --ball-diameter: var(--bs-text-xs);
20
+ --inner-text-width: .75rem;
21
+ --inner-text-padding: 0.375rem;
22
+ }
23
+
24
+ :where(.dark) .bs-switch:where(:not([data-disabled])) {
25
+ --switch-background: var(--bs-blue-400);
26
+ }
27
+
28
+ .bs-switch input,
29
+ .bs-switch:where([data-size="sm"]) input {
30
+ cursor: pointer;
31
+ height: 100%;
32
+ opacity: 0;
33
+ position: absolute;
34
+ width: 100%;
35
+ }
36
+
37
+ .bs-switch span {
38
+ align-items: center;
39
+ background-color: var(--switch-background);
40
+ border-radius: 100vw;
41
+ display: inline-flex;
42
+ height: 100%;
43
+ padding: 0 var(--inner-text-padding);
44
+ pointer-events: none;
45
+ position: relative;
46
+ transition: 250ms;
47
+ width: calc(var(--ball-diameter) * 2 + var(--offset) * 2);
48
+ height: calc(var(--ball-diameter) + var(--offset) * 2);
49
+ }
50
+
51
+ /* Toggle "ball" */
52
+ .bs-switch span::before {
53
+ background-color: var(--ball-background);
54
+ border-radius: 50%;
55
+ box-sizing: border-box;
56
+ content: '';
57
+ height: var(--ball-diameter);
58
+ left: var(--offset);
59
+ position: absolute;
60
+ top: 50%;
61
+ transform: translate(0, -50%);
62
+ transition: inherit;
63
+ width: var(--ball-diameter);
64
+ z-index: 2;
65
+ }
66
+
67
+ .bs-switch input:where(:checked) ~ span::before,
68
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span::before {
69
+ transform: translate(var(--ball-diameter), -50%);
70
+ }
71
+
72
+
73
+ .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::before,
74
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::before {
75
+ transform: translate(calc(var(--ball-diameter) + var(--inner-text-width)), -50%);
76
+ }
77
+
78
+ /* Inner "on/off" text */
79
+
80
+ .bs-switch span:where([data-inner-on-label][data-inner-off-label]) {
81
+ color: white;
82
+ width: calc(var(--ball-diameter) * 2 + var(--offset) * 2 + var(--inner-text-width));
83
+ }
84
+
85
+ .bs-switch span::after {
86
+ align-items: center;
87
+ color: var(--ball-background);
88
+ display: flex;
89
+ height: 100%;
90
+ justify-content: flex-start;
91
+ left: 0;
92
+ padding: var(--inner-text-padding);
93
+ position: absolute;
94
+ text-transform: capitalize;
95
+ top: 0;
96
+ width: 100%;
97
+ }
98
+
99
+ .bs-switch input:where(:not(:checked)) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
100
+ .bs-switch:where([aria-pressed="false"]) span:where([data-inner-on-label][data-inner-off-label])::after {
101
+ content: attr(data-inner-off-label);
102
+ justify-content: flex-end;
103
+ }
104
+
105
+ .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
106
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::after {
107
+ content: attr(data-inner-on-label);
108
+ justify-content: flex-start;
109
+ }
110
+
111
+ /* Focus state */
112
+
113
+ .bs-switch:where(:focus-within) span {
114
+ box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
115
+ 0 0 0 4px var(--outline-color, var(--bs-blue-400));
116
+ outline: 2px solid transparent;
117
+ }
118
+ :where(.box) .bs-switch:where(:focus-within) span {
119
+ --offset-color: var(--bs-bg-subtle);
120
+ }
121
+ :where(.box[data-invert]) .bs-switch:where(:focus-within) span {
122
+ --offset-color: var(--bs-bg-invert);
123
+ }
124
+
125
+ /* Disabled state */
126
+
127
+ .bs-switch:where([data-disabled]) {
128
+ --ball-background: var(--bs-gray-400);
129
+ --switch-background: var(--bs-gray-200);
130
+ }
131
+
132
+ .bs-switch input:where(:disabled) {
133
+ cursor: default;
134
+ }
135
+
136
+ }
137
+
@@ -0,0 +1,191 @@
1
+ @mixin pills() {
2
+ .bs-pill {
3
+ --pill-background: var(--bs-bg-subtle);
4
+ --pill-border: transparent;
5
+ --pill-text: var(--bs-royal-400);
6
+ --pill-gap: var(--bs-space-2);
7
+
8
+ align-items: center;
9
+ appearance: none;
10
+ background-color: var(--pill-background);
11
+ border: 1px solid var(--pill-border);
12
+ border-radius: 4px;
13
+ color: var(--pill-text);
14
+ display: inline-flex;
15
+ font-size: var(--bs-text-xs);
16
+ gap: var(--pill-gap);
17
+ line-height: 1.33;
18
+ padding: 4px 6px;
19
+ text-decoration: none;
20
+ vertical-align: middle;
21
+ }
22
+ :where(.dark) .bs-pill {
23
+ --pill-text: var(--bs-royal-100);
24
+ }
25
+ :where(.bs-pill > svg) {
26
+ height: 1rem;
27
+ }
28
+
29
+ /* ------------------------------ Button and Link Styles ------------------------------ */
30
+ :is(a, button).bs-pill {
31
+ color: var(--pill-text);
32
+ cursor: pointer;
33
+ transition: all 0.15s ease-in-out;
34
+ }
35
+ :is(a, button).bs-pill:is(:hover, :focus) {
36
+ --pill-border: var(--bs-royal-400);
37
+
38
+ color: var(--pill-text);
39
+ outline: transparent;
40
+ }
41
+ :where(.dark) :is(a, button).bs-pill:is(:hover, :focus) {
42
+ --pill-border: var(--bs-royal-200);
43
+ }
44
+
45
+ /* ------------------------------ Background Colors ------------------------------ */
46
+ :where(.box, [class*="bg-"]:not([class~="bg-white"])) .bs-pill:where(:not([data-variant^="live"], [data-active])) {
47
+ --pill-background: var(--bs-bg-base);
48
+ }
49
+ :where(.box[data-invert]) .bs-pill {
50
+ --pill-background: var(--bs-bg-invert-subtle);
51
+ --pill-text: var(--bs-gray-100);
52
+ }
53
+ :where(.box[data-invert]) :is(a, button).bs-pill:is(:hover, :focus) {
54
+ --pill-border: var(--bs-gray-100);
55
+ }
56
+ :where(.dark .box[data-invert]) .bs-pill {
57
+ --pill-text: var(--bs-royal-400);
58
+ }
59
+ :where(.dark .box[data-invert]) :is(a, button).bs-pill:is(:hover, :focus) {
60
+ --pill-border: var(--bs-royal-400);
61
+ }
62
+
63
+ /* ------------------------------ Status Styles ------------------------------ */
64
+ .bs-pill:where([data-status]) {
65
+ --status-color: var(--bs-blue-400);
66
+ }
67
+ .bs-pill:where([data-status])::before {
68
+ background-color: var(--status-color);
69
+ border-radius: 100%;
70
+ content: '';
71
+ height: 12px;
72
+ width: 12px;
73
+ }
74
+
75
+ /* ----- Status Colors ----- */
76
+ .bs-pill:where([data-status^="active"]) {
77
+ --status-color: var(--bs-blue-400);
78
+ }
79
+ .bs-pill:where([data-status^="complete"]) {
80
+ --status-color: var(--bs-purple-400);
81
+ }
82
+ .bs-pill:where([data-status^="inactive"]) {
83
+ --status-color: var(--bs-gray-300);
84
+ }
85
+ .bs-pill:where([data-status^="error"]) {
86
+ --status-color: var(--bs-red-400);
87
+ }
88
+ .bs-pill:where([data-status^="positive"]) {
89
+ --status-color: #16986D;
90
+ }
91
+ .bs-pill:where([data-status^="warning"]) {
92
+ --status-color: var(--bs-orange-warning);
93
+ }
94
+
95
+ /* ------------------------------ Filter Styles ------------------------------ */
96
+ .bs-pill:where([data-variant^="filter"]) {
97
+ --pill-background: var(--bs-bg-base);
98
+ --pill-border: var(--bs-border);
99
+ --pill-text: var(--bs-ink-base);
100
+ }
101
+ .bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
102
+ --pill-border: var(--bs-border);
103
+ }
104
+ :is(a, button).bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
105
+ --pill-border: var(--bs-ink-base);
106
+ }
107
+
108
+ /* ----- Filter Add Styles ----- */
109
+ /* Black + */
110
+ .bs-pill:where([data-variant^="filter"][data-variant*="add"])::after {
111
+ content: url("data:image/svg+xml,%3Csvg width='8' height='8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.5 4.5V8h1V4.5H8v-1H4.5V0h-1v3.5H0v1h3.5Z' fill='%230A0B19'/%3E%3C/svg%3E");
112
+ }
113
+ /* White + */
114
+ :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="add"]):not(:disabled, [aria-disabled="true"])::after{
115
+ content: url("data:image/svg+xml,%3Csvg width='8' height='8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.5 4.5V8h1V4.5H8v-1H4.5V0h-1v3.5H0v1h3.5Z' fill='%23ffffff'/%3E%3C/svg%3E");
116
+ }
117
+
118
+
119
+ /* ----- Filter Remove Styles ----- */
120
+ /* Black X */
121
+ .bs-pill:where([data-variant^="filter"][data-variant*="remove"])::after {
122
+ 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='%230A0B19'/%3E%3C/svg%3E%0A");
123
+ }
124
+ /* White X */
125
+ :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):not(:disabled, [aria-disabled="true"])::after {
126
+ 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");
127
+ }
128
+ /* Dark Red X */
129
+ .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):hover::after {
130
+ 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='%23D91214'/%3E%3C/svg%3E%0A");
131
+ }
132
+ /* Light Red X */
133
+ :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):hover::after {
134
+ 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='%23F15355'/%3E%3C/svg%3E%0A");
135
+ }
136
+
137
+ /* ----- Filter Active Styles ----- */
138
+ .bs-pill:where([data-variant^="filter"][data-active]) {
139
+ --pill-background: var(--bs-blue-400);
140
+ --pill-border: transparent;
141
+ --pill-text: var(--bs-white);
142
+ }
143
+ .bs-pill:where([data-variant^="filter"][data-active]):is(:hover, :focus) {
144
+ --pill-border: transparent;
145
+ }
146
+ :is(a, button).bs-pill:where([data-variant^="filter"][data-active]):is(:hover, :focus) {
147
+ --pill-background: var(--bs-blue-500);
148
+ --pill-border: transparent;
149
+ }
150
+ /* White X */
151
+ .bs-pill:where([data-variant^="filter"][data-active])::after {
152
+ 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='%23fff'/%3E%3C/svg%3E");
153
+ }
154
+ /* Black X */
155
+ .bs-pill:where([data-variant^="filter"][data-active]):where(:disabled, [aria-disabled="true"])::after {
156
+ 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='%230A0B19'/%3E%3C/svg%3E%0A");
157
+ }
158
+
159
+ /* ------------------------------ Live Now Styles ------------------------------ */
160
+ .bs-pill:where([data-variant^="live"]) {
161
+ --pill-background: var(--bs-royal-400);
162
+ --pill-text: var(--bs-white);
163
+ --pill-gap: var(--bs-space-1);
164
+ text-transform: uppercase;
165
+ }
166
+ .bs-pill:where([data-variant^="live"]):hover {
167
+ --pill-border: transparent;
168
+ }
169
+ .bs-pill:where([data-variant^="live"])::before {
170
+ background-color: var(--bs-red-400);
171
+ border: 3px solid var(--bs-white);
172
+ border-radius: 100%;
173
+ content: '';
174
+ height: 12px;
175
+ width: 12px;
176
+ }
177
+
178
+ /* ----- Disabled Styles ----- */
179
+ .bs-pill:is(:disabled, [aria-disabled="true"]) {
180
+ pointer-events: none;
181
+ color: var(--bs-gray-400);
182
+ background-color: var(--bs-gray-200);
183
+ }
184
+
185
+ .bs-pill:where([data-variant^="filter"]):not([data-active]):is(:disabled, [aria-disabled="true"]) {
186
+ --pill-border: var(--bs-gray-400);
187
+ }
188
+
189
+
190
+ }
191
+
@@ -0,0 +1,18 @@
1
+ @mixin profile-details() {
2
+ .bs-profile-details {
3
+ color: var(--bs-ink-light);
4
+ font-size: var(--bs-text-sm);
5
+ }
6
+
7
+ .bs-profile-details > :where(*) {
8
+ display: block;
9
+ }
10
+
11
+ .bs-profile-details > :where(*:first-child) {
12
+ --profile-name-color: var(--bs-ink-base);
13
+
14
+ color: var(--profile-name-color);
15
+ }
16
+
17
+ }
18
+
@@ -0,0 +1,71 @@
1
+ @mixin profile-img() {
2
+ .bs-profile-img,
3
+ .bs-profile-img:where([data-img-size^='sm']) {
4
+ --profile-size: 2rem;
5
+ --profile-text: var(--bs-text-sm);
6
+
7
+ aspect-ratio: 1/1;
8
+ border-radius: 50%;
9
+ height: var(--profile-size);
10
+ overflow: hidden;
11
+ position: relative;
12
+ width: var(--profile-size);
13
+ }
14
+
15
+ .bs-profile-img :where(img) {
16
+ height: 100%;
17
+ object-fit: cover;
18
+ width: 100%;
19
+ }
20
+ .bs-profile-img:where([data-no-img]) img {
21
+ display: none;
22
+ }
23
+
24
+ .bs-profile-img::before,
25
+ .bs-profile-img::after {
26
+ border-radius: 50%;
27
+ border-collapse: collapse;
28
+ height: 100%;
29
+ inset: 0;
30
+ position: absolute;
31
+ width: 100%;
32
+ }
33
+ /* Shadow */
34
+ .bs-profile-img::before {
35
+ box-shadow: var(--bs-shadow-profilePhoto);
36
+ content: '';
37
+ }
38
+ .bs-profile-img:where([data-no-img])::before {
39
+ display: none;
40
+ }
41
+ /* Initials */
42
+ .bs-profile-img:where([data-no-img])::after {
43
+ border: 1px solid currentColor;
44
+ color: var(--bs-blue-500);
45
+ content: attr(data-initials);
46
+ font-size: var(--profile-text);
47
+ text-transform: uppercase;
48
+ display: grid;
49
+ place-items: center;
50
+ }
51
+
52
+ /* Profile Sizes */
53
+ .bs-profile-img:where([data-img-size^='xs']) {
54
+ --profile-size: 1.5rem;
55
+ --profile-text: var(--bs-text-xs);
56
+ }
57
+ .bs-profile-img:where([data-img-size^='md']) {
58
+ --profile-size: 3rem;
59
+ --profile-text: var(--bs-text-md);
60
+ }
61
+ .bs-profile-img:where([data-img-size^='lg']) {
62
+ --profile-size: 4rem;
63
+ --profile-text: var(--bs-text-lg);
64
+ }
65
+ .bs-profile-img:where([data-img-size^='xl']) {
66
+ --profile-size: 5.75rem;
67
+ --profile-text: var(--bs-text-xl);
68
+ }
69
+
70
+ }
71
+
@@ -0,0 +1,33 @@
1
+ @mixin profile-layout() {
2
+ /* Profile with User Details */
3
+ .bs-profile:where([data-layout]),
4
+ .bs-profile:where([data-layout^='vertical']) {
5
+ display: grid;
6
+ row-gap: 0.5rem;
7
+ }
8
+
9
+ .bs-profile:where([data-layout^='horizontal']) {
10
+ column-gap: 1rem;
11
+ grid-template-columns: auto 1fr;
12
+ align-items: center;
13
+ }
14
+
15
+ /* When wrapped in a link */
16
+ a.bs-profile:where([data-layout]) {
17
+ text-decoration: none;
18
+ }
19
+
20
+ a.bs-profile:where([data-layout]) .bs-profile-details > *:first-child {
21
+ --profile-name-color: var(--bs-blue-500);
22
+ }
23
+
24
+ a.bs-profile:where([data-layout]):hover .bs-profile-details > *:first-child {
25
+ text-decoration: underline;
26
+ }
27
+
28
+ .dark a.bs-profile:where([data-layout]) .bs-profile-details > *:first-child {
29
+ --profile-name-color: var(--bs-blue-200);
30
+ }
31
+
32
+ }
33
+
@@ -0,0 +1,84 @@
1
+ @mixin tables() {
2
+ table {
3
+ border-collapse: collapse;
4
+ border-spacing: 0;
5
+ overflow-x: auto;
6
+ max-width: 100%;
7
+ width: 100%;
8
+ }
9
+ thead {
10
+ color: var(--bs-ink-base);
11
+ font-size: var(--bs-font-base);
12
+ font-weight: 600;
13
+ }
14
+ tbody {
15
+ color: var(--bs-ink-light);
16
+ }
17
+ th {
18
+ background: var(--bs-bg-base);
19
+ }
20
+ th, td {
21
+ border-bottom: 1px solid var(--bs-border);
22
+ min-width: fit-content;
23
+ padding: var(--bs-space-2);
24
+ text-align: left;
25
+ }
26
+
27
+ /* Table Borders */
28
+ table[data-borders^="none"] {
29
+ border: 0;
30
+ }
31
+ table[data-borders^="all"] :where(th, td) {
32
+ border-left: 1px solid var(--bs-border);
33
+ }
34
+ table[data-borders^="all"] :where(th, td):last-child {
35
+ border-right: 1px solid var(--bs-border);
36
+ }
37
+ table[data-borders^="all"] th {
38
+ border-top: 1px solid var(--bs-border);
39
+ }
40
+
41
+ /* Table Rows */
42
+ table:where([data-rows^="striped"]) tbody > tr:nth-child(even) {
43
+ background-color: var(--bs-bg-subtle);
44
+ }
45
+
46
+ /* Table Cells */
47
+ table[data-cells^="fixed"] {
48
+ table-layout: fixed;
49
+ }
50
+ table:where([data-cells^="height"]) td {
51
+ height: 4.5rem;
52
+ vertical-align: middle;
53
+ }
54
+
55
+ /* Sticky Header */
56
+ table:where([data-sticky]) {
57
+ isolation: isolate;
58
+ }
59
+ table:where([data-sticky^="top"]) td {
60
+ z-index: 1;
61
+ }
62
+ table:where([data-sticky^="top"]) {
63
+ border-collapse: separate;
64
+ overflow-y: unset; /* Will break sticky headers if removed */
65
+ position: relative;
66
+ }
67
+ table:where([data-sticky^="left"]) {
68
+ border-collapse: separate;
69
+ overflow-x: unset; /* Will break sticky headers if removed */
70
+ position: relative;
71
+ }
72
+ table:where([data-sticky^="top"]) th {
73
+ position: sticky;
74
+ top: var(--bs-content-top);
75
+ z-index: 2;
76
+ }
77
+ table:where([data-sticky^="left"]) :is(td:first-child, th:first-child) {
78
+ position: sticky;
79
+ left: 0;
80
+ z-index: 2;
81
+ }
82
+
83
+ }
84
+
@@ -0,0 +1,63 @@
1
+ .bs-badge[data-position^='left']::before,
2
+ .bs-badge:where(:not([data-position^='left']))::after {
3
+ align-items: center;
4
+ background: var(--bs-red-500);
5
+ border-radius: 0.5rem;
6
+ content: '';
7
+ display: inline-flex;
8
+ font-size: 0.8125rem;
9
+ font-variant-numeric: tabular-nums;
10
+ font-weight: 600;
11
+ height: 6px;
12
+ justify-content: center;
13
+ line-height: 1;
14
+ position: relative;
15
+ vertical-align: top;
16
+ width: 6px;
17
+ }
18
+
19
+ .bs-pill .bs-badge::before,
20
+ .bs-pill .bs-badge::after {
21
+ font-size: 0.8125em;
22
+ }
23
+
24
+ .bs-badge[data-count]:where([data-position^='left'])::before,
25
+ .bs-badge[data-count]:where(:not([data-position^='left']))::after {
26
+ color: white;
27
+ content: attr(data-count);
28
+ min-height: 1rem;
29
+ min-width: 1rem;
30
+ padding: 0 4px;
31
+ top: -0.0625rem;
32
+ vertical-align: unset;
33
+ width: auto;
34
+ }
35
+
36
+ .bs-badge[data-count]::before {
37
+ margin-right: 0.25rem;
38
+ }
39
+
40
+ .bs-badge[data-count]::after {
41
+ margin-left: 0.25rem;
42
+ }
43
+
44
+ .bs-badge[data-count='0']::before,
45
+ .bs-badge[data-count='0']::after {
46
+ display: none;
47
+ }
48
+
49
+ .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::before,
50
+ .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::after {
51
+ display: inline-flex;
52
+ }
53
+
54
+ .bs-badge[data-badge-color^='blue']::before,
55
+ .bs-badge[data-badge-color^='blue']::after {
56
+ background: var(--bs-blue-500);
57
+ }
58
+
59
+ .bs-badge[data-badge-color^='white']::before,
60
+ .bs-badge[data-badge-color^='white']::after {
61
+ background: white;
62
+ color: var(--badge-text, var(--bs-black));
63
+ }