@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.
@@ -3,6 +3,8 @@
3
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);
@@ -169,13 +171,15 @@
169
171
  https://tailwindcss.com/docs/preflight#border-styles-are-reset-globally
170
172
  */
171
173
 
174
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
175
+
172
176
  *,
173
177
  *::before,
174
178
  *::after {
175
- box-sizing: border-box; /* 1 */
176
- border-width: 0; /* 2 */
177
- border-style: solid; /* 2 */
178
179
  border-color: currentColor; /* 2 */
180
+ border-style: solid; /* 2 */
181
+ border-width: 0; /* 2 */
182
+ box-sizing: border-box; /* 1 */
179
183
  }
180
184
 
181
185
  /* Remove default margin */
@@ -197,28 +201,28 @@ dd {
197
201
 
198
202
  /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
199
203
 
200
- ul[role='list'],
201
- ol[role='list'] {
204
+ ul:where([role='list']),
205
+ ol:where([role='list']) {
202
206
  list-style: none;
203
207
  }
204
208
 
205
209
  /* Set core root defaults */
206
210
 
207
- html:focus-within {
211
+ html:where(:focus-within) {
208
212
  scroll-behavior: smooth;
209
213
  }
210
214
 
211
215
  /* Set core body defaults */
212
216
 
213
217
  body {
218
+ line-height: 1.5;
214
219
  min-height: 100vh;
215
220
  text-rendering: optimizeSpeed;
216
- line-height: 1.5;
217
221
  }
218
222
 
219
- /* A elements that don't have a class get default styles */
223
+ /* Elements that don't have a class get default styles */
220
224
 
221
- a:not([class]) {
225
+ a:where(:not([class])) {
222
226
  -webkit-text-decoration-skip: ink;
223
227
  text-decoration-skip-ink: auto;
224
228
  }
@@ -233,7 +237,9 @@ picture {
233
237
 
234
238
  /* Inherit fonts for inputs */
235
239
 
236
- :where(input, textarea, select) {
240
+ input,
241
+ textarea,
242
+ select {
237
243
  font: inherit;
238
244
  }
239
245
 
@@ -244,7 +250,7 @@ button {
244
250
  /* Remove all animations and transitions for people that prefer not to see them */
245
251
 
246
252
  @media (prefers-reduced-motion: reduce) {
247
- html:focus-within {
253
+ html:where(:focus-within) {
248
254
  scroll-behavior: auto;
249
255
  }
250
256
 
@@ -253,11 +259,13 @@ button {
253
259
  *::after {
254
260
  animation-duration: 0.01ms !important;
255
261
  animation-iteration-count: 1 !important;
256
- transition-duration: 0.01ms !important;
257
262
  scroll-behavior: auto !important;
263
+ transition-duration: 0.01ms !important;
258
264
  }
259
265
  }
260
266
 
267
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
268
+
261
269
  :root,
262
270
  :host {
263
271
  --bs-bg-base: var(--bs-white);
@@ -273,6 +281,7 @@ button {
273
281
 
274
282
  /* Spacing */
275
283
  --bs-content-top: 4rem;
284
+ --bs-content-max-width: 72rem;
276
285
 
277
286
  /* Type */
278
287
  --bs-font-normal: 400;
@@ -280,7 +289,7 @@ button {
280
289
  }
281
290
 
282
291
  .dark,
283
- .dark :host {
292
+ .dark :where(:host) {
284
293
  --bs-bg-base: var(--bs-navy-500);
285
294
  --bs-bg-subtle: #2F2F51;
286
295
  --bs-bg-invert: var(--bs-white);
@@ -291,6 +300,22 @@ button {
291
300
  --bs-ink-accent: var(--bs-plum-100);
292
301
  --bs-ink-invert: var(--bs-black);
293
302
  --bs-border: var(--bs-gray-400);
303
+ --bs-shadow-base: rgba(0, 0, 0, 0.06);
304
+ --bs-shadow-invert: rgba(10, 11, 25, 0.60);
305
+ --bs-shadow: -4px 4px 12px var(--bs-shadow-base),
306
+ -8px 8px 16px var(--bs-shadow-invert);
307
+ --bs-shadow-contentLow: -4px 4px 12px var(--bs-shadow-base),
308
+ -8px 8px 16px var(--bs-shadow-invert);
309
+ --bs-shadow-contentLowCenter: 0px 0px 12px var(--bs-shadow-base),
310
+ 0px 0px 16px var(--bs-shadow-invert);
311
+ --bs-shadow-contentMedium: -8px 8px 24px var(--bs-shadow-base),
312
+ -16px 16px 32px var(--bs-shadow-invert);
313
+ --bs-shadow-contentHigh: 0px 16px 48px var(--bs-shadow-base),
314
+ 0px 32px 64px var(--bs-shadow-invert);
315
+ --bs-shadow-drawerLeft: -12px 12px 24px var(--bs-shadow-base),
316
+ -16px 16px 32px var(--bs-shadow-invert);
317
+ --bs-shadow-drawerRight: -12px 12px 24px var(--bs-shadow-base),
318
+ 16px 16px 32px var(--bs-shadow-invert);
294
319
  }
295
320
 
296
321
  body,
@@ -318,15 +343,17 @@ body,
318
343
  }
319
344
 
320
345
  hr {
346
+ background: var(--bs-border);
321
347
  border: 0;
322
348
  height: 1px;
323
- background: var(--bs-border);
324
349
  }
325
350
 
351
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
352
+
326
353
  body {
327
- font-weight: 400;
328
354
  font-family: 'Roobert', sans-serif;
329
355
  font-size: var(--bs-text-base);
356
+ font-weight: 400;
330
357
  }
331
358
 
332
359
  /* Default Element/data-variant Styles */
@@ -337,35 +364,41 @@ body {
337
364
  line-height: var(--bs-leading-sm);
338
365
  }
339
366
 
340
- h1, [data-variant^="heading-1"] {
367
+ h1,
368
+ [data-variant^="heading-1"] {
341
369
  font-size: var(--bs-text-3xl);
342
370
  font-weight: 400;
343
371
  line-height: var(--bs-leading-sm);
344
372
  }
345
373
 
346
- h2, [data-variant^="heading-2"] {
374
+ h2,
375
+ [data-variant^="heading-2"] {
347
376
  font-size: var(--bs-text-2xl);
348
377
  font-weight: 600;
349
378
  line-height: var(--bs-leading-sm);
350
379
  }
351
380
 
352
- h3, [data-variant^="heading-3"] {
381
+ h3,
382
+ [data-variant^="heading-3"] {
353
383
  font-size: var(--bs-text-xl);
354
384
  font-weight: 600;
355
385
  line-height: var(--bs-leading-sm);
356
386
  }
357
387
 
358
- h4, [data-variant^="heading-4"] {
388
+ h4,
389
+ [data-variant^="heading-4"] {
359
390
  font-size: var(--bs-text-lg);
360
391
  font-weight: 600;
361
392
  }
362
393
 
363
- h5, [data-variant^="heading-5"] {
394
+ h5,
395
+ [data-variant^="heading-5"] {
364
396
  font-size: var(--bs-text-md);
365
397
  font-weight: 600;
366
398
  }
367
399
 
368
- h6, [data-variant^="heading-6"] {
400
+ h6,
401
+ [data-variant^="heading-6"] {
369
402
  font-size: var(--bs-text-base);
370
403
  font-weight: 600;
371
404
  }
@@ -375,7 +408,7 @@ h6, [data-variant^="heading-6"] {
375
408
  max-width: 70ch;
376
409
  }
377
410
 
378
- .prose :where(h1, h2, h3, h4, h5, h6):not([data-color]) {
411
+ :where(.prose) :is(h1, h2, h3, h4, h5, h6):where(:not([data-color])) {
379
412
  color: var(--bs-ink-base);
380
413
  }
381
414
 
@@ -383,12 +416,13 @@ h6, [data-variant^="heading-6"] {
383
416
  font-size: var(--bs-text-base);
384
417
  }
385
418
 
386
- .bs-meta, [data-variant^="meta"] {
419
+ .bs-meta,
420
+ [data-variant^="meta"] {
387
421
  font-size: var(--bs-text-xs);
388
422
  font-weight: 600;
389
423
  }
390
424
 
391
- :where(.prose blockquote) {
425
+ :where(.prose) blockquote {
392
426
  border-left: 4px solid var(--bs-plum-200);
393
427
  color: var(--bs-plum-200);
394
428
  font-style: italic;
@@ -400,217 +434,215 @@ h6, [data-variant^="heading-6"] {
400
434
  max-width: 90%;
401
435
  }
402
436
 
403
- .prose:where([data-width="wide"]) > :is(p, h1, h2, h3, h4, h5, h6, blockquote, ul, ol) {
437
+ .prose:where([data-width="wide"]) > :where(p, h1, h2, h3, h4, h5, h6, blockquote, ul, ol) {
404
438
  max-width: 48rem;
405
439
  }
406
440
 
407
441
  /* data-font-size Styles */
408
442
 
409
- :where([data-font-size^='4xl']) {
443
+ [data-font-size^='4xl'] {
410
444
  font-size: var(--bs-text-4xl);
411
445
  line-height: var(--bs-leading-sm);
412
446
  }
413
447
 
414
- :where([data-font-size^='3xl']) {
448
+ [data-font-size^='3xl'] {
415
449
  font-size: var(--bs-text-3xl);
416
450
  line-height: var(--bs-leading-sm);
417
451
  }
418
452
 
419
- :where([data-font-size^='2xl']) {
453
+ [data-font-size^='2xl'] {
420
454
  font-size: var(--bs-text-2xl);
421
455
  line-height: var(--bs-leading-sm);
422
456
  }
423
457
 
424
- :where([data-font-size^='xl']) {
458
+ [data-font-size^='xl'] {
425
459
  font-size: var(--bs-text-xl);
426
460
  line-height: var(--bs-leading-sm);
427
461
  }
428
462
 
429
- :where([data-font-size^='lg']) {
463
+ [data-font-size^='lg'] {
430
464
  font-size: var(--bs-text-lg);
431
465
  }
432
466
 
433
- :where([data-font-size^='md']) {
467
+ [data-font-size^='md'] {
434
468
  font-size: var(--bs-text-md);
435
469
  }
436
470
 
437
- :where([data-font-size^='base']) {
471
+ [data-font-size^='base'] {
438
472
  font-size: var(--bs-text-base);
439
473
  }
440
474
 
441
- :where([data-font-size^='sm']) {
475
+ [data-font-size^='sm'] {
442
476
  font-size: var(--bs-text-sm);
443
477
  }
444
478
 
445
- :where([data-font-size^='xs']) {
479
+ [data-font-size^='xs'] {
446
480
  font-size: var(--bs-text-xs);
447
481
  }
448
482
 
449
483
  /* data-color Styles */
450
484
 
451
- :where([data-color^='base']) {
485
+ [data-color^='base'] {
452
486
  color: var(--bs-ink-base);
453
487
  }
454
488
 
455
- :where([data-color^='medium']) {
489
+ [data-color^='medium'] {
456
490
  color: var(--bs-ink-medium);
457
491
  }
458
492
 
459
- :where([data-color^='light']) {
493
+ [data-color^='light'] {
460
494
  color: var(--bs-ink-light);
461
495
  }
462
496
 
463
- :where([data-color^='accent']) {
497
+ [data-color^='accent'] {
464
498
  color: var(--bs-ink-accent);
465
499
  }
466
500
 
467
501
  /* data-weight Styles */
468
502
 
469
- :where([data-weight^='normal'], [data-weight^='400']) {
503
+ [data-weight^='normal'],
504
+ [data-weight^='400'] {
470
505
  font-weight: 400;
471
506
  }
472
507
 
473
- :where([data-weight^='bold'], [data-weight^='600']) {
508
+ [data-weight^='bold'],
509
+ [data-weight^='600'] {
474
510
  font-weight: 600;
475
511
  }
476
512
 
477
- body:where(.fluid) {
513
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
514
+
515
+ :where(body).fluid {
478
516
  font-size: var(--bs-text-f-md);
479
517
  }
480
518
 
481
519
  /* Defaults & Variants */
482
520
 
483
- :where(.fluid) h1,
484
- :where(.fluid) [data-variant^='heading-1'] {
521
+ .fluid :where(h1),
522
+ .fluid :where([data-variant^='heading-1']) {
485
523
  font-size: var(--bs-text-f-3xl);
486
524
  }
487
525
 
488
- :where(.fluid) h2,
489
- :where(.fluid) [data-variant^='heading-2'] {
526
+ .fluid :where(h2),
527
+ .fluid :where([data-variant^='heading-2']) {
490
528
  font-size: var(--bs-text-f-2xl);
491
529
  }
492
530
 
493
- :where(.fluid) h3,
494
- :where(.fluid) [data-variant^='heading-3'] {
531
+ .fluid :where(h3),
532
+ .fluid :where([data-variant^='heading-3']) {
495
533
  font-size: var(--bs-text-f-xl);
496
534
  }
497
535
 
498
- :where(.fluid) h4,
499
- :where(.fluid) [data-variant^='heading-4'] {
536
+ .fluid :where(h4),
537
+ .fluid :where([data-variant^='heading-4']) {
500
538
  font-size: var(--bs-text-f-lg);
501
539
  }
502
540
 
503
- :where(.fluid) h5,
504
- :where(.fluid) [data-variant^='heading-5'] {
541
+ .fluid :where(h5),
542
+ .fluid :where([data-variant^='heading-5']) {
505
543
  font-size: var(--bs-text-f-md);
506
544
  }
507
545
 
508
- :where(.fluid) h6,
509
- :where(.fluid) [data-variant^='heading-6'] {
546
+ .fluid :where(h6),
547
+ .fluid :where([data-variant^='heading-6']) {
510
548
  font-size: var(--bs-text-f-sm);
511
549
  }
512
550
 
513
- :where(.fluid).prose,
514
- :where(.fluid) .prose,
515
- :where(.fluid) [data-variant^='default'] {
551
+ .fluid:where(.prose),
552
+ .fluid :where(.prose),
553
+ .fluid :where([data-variant^='default']) {
516
554
  font-size: var(--bs-text-f-md);
517
555
  }
518
556
 
519
- :where(.fluid) .bs-meta,
520
- :where(.fluid) [data-variant^='meta'] {
557
+ .fluid :where(.bs-meta),
558
+ .fluid :where([data-variant^='meta']) {
521
559
  font-size: var(--bs-text-f-xs);
522
560
  }
523
561
 
524
562
  /* Fluid data-font-size Styles */
525
563
 
526
- :where(.fluid) [data-font-size^='4xl'] {
564
+ .fluid :where([data-font-size^='4xl']) {
527
565
  font-size: var(--bs-text-f-4xl);
528
566
  }
529
567
 
530
- :where(.fluid) [data-font-size^='3xl'] {
568
+ .fluid :where([data-font-size^='3xl']) {
531
569
  font-size: var(--bs-text-f-3xl);
532
570
  }
533
571
 
534
- :where(.fluid) [data-font-size^='2xl'] {
572
+ .fluid :where([data-font-size^='2xl']) {
535
573
  font-size: var(--bs-text-f-2xl);
536
574
  }
537
575
 
538
- :where(.fluid) [data-font-size^='xl'] {
576
+ .fluid :where([data-font-size^='xl']) {
539
577
  font-size: var(--bs-text-f-xl);
540
578
  line-height: var(--bs-leading-sm);
541
579
  }
542
580
 
543
- :where(.fluid) [data-font-size^='lg'] {
581
+ .fluid :where([data-font-size^='lg']) {
544
582
  font-size: var(--bs-text-f-lg);
545
583
  }
546
584
 
547
- :where(.fluid) [data-font-size^='md'] {
585
+ .fluid :where([data-font-size^='md']) {
548
586
  font-size: var(--bs-text-f-md);
549
587
  }
550
588
 
551
- :where(.fluid) [data-font-size^='base'] {
589
+ .fluid :where([data-font-size^='base']) {
552
590
  font-size: var(--bs-text-f-base);
553
591
  }
554
592
 
555
- :where(.fluid) [data-font-size^='sm'] {
593
+ .fluid :where([data-font-size^='sm']) {
556
594
  font-size: var(--bs-text-f-sm);
557
595
  }
558
596
 
559
- :where(.fluid) [data-font-size^='xs'] {
597
+ .fluid :where([data-font-size^='xs']) {
560
598
  font-size: var(--bs-text-f-xs);
561
599
  }
562
600
 
563
- /* Using :where() here for no additional specificity */
601
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
564
602
 
565
- :where(.prose) a {
603
+ :where(a) {
566
604
  border-radius: 0.25rem; /* gives outlines rounded corners in modern browsers */
567
605
  -webkit-box-decoration-break: clone;
568
606
  box-decoration-break: clone;
569
607
  color: var(--bs-purple-400);
608
+ outline-color: var(--bs-blue-400);
570
609
  text-decoration: underline;
571
610
  text-underline-offset: 2px;
572
611
  transition: all 0.15s ease-in-out;
573
- outline-color: var(--bs-blue-400);
574
612
  }
575
613
 
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 {
614
+ :where(a:hover),
615
+ :where(a:focus),
616
+ :where(a:focus-visible) {
579
617
  color: var(--bs-plum-400);
580
618
  text-decoration-color: var(--bs-purple-400);
581
619
  }
582
620
 
583
- :where(.prose) a:focus-visible {
621
+ :where(a:focus-visible) {
584
622
  outline-offset: var(--bs-space-1);
585
623
  outline-style: solid;
586
624
  outline-width: 2px;
587
625
  }
588
626
 
589
- :where(.prose) a:focus:where(:not(:focus-visible)) {
627
+ :where(a:focus:not(:focus-visible)) {
590
628
  outline: none;
591
629
  }
592
630
 
593
- /* dark links still need .dark because we don't want them overwritten by the light theme link styles in applications */
631
+ /* Dark mode styling */
594
632
 
595
- .dark :where(.prose) a:not(.button, .bs-pill) {
633
+ :where(.dark a) {
596
634
  color: var(--bs-purple-200);
597
635
  outline-color: var(--bs-blue-300);
598
636
  }
599
637
 
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 {
638
+ :where(.dark a:hover),
639
+ :where(.dark a:focus),
640
+ :where(.dark a:focus-visible) {
603
641
  color: var(--bs-pink-300);
604
642
  text-decoration-color: var(--bs-purple-200);
605
643
  }
606
644
 
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
- }
645
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
614
646
 
615
647
  .box-shadow {
616
648
  box-shadow: var(--bs-shadow);
@@ -640,13 +672,15 @@ body:where(.fluid) {
640
672
  box-shadow: var(--bs-shadow-profilePhoto);
641
673
  }
642
674
 
675
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
676
+
643
677
  .box {
644
678
  background: var(--bg-color, var(--bs-bg-subtle));
645
679
  border-radius: 0.25rem;
646
680
  padding: var(--box-space, var(--bs-space-6));
647
681
  }
648
682
 
649
- .box[data-invert] {
683
+ .box:where([data-invert]) {
650
684
  --bg-color: var(--bs-bg-invert);
651
685
  color: var(--bs-ink-invert);
652
686
  }
@@ -663,12 +697,12 @@ body:where(.fluid) {
663
697
  justify-content: flex-start;
664
698
  }
665
699
 
666
- :where(.cluster[data-variant^="brick"]) > * {
700
+ .cluster:where([data-variant^="brick"]) > * {
667
701
  align-self: stretch;
668
702
  flex-grow: 1;
669
703
  }
670
704
 
671
- .cluster[data-gap="tight"] {
705
+ .cluster:where([data-gap="tight"]) {
672
706
  gap: var(--cluster-space, var(--bs-space-2));
673
707
  }
674
708
 
@@ -676,7 +710,7 @@ body:where(.fluid) {
676
710
  gap: var(--cluster-space, var(--bs-space-f-6));
677
711
  }
678
712
 
679
- :where(.fluid) .cluster[data-gap="tight"] {
713
+ :where(.fluid) .cluster:where([data-gap="tight"]) {
680
714
  gap: var(--cluster-space, var(--bs-space-f-2));
681
715
  }
682
716
 
@@ -684,19 +718,19 @@ body:where(.fluid) {
684
718
  margin-top: var(--flow-space, 1.25em);
685
719
  }
686
720
 
687
- .flow > :is(h1, h2, h3, h4, h5, h6) {
721
+ .flow > :where(h1, h2, h3, h4, h5, h6) {
688
722
  --flow-space: 2em;
689
723
  }
690
724
 
691
- .flow > hr + * {
725
+ .flow > :where(hr) + * {
692
726
  --flow-space: 1.5em;
693
727
  }
694
728
 
695
- .flow > :is(h1, h2, h3, h4, h5, h6) + * {
729
+ .flow > :where(h1, h2, h3, h4, h5, h6) + * {
696
730
  --flow-space: 0.5em;
697
731
  }
698
732
 
699
- .flow > :is(ul, ol) > li {
733
+ .flow > :where(ul, ol) > :where(li) {
700
734
  margin-top: var(--flow-space, 0.625em);
701
735
  }
702
736
 
@@ -704,11 +738,11 @@ body:where(.fluid) {
704
738
  padding-block: var(--region-space, var(--bs-space-6));
705
739
  }
706
740
 
707
- .region[data-space^='sm'] {
741
+ .region:where([data-space^='sm']) {
708
742
  padding-block: var(--bs-space-3);
709
743
  }
710
744
 
711
- .region[data-space^='lg'] {
745
+ .region:where([data-space^='lg']) {
712
746
  padding-block: var(--bs-space-12);
713
747
  }
714
748
 
@@ -716,11 +750,11 @@ body:where(.fluid) {
716
750
  padding-block: var(--region-space, var(--bs-space-f-6));
717
751
  }
718
752
 
719
- :where(.fluid) .region[data-space^='sm'] {
753
+ :where(.fluid) .region:where([data-space^='sm']) {
720
754
  padding-block: var(--bs-space-f-3);
721
755
  }
722
756
 
723
- :where(.fluid) .region[data-space^='lg'] {
757
+ :where(.fluid) .region:where([data-space^='lg']) {
724
758
  padding-block: var(--bs-space-f-12);
725
759
  }
726
760
 
@@ -737,10 +771,12 @@ body:where(.fluid) {
737
771
  padding-inline: var(--wrapper-space, var(--bs-space-f-6));
738
772
  }
739
773
 
740
- .wrapper[data-flush] {
774
+ .wrapper:where([data-flush]) {
741
775
  padding-inline: 0;
742
776
  }
743
777
 
778
+ /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
779
+
744
780
  .visually-hidden {
745
781
  border: 0;
746
782
  clip: rect(0 0 0 0);
@@ -749,8 +785,8 @@ body:where(.fluid) {
749
785
  overflow: hidden;
750
786
  padding: 0;
751
787
  position: absolute;
752
- width: 1px;
753
788
  white-space: nowrap;
789
+ width: 1px;
754
790
  }
755
791
 
756
792
  .measure-compact {
@@ -764,3 +800,102 @@ body:where(.fluid) {
764
800
  .measure-long {
765
801
  max-width: 70ch;
766
802
  }
803
+
804
+ table {
805
+ border-collapse: collapse;
806
+ border-spacing: 0;
807
+ overflow-x: auto;
808
+ max-width: 100%;
809
+ width: 100%;
810
+ }
811
+
812
+ thead {
813
+ color: var(--bs-ink-base);
814
+ font-size: var(--bs-font-base);
815
+ font-weight: 600;
816
+ }
817
+
818
+ tbody {
819
+ color: var(--bs-ink-light);
820
+ }
821
+
822
+ th {
823
+ background: var(--bs-bg-base);
824
+ }
825
+
826
+ th, td {
827
+ border-bottom: 1px solid var(--bs-border);
828
+ min-width: -moz-fit-content;
829
+ min-width: fit-content;
830
+ padding: var(--bs-space-2);
831
+ text-align: left;
832
+ }
833
+
834
+ /* Table Borders */
835
+
836
+ table[data-borders^="none"] {
837
+ border: 0;
838
+ }
839
+
840
+ table[data-borders^="all"] :where(th, td) {
841
+ border-left: 1px solid var(--bs-border);
842
+ }
843
+
844
+ table[data-borders^="all"] :where(th, td):last-child {
845
+ border-right: 1px solid var(--bs-border);
846
+ }
847
+
848
+ table[data-borders^="all"] th {
849
+ border-top: 1px solid var(--bs-border);
850
+ }
851
+
852
+ /* Table Rows */
853
+
854
+ table:where([data-rows^="striped"]) tbody > tr:nth-child(even) {
855
+ background-color: var(--bs-bg-subtle);
856
+ }
857
+
858
+ /* Table Cells */
859
+
860
+ table[data-cells^="fixed"] {
861
+ table-layout: fixed;
862
+ }
863
+
864
+ table:where([data-cells^="height"]) td {
865
+ height: 4.5rem;
866
+ vertical-align: middle;
867
+ }
868
+
869
+ /* Sticky Header */
870
+
871
+ table:where([data-sticky]) {
872
+ isolation: isolate;
873
+ }
874
+
875
+ table:where([data-sticky^="top"]) td {
876
+ z-index: 1;
877
+ }
878
+
879
+ table:where([data-sticky^="top"]) {
880
+ border-collapse: separate;
881
+ overflow-y: unset; /* Will break sticky headers if removed */
882
+ position: relative;
883
+ }
884
+
885
+ table:where([data-sticky^="left"]) {
886
+ border-collapse: separate;
887
+ overflow-x: unset; /* Will break sticky headers if removed */
888
+ position: relative;
889
+ }
890
+
891
+ table:where([data-sticky^="top"]) th {
892
+ position: sticky;
893
+ top: var(--bs-content-top);
894
+ z-index: 2;
895
+ }
896
+
897
+ table:where([data-sticky^="left"]) :is(td:first-child, th:first-child) {
898
+ position: sticky;
899
+ left: 0;
900
+ z-index: 2;
901
+ }