@wwtdev/bsds-css 0.0.3

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,270 @@
1
+ :where(label, legend) {
2
+ color: var(--bs-ink-base);
3
+ display: inline-block;
4
+ font-size: var(--bs-text-sm);
5
+ font-weight: 600;
6
+ line-height: var(--bs-leading-base);
7
+ width: 100%;
8
+ }
9
+
10
+ :where(.required) {
11
+ color: var(--bs-red-400);
12
+ }
13
+
14
+ :where(.disabled, .disabled .required) {
15
+ color: var(--bs-gray-400);
16
+ }
17
+
18
+ :where(label + input, label > input):not([type^='checkbox'], [type^='radio']),
19
+ :where(label + textarea, label > textarea),
20
+ :where(label + select, label > select) {
21
+ margin-top: 0.25rem;
22
+ }
23
+
24
+ :where(input):not([type^='checkbox'], [type^='radio'], [type^='file'], [type^='range']),
25
+ :where(textarea, select) {
26
+ appearance: none;
27
+ background-color: var(--input-bg, var(--bs-bg-base));
28
+ border: 1px solid var(--input-border, var(--bs-violet-300));
29
+ border-radius: 0.25rem;
30
+ color: var(--bs-ink-base);
31
+ font-size: var(--bs-text-base);
32
+ font-weight: 400;
33
+ line-height: var(--bs-leading-base);
34
+ min-height: 40px;
35
+ padding: 0.5rem 0.75rem;
36
+ width: 100%;
37
+ }
38
+
39
+ :where(input, textarea, select)::placeholder {
40
+ color: var(--bs-violet-200);
41
+ opacity: 1;
42
+ }
43
+
44
+ :where(input, textarea, select):focus {
45
+ box-shadow:
46
+ 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
47
+ 0 0 0 4px var(--outline-color, var(--bs-blue-400));
48
+ outline: 2px solid transparent;
49
+ }
50
+ :where(.box) :where(input, textarea, select):focus {
51
+ --offset-color: var(--bs-bg-subtle);
52
+ }
53
+ :where(.box[data-invert]) :where(input, textarea, select):focus {
54
+ --offset-color: var(--bs-bg-invert);
55
+ }
56
+
57
+ :where(input, textarea, select)[required]:focus,
58
+ :where(input, textarea, select).error {
59
+ --outline-color: var(--bs-red-200);
60
+ }
61
+
62
+ :where(input, textarea, select):disabled {
63
+ background-color: var(--bs-gray-200);
64
+ border-color: var(--bs-gray-400);
65
+ color: var(--bs-gray-400);
66
+ }
67
+
68
+ :where(input, textarea, select):disabled::placeholder,
69
+ :where(input, textarea, select)[disabled]::placeholder {
70
+ color: var(--bs-gray-400);
71
+ opacity: 1;
72
+ }
73
+
74
+ /* Character Counter for Textarea */
75
+ :where(textarea + .character-count) {
76
+ color: var(--bs-ink-base);
77
+ font-size: var(--bs-text-xs);
78
+ font-weight: 400;
79
+ text-align: right;
80
+ }
81
+
82
+ :where(textarea[disabled] + .character-count) {
83
+ color: var(--bs-gray-400);
84
+ }
85
+
86
+ /* Select */
87
+
88
+ :where(select) {
89
+ /* URL Encoded SVG dropdown caret so there is something there */
90
+ 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='%230A0B19' 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");
91
+ background-position: right 0.75rem center;
92
+ background-repeat: no-repeat;
93
+ background-size: 1em 1em;
94
+ }
95
+ .dark :where(select) {
96
+ /* URL Encoded SVG dropdown caret so there is something there */
97
+ 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");
98
+ }
99
+
100
+ /* Checkboxes & Radios */
101
+ :where(.checkbox, .radio) {
102
+ display: flex;
103
+ align-items: center;
104
+ font-size: var(--bs-text-base);
105
+ font-weight: 400;
106
+ gap: 0.5em;
107
+ line-height: 115%;
108
+ }
109
+ :where(.checkbox, .radio) label {
110
+ font-size: var(--bs-text-base);
111
+ font-weight: 400;
112
+ line-height: 115%;
113
+ width: auto;
114
+ }
115
+
116
+ :where(input[type^='checkbox'], input[type^='radio']) {
117
+ --box-shadow: var(--bs-ink-base);
118
+
119
+ appearance: none;
120
+ background-color: var(--bg-base);
121
+ box-shadow: inset 0 0 0 0.125rem var(--box-shadow);
122
+ display: grid;
123
+ height: 1rem;
124
+ margin: 0;
125
+ place-content: center;
126
+ position: relative;
127
+ width: 1rem;
128
+ }
129
+ :where(input[type^='checkbox'], input[type^='radio']):focus {
130
+ box-shadow:
131
+ inset 0 0 0 0.125rem var(--box-shadow),
132
+ 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
133
+ 0 0 0 4px var(--outline-color, var(--bs-blue-400));
134
+ }
135
+
136
+ :where(input[type^='checkbox'], input[type^='radio']).error {
137
+ --box-shadow: var(--bs-red-400);
138
+ }
139
+
140
+ :where(input[type^='checkbox']) {
141
+ border-radius: 0.125rem;
142
+ }
143
+
144
+ :where(input[type^='radio']) {
145
+ border-radius: 50%;
146
+ }
147
+
148
+ :where(.checkbox, .radio)[data-size='sm'],
149
+ :where(.checkbox, .radio)[data-size='sm'] label {
150
+ font-size: var(--bs-text-sm);
151
+ line-height: 100%;
152
+ }
153
+
154
+ :where(.checkbox, .radio)[data-size='sm'] input {
155
+ width: var(--bs-text-xs);
156
+ height: var(--bs-text-xs);
157
+ }
158
+
159
+ :where(input[type='checkbox'])::before {
160
+ --filled-size: 1rem;
161
+ --check-fill-color: var(--bs-blue-400);
162
+
163
+ content: '';
164
+ border-radius: 0.125rem;
165
+ box-shadow: inset var(--filled-size) var(--filled-size) var(--check-fill-color);
166
+ height: var(--filled-size);
167
+ visibility: hidden;
168
+ width: var(--filled-size);
169
+ }
170
+
171
+ :where(input[type^='checkbox'])::after {
172
+ border: solid var(--bs-white);
173
+ border-width: 0 0.125rem 0.125rem 0;
174
+ content: '';
175
+ height: 0.75em;
176
+ left: 50%;
177
+ position: absolute;
178
+ top: 50%;
179
+ transform-origin: center;
180
+ transform: translate(-50%, -60%) rotate(45deg);
181
+ visibility: hidden;
182
+ width: 0.375em;
183
+ }
184
+
185
+ :where(input[type='radio'])::before {
186
+ --filled-size: 1rem;
187
+ --radio-fill-color: var(--bs-blue-400);
188
+
189
+ background-color: var(--radio-fill-color);
190
+ border-radius: 50%;
191
+ box-sizing: content-box;
192
+ content: '';
193
+ height: var(--filled-size);
194
+ visibility: hidden;
195
+ width: var(--filled-size);
196
+ }
197
+
198
+ :where(input[type='radio'])::after {
199
+ --inner-size: 0.375rem;
200
+ --inner-fill-color: var(--bs-white);
201
+
202
+ background-color: var(--inner-fill-color);
203
+ border-radius: 50%;
204
+ box-sizing: content-box;
205
+ content: '';
206
+ height: var(--inner-size);
207
+ left: 50%;
208
+ position: absolute;
209
+ top: 50%;
210
+ transform: translate(-50%, -50%);
211
+ visibility: hidden;
212
+ width: var(--inner-size);
213
+ }
214
+
215
+ :where(input[type='checkbox']:checked, input[type='radio']:checked)::before,
216
+ :where(input[type='checkbox']:checked, input[type='radio']:checked)::after {
217
+ visibility: visible;
218
+ }
219
+
220
+ :where(.checkbox, .radio)[data-size='sm'] input::before {
221
+ --filled-size: var(--bs-text-xs);
222
+ }
223
+
224
+ :where(.checkbox[data-size='sm'] input[type='checkbox'])::after {
225
+ height: 0.5625;
226
+ width: 0.3125;
227
+ }
228
+
229
+ :where(.radio[data-size='sm'] input[type='radio'])::after {
230
+ --inner-size: 0.25rem;
231
+ }
232
+
233
+ :where(input[type='checkbox'], input[type='radio']):disabled {
234
+ --box-shadow: var(--bs-gray-400);
235
+ background-color: transparent;
236
+ }
237
+
238
+ :where(input[type='checkbox']):checked:disabled:before {
239
+ --check-fill-color: var(--bs-gray-400);
240
+ }
241
+
242
+ :where(input[type='radio']):checked:disabled:before {
243
+ --radio-fill-color: var(--bs-gray-400);
244
+ }
245
+
246
+ /* Errors and Messages */
247
+ :where(input).error {
248
+ border-color: var(--bs-red-400);
249
+ }
250
+
251
+ :where(.message) {
252
+ color: var(--bs-gray-400);
253
+ font-size: var(--bs-text-xs);
254
+ padding-top: 0.5rem;
255
+ }
256
+ :where(.message.error) {
257
+ color: var(--bs-red-400);
258
+ }
259
+
260
+ /* Fieldset */
261
+ :where(fieldset) {
262
+ border: none;
263
+ margin-left: 0;
264
+ margin-right: 0;
265
+ padding: 0;
266
+ }
267
+ :where(fieldset legend) {
268
+ margin-bottom: 0.25rem;
269
+ padding: 0;
270
+ }
@@ -0,0 +1,202 @@
1
+ .pill {
2
+ --pill-background: var(--bs-bg-subtle);
3
+ --pill-border: transparent;
4
+ --pill-text: var(--bs-royal-400);
5
+
6
+ align-items: center;
7
+ appearance: none;
8
+ background-color: var(--pill-background);
9
+ border: 1px solid var(--pill-border);
10
+ border-radius: 4px;
11
+ color: var(--pill-text);
12
+ display: inline-flex;
13
+ font-size: var(--bs-text-xs);
14
+ gap: 4px;
15
+ line-height: 1.33;
16
+ padding: 4px 6px;
17
+ text-decoration: none;
18
+ vertical-align: middle;
19
+ }
20
+ :where(.dark) .pill {
21
+ --pill-text: var(--bs-royal-100);
22
+ }
23
+ .pill > svg {
24
+ height: 1rem;
25
+ }
26
+
27
+ /* ------------------------------ Button and Link Styles ------------------------------ */
28
+ :is(a, button).pill {
29
+ color: var(--pill-text);
30
+ cursor: pointer;
31
+ transition: all 0.15s ease-in-out;
32
+ }
33
+ :is(a, button).pill:is(:hover, :focus) {
34
+ --pill-border: var(--bs-royal-400);
35
+
36
+ color: var(--pill-text);
37
+ outline: transparent;
38
+ }
39
+ :where(.dark) :is(a, button).pill:is(:hover, :focus) {
40
+ --pill-border: var(--bs-royal-200);
41
+ }
42
+
43
+ /* ------------------------------ Background Colors ------------------------------ */
44
+ :where(.box, [class*="bg-"]:not([class~="bg-white"])) .pill {
45
+ --pill-background: var(--bs-bg-base);
46
+ }
47
+ :where(.box[data-invert]) .pill {
48
+ --pill-background: var(--bs-bg-invert-subtle);
49
+ --pill-text: var(--bs-gray-100);
50
+ }
51
+ :where(.box[data-invert]) :is(a, button).pill:is(:hover, :focus) {
52
+ --pill-border: var(--bs-gray-100);
53
+ }
54
+ :where(.dark .box[data-invert]) .pill {
55
+ --pill-text: var(--bs-royal-400);
56
+ }
57
+ :where(.dark .box[data-invert]) :is(a, button).pill:is(:hover, :focus) {
58
+ --pill-border: var(--bs-royal-400);
59
+ }
60
+
61
+ /* ------------------------------ Status Styles ------------------------------ */
62
+ .pill:where([data-status]) {
63
+ --status-color: var(--bs-blue-400);
64
+ }
65
+ .pill:where([data-status])::before {
66
+ background-color: var(--status-color);
67
+ border-radius: 100%;
68
+ content: '';
69
+ height: 12px;
70
+ width: 12px;
71
+ }
72
+
73
+ /* ----- Status Colors ----- */
74
+ .pill:where([data-status^="active"]) {
75
+ --status-color: var(--bs-blue-400);
76
+ }
77
+ .pill:where([data-status^="complete"]) {
78
+ --status-color: var(--bs-purple-400);
79
+ }
80
+ .pill:where([data-status^="inactive"]) {
81
+ --status-color: var(--bs-gray-300);
82
+ }
83
+ .pill:where([data-status^="error"]) {
84
+ --status-color: var(--bs-red-400);
85
+ }
86
+ .pill:where([data-status^="positive"]) {
87
+ --status-color: #16986D;
88
+ }
89
+ .pill:where([data-status^="warning"]) {
90
+ --status-color: var(--bs-orange-warning);
91
+ }
92
+
93
+ /* ------------------------------ Filter Styles ------------------------------ */
94
+ .pill:where([data-type^="filter"]) {
95
+ --pill-background: var(--bs-bg-base);
96
+ --pill-border: var(--bs-border);
97
+ --pill-text: var(--bs-ink-base);
98
+ }
99
+ .pill:where([data-type^="filter"]):is(:hover, :focus) {
100
+ --pill-border: var(--bs-border);
101
+ }
102
+ :is(a, button).pill:where([data-type^="filter"]):is(:hover, :focus) {
103
+ --pill-border: var(--bs-ink-base);
104
+ }
105
+
106
+ /* ----- Filter Add Styles ----- */
107
+ /* Black + */
108
+ .pill:where([data-type^="filter"][data-type*="add"])::after {
109
+ 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");
110
+ }
111
+ /* White + */
112
+ :where(.dark) .pill:where([data-type^="filter"][data-type*="add"]):not(:disabled, [aria-disabled="true"])::after{
113
+ 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");
114
+ }
115
+
116
+
117
+ /* ----- Filter Remove Styles ----- */
118
+ /* Black X */
119
+ .pill:where([data-type^="filter"][data-type*="remove"])::after {
120
+ 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");
121
+ }
122
+ /* White X */
123
+ :where(.dark) .pill:where([data-type^="filter"][data-type*="remove"]):not(:disabled, [aria-disabled="true"])::after {
124
+ 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");
125
+ }
126
+ /* Dark Red X */
127
+ .pill:where([data-type^="filter"][data-type*="remove"]):hover::after {
128
+ 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");
129
+ }
130
+ /* Light Red X */
131
+ :where(.dark) .pill:where([data-type^="filter"][data-type*="remove"]):hover::after {
132
+ 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");
133
+ }
134
+
135
+ /* ----- Filter Active Styles ----- */
136
+ .pill:where([data-type^="filter"][data-type*="active"]) {
137
+ --pill-background: var(--bs-blue-400);
138
+ --pill-border: transparent;
139
+ --pill-text: var(--bs-white);
140
+ }
141
+ .pill:where([data-type^="filter"][data-type*="active"]):is(:hover, :focus) {
142
+ --pill-border: transparent;
143
+ }
144
+ :is(a, button).pill:where([data-type^="filter"][data-type*="active"]):is(:hover, :focus) {
145
+ --pill-background: var(--bs-blue-500);
146
+ --pill-border: transparent;
147
+ }
148
+ /* White X */
149
+ .pill:where([data-type^="filter"][data-type*="active"])::after {
150
+ 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");
151
+ }
152
+ /* Black X */
153
+ .pill:where([data-type^="filter"][data-type*="active"]):where(:disabled, [aria-disabled="true"])::after {
154
+ 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");
155
+ }
156
+
157
+ /* ------------------------------ Restricted Styles ------------------------------ */
158
+ .pill:where([data-type^="restricted"]) {
159
+ --pill-background: var(--bs-gray-400);
160
+ --pill-text: var(--bs-white);
161
+ }
162
+ .pill:where([data-type^="restricted"]):hover {
163
+ --pill-border: transparent;
164
+ }
165
+ .pill:where([data-type^="restricted"])::before {
166
+ content: url("data:image/svg+xml,%3Csvg width='11' height='12' viewBox='0 0 8 9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.25 4.5H7v3.715a.34.34 0 0 1-.37.285H1V5.285A.34.34 0 0 1 1.37 5h5a.25.25 0 0 0 .25-.25V3.275A2.545 2.545 0 0 0 4 1a2.55 2.55 0 0 0-2.625 2.29L1.39 4.5a.83.83 0 0 0-.89.785V8.75A.25.25 0 0 0 .75 9h5.88a.835.835 0 0 0 .87-.785V4.75a.25.25 0 0 0-.25-.25Zm-2.225 0H2.96V3.425c0-.035 0-.845 1.03-.845a.96.96 0 0 1 1.035.8V4.5ZM4 1.5a2.045 2.045 0 0 1 2.115 1.79V4.5h-.59V3.37A1.455 1.455 0 0 0 4 2.075a1.385 1.385 0 0 0-1.53 1.35V4.5h-.58V3.31A2.045 2.045 0 0 1 4 1.5Zm-.495 4.25H1.5v.5h2.005v-.5Zm-2.005 1h1.505v.5H1.5v-.5Z' fill='%23F0F0FA'/%3E%3C/svg%3E");
167
+ line-height: 1.1;
168
+ }
169
+ :where(.dark) .pill:where([data-type^="restricted"]) {
170
+ --pill-background: var(--bs-navy-300);
171
+ --pill-text: var(--bs-white);
172
+ }
173
+
174
+ /* ------------------------------ Live Now Styles ------------------------------ */
175
+ .pill:where([data-type^="live"]) {
176
+ --pill-background: var(--bs-royal-400);
177
+ --pill-text: var(--bs-white);
178
+ text-transform: uppercase;
179
+ }
180
+ .pill:where([data-type^="live"]):hover {
181
+ --pill-border: transparent;
182
+ }
183
+ .pill:where([data-type^="live"])::before {
184
+ background-color: var(--bs-red-400);
185
+ border: 3px solid var(--bs-white);
186
+ border-radius: 100%;
187
+ content: '';
188
+ height: 12px;
189
+ width: 12px;
190
+ }
191
+
192
+ /* ----- Disabled Styles ----- */
193
+ .pill:is(:disabled, [aria-disabled="true"]) {
194
+ pointer-events: none;
195
+ color: var(--bs-gray-400);
196
+ background-color: var(--bs-gray-200);
197
+ }
198
+
199
+ .pill:where([data-type^="filter"]):not([data-type*="active"]):is(:disabled, [aria-disabled="true"]) {
200
+ --pill-border: var(--bs-gray-400);
201
+ }
202
+
@@ -0,0 +1,95 @@
1
+ :where(.profile-img),
2
+ :where(.profile-img[data-img-size^='sm']) {
3
+ --profile-size: 2rem;
4
+ --profile-text: var(--bs-text-sm);
5
+
6
+ aspect-ratio: 1/1;
7
+ border-radius: 50%;
8
+ height: var(--profile-size);
9
+ overflow: hidden;
10
+ position: relative;
11
+ width: var(--profile-size);
12
+ }
13
+
14
+ :where(.profile-img img) {
15
+ height: 100%;
16
+ object-fit: cover;
17
+ width: 100%;
18
+ }
19
+ :where(.profile-img[data-no-img="true"]) img {
20
+ display: none;
21
+ }
22
+
23
+ :where(.profile-img)::before,
24
+ :where(.profile-img)::after {
25
+ border-radius: 50%;
26
+ border-collapse: collapse;
27
+ height: 100%;
28
+ inset: 0;
29
+ position:absolute;
30
+ width: 100%;
31
+ }
32
+ /* Shadow */
33
+ :where(.profile-img)::before {
34
+ box-shadow: var(--bs-shadow-profilePhoto);
35
+ content: '';
36
+ }
37
+ :where(.profile-img[data-no-img="true"])::before {
38
+ display: none;
39
+ }
40
+ /* Initials */
41
+ :where(.profile-img[data-no-img="true"])::after {
42
+ border: 1px solid currentColor;
43
+ color: var(--bs-blue-500);
44
+ content: attr(data-initials);
45
+ font-size: var(--profile-text);
46
+ text-transform: uppercase;
47
+ display: grid;
48
+ place-items: center;
49
+ }
50
+
51
+ /* Profile Sizes */
52
+ :where([data-img-size^='xs']) {
53
+ --profile-size: 1.5rem;
54
+ --profile-text: var(--bs-text-xs);
55
+ }
56
+ :where([data-img-size^='md']) {
57
+ --profile-size: 3rem;
58
+ --profile-text: var(--bs-text-md);
59
+ }
60
+ :where([data-img-size^='lg']) {
61
+ --profile-size: 4rem;
62
+ --profile-text: var(--bs-text-lg);
63
+ }
64
+ :where([data-img-size^='xl']) {
65
+ --profile-size: 5.75rem;
66
+ --profile-text: var(--bs-text-xl);
67
+ }
68
+
69
+ /* Profile with User Details */
70
+ :where(.profile[data-layout]),
71
+ :where(.profile[data-layout^='vertical']) {
72
+ display: grid;
73
+ row-gap: 0.5rem;
74
+ }
75
+
76
+ :where(.profile[data-layout^='horizontal']) {
77
+ column-gap: 1rem;
78
+ grid-template-columns: auto 1fr;
79
+ }
80
+
81
+ :where(.profile-content) {
82
+ color: var(--bs-ink-light);
83
+ font-size: var(--bs-text-xs);
84
+ }
85
+
86
+ :where(.profile[data-layout]:hover .profile-content > *:first-child) {
87
+ --profile-ink-hover: var(--bs-blue-500);
88
+
89
+ color: var(--profile-ink-hover);
90
+ text-decoration: underline;
91
+ }
92
+
93
+ .dark :where(.profile[data-layout]:hover .profile-content > *:first-child) {
94
+ --profile-ink-hover: var(--bs-blue-200);
95
+ }
@@ -0,0 +1,80 @@
1
+ table {
2
+ border-collapse: collapse;
3
+ border-spacing: 0;
4
+ overflow-x: auto;
5
+ max-width: 100%;
6
+ width: 100%;
7
+ }
8
+ thead {
9
+ color: var(--bs-ink-base);
10
+ font-size: var(--bs-font-base);
11
+ font-weight: 600;
12
+ }
13
+ tbody {
14
+ color: var(--bs-ink-light);
15
+ }
16
+ th {
17
+ background: var(--bs-bg-base);
18
+ }
19
+ th, td {
20
+ border-bottom: 1px solid var(--bs-border);
21
+ min-width: fit-content;
22
+ padding: var(--bs-space-2);
23
+ text-align: left;
24
+ }
25
+
26
+ /* Table Borders */
27
+ table[data-borders^="none"] {
28
+ border: 0;
29
+ }
30
+ table[data-borders^="all"] :where(th, td) {
31
+ border-left: 1px solid var(--bs-border);
32
+ }
33
+ table[data-borders^="all"] :where(th, td):last-child {
34
+ border-right: 1px solid var(--bs-border);
35
+ }
36
+ table[data-borders^="all"] th {
37
+ border-top: 1px solid var(--bs-border);
38
+ }
39
+
40
+ /* Table Rows */
41
+ table:where([data-rows^="striped"]) tbody > tr:nth-child(even) {
42
+ background-color: var(--bs-bg-subtle);
43
+ }
44
+
45
+ /* Table Cells */
46
+ table[data-cells^="fixed"] {
47
+ table-layout: fixed;
48
+ }
49
+ table:where([data-cells^="height"]) td {
50
+ height: 4.5rem;
51
+ vertical-align: middle;
52
+ }
53
+
54
+ /* Sticky Header */
55
+ table:where([data-sticky]) {
56
+ isolation: isolate;
57
+ }
58
+ table:where([data-sticky^="top"]) td {
59
+ z-index: 1;
60
+ }
61
+ table:where([data-sticky^="top"]) {
62
+ border-collapse: separate;
63
+ overflow-y: unset; /* Will break sticky headers if removed */
64
+ position: relative;
65
+ }
66
+ table:where([data-sticky^="left"]) {
67
+ border-collapse: separate;
68
+ overflow-x: unset; /* Will break sticky headers if removed */
69
+ position: relative;
70
+ }
71
+ table:where([data-sticky^="top"]) th {
72
+ position: sticky;
73
+ top: var(--bs-content-top);
74
+ z-index: 2;
75
+ }
76
+ table:where([data-sticky^="left"]) :is(td:first-child, th:first-child) {
77
+ position: sticky;
78
+ left: 0;
79
+ z-index: 2;
80
+ }