@wwtdev/bsds-css 1.0.1 → 1.1.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.
package/dist/wwt-bsds.css CHANGED
@@ -1,8 +1,10 @@
1
+ /* Global Styles */
1
2
  /* VARIABLES GENERATED WITH TAILWIND CONFIG.
2
3
  Tokens location: ./tailwind.config.js */
3
-
4
4
  :root {
5
5
  --bs-transparent: transparent;
6
+ --bs-inherit: inherit;
7
+ --bs-current: currentColor;
6
8
  --bs-white: #ffffff;
7
9
  --bs-black: #0a0b19;
8
10
  --bs-blue-10: rgba(0, 134, 234, 0.1);
@@ -161,25 +163,22 @@
161
163
  16px 16px 32px rgba(28, 0, 135, 0.2);
162
164
  --bs-shadow-profilePhoto: inset 0px 0px 0.5em rgba(28, 0, 135, 0.25);
163
165
  }
164
-
165
166
  /*
166
167
  1. Prevent padding and border from affecting element width.
167
168
  2. Allow adding a border to an element by just adding a border-width. This fixes an issue
168
169
  where Tailwind border classes no longer worked when using BS reset instead of TW's reset.
169
170
  https://tailwindcss.com/docs/preflight#border-styles-are-reset-globally
170
171
  */
171
-
172
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
172
173
  *,
173
174
  *::before,
174
175
  *::after {
175
- box-sizing: border-box; /* 1 */
176
- border-width: 0; /* 2 */
177
- border-style: solid; /* 2 */
178
176
  border-color: currentColor; /* 2 */
177
+ border-style: solid; /* 2 */
178
+ border-width: 0; /* 2 */
179
+ box-sizing: border-box; /* 1 */
179
180
  }
180
-
181
181
  /* Remove default margin */
182
-
183
182
  body,
184
183
  h1,
185
184
  h2,
@@ -194,57 +193,44 @@ dl,
194
193
  dd {
195
194
  margin: 0;
196
195
  }
197
-
198
196
  /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
199
-
200
- ul[role='list'],
201
- ol[role='list'] {
197
+ ul:where([role='list']),
198
+ ol:where([role='list']) {
202
199
  list-style: none;
203
200
  }
204
-
205
201
  /* Set core root defaults */
206
-
207
- html:focus-within {
202
+ html:where(:focus-within) {
208
203
  scroll-behavior: smooth;
209
204
  }
210
-
211
205
  /* Set core body defaults */
212
-
213
206
  body {
207
+ line-height: 1.5;
214
208
  min-height: 100vh;
215
209
  text-rendering: optimizeSpeed;
216
- line-height: 1.5;
217
210
  }
218
-
219
- /* A elements that don't have a class get default styles */
220
-
221
- a:not([class]) {
211
+ /* Elements that don't have a class get default styles */
212
+ a:where(:not([class])) {
222
213
  -webkit-text-decoration-skip: ink;
223
214
  text-decoration-skip-ink: auto;
224
215
  }
225
-
226
216
  /* Make images easier to work with */
227
-
228
217
  img,
229
218
  picture {
230
219
  max-width: 100%;
231
220
  display: block;
232
221
  }
233
-
234
222
  /* Inherit fonts for inputs */
235
-
236
- :where(input, textarea, select) {
223
+ input,
224
+ textarea,
225
+ select {
237
226
  font: inherit;
238
227
  }
239
-
240
228
  button {
241
229
  font-family: inherit;
242
230
  }
243
-
244
231
  /* Remove all animations and transitions for people that prefer not to see them */
245
-
246
232
  @media (prefers-reduced-motion: reduce) {
247
- html:focus-within {
233
+ html:where(:focus-within) {
248
234
  scroll-behavior: auto;
249
235
  }
250
236
 
@@ -253,11 +239,11 @@ button {
253
239
  *::after {
254
240
  animation-duration: 0.01ms !important;
255
241
  animation-iteration-count: 1 !important;
256
- transition-duration: 0.01ms !important;
257
242
  scroll-behavior: auto !important;
243
+ transition-duration: 0.01ms !important;
258
244
  }
259
245
  }
260
-
246
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
261
247
  :root,
262
248
  :host {
263
249
  --bs-bg-base: var(--bs-white);
@@ -273,14 +259,14 @@ button {
273
259
 
274
260
  /* Spacing */
275
261
  --bs-content-top: 4rem;
262
+ --bs-content-max-width: 72rem;
276
263
 
277
264
  /* Type */
278
265
  --bs-font-normal: 400;
279
266
  --bs-font-bold: 600;
280
267
  }
281
-
282
268
  .dark,
283
- .dark :host {
269
+ .dark :where(:host) {
284
270
  --bs-bg-base: var(--bs-navy-500);
285
271
  --bs-bg-subtle: #2F2F51;
286
272
  --bs-bg-invert: var(--bs-white);
@@ -291,355 +277,492 @@ button {
291
277
  --bs-ink-accent: var(--bs-plum-100);
292
278
  --bs-ink-invert: var(--bs-black);
293
279
  --bs-border: var(--bs-gray-400);
280
+ --bs-shadow-base: rgba(0, 0, 0, 0.06);
281
+ --bs-shadow-invert: rgba(10, 11, 25, 0.60);
282
+ --bs-shadow: -4px 4px 12px var(--bs-shadow-base),
283
+ -8px 8px 16px var(--bs-shadow-invert);
284
+ --bs-shadow-contentLow: -4px 4px 12px var(--bs-shadow-base),
285
+ -8px 8px 16px var(--bs-shadow-invert);
286
+ --bs-shadow-contentLowCenter: 0px 0px 12px var(--bs-shadow-base),
287
+ 0px 0px 16px var(--bs-shadow-invert);
288
+ --bs-shadow-contentMedium: -8px 8px 24px var(--bs-shadow-base),
289
+ -16px 16px 32px var(--bs-shadow-invert);
290
+ --bs-shadow-contentHigh: 0px 16px 48px var(--bs-shadow-base),
291
+ 0px 32px 64px var(--bs-shadow-invert);
292
+ --bs-shadow-drawerLeft: -12px 12px 24px var(--bs-shadow-base),
293
+ -16px 16px 32px var(--bs-shadow-invert);
294
+ --bs-shadow-drawerRight: -12px 12px 24px var(--bs-shadow-base),
295
+ 16px 16px 32px var(--bs-shadow-invert);
294
296
  }
295
-
296
297
  body,
297
298
  :host {
298
299
  background-color: var(--bs-bg-base);
299
300
  color: var(--bs-ink-light);
300
301
  }
301
-
302
302
  :target {
303
303
  scroll-margin-top: var(--bs-content-top);
304
304
  }
305
-
306
305
  ::-moz-selection {
307
306
  background-color: var(--bs-royal-400);
308
307
  color: var(--bs-white);
309
308
  }
310
-
311
309
  ::selection {
312
310
  background-color: var(--bs-royal-400);
313
311
  color: var(--bs-white);
314
312
  }
315
-
316
313
  [hidden] {
317
314
  display: none;
318
315
  }
319
-
320
316
  hr {
317
+ background: var(--bs-border);
321
318
  border: 0;
322
319
  height: 1px;
323
- background: var(--bs-border);
324
320
  }
325
-
321
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
326
322
  body {
327
- font-weight: 400;
328
323
  font-family: 'Roobert', sans-serif;
329
324
  font-size: var(--bs-text-base);
325
+ font-weight: 400;
330
326
  }
331
-
332
327
  /* Default Element/data-variant Styles */
333
-
334
328
  [data-variant^="heading-xl"] {
335
329
  font-size: var(--bs-text-4xl);
336
330
  font-weight: 400;
337
331
  line-height: var(--bs-leading-sm);
338
332
  }
339
-
340
- h1, [data-variant^="heading-1"] {
333
+ h1,
334
+ [data-variant^="heading-1"] {
341
335
  font-size: var(--bs-text-3xl);
342
336
  font-weight: 400;
343
337
  line-height: var(--bs-leading-sm);
344
338
  }
345
-
346
- h2, [data-variant^="heading-2"] {
339
+ h2,
340
+ [data-variant^="heading-2"] {
347
341
  font-size: var(--bs-text-2xl);
348
342
  font-weight: 600;
349
343
  line-height: var(--bs-leading-sm);
350
344
  }
351
-
352
- h3, [data-variant^="heading-3"] {
345
+ h3,
346
+ [data-variant^="heading-3"] {
353
347
  font-size: var(--bs-text-xl);
354
348
  font-weight: 600;
355
349
  line-height: var(--bs-leading-sm);
356
350
  }
357
-
358
- h4, [data-variant^="heading-4"] {
351
+ h4,
352
+ [data-variant^="heading-4"] {
359
353
  font-size: var(--bs-text-lg);
360
354
  font-weight: 600;
361
355
  }
362
-
363
- h5, [data-variant^="heading-5"] {
356
+ h5,
357
+ [data-variant^="heading-5"] {
364
358
  font-size: var(--bs-text-md);
365
359
  font-weight: 600;
366
360
  }
367
-
368
- h6, [data-variant^="heading-6"] {
361
+ h6,
362
+ [data-variant^="heading-6"] {
369
363
  font-size: var(--bs-text-base);
370
364
  font-weight: 600;
371
365
  }
372
-
373
366
  .prose {
374
367
  font-size: var(--bs-text-md);
375
368
  max-width: 70ch;
376
369
  }
377
-
378
- .prose :where(h1, h2, h3, h4, h5, h6):not([data-color]) {
370
+ :where(.prose) :is(h1, h2, h3, h4, h5, h6):where(:not([data-color])) {
379
371
  color: var(--bs-ink-base);
380
372
  }
381
-
382
373
  [data-variant^="default"] {
383
374
  font-size: var(--bs-text-base);
384
375
  }
385
-
386
- .bs-meta, [data-variant^="meta"] {
376
+ .bs-meta,
377
+ [data-variant^="meta"] {
387
378
  font-size: var(--bs-text-xs);
388
379
  font-weight: 600;
389
380
  }
390
-
391
- :where(.prose blockquote) {
381
+ :where(.prose) blockquote {
392
382
  border-left: 4px solid var(--bs-plum-200);
393
383
  color: var(--bs-plum-200);
394
384
  font-style: italic;
395
385
  font-weight: 400;
396
386
  padding-left: var(--bs-space-4);
397
387
  }
398
-
399
388
  .prose:where([data-width="wide"]) {
400
389
  max-width: 90%;
401
390
  }
402
-
403
- .prose:where([data-width="wide"]) > :is(p, h1, h2, h3, h4, h5, h6, blockquote, ul, ol) {
391
+ .prose:where([data-width="wide"]) > :where(p, h1, h2, h3, h4, h5, h6, blockquote, ul, ol) {
404
392
  max-width: 48rem;
405
393
  }
406
-
407
394
  /* data-font-size Styles */
408
-
409
- :where([data-font-size^='4xl']) {
395
+ [data-font-size^='4xl'] {
410
396
  font-size: var(--bs-text-4xl);
411
397
  line-height: var(--bs-leading-sm);
412
398
  }
413
-
414
- :where([data-font-size^='3xl']) {
399
+ [data-font-size^='3xl'] {
415
400
  font-size: var(--bs-text-3xl);
416
401
  line-height: var(--bs-leading-sm);
417
402
  }
418
-
419
- :where([data-font-size^='2xl']) {
403
+ [data-font-size^='2xl'] {
420
404
  font-size: var(--bs-text-2xl);
421
405
  line-height: var(--bs-leading-sm);
422
406
  }
423
-
424
- :where([data-font-size^='xl']) {
407
+ [data-font-size^='xl'] {
425
408
  font-size: var(--bs-text-xl);
426
409
  line-height: var(--bs-leading-sm);
427
410
  }
428
-
429
- :where([data-font-size^='lg']) {
411
+ [data-font-size^='lg'] {
430
412
  font-size: var(--bs-text-lg);
431
413
  }
432
-
433
- :where([data-font-size^='md']) {
414
+ [data-font-size^='md'] {
434
415
  font-size: var(--bs-text-md);
435
416
  }
436
-
437
- :where([data-font-size^='base']) {
417
+ [data-font-size^='base'] {
438
418
  font-size: var(--bs-text-base);
439
419
  }
440
-
441
- :where([data-font-size^='sm']) {
420
+ [data-font-size^='sm'] {
442
421
  font-size: var(--bs-text-sm);
443
422
  }
444
-
445
- :where([data-font-size^='xs']) {
423
+ [data-font-size^='xs'] {
446
424
  font-size: var(--bs-text-xs);
447
425
  }
448
-
449
426
  /* data-color Styles */
450
-
451
- :where([data-color^='base']) {
427
+ [data-color^='base'] {
452
428
  color: var(--bs-ink-base);
453
429
  }
454
-
455
- :where([data-color^='medium']) {
430
+ [data-color^='medium'] {
456
431
  color: var(--bs-ink-medium);
457
432
  }
458
-
459
- :where([data-color^='light']) {
433
+ [data-color^='light'] {
460
434
  color: var(--bs-ink-light);
461
435
  }
462
-
463
- :where([data-color^='accent']) {
436
+ [data-color^='accent'] {
464
437
  color: var(--bs-ink-accent);
465
438
  }
466
-
467
439
  /* data-weight Styles */
468
-
469
- :where([data-weight^='normal'], [data-weight^='400']) {
440
+ [data-weight^='normal'],
441
+ [data-weight^='400'] {
470
442
  font-weight: 400;
471
443
  }
472
-
473
- :where([data-weight^='bold'], [data-weight^='600']) {
444
+ [data-weight^='bold'],
445
+ [data-weight^='600'] {
474
446
  font-weight: 600;
475
447
  }
476
-
477
- body:where(.fluid) {
448
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
449
+ :where(body).fluid {
478
450
  font-size: var(--bs-text-f-md);
479
451
  }
480
-
481
452
  /* Defaults & Variants */
482
-
483
- :where(.fluid) h1,
484
- :where(.fluid) [data-variant^='heading-1'] {
453
+ .fluid :where(h1),
454
+ .fluid :where([data-variant^='heading-1']) {
485
455
  font-size: var(--bs-text-f-3xl);
486
456
  }
487
-
488
- :where(.fluid) h2,
489
- :where(.fluid) [data-variant^='heading-2'] {
457
+ .fluid :where(h2),
458
+ .fluid :where([data-variant^='heading-2']) {
490
459
  font-size: var(--bs-text-f-2xl);
491
460
  }
492
-
493
- :where(.fluid) h3,
494
- :where(.fluid) [data-variant^='heading-3'] {
461
+ .fluid :where(h3),
462
+ .fluid :where([data-variant^='heading-3']) {
495
463
  font-size: var(--bs-text-f-xl);
496
464
  }
497
-
498
- :where(.fluid) h4,
499
- :where(.fluid) [data-variant^='heading-4'] {
465
+ .fluid :where(h4),
466
+ .fluid :where([data-variant^='heading-4']) {
500
467
  font-size: var(--bs-text-f-lg);
501
468
  }
502
-
503
- :where(.fluid) h5,
504
- :where(.fluid) [data-variant^='heading-5'] {
469
+ .fluid :where(h5),
470
+ .fluid :where([data-variant^='heading-5']) {
505
471
  font-size: var(--bs-text-f-md);
506
472
  }
507
-
508
- :where(.fluid) h6,
509
- :where(.fluid) [data-variant^='heading-6'] {
473
+ .fluid :where(h6),
474
+ .fluid :where([data-variant^='heading-6']) {
510
475
  font-size: var(--bs-text-f-sm);
511
476
  }
512
-
513
- :where(.fluid).prose,
514
- :where(.fluid) .prose,
515
- :where(.fluid) [data-variant^='default'] {
477
+ .fluid:where(.prose),
478
+ .fluid :where(.prose),
479
+ .fluid :where([data-variant^='default']) {
516
480
  font-size: var(--bs-text-f-md);
517
481
  }
518
-
519
- :where(.fluid) .bs-meta,
520
- :where(.fluid) [data-variant^='meta'] {
482
+ .fluid :where(.bs-meta),
483
+ .fluid :where([data-variant^='meta']) {
521
484
  font-size: var(--bs-text-f-xs);
522
485
  }
523
-
524
486
  /* Fluid data-font-size Styles */
525
-
526
- :where(.fluid) [data-font-size^='4xl'] {
487
+ .fluid :where([data-font-size^='4xl']) {
527
488
  font-size: var(--bs-text-f-4xl);
528
489
  }
529
-
530
- :where(.fluid) [data-font-size^='3xl'] {
490
+ .fluid :where([data-font-size^='3xl']) {
531
491
  font-size: var(--bs-text-f-3xl);
532
492
  }
533
-
534
- :where(.fluid) [data-font-size^='2xl'] {
493
+ .fluid :where([data-font-size^='2xl']) {
535
494
  font-size: var(--bs-text-f-2xl);
536
495
  }
537
-
538
- :where(.fluid) [data-font-size^='xl'] {
496
+ .fluid :where([data-font-size^='xl']) {
539
497
  font-size: var(--bs-text-f-xl);
540
498
  line-height: var(--bs-leading-sm);
541
499
  }
542
-
543
- :where(.fluid) [data-font-size^='lg'] {
500
+ .fluid :where([data-font-size^='lg']) {
544
501
  font-size: var(--bs-text-f-lg);
545
502
  }
546
-
547
- :where(.fluid) [data-font-size^='md'] {
503
+ .fluid :where([data-font-size^='md']) {
548
504
  font-size: var(--bs-text-f-md);
549
505
  }
550
-
551
- :where(.fluid) [data-font-size^='base'] {
506
+ .fluid :where([data-font-size^='base']) {
552
507
  font-size: var(--bs-text-f-base);
553
508
  }
554
-
555
- :where(.fluid) [data-font-size^='sm'] {
509
+ .fluid :where([data-font-size^='sm']) {
556
510
  font-size: var(--bs-text-f-sm);
557
511
  }
558
-
559
- :where(.fluid) [data-font-size^='xs'] {
512
+ .fluid :where([data-font-size^='xs']) {
560
513
  font-size: var(--bs-text-f-xs);
561
514
  }
562
-
563
- /* Using :where() here for no additional specificity */
564
-
565
- :where(.prose) a {
515
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
516
+ :where(a) {
566
517
  border-radius: 0.25rem; /* gives outlines rounded corners in modern browsers */
567
518
  -webkit-box-decoration-break: clone;
568
519
  box-decoration-break: clone;
569
520
  color: var(--bs-purple-400);
521
+ outline-color: var(--bs-blue-400);
570
522
  text-decoration: underline;
571
523
  text-underline-offset: 2px;
572
524
  transition: all 0.15s ease-in-out;
573
- outline-color: var(--bs-blue-400);
574
525
  }
575
-
576
- :where(.prose) a:where(:not(.button)):hover,
577
- :where(.prose) a:where(:not(.button)):focus,
578
- :where(.prose) a:where(:not(.button)):focus-visible {
526
+ :where(a:hover),
527
+ :where(a:focus),
528
+ :where(a:focus-visible) {
579
529
  color: var(--bs-plum-400);
580
530
  text-decoration-color: var(--bs-purple-400);
581
531
  }
582
-
583
- :where(.prose) a:focus-visible {
532
+ :where(a:focus-visible) {
584
533
  outline-offset: var(--bs-space-1);
585
534
  outline-style: solid;
586
535
  outline-width: 2px;
587
536
  }
588
-
589
- :where(.prose) a:focus:where(:not(:focus-visible)) {
537
+ :where(a:focus:not(:focus-visible)) {
590
538
  outline: none;
591
539
  }
592
-
593
- /* dark links still need .dark because we don't want them overwritten by the light theme link styles in applications */
594
-
595
- .dark :where(.prose) a:not(.button, .bs-pill) {
540
+ /* Dark mode styling */
541
+ :where(.dark a) {
596
542
  color: var(--bs-purple-200);
597
543
  outline-color: var(--bs-blue-300);
598
544
  }
599
-
600
- .dark :where(.prose) a:where(:not(.button)):hover,
601
- .dark :where(.prose) a:where(:not(.button)):focus,
602
- .dark :where(.prose) a:where(:not(.button)):focus-visible {
545
+ :where(.dark a:hover),
546
+ :where(.dark a:focus),
547
+ :where(.dark a:focus-visible) {
603
548
  color: var(--bs-pink-300);
604
549
  text-decoration-color: var(--bs-purple-200);
605
550
  }
606
-
607
- .dark :where(.prose) a:focus-visible {
608
- outline-offset: var(--bs-space-1);
609
- }
610
-
611
- .dark :where(.prose) a:focus:where(:not(:focus-visible)) {
612
- outline: none;
613
- }
614
-
551
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
615
552
  .box-shadow {
616
553
  box-shadow: var(--bs-shadow);
617
554
  }
618
-
619
555
  .box-shadow:where([data-variant="center"]) {
620
556
  box-shadow: var(--bs-shadow-contentLowCenter);
621
557
  }
622
-
623
558
  .box-shadow:where([data-variant="medium"]) {
624
559
  box-shadow: var(--bs-shadow-contentMedium);
625
560
  }
626
-
627
561
  .box-shadow:where([data-variant="high"]) {
628
562
  box-shadow: var(--bs-shadow-contentHigh);
629
563
  }
630
-
631
564
  .box-shadow:where([data-variant="left-panel"]) {
632
565
  box-shadow: var(--bs-shadow-drawerLeft);
633
566
  }
634
-
635
567
  .box-shadow:where([data-variant="right-panel"]) {
636
568
  box-shadow: var(--bs-shadow-drawerRight);
637
569
  }
638
-
639
570
  .box-shadow:where([data-variant="profile"]) {
640
571
  box-shadow: var(--bs-shadow-profilePhoto);
641
572
  }
642
-
573
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
574
+ .box {
575
+ background: var(--bg-color, var(--bs-bg-subtle));
576
+ border-radius: 0.25rem;
577
+ padding: var(--box-space, var(--bs-space-6));
578
+ }
579
+ .box:where([data-invert]) {
580
+ --bg-color: var(--bs-bg-invert);
581
+ color: var(--bs-ink-invert);
582
+ }
583
+ :where(.fluid) .box {
584
+ padding: var(--box-space, var(--bs-space-f-6));
585
+ }
586
+ .cluster {
587
+ align-items: center;
588
+ display: flex;
589
+ flex-wrap: wrap;
590
+ gap: var(--cluster-space, var(--bs-space-6));
591
+ justify-content: flex-start;
592
+ }
593
+ .cluster:where([data-variant^="brick"]) > * {
594
+ align-self: stretch;
595
+ flex-grow: 1;
596
+ }
597
+ .cluster:where([data-gap="tight"]) {
598
+ gap: var(--cluster-space, var(--bs-space-2));
599
+ }
600
+ :where(.fluid) .cluster {
601
+ gap: var(--cluster-space, var(--bs-space-f-6));
602
+ }
603
+ :where(.fluid) .cluster:where([data-gap="tight"]) {
604
+ gap: var(--cluster-space, var(--bs-space-f-2));
605
+ }
606
+ .flow > * + * {
607
+ margin-top: var(--flow-space, 1.25em);
608
+ }
609
+ .flow > :where(h1, h2, h3, h4, h5, h6) {
610
+ --flow-space: 2em;
611
+ }
612
+ .flow > :where(hr) + * {
613
+ --flow-space: 1.5em;
614
+ }
615
+ .flow > :where(h1, h2, h3, h4, h5, h6) + * {
616
+ --flow-space: 0.5em;
617
+ }
618
+ .flow > :where(ul, ol) > :where(li) {
619
+ margin-top: var(--flow-space, 0.625em);
620
+ }
621
+ .region {
622
+ padding-block: var(--region-space, var(--bs-space-6));
623
+ }
624
+ .region:where([data-space^='sm']) {
625
+ padding-block: var(--bs-space-3);
626
+ }
627
+ .region:where([data-space^='lg']) {
628
+ padding-block: var(--bs-space-12);
629
+ }
630
+ :where(.fluid) .region {
631
+ padding-block: var(--region-space, var(--bs-space-f-6));
632
+ }
633
+ :where(.fluid) .region:where([data-space^='sm']) {
634
+ padding-block: var(--bs-space-f-3);
635
+ }
636
+ :where(.fluid) .region:where([data-space^='lg']) {
637
+ padding-block: var(--bs-space-f-12);
638
+ }
639
+ .wrapper {
640
+ margin-inline: auto;
641
+ max-width: var(--max-width, 75rem);
642
+ min-width: 0;
643
+ padding-inline: var(--wrapper-space, var(--bs-space-6));
644
+ position: relative;
645
+ width: 100%;
646
+ }
647
+ :where(.fluid) .wrapper {
648
+ padding-inline: var(--wrapper-space, var(--bs-space-f-6));
649
+ }
650
+ .wrapper:where([data-flush]) {
651
+ padding-inline: 0;
652
+ }
653
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
654
+ .visually-hidden {
655
+ border: 0;
656
+ clip: rect(0 0 0 0);
657
+ height: auto;
658
+ margin: 0;
659
+ overflow: hidden;
660
+ padding: 0;
661
+ position: absolute;
662
+ white-space: nowrap;
663
+ width: 1px;
664
+ }
665
+ .measure-compact {
666
+ max-width: 40ch;
667
+ }
668
+ .measure-short {
669
+ max-width: 50ch;
670
+ }
671
+ .measure-long {
672
+ max-width: 70ch;
673
+ }
674
+ /* Component Styles */
675
+ .bs-accordion {
676
+ --accordion-link-color: var(--bs-purple-400);
677
+ --accordion-link-outline-color: var(--bs-blue-400);
678
+ --accordion-outline-color: transparent;
679
+ --accordion-padding-inline: 0;
680
+ --accordion-text-size: var(--bs-text-sm);
681
+ border-block: 1px solid var(--bs-border);
682
+ display: block;
683
+ }
684
+ @media (min-width: 957px) {
685
+ .bs-accordion {
686
+ --accordion-padding-inline: var(--bs-space-2);
687
+ --accordion-text-size: var(--bs-text-base);
688
+ }
689
+ }
690
+ /* Accordion Panel (Icon, Title, Caret) */
691
+ .bs-accordion :where(header button) {
692
+ align-items: center;
693
+ background-color: var(--bs-bg-base);
694
+ border: 0px solid transparent;
695
+ border-radius: .25rem;
696
+ color: var(--bs-ink-base);
697
+ cursor: pointer;
698
+ display: grid;
699
+ font-size: var(--accordion-text-size);
700
+ font-weight: var(--bs-font-normal);
701
+ grid-template-columns: minmax(0px, auto) minmax(0px, 1fr) minmax(0px, auto);
702
+ grid-template-areas: "start main end";
703
+ line-height: 1.5;
704
+ outline: 2px solid var(--accordion-outline-color);
705
+ padding-block: var(--bs-space-f-2);
706
+ padding-inline: var(--accordion-padding-inline);
707
+ width: 100%;
708
+ }
709
+ .bs-accordion :where(header button:focus-visible) {
710
+ --accordion-outline-color: var(--bs-blue-400);
711
+ }
712
+ .bs-accordion :where(header button) > * {
713
+ font-size: inherit;
714
+ font-weight: inherit;
715
+ line-height: inherit;
716
+ }
717
+ .bs-accordion :where(header button) :where([data-position]) {
718
+ width: var(--accordion-text-size);
719
+ }
720
+ .bs-accordion :where(header button) > :where([data-position="start"]) {
721
+ grid-area: start;
722
+ margin-right: var(--bs-space-2);
723
+ }
724
+ .bs-accordion :where(header button) > :where([data-position="end"]) {
725
+ grid-area: end;
726
+ transform: rotate(0);
727
+ transition: transform 250ms ease-out;
728
+ }
729
+ .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
730
+ transform: rotate(180deg);
731
+ }
732
+ .bs-accordion :where(header button) > :where(h2, h3, h4, h5) {
733
+ grid-area: main;
734
+ margin-right: var(--bs-space-2);
735
+ text-align: left;
736
+ }
737
+ .bs-accordion :where(header button) > :where(h2, h3, h4, h5) :where(*) {
738
+ vertical-align: middle;
739
+ }
740
+ @media (min-width: 957px) {
741
+ .bs-accordion :where(header button) > :where(h2, h3, h4, h5) {
742
+ margin-right: var(--bs-space-3);
743
+ }
744
+ }
745
+ /* Accordion Content (the collapsible / expandible part) */
746
+ .bs-accordion :where(.bs-accordion-content) {
747
+ display: grid;
748
+ font-size: var(--accordion-text-size);
749
+ grid-template-rows: 0fr;
750
+ overflow: hidden;
751
+ padding-inline: var(--accordion-padding-inline);
752
+ transition: grid-template-rows 250ms ease-out;
753
+ }
754
+ .bs-accordion :where(.bs-accordion-content) > :where(:first-child) {
755
+ overflow: hidden;
756
+ }
757
+ .bs-accordion :where(.bs-accordion-content[data-open]:not([data-open="false"])) {
758
+ grid-template-rows: 1fr;
759
+ -webkit-padding-after: var(--bs-space-f-2);
760
+ padding-block-end: var(--bs-space-f-2);
761
+ }
762
+ /* Accordion Group */
763
+ :where(.bs-accordion[data-stacked]) + .bs-accordion:where([data-stacked]) {
764
+ border-block-start-color: transparent;
765
+ }
643
766
  .bs-badge[data-position^='left']::before,
644
767
  .bs-badge:where(:not([data-position^='left']))::after {
645
768
  align-items: center;
@@ -657,12 +780,10 @@ body:where(.fluid) {
657
780
  vertical-align: top;
658
781
  width: 6px;
659
782
  }
660
-
661
783
  .bs-pill .bs-badge::before,
662
784
  .bs-pill .bs-badge::after {
663
785
  font-size: 0.8125em;
664
786
  }
665
-
666
787
  .bs-badge[data-count]:where([data-position^='left'])::before,
667
788
  .bs-badge[data-count]:where(:not([data-position^='left']))::after {
668
789
  color: white;
@@ -674,36 +795,81 @@ body:where(.fluid) {
674
795
  vertical-align: unset;
675
796
  width: auto;
676
797
  }
677
-
678
798
  .bs-badge[data-count]::before {
679
799
  margin-right: 0.25rem;
680
800
  }
681
-
682
801
  .bs-badge[data-count]::after {
683
802
  margin-left: 0.25rem;
684
803
  }
685
-
686
804
  .bs-badge[data-count='0']::before,
687
805
  .bs-badge[data-count='0']::after {
688
806
  display: none;
689
807
  }
690
-
691
808
  .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::before,
692
809
  .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::after {
693
810
  display: inline-flex;
694
811
  }
695
-
696
812
  .bs-badge[data-badge-color^='blue']::before,
697
813
  .bs-badge[data-badge-color^='blue']::after {
698
814
  background: var(--bs-blue-500);
699
815
  }
700
-
701
816
  .bs-badge[data-badge-color^='white']::before,
702
817
  .bs-badge[data-badge-color^='white']::after {
703
818
  background: white;
704
819
  color: var(--badge-text, var(--bs-black));
705
820
  }
706
-
821
+ .bs-banner {
822
+ background-color: var(--bs-bg-invert-subtle);
823
+ color: var(--bs-gray-100);
824
+ display: flex;
825
+ justify-content: center;
826
+ padding-bottom: 1rem;
827
+ padding-left: 1.25rem;
828
+ padding-right: 1.25rem;
829
+ padding-top: 1rem;
830
+ }
831
+ .bs-banner:where([data-dismissed]) {
832
+ display: none;
833
+ }
834
+ :where(.dark) .bs-banner {
835
+ color: var(--bs-black);
836
+ }
837
+ .bs-banner :where(.bs-banner-content) {
838
+ align-items: center;
839
+ display: flex;
840
+ /* Content locks at globally configured width */
841
+ max-width: var(--bs-content-max-width);
842
+ width: 100%;
843
+ }
844
+ .bs-banner :where(.bs-banner-content .bs-banner-warning-icon) {
845
+ /* Do not display warning icon on smaller screens */
846
+ display: none;
847
+ margin-right: 0.625rem;
848
+ }
849
+ .bs-banner :where(.bs-banner-content p) {
850
+ flex-grow: 1;
851
+ padding-right: 1.25rem;
852
+ }
853
+ .bs-banner :where(.bs-banner-content p a) {
854
+ color: var(--bs-pink-200);
855
+ text-decoration: none;
856
+ }
857
+ :where(.dark) .bs-banner :where(.bs-banner-content p a) {
858
+ color: var(--bs-pink-500);
859
+ }
860
+ .bs-banner :where(.bs-banner-content p a:hover) {
861
+ text-decoration: underline;
862
+ }
863
+ .bs-banner :where(.bs-banner-content button) {
864
+ background-color: inherit;
865
+ color: inherit;
866
+ cursor: pointer;
867
+ }
868
+ @media (min-width: 957px) {
869
+ .bs-banner :where(.bs-banner-content .bs-banner-warning-icon) {
870
+ display: inline-flex;
871
+ }
872
+ }
707
873
  :where(button) {
708
874
  background-color: inherit;
709
875
  border-color: transparent;
@@ -713,7 +879,6 @@ body:where(.fluid) {
713
879
  padding: var(--bs-space-0);
714
880
  text-decoration: none;
715
881
  }
716
-
717
882
  .bs-button {
718
883
  --btn-main: var(--bs-blue-400);
719
884
  --btn-secondary: var(--bs-blue-300);
@@ -736,20 +901,16 @@ body:where(.fluid) {
736
901
  transition: all 100ms ease-in-out;
737
902
  vertical-align: middle;
738
903
  }
739
-
740
904
  .bs-button:hover {
741
905
  background-color: var(--btn-secondary);
742
906
  }
743
-
744
907
  .bs-button:active {
745
908
  background-color: var(--btn-secondary);
746
909
  transform: scale(0.97);
747
910
  transform-origin: center;
748
911
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
749
912
  }
750
-
751
913
  /* Button Focus Styles */
752
-
753
914
  .bs-button::before {
754
915
  border-color: transparent;
755
916
  border-radius: 0.5rem;
@@ -762,23 +923,18 @@ body:where(.fluid) {
762
923
  transition: border-color 0.125s ease-in-out;
763
924
  width: calc(100% + 0.5rem);
764
925
  }
765
-
766
926
  .bs-button:focus::before {
767
927
  border-color: var(--btn-main);
768
928
  }
769
-
770
929
  .bs-button:focus-visible::before {
771
930
  border-color: var(--btn-main);
772
931
  box-shadow: none;
773
932
  }
774
-
775
933
  .bs-button:focus:not(:focus-visible)::before {
776
934
  border-color: transparent;
777
935
  box-shadow: none;
778
936
  }
779
-
780
937
  /* Ghost Buttons */
781
-
782
938
  .bs-button:where([data-ghost]) {
783
939
  --btn-light: var(--bs-blue-10);
784
940
  --btn-secondary: var(--bs-blue-10);
@@ -786,61 +942,50 @@ body:where(.fluid) {
786
942
  box-shadow: inset 0 0 0 1px var(--btn-main);
787
943
  color: var(--btn-main);
788
944
  }
789
-
790
945
  .bs-button:where([data-ghost])::before {
791
946
  border-radius: 0.4375rem;
792
947
  }
793
-
794
948
  .bs-button:where([data-ghost]):hover,
795
949
  .bs-button:where([data-ghost]):focus {
796
950
  background-color: var(--btn-light);
797
951
  }
798
-
799
952
  .bs-button:where([data-ghost]):active {
800
953
  box-shadow:
801
954
  inset 0 0 0 1px var(--btn-main),
802
955
  inset 0px 0px 4px 1px var(--btn-highlight);
803
956
  }
804
-
805
957
  /* Button type */
806
-
807
958
  .bs-button:where([data-variant^='secondary']) {
808
959
  --btn-main: var(--bs-plum-400);
809
960
  --btn-secondary: var(--bs-plum-300);
810
961
  --btn-light: var(--bs-plum-10);
811
962
  --btn-highlight: var(--bs-plum-100);
812
963
  }
813
-
814
964
  .dark .bs-button:where([data-variant^='secondary']) {
815
965
  --btn-main: var(--bs-plum-200);
816
966
  --btn-secondary: var(--bs-plum-300);
817
967
  --btn-light: var(--bs-navy-400);
818
968
  --btn-highlight: var(--bs-plum-400);
819
969
  }
820
-
821
970
  .bs-button:where([data-variant^='positive']) {
822
971
  --btn-main: var(--bs-purple-400);
823
972
  --btn-secondary: var(--bs-purple-300);
824
973
  --btn-light: var(--bs-purple-10);
825
974
  --btn-highlight: var(--bs-purple-100);
826
975
  }
827
-
828
976
  .bs-button:where([data-variant^='warning']) {
829
977
  --btn-main: var(--bs-orange-warning);
830
978
  --btn-secondary: var(--bs-orange-300);
831
979
  --btn-light: var(--bs-orange-10);
832
980
  --btn-highlight: var(--bs-orange-100);
833
981
  }
834
-
835
982
  .bs-button:where([data-variant^='negative']) {
836
983
  --btn-main: var(--bs-red-400);
837
984
  --btn-secondary: var(--bs-red-300);
838
985
  --btn-light: var(--bs-red-10);
839
986
  --btn-highlight: var(--bs-red-100);
840
987
  }
841
-
842
988
  /* Text Button */
843
-
844
989
  .bs-button:where([data-text]) {
845
990
  background-color: transparent;
846
991
  color: var(--bs-blue-500);
@@ -849,68 +994,56 @@ body:where(.fluid) {
849
994
  font-weight: 400;
850
995
  line-height: 150%;
851
996
  }
852
-
853
997
  .bs-button:where([data-text]):hover {
998
+ color: var(--bs-blue-400);
854
999
  background-color: transparent;
855
1000
  text-decoration: underline;
856
1001
  }
857
-
1002
+ .bs-button:where([data-text]):has(svg):hover {
1003
+ text-decoration: none;
1004
+ }
858
1005
  .bs-button:where([data-text]):active {
859
1006
  box-shadow: none;
860
1007
  }
861
-
862
1008
  /* Button Size */
863
-
864
1009
  .bs-button:where([data-size^='sm']) {
865
1010
  font-size: var(--bs-text-sm);
866
1011
  }
867
-
868
1012
  .bs-button:where([data-text][data-size^='sm']) {
869
1013
  font-size: var(--bs-text-base);
870
1014
  }
871
-
872
1015
  /* Disabled Styling */
873
-
874
1016
  :where(button:disabled),
875
1017
  .bs-button:where([aria-disabled='true']) /* for links as buttons */ {
876
1018
  pointer-events: none;
877
1019
  }
878
-
879
1020
  .bs-button:where(:disabled),
880
1021
  .bs-button:where([aria-disabled='true']) {
881
1022
  color: var(--bs-gray-400);
882
1023
  background-color: var(--bs-gray-200);
883
1024
  }
884
-
885
1025
  .bs-button:where([data-ghost]):disabled,
886
1026
  .bs-button:where([data-ghost])[aria-disabled='true'] {
887
1027
  box-shadow: inset 0 0 0 1px var(--bs-gray-400);
888
1028
  }
889
-
890
1029
  .bs-button:where([data-text]):disabled,
891
1030
  .bs-button:where([data-text][aria-disabled='true']) {
892
1031
  background-color: transparent;
893
1032
  }
894
-
895
1033
  /* Icon Height */
896
-
897
1034
  .bs-button :where(svg:not([height])) {
898
1035
  height: var(--bs-text-base);
899
1036
  }
900
-
901
1037
  .bs-button:where([data-size^='sm']) :where(svg:not([height])) {
902
1038
  height: var(--bs-text-xs);
903
1039
  }
904
-
905
1040
  /* links as buttons */
906
-
907
1041
  a.bs-button {
908
1042
  align-items: center;
909
1043
  display: inline-flex;
910
1044
  outline: none;
911
1045
  vertical-align: middle;
912
1046
  }
913
-
914
1047
  :where(label, legend) {
915
1048
  --label-color: var(--bs-ink-base);
916
1049
 
@@ -921,30 +1054,25 @@ a.bs-button {
921
1054
  line-height: var(--bs-leading-base);
922
1055
  width: 100%;
923
1056
  }
924
-
925
1057
  :where([data-required]) {
926
- color: var(--bs-red-400);
1058
+ color: var(--bs-red-500);
927
1059
  }
928
-
929
1060
  :where(label[data-disabled], [data-disabled] [data-required], [data-disabled] label) {
930
1061
  --label-color: var(--bs-ink-light);
931
1062
  }
932
-
933
1063
  :where([data-required]) {
934
- color: var(--bs-red-400);
1064
+ color: var(--bs-red-500);
1065
+ font-weight: var(--bs-font-bold, 600);
935
1066
  }
936
-
937
1067
  :where([data-disabled], [data-disabled] [data-required]) {
938
1068
  color: var(--bs-gray-400);
939
1069
  }
940
-
941
- :where(label + input, label > input):not([type^='checkbox'], [type^='radio']),
1070
+ :where(label + input, label > input):where(:not([type='checkbox'], [type='radio'])),
942
1071
  :where(label + textarea, label > textarea),
943
1072
  :where(label + select, label > select) {
944
1073
  margin-top: 0.25rem;
945
1074
  }
946
-
947
- input:not([type^='checkbox'], [type^='radio'], [type^='file'], [type^='range']),
1075
+ input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
948
1076
  textarea, select {
949
1077
  -webkit-appearance: none;
950
1078
  -moz-appearance: none;
@@ -955,78 +1083,68 @@ textarea, select {
955
1083
  color: var(--bs-ink-base);
956
1084
  font-size: var(--bs-text-base);
957
1085
  font-weight: 400;
1086
+ height: 2.5rem;
958
1087
  line-height: var(--bs-leading-base);
959
- min-height: 40px;
960
- padding: 0.5rem 0.75rem;
1088
+ min-height: 2.5rem;
1089
+ padding-inline: 0.75rem;
961
1090
  width: 100%;
962
1091
  }
963
-
1092
+ textarea {
1093
+ height: auto;
1094
+ padding-block: 0.5rem;
1095
+ resize: vertical;
1096
+ }
964
1097
  /* Generally applicable (all input types) */
965
-
966
1098
  :is(input, textarea, select)::-moz-placeholder {
967
1099
  color: var(--bs-violet-200);
968
1100
  opacity: 1;
969
1101
  }
970
-
971
1102
  :is(input, textarea, select)::placeholder {
972
1103
  color: var(--bs-violet-200);
973
1104
  opacity: 1;
974
1105
  }
975
-
976
- :is(input, textarea, select):focus {
1106
+ :is(input:where(:not([type='checkbox'], [type='radio']), textarea, select):where(:focus)) {
977
1107
  box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
978
1108
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
979
1109
  outline: 2px solid transparent;
980
1110
  }
981
-
982
- :where(.box) :is(input, textarea, select):focus {
1111
+ :where(.box) :is(input, textarea, select):where(:focus) {
983
1112
  --offset-color: var(--bs-bg-subtle);
984
1113
  }
985
-
986
- :where(.box[data-invert]) :is(input, textarea, select):focus {
1114
+ :where(.box[data-invert]) :is(input, textarea, select):where(:focus) {
987
1115
  --offset-color: var(--bs-bg-invert);
988
1116
  }
989
-
990
1117
  :is(input, textarea, select):where([data-error]) {
991
1118
  --outline-color: var(--bs-red-200);
992
1119
  }
993
-
994
- :is(input, textarea, select):disabled {
1120
+ :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled) {
995
1121
  background-color: var(--bs-gray-200);
996
1122
  border-color: var(--bs-gray-400);
997
1123
  color: var(--bs-gray-400);
998
1124
  }
999
-
1000
1125
  /*
1001
1126
  Removes the built-in 'margin' on bottom of textarea
1002
1127
  see https://bugs.chromium.org/p/chromium/issues/detail?id=89530
1003
1128
  :has not fully supported yet but will work for most
1004
1129
  */
1005
-
1006
1130
  :has(> textarea:only-child) {
1007
1131
  display: block;
1008
1132
  line-height: 0;
1009
1133
  }
1010
-
1011
1134
  /* chrome user agent styling was applying opacity: 0.7 */
1012
-
1013
1135
  :where(select:disabled) {
1014
1136
  opacity: 1;
1015
1137
  }
1016
-
1017
1138
  :is(input, textarea, select):disabled::-moz-placeholder, :is(input, textarea, select)[disabled]::-moz-placeholder {
1018
1139
  color: var(--bs-gray-400);
1019
1140
  opacity: 1;
1020
1141
  }
1021
-
1022
1142
  :is(input, textarea, select):disabled::placeholder,
1023
1143
  :is(input, textarea, select)[disabled]::placeholder {
1024
1144
  color: var(--bs-gray-400);
1025
1145
  opacity: 1;
1026
1146
  }
1027
-
1028
1147
  /* Select */
1029
-
1030
1148
  select {
1031
1149
  /* URL Encoded SVG dropdown caret so there is something there */
1032
1150
  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");
@@ -1034,101 +1152,90 @@ select {
1034
1152
  background-repeat: no-repeat;
1035
1153
  background-size: 1em 1em;
1036
1154
  }
1037
-
1038
1155
  .dark select {
1039
1156
  /* URL Encoded SVG dropdown caret so there is something there */
1040
1157
  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");
1041
1158
  }
1042
-
1043
1159
  .dark select:disabled {
1044
1160
  /* URL Encoded SVG dropdown caret so there is something there */
1045
1161
  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='%23555775' 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");
1046
1162
  }
1047
-
1048
1163
  /* Errors and Messages */
1049
-
1050
1164
  :is(input, select, textarea):where([data-error]) {
1051
1165
  --input-border: var(--bs-red-400);
1052
1166
  }
1053
-
1054
1167
  /* Fieldset */
1055
-
1056
1168
  :where(fieldset) {
1057
1169
  border: none;
1058
1170
  margin-left: 0;
1059
1171
  margin-right: 0;
1060
1172
  padding: 0;
1061
1173
  }
1062
-
1063
1174
  :where(fieldset legend) {
1064
1175
  margin-bottom: 0.25rem;
1065
1176
  padding: 0;
1066
1177
  }
1067
-
1068
1178
  .bs-field-details {
1069
1179
  display: flex;
1070
1180
  justify-content: space-between;
1071
- align-items: center;
1181
+ align-items: flex-start;
1182
+ gap: var(--bs-space-2);
1072
1183
  padding: 0 0.75rem;
1073
1184
  margin-top: 0.5rem;
1074
1185
  }
1075
-
1076
1186
  :where(textarea, bs-textarea) + .bs-field-details {
1077
1187
  margin-top: 0.25rem;
1078
1188
  }
1079
-
1080
1189
  .bs-field-details :where(.bs-character-count:first-child) {
1081
1190
  margin-left: auto;
1082
1191
  }
1083
-
1084
1192
  .bs-character-count {
1085
1193
  color: var(--bs-ink-base);
1086
1194
  font-size: var(--bs-text-xs);
1087
1195
  font-weight: 400;
1088
1196
  text-align: right;
1197
+ white-space: nowrap;
1089
1198
  }
1090
-
1091
1199
  :where([disabled], [data-disabled]) + .bs-character-count,
1092
1200
  :where([disabled], [data-disabled]) .bs-character-count,
1093
1201
  .bs-character-count:where([data-disabled]) {
1094
1202
  color: var(--bs-gray-400);
1095
1203
  }
1096
-
1097
1204
  .bs-character-count:where([data-error]) {
1098
1205
  color: var(--bs-red-400);
1099
1206
  }
1100
-
1101
1207
  /* Containers and Labels for Checkbox/Radio */
1102
-
1103
1208
  .bs-boolean {
1104
1209
  display: flex;
1105
1210
  align-items: center;
1106
1211
  font-size: var(--bs-text-base);
1107
1212
  font-weight: 400;
1108
- gap: 0.5em;
1109
1213
  line-height: 115%;
1110
1214
  }
1111
-
1112
1215
  .bs-boolean:where([data-size='sm']) input {
1113
1216
  width: var(--bs-text-xs);
1114
1217
  height: var(--bs-text-xs);
1115
1218
  }
1116
-
1117
1219
  .bs-boolean label {
1118
1220
  font-size: var(--bs-text-base);
1119
1221
  font-weight: 400;
1120
1222
  line-height: 1.5;
1121
1223
  width: auto;
1122
1224
  }
1123
-
1225
+ /* not using gap on .bs-boolean due to dead click zone */
1226
+ .bs-boolean label {
1227
+ -webkit-padding-end: 0.5em;
1228
+ padding-inline-end: 0.5em;
1229
+ }
1230
+ .bs-boolean input + label {
1231
+ padding-inline: 0.5em 0;
1232
+ }
1124
1233
  .bs-boolean:where([data-size='sm']),
1125
1234
  .bs-boolean:where([data-size='sm']) label {
1126
1235
  font-size: var(--bs-text-xs);
1127
1236
  }
1128
-
1129
1237
  /* Checkbox & Radio Input */
1130
-
1131
- :where(input[type^='checkbox'], input[type^='radio']) {
1238
+ :where(input[type='checkbox'], input[type='radio']) {
1132
1239
  --box-shadow: var(--bs-ink-base);
1133
1240
 
1134
1241
  -webkit-appearance: none;
@@ -1145,21 +1252,19 @@ select {
1145
1252
  position: relative;
1146
1253
  width: 1rem;
1147
1254
  }
1148
-
1149
- :where(input[type^='checkbox'], input[type^='radio']):focus {
1255
+ :where(input[type='checkbox'], input[type='radio']):focus-visible {
1150
1256
  box-shadow: inset 0 0 0 0.125rem var(--box-shadow),
1151
1257
  0 0 0 2px var(--offset-color, var(--bs-bg-base)),
1152
1258
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
1259
+ outline: 2px solid transparent;
1153
1260
  }
1154
-
1155
- :where(input[type^='checkbox']) {
1261
+ :where(input[type='checkbox']) {
1156
1262
  border-radius: 0.125rem;
1157
1263
  }
1158
-
1159
- :where(input[type^='radio']) {
1264
+ :where(input[type='radio']) {
1160
1265
  border-radius: 50%;
1161
1266
  }
1162
-
1267
+ /* Checkbox's checkmark */
1163
1268
  input:where([type='checkbox'])::before {
1164
1269
  --filled-size: 1rem;
1165
1270
  --check-fill-color: var(--bs-blue-400);
@@ -1171,8 +1276,7 @@ input:where([type='checkbox'])::before {
1171
1276
  visibility: hidden;
1172
1277
  width: var(--filled-size);
1173
1278
  }
1174
-
1175
- input:where([type^='checkbox'])::after {
1279
+ input:where([type='checkbox'])::after {
1176
1280
  border: solid var(--bs-white);
1177
1281
  border-width: 0 0.125rem 0.125rem 0;
1178
1282
  content: '';
@@ -1185,7 +1289,14 @@ input:where([type^='checkbox'])::after {
1185
1289
  visibility: hidden;
1186
1290
  width: 0.375em;
1187
1291
  }
1188
-
1292
+ input:where([type='checkbox']):where(:indeterminate)::after {
1293
+ border: none;
1294
+ background-color: var(--bs-white);
1295
+ height: 0.125rem;
1296
+ transform: translate(-50%, -0.0625rem) rotate(0deg);
1297
+ width: 0.625em;
1298
+ }
1299
+ /* Radio's dot */
1189
1300
  input:where([type='radio'])::before {
1190
1301
  --filled-size: 1rem;
1191
1302
  --radio-fill-color: var(--bs-blue-400);
@@ -1198,7 +1309,6 @@ input:where([type='radio'])::before {
1198
1309
  visibility: hidden;
1199
1310
  width: var(--filled-size);
1200
1311
  }
1201
-
1202
1312
  input:where([type='radio'])::after {
1203
1313
  --inner-size: 0.375rem;
1204
1314
  --inner-fill-color: var(--bs-white);
@@ -1215,46 +1325,40 @@ input:where([type='radio'])::after {
1215
1325
  visibility: hidden;
1216
1326
  width: var(--inner-size);
1217
1327
  }
1218
-
1219
- input:where([type='checkbox']:checked, [type='radio']:checked)::before,
1220
- input:where([type='checkbox']:checked, [type='radio']:checked)::after {
1328
+ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::before,
1329
+ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::after {
1221
1330
  visibility: visible;
1222
1331
  }
1223
-
1224
1332
  .bs-boolean:where([data-size='sm']) input::before {
1225
1333
  --filled-size: var(--bs-text-xs);
1226
1334
  }
1227
-
1228
1335
  .bs-boolean:where([data-size='sm']) input[type='checkbox']::after {
1229
1336
  height: 0.5625rem;
1230
1337
  width: 0.3125rem;
1231
1338
  }
1232
-
1339
+ .bs-boolean:where([data-size='sm']) input[type='checkbox']:where(:indeterminate)::after {
1340
+ height: 0.125rem;
1341
+ width: .75em;
1342
+ }
1233
1343
  .bs-boolean:where([data-size='sm']) input[type='radio']::after {
1234
1344
  --inner-size: 0.25rem;
1235
1345
  }
1236
-
1237
1346
  /* Disabled State */
1238
-
1239
1347
  input:where([type='checkbox'], [type='radio']):disabled {
1240
1348
  --box-shadow: var(--bs-gray-400);
1241
1349
  background-color: transparent;
1242
1350
  }
1243
-
1244
- input:where([type='checkbox']):checked:disabled::before {
1351
+ input:where([type='checkbox']):checked:disabled::before,
1352
+ input:where([type='checkbox']):indeterminate:disabled::before {
1245
1353
  --check-fill-color: var(--bs-gray-400);
1246
1354
  }
1247
-
1248
1355
  input:where([type='radio']):checked:disabled::before {
1249
1356
  --radio-fill-color: var(--bs-gray-400);
1250
1357
  }
1251
-
1252
1358
  /* Error state */
1253
-
1254
- input:where([type^='checkbox'], [type^='radio'])[data-error] {
1359
+ input:where([type='checkbox'], [type='radio'])[data-error] {
1255
1360
  --box-shadow: var(--bs-red-400);
1256
1361
  }
1257
-
1258
1362
  .bs-switch {
1259
1363
  --box-shadow: var(--bs-ink-base);
1260
1364
  --ball-background: var(--bs-white);
@@ -1270,17 +1374,11 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1270
1374
  height: calc(var(--ball-diameter) + var(--offset) * 2);
1271
1375
  position: relative;
1272
1376
  }
1273
-
1274
1377
  .bs-switch:where([data-size="sm"]) {
1275
1378
  --ball-diameter: var(--bs-text-xs);
1276
1379
  --inner-text-width: .75rem;
1277
1380
  --inner-text-padding: 0.375rem;
1278
1381
  }
1279
-
1280
- :where(.dark) .bs-switch:where(:not([data-disabled])) {
1281
- --switch-background: var(--bs-blue-400);
1282
- }
1283
-
1284
1382
  .bs-switch input,
1285
1383
  .bs-switch:where([data-size="sm"]) input {
1286
1384
  cursor: pointer;
@@ -1289,7 +1387,6 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1289
1387
  position: absolute;
1290
1388
  width: 100%;
1291
1389
  }
1292
-
1293
1390
  .bs-switch span {
1294
1391
  align-items: center;
1295
1392
  background-color: var(--switch-background);
@@ -1303,9 +1400,11 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1303
1400
  width: calc(var(--ball-diameter) * 2 + var(--offset) * 2);
1304
1401
  height: calc(var(--ball-diameter) + var(--offset) * 2);
1305
1402
  }
1306
-
1403
+ .bs-switch input:where(:checked) ~ span,
1404
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span {
1405
+ --switch-background: var(--bs-blue-400);
1406
+ }
1307
1407
  /* Toggle "ball" */
1308
-
1309
1408
  .bs-switch span::before {
1310
1409
  background-color: var(--ball-background);
1311
1410
  border-radius: 50%;
@@ -1320,24 +1419,19 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1320
1419
  width: var(--ball-diameter);
1321
1420
  z-index: 2;
1322
1421
  }
1323
-
1324
1422
  .bs-switch input:where(:checked) ~ span::before,
1325
1423
  .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span::before {
1326
1424
  transform: translate(var(--ball-diameter), -50%);
1327
1425
  }
1328
-
1329
1426
  .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::before,
1330
1427
  .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::before {
1331
1428
  transform: translate(calc(var(--ball-diameter) + var(--inner-text-width)), -50%);
1332
1429
  }
1333
-
1334
1430
  /* Inner "on/off" text */
1335
-
1336
1431
  .bs-switch span:where([data-inner-on-label][data-inner-off-label]) {
1337
1432
  color: white;
1338
1433
  width: calc(var(--ball-diameter) * 2 + var(--offset) * 2 + var(--inner-text-width));
1339
1434
  }
1340
-
1341
1435
  .bs-switch span::after {
1342
1436
  align-items: center;
1343
1437
  color: var(--ball-background);
@@ -1351,46 +1445,36 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1351
1445
  top: 0;
1352
1446
  width: 100%;
1353
1447
  }
1354
-
1355
1448
  .bs-switch input:where(:not(:checked)) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
1356
1449
  .bs-switch:where([aria-pressed="false"]) span:where([data-inner-on-label][data-inner-off-label])::after {
1357
1450
  content: attr(data-inner-off-label);
1358
1451
  justify-content: flex-end;
1359
1452
  }
1360
-
1361
1453
  .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
1362
1454
  .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::after {
1363
1455
  content: attr(data-inner-on-label);
1364
1456
  justify-content: flex-start;
1365
1457
  }
1366
-
1367
1458
  /* Focus state */
1368
-
1369
- .bs-switch:where(:focus-within) span {
1459
+ .bs-switch :where(input:focus-visible) + span {
1370
1460
  box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
1371
1461
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
1372
1462
  outline: 2px solid transparent;
1373
1463
  }
1374
-
1375
- :where(.box) .bs-switch:where(:focus-within) span {
1464
+ :where(.box) .bs-switch :where(input:focus-visible) + span {
1376
1465
  --offset-color: var(--bs-bg-subtle);
1377
1466
  }
1378
-
1379
- :where(.box[data-invert]) .bs-switch:where(:focus-within) span {
1467
+ :where(.box[data-invert]) .bs-switch :where(input:focus-visible) + span {
1380
1468
  --offset-color: var(--bs-bg-invert);
1381
1469
  }
1382
-
1383
1470
  /* Disabled state */
1384
-
1385
1471
  .bs-switch:where([data-disabled]) {
1386
1472
  --ball-background: var(--bs-gray-400);
1387
1473
  --switch-background: var(--bs-gray-200);
1388
1474
  }
1389
-
1390
1475
  .bs-switch input:where(:disabled) {
1391
1476
  cursor: default;
1392
1477
  }
1393
-
1394
1478
  .bs-hint {
1395
1479
  color: var(--bs-ink-light);
1396
1480
  font-size: var(--bs-text-xs);
@@ -1398,11 +1482,9 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1398
1482
  margin: 0;
1399
1483
  list-style: none;
1400
1484
  }
1401
-
1402
1485
  .bs-hint:where([data-error]) {
1403
1486
  color: var(--bs-red-400);
1404
1487
  }
1405
-
1406
1488
  .bs-pill {
1407
1489
  --pill-background: var(--bs-bg-subtle);
1408
1490
  --pill-border: transparent;
@@ -1425,63 +1507,48 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1425
1507
  text-decoration: none;
1426
1508
  vertical-align: middle;
1427
1509
  }
1428
-
1429
1510
  :where(.dark) .bs-pill {
1430
1511
  --pill-text: var(--bs-royal-100);
1431
1512
  }
1432
-
1433
1513
  :where(.bs-pill > svg) {
1434
1514
  height: 1rem;
1435
1515
  }
1436
-
1437
1516
  /* ------------------------------ Button and Link Styles ------------------------------ */
1438
-
1439
1517
  :is(a, button).bs-pill {
1440
1518
  color: var(--pill-text);
1441
1519
  cursor: pointer;
1442
1520
  transition: all 0.15s ease-in-out;
1443
1521
  }
1444
-
1445
1522
  :is(a, button).bs-pill:is(:hover, :focus) {
1446
1523
  --pill-border: var(--bs-royal-400);
1447
1524
 
1448
1525
  color: var(--pill-text);
1449
1526
  outline: transparent;
1450
1527
  }
1451
-
1452
1528
  :where(.dark) :is(a, button).bs-pill:is(:hover, :focus) {
1453
1529
  --pill-border: var(--bs-royal-200);
1454
1530
  }
1455
-
1456
1531
  /* ------------------------------ Background Colors ------------------------------ */
1457
-
1458
1532
  :where(.box, [class*="bg-"]:not([class~="bg-white"])) .bs-pill:where(:not([data-variant^="live"], [data-active])) {
1459
1533
  --pill-background: var(--bs-bg-base);
1460
1534
  }
1461
-
1462
1535
  :where(.box[data-invert]) .bs-pill {
1463
1536
  --pill-background: var(--bs-bg-invert-subtle);
1464
1537
  --pill-text: var(--bs-gray-100);
1465
1538
  }
1466
-
1467
1539
  :where(.box[data-invert]) :is(a, button).bs-pill:is(:hover, :focus) {
1468
1540
  --pill-border: var(--bs-gray-100);
1469
1541
  }
1470
-
1471
1542
  :where(.dark .box[data-invert]) .bs-pill {
1472
1543
  --pill-text: var(--bs-royal-400);
1473
1544
  }
1474
-
1475
1545
  :where(.dark .box[data-invert]) :is(a, button).bs-pill:is(:hover, :focus) {
1476
1546
  --pill-border: var(--bs-royal-400);
1477
1547
  }
1478
-
1479
1548
  /* ------------------------------ Status Styles ------------------------------ */
1480
-
1481
1549
  .bs-pill:where([data-status]) {
1482
1550
  --status-color: var(--bs-blue-400);
1483
1551
  }
1484
-
1485
1552
  .bs-pill:where([data-status])::before {
1486
1553
  background-color: var(--status-color);
1487
1554
  border-radius: 100%;
@@ -1489,131 +1556,94 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1489
1556
  height: 12px;
1490
1557
  width: 12px;
1491
1558
  }
1492
-
1493
1559
  /* ----- Status Colors ----- */
1494
-
1495
1560
  .bs-pill:where([data-status^="active"]) {
1496
1561
  --status-color: var(--bs-blue-400);
1497
1562
  }
1498
-
1499
1563
  .bs-pill:where([data-status^="complete"]) {
1500
1564
  --status-color: var(--bs-purple-400);
1501
1565
  }
1502
-
1503
1566
  .bs-pill:where([data-status^="inactive"]) {
1504
1567
  --status-color: var(--bs-gray-300);
1505
1568
  }
1506
-
1507
1569
  .bs-pill:where([data-status^="error"]) {
1508
1570
  --status-color: var(--bs-red-400);
1509
1571
  }
1510
-
1511
1572
  .bs-pill:where([data-status^="positive"]) {
1512
1573
  --status-color: #16986D;
1513
1574
  }
1514
-
1515
1575
  .bs-pill:where([data-status^="warning"]) {
1516
1576
  --status-color: var(--bs-orange-warning);
1517
1577
  }
1518
-
1519
1578
  /* ------------------------------ Filter Styles ------------------------------ */
1520
-
1521
1579
  .bs-pill:where([data-variant^="filter"]) {
1522
1580
  --pill-background: var(--bs-bg-base);
1523
1581
  --pill-border: var(--bs-border);
1524
1582
  --pill-text: var(--bs-ink-base);
1525
1583
  }
1526
-
1527
1584
  .bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
1528
1585
  --pill-border: var(--bs-border);
1529
1586
  }
1530
-
1531
1587
  :is(a, button).bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
1532
1588
  --pill-border: var(--bs-ink-base);
1533
1589
  }
1534
-
1535
1590
  /* ----- Filter Add Styles ----- */
1536
-
1537
1591
  /* Black + */
1538
-
1539
1592
  .bs-pill:where([data-variant^="filter"][data-variant*="add"])::after {
1540
1593
  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");
1541
1594
  }
1542
-
1543
1595
  /* White + */
1544
-
1545
1596
  :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="add"]):not(:disabled, [aria-disabled="true"])::after{
1546
1597
  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");
1547
1598
  }
1548
-
1549
1599
  /* ----- Filter Remove Styles ----- */
1550
-
1551
1600
  /* Black X */
1552
-
1553
1601
  .bs-pill:where([data-variant^="filter"][data-variant*="remove"])::after {
1554
1602
  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");
1555
1603
  }
1556
-
1557
1604
  /* White X */
1558
-
1559
1605
  :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):not(:disabled, [aria-disabled="true"])::after {
1560
1606
  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");
1561
1607
  }
1562
-
1563
1608
  /* Dark Red X */
1564
-
1565
1609
  .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):hover::after {
1566
1610
  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");
1567
1611
  }
1568
-
1569
1612
  /* Light Red X */
1570
-
1571
1613
  :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):hover::after {
1572
1614
  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");
1573
1615
  }
1574
-
1575
1616
  /* ----- Filter Active Styles ----- */
1576
-
1577
1617
  .bs-pill:where([data-variant^="filter"][data-active]) {
1578
1618
  --pill-background: var(--bs-blue-400);
1579
1619
  --pill-border: transparent;
1580
1620
  --pill-text: var(--bs-white);
1581
1621
  }
1582
-
1583
1622
  .bs-pill:where([data-variant^="filter"][data-active]):is(:hover, :focus) {
1584
1623
  --pill-border: transparent;
1585
1624
  }
1586
-
1587
1625
  :is(a, button).bs-pill:where([data-variant^="filter"][data-active]):is(:hover, :focus) {
1588
1626
  --pill-background: var(--bs-blue-500);
1589
1627
  --pill-border: transparent;
1590
1628
  }
1591
-
1592
1629
  /* White X */
1593
-
1594
1630
  .bs-pill:where([data-variant^="filter"][data-active])::after {
1595
1631
  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");
1596
1632
  }
1597
-
1598
1633
  /* Black X */
1599
-
1600
1634
  .bs-pill:where([data-variant^="filter"][data-active]):where(:disabled, [aria-disabled="true"])::after {
1601
1635
  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");
1602
1636
  }
1603
-
1604
1637
  /* ------------------------------ Live Now Styles ------------------------------ */
1605
-
1606
1638
  .bs-pill:where([data-variant^="live"]) {
1607
1639
  --pill-background: var(--bs-royal-400);
1608
1640
  --pill-text: var(--bs-white);
1609
1641
  --pill-gap: var(--bs-space-1);
1610
1642
  text-transform: uppercase;
1611
1643
  }
1612
-
1613
1644
  .bs-pill:where([data-variant^="live"]):hover {
1614
1645
  --pill-border: transparent;
1615
1646
  }
1616
-
1617
1647
  .bs-pill:where([data-variant^="live"])::before {
1618
1648
  background-color: var(--bs-red-400);
1619
1649
  border: 3px solid var(--bs-white);
@@ -1622,19 +1652,15 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1622
1652
  height: 12px;
1623
1653
  width: 12px;
1624
1654
  }
1625
-
1626
1655
  /* ----- Disabled Styles ----- */
1627
-
1628
1656
  .bs-pill:is(:disabled, [aria-disabled="true"]) {
1629
1657
  pointer-events: none;
1630
1658
  color: var(--bs-gray-400);
1631
1659
  background-color: var(--bs-gray-200);
1632
1660
  }
1633
-
1634
1661
  .bs-pill:where([data-variant^="filter"]):not([data-active]):is(:disabled, [aria-disabled="true"]) {
1635
1662
  --pill-border: var(--bs-gray-400);
1636
1663
  }
1637
-
1638
1664
  .bs-profile-img,
1639
1665
  .bs-profile-img:where([data-img-size^='sm']) {
1640
1666
  --profile-size: 2rem;
@@ -1647,18 +1673,15 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1647
1673
  position: relative;
1648
1674
  width: var(--profile-size);
1649
1675
  }
1650
-
1651
1676
  .bs-profile-img :where(img) {
1652
1677
  height: 100%;
1653
1678
  -o-object-fit: cover;
1654
1679
  object-fit: cover;
1655
1680
  width: 100%;
1656
1681
  }
1657
-
1658
1682
  .bs-profile-img:where([data-no-img]) img {
1659
1683
  display: none;
1660
1684
  }
1661
-
1662
1685
  .bs-profile-img::before,
1663
1686
  .bs-profile-img::after {
1664
1687
  border-radius: 50%;
@@ -1668,20 +1691,15 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1668
1691
  position: absolute;
1669
1692
  width: 100%;
1670
1693
  }
1671
-
1672
1694
  /* Shadow */
1673
-
1674
1695
  .bs-profile-img::before {
1675
1696
  box-shadow: var(--bs-shadow-profilePhoto);
1676
1697
  content: '';
1677
1698
  }
1678
-
1679
1699
  .bs-profile-img:where([data-no-img])::before {
1680
1700
  display: none;
1681
1701
  }
1682
-
1683
1702
  /* Initials */
1684
-
1685
1703
  .bs-profile-img:where([data-no-img])::after {
1686
1704
  border: 1px solid currentColor;
1687
1705
  color: var(--bs-blue-500);
@@ -1691,77 +1709,60 @@ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1691
1709
  display: grid;
1692
1710
  place-items: center;
1693
1711
  }
1694
-
1695
1712
  /* Profile Sizes */
1696
-
1697
1713
  .bs-profile-img:where([data-img-size^='xs']) {
1698
1714
  --profile-size: 1.5rem;
1699
1715
  --profile-text: var(--bs-text-xs);
1700
1716
  }
1701
-
1702
1717
  .bs-profile-img:where([data-img-size^='md']) {
1703
1718
  --profile-size: 3rem;
1704
1719
  --profile-text: var(--bs-text-md);
1705
1720
  }
1706
-
1707
1721
  .bs-profile-img:where([data-img-size^='lg']) {
1708
1722
  --profile-size: 4rem;
1709
1723
  --profile-text: var(--bs-text-lg);
1710
1724
  }
1711
-
1712
1725
  .bs-profile-img:where([data-img-size^='xl']) {
1713
1726
  --profile-size: 5.75rem;
1714
1727
  --profile-text: var(--bs-text-xl);
1715
1728
  }
1716
-
1717
1729
  .bs-profile-details {
1718
1730
  color: var(--bs-ink-light);
1719
1731
  font-size: var(--bs-text-sm);
1720
1732
  }
1721
-
1722
1733
  .bs-profile-details > :where(*) {
1723
1734
  display: block;
1724
1735
  }
1725
-
1726
1736
  .bs-profile-details > :where(*:first-child) {
1727
1737
  --profile-name-color: var(--bs-ink-base);
1728
1738
 
1729
1739
  color: var(--profile-name-color);
1730
1740
  }
1731
-
1732
1741
  /* Profile with User Details */
1733
-
1734
1742
  .bs-profile:where([data-layout]),
1735
1743
  .bs-profile:where([data-layout^='vertical']) {
1736
1744
  display: grid;
1737
1745
  row-gap: 0.5rem;
1738
1746
  }
1739
-
1740
1747
  .bs-profile:where([data-layout^='horizontal']) {
1741
1748
  -moz-column-gap: 1rem;
1742
1749
  column-gap: 1rem;
1743
1750
  grid-template-columns: auto 1fr;
1744
1751
  align-items: center;
1745
1752
  }
1746
-
1747
1753
  /* When wrapped in a link */
1748
-
1749
1754
  a.bs-profile:where([data-layout]) {
1750
1755
  text-decoration: none;
1751
1756
  }
1752
-
1753
1757
  a.bs-profile:where([data-layout]) .bs-profile-details > *:first-child {
1754
1758
  --profile-name-color: var(--bs-blue-500);
1755
1759
  }
1756
-
1757
1760
  a.bs-profile:where([data-layout]):hover .bs-profile-details > *:first-child {
1758
1761
  text-decoration: underline;
1759
1762
  }
1760
-
1761
1763
  .dark a.bs-profile:where([data-layout]) .bs-profile-details > *:first-child {
1762
1764
  --profile-name-color: var(--bs-blue-200);
1763
1765
  }
1764
-
1765
1766
  table {
1766
1767
  border-collapse: collapse;
1767
1768
  border-spacing: 0;
@@ -1769,21 +1770,17 @@ table {
1769
1770
  max-width: 100%;
1770
1771
  width: 100%;
1771
1772
  }
1772
-
1773
1773
  thead {
1774
1774
  color: var(--bs-ink-base);
1775
1775
  font-size: var(--bs-font-base);
1776
1776
  font-weight: 600;
1777
1777
  }
1778
-
1779
1778
  tbody {
1780
1779
  color: var(--bs-ink-light);
1781
1780
  }
1782
-
1783
1781
  th {
1784
1782
  background: var(--bs-bg-base);
1785
1783
  }
1786
-
1787
1784
  th, td {
1788
1785
  border-bottom: 1px solid var(--bs-border);
1789
1786
  min-width: -moz-fit-content;
@@ -1791,197 +1788,257 @@ th, td {
1791
1788
  padding: var(--bs-space-2);
1792
1789
  text-align: left;
1793
1790
  }
1794
-
1795
1791
  /* Table Borders */
1796
-
1797
1792
  table[data-borders^="none"] {
1798
1793
  border: 0;
1799
1794
  }
1800
-
1801
1795
  table[data-borders^="all"] :where(th, td) {
1802
1796
  border-left: 1px solid var(--bs-border);
1803
1797
  }
1804
-
1805
1798
  table[data-borders^="all"] :where(th, td):last-child {
1806
1799
  border-right: 1px solid var(--bs-border);
1807
1800
  }
1808
-
1809
1801
  table[data-borders^="all"] th {
1810
1802
  border-top: 1px solid var(--bs-border);
1811
1803
  }
1812
-
1813
1804
  /* Table Rows */
1814
-
1815
1805
  table:where([data-rows^="striped"]) tbody > tr:nth-child(even) {
1816
1806
  background-color: var(--bs-bg-subtle);
1817
1807
  }
1818
-
1819
1808
  /* Table Cells */
1820
-
1821
1809
  table[data-cells^="fixed"] {
1822
1810
  table-layout: fixed;
1823
1811
  }
1824
-
1825
1812
  table:where([data-cells^="height"]) td {
1826
1813
  height: 4.5rem;
1827
1814
  vertical-align: middle;
1828
1815
  }
1829
-
1830
1816
  /* Sticky Header */
1831
-
1832
1817
  table:where([data-sticky]) {
1833
1818
  isolation: isolate;
1834
1819
  }
1835
-
1836
1820
  table:where([data-sticky^="top"]) td {
1837
1821
  z-index: 1;
1838
1822
  }
1839
-
1840
1823
  table:where([data-sticky^="top"]) {
1841
1824
  border-collapse: separate;
1842
1825
  overflow-y: unset; /* Will break sticky headers if removed */
1843
1826
  position: relative;
1844
1827
  }
1845
-
1846
1828
  table:where([data-sticky^="left"]) {
1847
1829
  border-collapse: separate;
1848
1830
  overflow-x: unset; /* Will break sticky headers if removed */
1849
1831
  position: relative;
1850
1832
  }
1851
-
1852
1833
  table:where([data-sticky^="top"]) th {
1853
1834
  position: sticky;
1854
1835
  top: var(--bs-content-top);
1855
1836
  z-index: 2;
1856
1837
  }
1857
-
1858
1838
  table:where([data-sticky^="left"]) :is(td:first-child, th:first-child) {
1859
1839
  position: sticky;
1860
1840
  left: 0;
1861
1841
  z-index: 2;
1862
1842
  }
1843
+ /* Base Toast Styles */
1844
+ .bs-toast {
1845
+ background-color: var(--bs-white);
1846
+ border-top: 4px solid var(--bs-blue-400);
1847
+ bottom: 1.5rem;
1848
+ box-shadow: var(--bs-shadow-contentMedium);
1849
+ left: 0;
1850
+ margin-left: 1.5rem;
1851
+ margin-right: 1.5rem;
1852
+ opacity: 0;
1853
+ position: fixed;
1854
+ right: 0;
1855
+ transform: translateY(calc(100% + 1.5rem));
1856
+ /* Clamp width for mobile -> full screen */
1857
+ width: clamp(17rem, calc(100vw - 3rem), 25rem);
1858
+ z-index: 999;
1859
+ }
1860
+ .bs-toast[data-stacked] {
1861
+ bottom: auto;
1862
+ left: auto;
1863
+ position: static;
1864
+ right: auto;
1865
+ z-index: auto;
1866
+ }
1867
+ /* Mobile - Toast comes up from bottom */
1868
+ @keyframes slideDown {
1869
+ 0% {
1870
+ opacity: 1;
1871
+ transform: translateY(0);
1872
+ }
1873
+ 100% {
1874
+ opacity: 0;
1875
+ transform: translateY(calc(100% + 1.5rem));
1876
+ }
1877
+ }
1878
+ @keyframes slideUp {
1879
+ 0% {
1880
+ opacity: 0;
1881
+ transform: translateY(calc(100% + 1.5rem));
1882
+ }
1883
+ 100% {
1884
+ opacity: 1;
1885
+ transform: translateY(0);
1886
+ }
1887
+ }
1888
+ /* Dark mode toast */
1889
+ :where(.dark) .bs-toast {
1890
+ background-color: var(--bs-navy-400);
1891
+ }
1892
+ .bs-toast:where([data-shown]) {
1893
+ /* Small delay on load to alow for HTML element to exist */
1894
+ animation-delay: 10ms;
1895
+ animation-duration: 200ms;
1896
+ animation-fill-mode: forwards;
1897
+ animation-name: slideUp;
1898
+ animation-timing-function: ease;
1899
+ }
1900
+ .bs-toast:where([data-dismissed]) {
1901
+ animation-duration: 200ms;
1902
+ animation-fill-mode: forwards;
1903
+ animation-name: slideDown;
1904
+ animation-timing-function: ease;
1905
+ }
1906
+ .bs-toast :where(.bs-toast-header) {
1907
+ align-items: center;
1908
+ color: var(--bs-ink-base);
1909
+ display: flex;
1910
+ gap: 0.5rem;
1911
+ padding-left: 1rem;
1912
+ padding-right: 1rem;
1913
+ padding-top: 1rem;
1914
+ }
1915
+ .bs-toast :where(.bs-toast-header .bs-toast-header-icon) {
1916
+ color: var(--bs-blue-400);
1917
+ }
1918
+ .bs-toast :where(h5) {
1919
+ font-weight: 400;
1920
+ }
1921
+ .bs-toast :where(.bs-toast-content) {
1922
+ border-bottom: 1px solid var(--bs-border);
1923
+ color: var(--bs-ink-light);
1924
+ padding-bottom: 1rem;
1925
+ padding-left: 1rem;
1926
+ padding-right: 1rem;
1927
+ padding-top: 0.25rem;
1928
+ }
1929
+ .bs-toast :where(.bs-toast-actions) {
1930
+ /* Mobile - Buttons will be stacked */
1931
+ display: flex;
1932
+ flex-direction: column-reverse;
1933
+ gap: 1rem;
1934
+ padding-bottom: 0.5rem;
1935
+ padding-left: 1rem;
1936
+ padding-right: 1rem;
1937
+ padding-top: 0.5rem;
1938
+ }
1939
+ /* Warning Toast Styles */
1940
+ .bs-toast:where([data-variant^='warning']) {
1941
+ border-top: 4px solid var(--bs-orange-warning);
1942
+ }
1943
+ .bs-toast:where([data-variant^='warning']) :where(.bs-toast-header .bs-toast-header-icon) {
1944
+ color: var(--bs-orange-warning);
1945
+ }
1946
+ /* Positive Toast Styles */
1947
+ .bs-toast:where([data-variant^='positive']) {
1948
+ border-top: 4px solid var(--bs-purple-400);
1949
+ }
1950
+ .bs-toast:where([data-variant^='positive']) :where(.bs-toast-header .bs-toast-header-icon) {
1951
+ color: var(--bs-purple-400);
1952
+ }
1953
+ :where(.dark) .bs-toast:where([data-variant^='positive']) {
1954
+ border-top: 4px solid var(--bs-purple-200);
1955
+ }
1956
+ :where(.dark) .bs-toast:where([data-variant^='positive']) :where(.bs-toast-header .bs-toast-header-icon) {
1957
+ color: var(--bs-purple-200);
1958
+ }
1959
+ /* Negative Toast Styles */
1960
+ .bs-toast:where([data-variant^='negative']) {
1961
+ border-top: 4px solid var(--bs-red-400);
1962
+ }
1963
+ .bs-toast:where([data-variant^='negative']) :where(.bs-toast-header .bs-toast-header-icon) {
1964
+ color: var(--bs-red-400);
1965
+ }
1966
+ @media (min-width: 440px) {
1967
+
1968
+ .bs-toast {
1969
+ left: auto;
1970
+ margin-left: 0;
1971
+ margin-right: 0;
1972
+ opacity: 0;
1973
+ right: 1.5rem;
1974
+ transform: translateX(calc(100% + 1.5rem));
1975
+ }
1976
+
1977
+ .bs-toast:where([data-shown]) {
1978
+ /* Small delay on load to alow for HTML element to exist */
1979
+ animation-delay: 10ms;
1980
+ animation-duration: 200ms;
1981
+ animation-fill-mode: forwards;
1982
+ animation-name: slideLeft;
1983
+ animation-timing-function: ease;
1984
+ }
1985
+
1986
+ .bs-toast:where([data-dismissed]) {
1987
+ animation-duration: 200ms;
1988
+ animation-fill-mode: forwards;
1989
+ animation-name: slideRight;
1990
+ animation-timing-function: ease;
1991
+ }
1992
+
1993
+ /* Non-mobile toasts come in from the right */
1994
+ @keyframes slideRight {
1995
+ 0% {
1996
+ opacity: 1;
1997
+ transform: translateX(0);
1998
+ }
1999
+ 100% {
2000
+ opacity: 0;
2001
+ transform: translateX(calc(100% + 1.5rem));
2002
+ }
2003
+ }
2004
+
2005
+ @keyframes slideLeft {
2006
+ 0% {
2007
+ opacity: 0;
2008
+ transform: translateX(calc(100% + 1.5rem));
2009
+ }
2010
+ 100% {
2011
+ opacity: 1;
2012
+ transform: translateX(0);
2013
+ }
2014
+ }
2015
+
2016
+ .bs-toast :where(.bs-toast-actions) {
2017
+ /* Non-mobile - Buttons will be side-by-side */
2018
+ flex-direction: row;
2019
+ justify-content: flex-end;
2020
+ }
2021
+
2022
+ }
2023
+ /* Container for holding all toasts that will be visible */
2024
+ .bs-toaster {
2025
+ /* Mobile - Center the toasts on the screen */
2026
+ align-items: center;
2027
+ bottom: 1.5rem;
2028
+ display: flex;
2029
+ flex-direction: column-reverse;
2030
+ gap: 0.5rem;
2031
+ left: 0;
2032
+ position: fixed;
2033
+ right: 0;
2034
+ z-index: 999;
2035
+ }
2036
+ @media (min-width: 440px) {
2037
+
2038
+ .bs-toaster {
2039
+ /* Non-mobile - Toasts will live on right side of the screen */
2040
+ left: auto;
2041
+ right: 1.5rem;
2042
+ }
1863
2043
 
1864
- .box {
1865
- background: var(--bg-color, var(--bs-bg-subtle));
1866
- border-radius: 0.25rem;
1867
- padding: var(--box-space, var(--bs-space-6));
1868
- }
1869
-
1870
- .box[data-invert] {
1871
- --bg-color: var(--bs-bg-invert);
1872
- color: var(--bs-ink-invert);
1873
- }
1874
-
1875
- :where(.fluid) .box {
1876
- padding: var(--box-space, var(--bs-space-f-6));
1877
- }
1878
-
1879
- .cluster {
1880
- align-items: center;
1881
- display: flex;
1882
- flex-wrap: wrap;
1883
- gap: var(--cluster-space, var(--bs-space-6));
1884
- justify-content: flex-start;
1885
- }
1886
-
1887
- :where(.cluster[data-variant^="brick"]) > * {
1888
- align-self: stretch;
1889
- flex-grow: 1;
1890
- }
1891
-
1892
- .cluster[data-gap="tight"] {
1893
- gap: var(--cluster-space, var(--bs-space-2));
1894
- }
1895
-
1896
- :where(.fluid) .cluster {
1897
- gap: var(--cluster-space, var(--bs-space-f-6));
1898
- }
1899
-
1900
- :where(.fluid) .cluster[data-gap="tight"] {
1901
- gap: var(--cluster-space, var(--bs-space-f-2));
1902
- }
1903
-
1904
- .flow > * + * {
1905
- margin-top: var(--flow-space, 1.25em);
1906
- }
1907
-
1908
- .flow > :is(h1, h2, h3, h4, h5, h6) {
1909
- --flow-space: 2em;
1910
- }
1911
-
1912
- .flow > hr + * {
1913
- --flow-space: 1.5em;
1914
- }
1915
-
1916
- .flow > :is(h1, h2, h3, h4, h5, h6) + * {
1917
- --flow-space: 0.5em;
1918
- }
1919
-
1920
- .flow > :is(ul, ol) > li {
1921
- margin-top: var(--flow-space, 0.625em);
1922
- }
1923
-
1924
- .region {
1925
- padding-block: var(--region-space, var(--bs-space-6));
1926
- }
1927
-
1928
- .region[data-space^='sm'] {
1929
- padding-block: var(--bs-space-3);
1930
- }
1931
-
1932
- .region[data-space^='lg'] {
1933
- padding-block: var(--bs-space-12);
1934
- }
1935
-
1936
- :where(.fluid) .region {
1937
- padding-block: var(--region-space, var(--bs-space-f-6));
1938
- }
1939
-
1940
- :where(.fluid) .region[data-space^='sm'] {
1941
- padding-block: var(--bs-space-f-3);
1942
- }
1943
-
1944
- :where(.fluid) .region[data-space^='lg'] {
1945
- padding-block: var(--bs-space-f-12);
1946
- }
1947
-
1948
- .wrapper {
1949
- margin-inline: auto;
1950
- max-width: var(--max-width, 75rem);
1951
- min-width: 0;
1952
- padding-inline: var(--wrapper-space, var(--bs-space-6));
1953
- position: relative;
1954
- width: 100%;
1955
- }
1956
-
1957
- :where(.fluid) .wrapper {
1958
- padding-inline: var(--wrapper-space, var(--bs-space-f-6));
1959
- }
1960
-
1961
- .wrapper[data-flush] {
1962
- padding-inline: 0;
1963
- }
1964
-
1965
- .visually-hidden {
1966
- border: 0;
1967
- clip: rect(0 0 0 0);
1968
- height: auto;
1969
- margin: 0;
1970
- overflow: hidden;
1971
- padding: 0;
1972
- position: absolute;
1973
- width: 1px;
1974
- white-space: nowrap;
1975
- }
1976
-
1977
- .measure-compact {
1978
- max-width: 40ch;
1979
- }
1980
-
1981
- .measure-short {
1982
- max-width: 50ch;
1983
- }
1984
-
1985
- .measure-long {
1986
- max-width: 70ch;
1987
2044
  }