@wwtdev/bsds-css 0.1.1 → 0.3.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
@@ -584,7 +584,7 @@ body:where(.fluid) {
584
584
 
585
585
  /* dark links still need .dark because we don't want them overwritten by the light theme link styles in applications */
586
586
 
587
- .dark :where(.prose) a:not(.button, .pill) {
587
+ .dark :where(.prose) a:not(.button, .bs-pill) {
588
588
  color: var(--bs-purple-200);
589
589
  outline-color: var(--bs-blue-300);
590
590
  }
@@ -632,8 +632,8 @@ body:where(.fluid) {
632
632
  box-shadow: var(--bs-shadow-profilePhoto);
633
633
  }
634
634
 
635
- .badge[data-position^='left']::before,
636
- .badge:where(:not([data-position^='left']))::after {
635
+ .bs-badge[data-position^='left']::before,
636
+ .bs-badge:where(:not([data-position^='left']))::after {
637
637
  align-items: center;
638
638
  background: var(--bs-red-500);
639
639
  border-radius: 0.5rem;
@@ -650,13 +650,13 @@ body:where(.fluid) {
650
650
  width: 6px;
651
651
  }
652
652
 
653
- .pill .badge::before,
654
- .pill .badge::after {
653
+ .bs-pill .bs-badge::before,
654
+ .bs-pill .bs-badge::after {
655
655
  font-size: 0.8125em;
656
656
  }
657
657
 
658
- .badge[data-count]:where([data-position^='left'])::before,
659
- .badge[data-count]:where(:not([data-position^='left']))::after {
658
+ .bs-badge[data-count]:where([data-position^='left'])::before,
659
+ .bs-badge[data-count]:where(:not([data-position^='left']))::after {
660
660
  color: white;
661
661
  content: attr(data-count);
662
662
  min-height: 1rem;
@@ -667,26 +667,31 @@ body:where(.fluid) {
667
667
  width: auto;
668
668
  }
669
669
 
670
- .badge[data-count]::before {
670
+ .bs-badge[data-count]::before {
671
671
  margin-right: 0.25rem;
672
672
  }
673
673
 
674
- .badge[data-count]::after {
674
+ .bs-badge[data-count]::after {
675
675
  margin-left: 0.25rem;
676
676
  }
677
677
 
678
- .badge[data-count='0']::before,
679
- .badge[data-count='0']::after {
678
+ .bs-badge[data-count='0']::before,
679
+ .bs-badge[data-count='0']::after {
680
680
  display: none;
681
681
  }
682
682
 
683
- .badge[data-badge-color^='blue']::before,
684
- .badge[data-badge-color^='blue']::after {
683
+ .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::before,
684
+ .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::after {
685
+ display: inline-flex;
686
+ }
687
+
688
+ .bs-badge[data-badge-color^='blue']::before,
689
+ .bs-badge[data-badge-color^='blue']::after {
685
690
  background: var(--bs-blue-500);
686
691
  }
687
692
 
688
- .badge[data-badge-color^='white']::before,
689
- .badge[data-badge-color^='white']::after {
693
+ .bs-badge[data-badge-color^='white']::before,
694
+ .bs-badge[data-badge-color^='white']::after {
690
695
  background: white;
691
696
  color: var(--badge-text, var(--bs-black));
692
697
  }
@@ -701,7 +706,7 @@ body:where(.fluid) {
701
706
  text-decoration: none;
702
707
  }
703
708
 
704
- .button {
709
+ .bs-button {
705
710
  --btn-main: var(--bs-blue-400);
706
711
  --btn-secondary: var(--bs-blue-300);
707
712
  --btn-highlight: var(--bs-blue-100);
@@ -723,11 +728,11 @@ body:where(.fluid) {
723
728
  vertical-align: middle;
724
729
  }
725
730
 
726
- .button:hover {
731
+ .bs-button:hover {
727
732
  background-color: var(--btn-secondary);
728
733
  }
729
734
 
730
- .button:active {
735
+ .bs-button:active {
731
736
  background-color: var(--btn-secondary);
732
737
  transform: scale(0.97);
733
738
  transform-origin: center;
@@ -736,7 +741,7 @@ body:where(.fluid) {
736
741
 
737
742
  /* Button Focus Styles */
738
743
 
739
- .button::before {
744
+ .bs-button::before {
740
745
  border-color: transparent;
741
746
  border-radius: 0.5rem;
742
747
  border-style: solid;
@@ -749,23 +754,23 @@ body:where(.fluid) {
749
754
  width: calc(100% + 0.5rem);
750
755
  }
751
756
 
752
- .button:focus::before {
757
+ .bs-button:focus::before {
753
758
  border-color: var(--btn-main);
754
759
  }
755
760
 
756
- .button:focus-visible::before {
761
+ .bs-button:focus-visible::before {
757
762
  border-color: var(--btn-main);
758
763
  box-shadow: none;
759
764
  }
760
765
 
761
- .button:focus:not(:focus-visible)::before {
766
+ .bs-button:focus:not(:focus-visible)::before {
762
767
  border-color: transparent;
763
768
  box-shadow: none;
764
769
  }
765
770
 
766
771
  /* Ghost Buttons */
767
772
 
768
- .button:where([data-ghost]) {
773
+ .bs-button:where([data-ghost]) {
769
774
  --btn-light: var(--bs-blue-10);
770
775
  --btn-secondary: var(--bs-blue-10);
771
776
  background-color: transparent;
@@ -773,16 +778,16 @@ body:where(.fluid) {
773
778
  color: var(--btn-main);
774
779
  }
775
780
 
776
- .button:where([data-ghost])::before {
781
+ .bs-button:where([data-ghost])::before {
777
782
  border-radius: 0.4375rem;
778
783
  }
779
784
 
780
- .button:where([data-ghost]):hover,
781
- .button:where([data-ghost]):focus {
785
+ .bs-button:where([data-ghost]):hover,
786
+ .bs-button:where([data-ghost]):focus {
782
787
  background-color: var(--btn-light);
783
788
  }
784
789
 
785
- .button:where([data-ghost]):active {
790
+ .bs-button:where([data-ghost]):active {
786
791
  box-shadow:
787
792
  inset 0 0 0 1px var(--btn-main),
788
793
  inset 0px 0px 4px 1px var(--btn-highlight);
@@ -790,35 +795,35 @@ body:where(.fluid) {
790
795
 
791
796
  /* Button type */
792
797
 
793
- .button:where([data-variant^='secondary']) {
798
+ .bs-button:where([data-variant^='secondary']) {
794
799
  --btn-main: var(--bs-plum-400);
795
800
  --btn-secondary: var(--bs-plum-300);
796
801
  --btn-light: var(--bs-plum-10);
797
802
  --btn-highlight: var(--bs-plum-100);
798
803
  }
799
804
 
800
- .dark .button:where([data-variant^='secondary']) {
805
+ .dark .bs-button:where([data-variant^='secondary']) {
801
806
  --btn-main: var(--bs-plum-200);
802
807
  --btn-secondary: var(--bs-plum-300);
803
808
  --btn-light: var(--bs-navy-400);
804
809
  --btn-highlight: var(--bs-plum-400);
805
810
  }
806
811
 
807
- .button:where([data-variant^='positive']) {
812
+ .bs-button:where([data-variant^='positive']) {
808
813
  --btn-main: var(--bs-purple-400);
809
814
  --btn-secondary: var(--bs-purple-300);
810
815
  --btn-light: var(--bs-purple-10);
811
816
  --btn-highlight: var(--bs-purple-100);
812
817
  }
813
818
 
814
- .button:where([data-variant^='warning']) {
819
+ .bs-button:where([data-variant^='warning']) {
815
820
  --btn-main: var(--bs-orange-warning);
816
821
  --btn-secondary: var(--bs-orange-300);
817
822
  --btn-light: var(--bs-orange-10);
818
823
  --btn-highlight: var(--bs-orange-100);
819
824
  }
820
825
 
821
- .button:where([data-variant^='negative']) {
826
+ .bs-button:where([data-variant^='negative']) {
822
827
  --btn-main: var(--bs-red-400);
823
828
  --btn-secondary: var(--bs-red-300);
824
829
  --btn-light: var(--bs-red-10);
@@ -827,7 +832,7 @@ body:where(.fluid) {
827
832
 
828
833
  /* Text Button */
829
834
 
830
- .button:where([data-text]) {
835
+ .bs-button:where([data-text]) {
831
836
  background-color: transparent;
832
837
  color: var(--bs-blue-500);
833
838
  cursor: pointer;
@@ -836,61 +841,61 @@ body:where(.fluid) {
836
841
  line-height: 150%;
837
842
  }
838
843
 
839
- .button:where([data-text]):hover {
844
+ .bs-button:where([data-text]):hover {
840
845
  background-color: transparent;
841
846
  text-decoration: underline;
842
847
  }
843
848
 
844
- .button:where([data-text]):active {
849
+ .bs-button:where([data-text]):active {
845
850
  box-shadow: none;
846
851
  }
847
852
 
848
853
  /* Button Size */
849
854
 
850
- .button:where([data-size^='sm']) {
855
+ .bs-button:where([data-size^='sm']) {
851
856
  font-size: var(--bs-text-sm);
852
857
  }
853
858
 
854
- .button:where([data-text][data-size^='sm']) {
859
+ .bs-button:where([data-text][data-size^='sm']) {
855
860
  font-size: var(--bs-text-base);
856
861
  }
857
862
 
858
863
  /* Disabled Styling */
859
864
 
860
865
  :where(button:disabled),
861
- .button:where([aria-disabled='true']) /* for links as buttons */ {
866
+ .bs-button:where([aria-disabled='true']) /* for links as buttons */ {
862
867
  pointer-events: none;
863
868
  }
864
869
 
865
- .button:where(:disabled),
866
- .button:where([aria-disabled='true']) {
870
+ .bs-button:where(:disabled),
871
+ .bs-button:where([aria-disabled='true']) {
867
872
  color: var(--bs-gray-400);
868
873
  background-color: var(--bs-gray-200);
869
874
  }
870
875
 
871
- .button:where([data-ghost]):disabled,
872
- .button:where([data-ghost])[aria-disabled='true'] {
876
+ .bs-button:where([data-ghost]):disabled,
877
+ .bs-button:where([data-ghost])[aria-disabled='true'] {
873
878
  box-shadow: inset 0 0 0 1px var(--bs-gray-400);
874
879
  }
875
880
 
876
- .button:where([data-text]):disabled,
877
- .button:where([data-text][aria-disabled='true']) {
881
+ .bs-button:where([data-text]):disabled,
882
+ .bs-button:where([data-text][aria-disabled='true']) {
878
883
  background-color: transparent;
879
884
  }
880
885
 
881
886
  /* Icon Height */
882
887
 
883
- .button :where(svg:not([height])) {
888
+ .bs-button :where(svg:not([height])) {
884
889
  height: var(--bs-text-base);
885
890
  }
886
891
 
887
- .button:where([data-size^='sm']) :where(svg:not([height])) {
892
+ .bs-button:where([data-size^='sm']) :where(svg:not([height])) {
888
893
  height: var(--bs-text-xs);
889
894
  }
890
895
 
891
896
  /* links as buttons */
892
897
 
893
- a.button {
898
+ a.bs-button {
894
899
  align-items: center;
895
900
  display: inline-flex;
896
901
  outline: none;
@@ -898,7 +903,9 @@ a.button {
898
903
  }
899
904
 
900
905
  :where(label, legend) {
901
- color: var(--bs-ink-base);
906
+ --label-color: var(--bs-ink-base);
907
+
908
+ color: var(--label-color);
902
909
  display: inline-block;
903
910
  font-size: var(--bs-text-sm);
904
911
  font-weight: 600;
@@ -906,19 +913,19 @@ a.button {
906
913
  width: 100%;
907
914
  }
908
915
 
909
- :where(.required) {
916
+ :where([data-required]) {
910
917
  color: var(--bs-red-400);
911
918
  }
912
919
 
913
- :where([data-disabled], [data-disabled] .required, [data-disabled] label) {
914
- color: var(--bs-gray-400);
920
+ :where(label[data-disabled], [data-disabled] [data-required], [data-disabled] label) {
921
+ --label-color: var(--bs-ink-light);
915
922
  }
916
923
 
917
- :where(.required) {
924
+ :where([data-required]) {
918
925
  color: var(--bs-red-400);
919
926
  }
920
927
 
921
- :where([data-disabled], [data-disabled] .required) {
928
+ :where([data-disabled], [data-disabled] [data-required]) {
922
929
  color: var(--bs-gray-400);
923
930
  }
924
931
 
@@ -928,8 +935,8 @@ a.button {
928
935
  margin-top: 0.25rem;
929
936
  }
930
937
 
931
- :where(input):not([type^='checkbox'], [type^='radio'], [type^='file'], [type^='range']),
932
- :where(textarea, select) {
938
+ input:not([type^='checkbox'], [type^='radio'], [type^='file'], [type^='range']),
939
+ textarea, select {
933
940
  -webkit-appearance: none;
934
941
  -moz-appearance: none;
935
942
  appearance: none;
@@ -945,12 +952,14 @@ a.button {
945
952
  width: 100%;
946
953
  }
947
954
 
948
- :where(input, textarea, select)::-moz-placeholder {
955
+ /* Generally applicable (all input types) */
956
+
957
+ select::-moz-placeholder {
949
958
  color: var(--bs-violet-200);
950
959
  opacity: 1;
951
960
  }
952
961
 
953
- :where(input, textarea, select)::placeholder {
962
+ input, textarea, select::placeholder {
954
963
  color: var(--bs-violet-200);
955
964
  opacity: 1;
956
965
  }
@@ -970,7 +979,7 @@ a.button {
970
979
  }
971
980
 
972
981
  :where(input, textarea, select)[required]:focus,
973
- :where(input, textarea, select).error {
982
+ :where(input, textarea, select)[data-error] {
974
983
  --outline-color: var(--bs-red-200);
975
984
  }
976
985
 
@@ -980,6 +989,17 @@ a.button {
980
989
  color: var(--bs-gray-400);
981
990
  }
982
991
 
992
+ /*
993
+ Removes the built-in 'margin' on bottom of textarea
994
+ see https://bugs.chromium.org/p/chromium/issues/detail?id=89530
995
+ :has not fully supported yet but will work for most
996
+ */
997
+
998
+ :has(> textarea:only-child) {
999
+ display: block;
1000
+ line-height: 0;
1001
+ }
1002
+
983
1003
  /* chrome user agent styling was applying opacity: 0.7 */
984
1004
 
985
1005
  :where(select:disabled) {
@@ -997,22 +1017,9 @@ a.button {
997
1017
  opacity: 1;
998
1018
  }
999
1019
 
1000
- /* Character Counter for Textarea */
1001
-
1002
- :where(textarea + .character-count) {
1003
- color: var(--bs-ink-base);
1004
- font-size: var(--bs-text-xs);
1005
- font-weight: 400;
1006
- text-align: right;
1007
- }
1008
-
1009
- :where(textarea[disabled] + .character-count) {
1010
- color: var(--bs-gray-400);
1011
- }
1012
-
1013
1020
  /* Select */
1014
1021
 
1015
- :where(select) {
1022
+ select {
1016
1023
  /* URL Encoded SVG dropdown caret so there is something there */
1017
1024
  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");
1018
1025
  background-position: right 0.75rem center;
@@ -1020,14 +1027,72 @@ a.button {
1020
1027
  background-size: 1em 1em;
1021
1028
  }
1022
1029
 
1023
- .dark :where(select) {
1030
+ .dark select {
1024
1031
  /* URL Encoded SVG dropdown caret so there is something there */
1025
1032
  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");
1026
1033
  }
1027
1034
 
1028
- /* Checkboxes & Radios */
1035
+ .dark select:disabled {
1036
+ /* URL Encoded SVG dropdown caret so there is something there */
1037
+ 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");
1038
+ }
1039
+
1040
+ /* Errors and Messages */
1041
+
1042
+ input:where([data-error]) {
1043
+ border-color: var(--bs-red-400);
1044
+ }
1045
+
1046
+ /* Fieldset */
1047
+
1048
+ :where(fieldset) {
1049
+ border: none;
1050
+ margin-left: 0;
1051
+ margin-right: 0;
1052
+ padding: 0;
1053
+ }
1054
+
1055
+ :where(fieldset legend) {
1056
+ margin-bottom: 0.25rem;
1057
+ padding: 0;
1058
+ }
1059
+
1060
+ .bs-field-details {
1061
+ display: flex;
1062
+ justify-content: space-between;
1063
+ align-items: center;
1064
+ padding: 0 0.75rem;
1065
+ margin-top: 0.5rem;
1066
+ }
1067
+
1068
+ :where(textarea, bs-textarea) + .bs-field-details {
1069
+ margin-top: 0.25rem;
1070
+ }
1071
+
1072
+ .bs-field-details :where(.bs-character-count:first-child) {
1073
+ margin-left: auto;
1074
+ }
1075
+
1076
+ .bs-character-count {
1077
+ color: var(--bs-ink-base);
1078
+ font-size: var(--bs-text-xs);
1079
+ font-weight: 400;
1080
+ text-align: right;
1081
+ }
1029
1082
 
1030
- :where(.checkbox, .radio) {
1083
+ :where([disabled], [data-disabled]) + .bs-character-count,
1084
+ :where([disabled], [data-disabled]) .bs-character-count,
1085
+ .bs-character-count:where([data-disabled]) {
1086
+ color: var(--bs-gray-400);
1087
+ }
1088
+
1089
+ .bs-character-count:where([data-error]) {
1090
+ color: var(--bs-red-400);
1091
+ }
1092
+
1093
+ /* Containers and Labels for Checkbox/Radio */
1094
+
1095
+ .bs-boolean {
1031
1096
  display: flex;
1032
1097
  align-items: center;
1033
1098
  font-size: var(--bs-text-base);
@@ -1036,13 +1101,25 @@ a.button {
1036
1101
  line-height: 115%;
1037
1102
  }
1038
1103
 
1039
- :where(.checkbox, .radio) label {
1104
+ .bs-boolean:where([data-size='sm']) input {
1105
+ width: var(--bs-text-xs);
1106
+ height: var(--bs-text-xs);
1107
+ }
1108
+
1109
+ .bs-boolean label {
1040
1110
  font-size: var(--bs-text-base);
1041
1111
  font-weight: 400;
1042
- line-height: 115%;
1112
+ line-height: 1.5;
1043
1113
  width: auto;
1044
1114
  }
1045
1115
 
1116
+ .bs-boolean:where([data-size='sm']),
1117
+ .bs-boolean:where([data-size='sm']) label {
1118
+ font-size: var(--bs-text-xs);
1119
+ }
1120
+
1121
+ /* Checkbox & Radio Input */
1122
+
1046
1123
  :where(input[type^='checkbox'], input[type^='radio']) {
1047
1124
  --box-shadow: var(--bs-ink-base);
1048
1125
 
@@ -1067,10 +1144,6 @@ a.button {
1067
1144
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
1068
1145
  }
1069
1146
 
1070
- :where(input[type^='checkbox'], input[type^='radio'])[data-error] {
1071
- --box-shadow: var(--bs-red-400);
1072
- }
1073
-
1074
1147
  :where(input[type^='checkbox']) {
1075
1148
  border-radius: 0.125rem;
1076
1149
  }
@@ -1079,18 +1152,7 @@ a.button {
1079
1152
  border-radius: 50%;
1080
1153
  }
1081
1154
 
1082
- :where(.checkbox, .radio)[data-size='sm'],
1083
- :where(.checkbox, .radio)[data-size='sm'] label {
1084
- font-size: var(--bs-text-sm);
1085
- line-height: 100%;
1086
- }
1087
-
1088
- :where(.checkbox, .radio)[data-size='sm'] input {
1089
- width: var(--bs-text-xs);
1090
- height: var(--bs-text-xs);
1091
- }
1092
-
1093
- :where(input[type='checkbox'])::before {
1155
+ input:where([type='checkbox'])::before {
1094
1156
  --filled-size: 1rem;
1095
1157
  --check-fill-color: var(--bs-blue-400);
1096
1158
 
@@ -1102,7 +1164,7 @@ a.button {
1102
1164
  width: var(--filled-size);
1103
1165
  }
1104
1166
 
1105
- :where(input[type^='checkbox'])::after {
1167
+ input:where([type^='checkbox'])::after {
1106
1168
  border: solid var(--bs-white);
1107
1169
  border-width: 0 0.125rem 0.125rem 0;
1108
1170
  content: '';
@@ -1116,7 +1178,7 @@ a.button {
1116
1178
  width: 0.375em;
1117
1179
  }
1118
1180
 
1119
- :where(input[type='radio'])::before {
1181
+ input:where([type='radio'])::before {
1120
1182
  --filled-size: 1rem;
1121
1183
  --radio-fill-color: var(--bs-blue-400);
1122
1184
 
@@ -1129,7 +1191,7 @@ a.button {
1129
1191
  width: var(--filled-size);
1130
1192
  }
1131
1193
 
1132
- :where(input[type='radio'])::after {
1194
+ input:where([type='radio'])::after {
1133
1195
  --inner-size: 0.375rem;
1134
1196
  --inner-fill-color: var(--bs-white);
1135
1197
 
@@ -1146,73 +1208,198 @@ a.button {
1146
1208
  width: var(--inner-size);
1147
1209
  }
1148
1210
 
1149
- :where(input[type='checkbox']:checked, input[type='radio']:checked)::before,
1150
- :where(input[type='checkbox']:checked, input[type='radio']:checked)::after {
1211
+ input:where([type='checkbox']:checked, [type='radio']:checked)::before,
1212
+ input:where([type='checkbox']:checked, [type='radio']:checked)::after {
1151
1213
  visibility: visible;
1152
1214
  }
1153
1215
 
1154
- :where(.checkbox, .radio)[data-size='sm'] input::before {
1216
+ .bs-boolean:where([data-size='sm']) input::before {
1155
1217
  --filled-size: var(--bs-text-xs);
1156
1218
  }
1157
1219
 
1158
- :where(.checkbox[data-size='sm'] input[type='checkbox'])::after {
1159
- height: 0.5625;
1160
- width: 0.3125;
1220
+ .bs-boolean:where([data-size='sm']) input[type='checkbox']::after {
1221
+ height: 0.5625rem;
1222
+ width: 0.3125rem;
1161
1223
  }
1162
1224
 
1163
- :where(.radio[data-size='sm'] input[type='radio'])::after {
1225
+ .bs-boolean:where([data-size='sm']) input[type='radio']::after {
1164
1226
  --inner-size: 0.25rem;
1165
1227
  }
1166
1228
 
1167
- :where(input[type='checkbox'], input[type='radio']):disabled {
1229
+ /* Disabled State */
1230
+
1231
+ input:where([type='checkbox'], [type='radio']):disabled {
1168
1232
  --box-shadow: var(--bs-gray-400);
1169
1233
  background-color: transparent;
1170
1234
  }
1171
1235
 
1172
- :where(input[type='checkbox']):checked:disabled:before {
1236
+ input:where([type='checkbox']):checked:disabled::before {
1173
1237
  --check-fill-color: var(--bs-gray-400);
1174
1238
  }
1175
1239
 
1176
- :where(input[type='radio']):checked:disabled:before {
1240
+ input:where([type='radio']):checked:disabled::before {
1177
1241
  --radio-fill-color: var(--bs-gray-400);
1178
1242
  }
1179
1243
 
1180
- /* Errors and Messages */
1244
+ /* Error state */
1181
1245
 
1182
- :where(input)[data-error] {
1183
- border-color: var(--bs-red-400);
1246
+ input:where([type^='checkbox'], [type^='radio'])[data-error] {
1247
+ --box-shadow: var(--bs-red-400);
1184
1248
  }
1185
1249
 
1186
- /* Fieldset */
1250
+ .bs-switch {
1251
+ --box-shadow: var(--bs-ink-base);
1252
+ --ball-background: var(--bs-white);
1253
+ --ball-diameter: 1rem;
1254
+ --inner-text-width: 1rem;
1255
+ --inner-text-padding: 0.5rem;
1256
+ --offset: 0.25rem;
1257
+ --switch-background: var(--bs-gray-400);
1187
1258
 
1188
- :where(fieldset) {
1189
1259
  border: none;
1190
- margin-left: 0;
1191
- margin-right: 0;
1192
- padding: 0;
1260
+ border-radius: 100vw;
1261
+ cursor: pointer;
1262
+ height: calc(var(--ball-diameter) + var(--offset) * 2);
1263
+ position: relative;
1193
1264
  }
1194
1265
 
1195
- :where(fieldset legend) {
1196
- margin-bottom: 0.25rem;
1197
- padding: 0;
1266
+ .bs-switch:where([data-size="sm"]) {
1267
+ --ball-diameter: var(--bs-text-xs);
1268
+ --inner-text-width: .75rem;
1269
+ --inner-text-padding: 0.375rem;
1270
+ }
1271
+
1272
+ :where(.dark) .bs-switch:where(:not([data-disabled])) {
1273
+ --switch-background: var(--bs-blue-400);
1274
+ }
1275
+
1276
+ .bs-switch input,
1277
+ .bs-switch:where([data-size="sm"]) input {
1278
+ cursor: pointer;
1279
+ height: 100%;
1280
+ opacity: 0;
1281
+ position: absolute;
1282
+ width: 100%;
1283
+ }
1284
+
1285
+ .bs-switch span {
1286
+ align-items: center;
1287
+ background-color: var(--switch-background);
1288
+ border-radius: 100vw;
1289
+ display: inline-flex;
1290
+ height: 100%;
1291
+ padding: 0 var(--inner-text-padding);
1292
+ pointer-events: none;
1293
+ position: relative;
1294
+ transition: 250ms;
1295
+ width: calc(var(--ball-diameter) * 2 + var(--offset) * 2);
1296
+ height: calc(var(--ball-diameter) + var(--offset) * 2);
1297
+ }
1298
+
1299
+ /* Toggle "ball" */
1300
+
1301
+ .bs-switch span::before {
1302
+ background-color: var(--ball-background);
1303
+ border-radius: 50%;
1304
+ box-sizing: border-box;
1305
+ content: '';
1306
+ height: var(--ball-diameter);
1307
+ left: var(--offset);
1308
+ position: absolute;
1309
+ top: 50%;
1310
+ transform: translate(0, -50%);
1311
+ transition: inherit;
1312
+ width: var(--ball-diameter);
1313
+ z-index: 2;
1314
+ }
1315
+
1316
+ .bs-switch input:where(:checked) ~ span::before,
1317
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span::before {
1318
+ transform: translate(var(--ball-diameter), -50%);
1319
+ }
1320
+
1321
+ .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::before,
1322
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::before {
1323
+ transform: translate(calc(var(--ball-diameter) + var(--inner-text-width)), -50%);
1198
1324
  }
1199
1325
 
1200
- :where(.hints) {
1326
+ /* Inner "on/off" text */
1327
+
1328
+ .bs-switch span:where([data-inner-on-label][data-inner-off-label]) {
1329
+ color: white;
1330
+ width: calc(var(--ball-diameter) * 2 + var(--offset) * 2 + var(--inner-text-width));
1331
+ }
1332
+
1333
+ .bs-switch span::after {
1334
+ align-items: center;
1335
+ color: var(--ball-background);
1336
+ display: flex;
1337
+ height: 100%;
1338
+ justify-content: flex-start;
1339
+ left: 0;
1340
+ padding: var(--inner-text-padding);
1341
+ position: absolute;
1342
+ text-transform: capitalize;
1343
+ top: 0;
1344
+ width: 100%;
1345
+ }
1346
+
1347
+ .bs-switch input:where(:not(:checked)) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
1348
+ .bs-switch:where([aria-pressed="false"]) span:where([data-inner-on-label][data-inner-off-label])::after {
1349
+ content: attr(data-inner-off-label);
1350
+ justify-content: flex-end;
1351
+ }
1352
+
1353
+ .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
1354
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::after {
1355
+ content: attr(data-inner-on-label);
1356
+ justify-content: flex-start;
1357
+ }
1358
+
1359
+ /* Focus state */
1360
+
1361
+ .bs-switch:where(:focus-within) span {
1362
+ box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
1363
+ 0 0 0 4px var(--outline-color, var(--bs-blue-400));
1364
+ outline: 2px solid transparent;
1365
+ }
1366
+
1367
+ :where(.box) .bs-switch:where(:focus-within) span {
1368
+ --offset-color: var(--bs-bg-subtle);
1369
+ }
1370
+
1371
+ :where(.box[data-invert]) .bs-switch:where(:focus-within) span {
1372
+ --offset-color: var(--bs-bg-invert);
1373
+ }
1374
+
1375
+ /* Disabled state */
1376
+
1377
+ .bs-switch:where([data-disabled]) {
1378
+ --ball-background: var(--bs-gray-400);
1379
+ --switch-background: var(--bs-gray-200);
1380
+ }
1381
+
1382
+ .bs-switch input:where(:disabled) {
1383
+ cursor: default;
1384
+ }
1385
+
1386
+ .bs-hint {
1201
1387
  color: var(--bs-ink-light);
1202
1388
  font-size: var(--bs-text-xs);
1203
- padding: 0.5rem 0.75rem 0 0.75rem;
1389
+ padding: 0;
1204
1390
  margin: 0;
1205
1391
  list-style: none;
1206
1392
  }
1207
1393
 
1208
- :where(.hints[data-error]) {
1394
+ .bs-hint:where([data-error]) {
1209
1395
  color: var(--bs-red-400);
1210
1396
  }
1211
1397
 
1212
- .pill {
1398
+ .bs-pill {
1213
1399
  --pill-background: var(--bs-bg-subtle);
1214
1400
  --pill-border: transparent;
1215
1401
  --pill-text: var(--bs-royal-400);
1402
+ --pill-gap: var(--bs-space-2);
1216
1403
 
1217
1404
  align-items: center;
1218
1405
  -webkit-appearance: none;
@@ -1224,70 +1411,70 @@ a.button {
1224
1411
  color: var(--pill-text);
1225
1412
  display: inline-flex;
1226
1413
  font-size: var(--bs-text-xs);
1227
- gap: 4px;
1414
+ gap: var(--pill-gap);
1228
1415
  line-height: 1.33;
1229
1416
  padding: 4px 6px;
1230
1417
  text-decoration: none;
1231
1418
  vertical-align: middle;
1232
1419
  }
1233
1420
 
1234
- :where(.dark) .pill {
1421
+ :where(.dark) .bs-pill {
1235
1422
  --pill-text: var(--bs-royal-100);
1236
1423
  }
1237
1424
 
1238
- .pill > svg {
1425
+ :where(.bs-pill > svg) {
1239
1426
  height: 1rem;
1240
1427
  }
1241
1428
 
1242
1429
  /* ------------------------------ Button and Link Styles ------------------------------ */
1243
1430
 
1244
- :is(a, button).pill {
1431
+ :is(a, button).bs-pill {
1245
1432
  color: var(--pill-text);
1246
1433
  cursor: pointer;
1247
1434
  transition: all 0.15s ease-in-out;
1248
1435
  }
1249
1436
 
1250
- :is(a, button).pill:is(:hover, :focus) {
1437
+ :is(a, button).bs-pill:is(:hover, :focus) {
1251
1438
  --pill-border: var(--bs-royal-400);
1252
1439
 
1253
1440
  color: var(--pill-text);
1254
1441
  outline: transparent;
1255
1442
  }
1256
1443
 
1257
- :where(.dark) :is(a, button).pill:is(:hover, :focus) {
1444
+ :where(.dark) :is(a, button).bs-pill:is(:hover, :focus) {
1258
1445
  --pill-border: var(--bs-royal-200);
1259
1446
  }
1260
1447
 
1261
1448
  /* ------------------------------ Background Colors ------------------------------ */
1262
1449
 
1263
- :where(.box, [class*="bg-"]:not([class~="bg-white"])) .pill {
1450
+ :where(.box, [class*="bg-"]:not([class~="bg-white"])) .bs-pill:where(:not([data-variant^="live"], [data-variant^="restricted"], [data-active])) {
1264
1451
  --pill-background: var(--bs-bg-base);
1265
1452
  }
1266
1453
 
1267
- :where(.box[data-invert]) .pill {
1454
+ :where(.box[data-invert]) .bs-pill {
1268
1455
  --pill-background: var(--bs-bg-invert-subtle);
1269
1456
  --pill-text: var(--bs-gray-100);
1270
1457
  }
1271
1458
 
1272
- :where(.box[data-invert]) :is(a, button).pill:is(:hover, :focus) {
1459
+ :where(.box[data-invert]) :is(a, button).bs-pill:is(:hover, :focus) {
1273
1460
  --pill-border: var(--bs-gray-100);
1274
1461
  }
1275
1462
 
1276
- :where(.dark .box[data-invert]) .pill {
1463
+ :where(.dark .box[data-invert]) .bs-pill {
1277
1464
  --pill-text: var(--bs-royal-400);
1278
1465
  }
1279
1466
 
1280
- :where(.dark .box[data-invert]) :is(a, button).pill:is(:hover, :focus) {
1467
+ :where(.dark .box[data-invert]) :is(a, button).bs-pill:is(:hover, :focus) {
1281
1468
  --pill-border: var(--bs-royal-400);
1282
1469
  }
1283
1470
 
1284
1471
  /* ------------------------------ Status Styles ------------------------------ */
1285
1472
 
1286
- .pill:where([data-status]) {
1473
+ .bs-pill:where([data-status]) {
1287
1474
  --status-color: var(--bs-blue-400);
1288
1475
  }
1289
1476
 
1290
- .pill:where([data-status])::before {
1477
+ .bs-pill:where([data-status])::before {
1291
1478
  background-color: var(--status-color);
1292
1479
  border-radius: 100%;
1293
1480
  content: '';
@@ -1297,43 +1484,43 @@ a.button {
1297
1484
 
1298
1485
  /* ----- Status Colors ----- */
1299
1486
 
1300
- .pill:where([data-status^="active"]) {
1487
+ .bs-pill:where([data-status^="active"]) {
1301
1488
  --status-color: var(--bs-blue-400);
1302
1489
  }
1303
1490
 
1304
- .pill:where([data-status^="complete"]) {
1491
+ .bs-pill:where([data-status^="complete"]) {
1305
1492
  --status-color: var(--bs-purple-400);
1306
1493
  }
1307
1494
 
1308
- .pill:where([data-status^="inactive"]) {
1495
+ .bs-pill:where([data-status^="inactive"]) {
1309
1496
  --status-color: var(--bs-gray-300);
1310
1497
  }
1311
1498
 
1312
- .pill:where([data-status^="error"]) {
1499
+ .bs-pill:where([data-status^="error"]) {
1313
1500
  --status-color: var(--bs-red-400);
1314
1501
  }
1315
1502
 
1316
- .pill:where([data-status^="positive"]) {
1503
+ .bs-pill:where([data-status^="positive"]) {
1317
1504
  --status-color: #16986D;
1318
1505
  }
1319
1506
 
1320
- .pill:where([data-status^="warning"]) {
1507
+ .bs-pill:where([data-status^="warning"]) {
1321
1508
  --status-color: var(--bs-orange-warning);
1322
1509
  }
1323
1510
 
1324
1511
  /* ------------------------------ Filter Styles ------------------------------ */
1325
1512
 
1326
- .pill:where([data-type^="filter"]) {
1513
+ .bs-pill:where([data-variant^="filter"]) {
1327
1514
  --pill-background: var(--bs-bg-base);
1328
1515
  --pill-border: var(--bs-border);
1329
1516
  --pill-text: var(--bs-ink-base);
1330
1517
  }
1331
1518
 
1332
- .pill:where([data-type^="filter"]):is(:hover, :focus) {
1519
+ .bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
1333
1520
  --pill-border: var(--bs-border);
1334
1521
  }
1335
1522
 
1336
- :is(a, button).pill:where([data-type^="filter"]):is(:hover, :focus) {
1523
+ :is(a, button).bs-pill:where([data-variant^="filter"]):is(:hover, :focus) {
1337
1524
  --pill-border: var(--bs-ink-base);
1338
1525
  }
1339
1526
 
@@ -1341,13 +1528,13 @@ a.button {
1341
1528
 
1342
1529
  /* Black + */
1343
1530
 
1344
- .pill:where([data-type^="filter"][data-type*="add"])::after {
1531
+ .bs-pill:where([data-variant^="filter"][data-variant*="add"])::after {
1345
1532
  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");
1346
1533
  }
1347
1534
 
1348
1535
  /* White + */
1349
1536
 
1350
- :where(.dark) .pill:where([data-type^="filter"][data-type*="add"]):not(:disabled, [aria-disabled="true"])::after{
1537
+ :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="add"]):not(:disabled, [aria-disabled="true"])::after{
1351
1538
  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");
1352
1539
  }
1353
1540
 
@@ -1355,91 +1542,93 @@ a.button {
1355
1542
 
1356
1543
  /* Black X */
1357
1544
 
1358
- .pill:where([data-type^="filter"][data-type*="remove"])::after {
1545
+ .bs-pill:where([data-variant^="filter"][data-variant*="remove"])::after {
1359
1546
  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");
1360
1547
  }
1361
1548
 
1362
1549
  /* White X */
1363
1550
 
1364
- :where(.dark) .pill:where([data-type^="filter"][data-type*="remove"]):not(:disabled, [aria-disabled="true"])::after {
1551
+ :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):not(:disabled, [aria-disabled="true"])::after {
1365
1552
  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");
1366
1553
  }
1367
1554
 
1368
1555
  /* Dark Red X */
1369
1556
 
1370
- .pill:where([data-type^="filter"][data-type*="remove"]):hover::after {
1557
+ .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):hover::after {
1371
1558
  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");
1372
1559
  }
1373
1560
 
1374
1561
  /* Light Red X */
1375
1562
 
1376
- :where(.dark) .pill:where([data-type^="filter"][data-type*="remove"]):hover::after {
1563
+ :where(.dark) .bs-pill:where([data-variant^="filter"][data-variant*="remove"]):hover::after {
1377
1564
  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");
1378
1565
  }
1379
1566
 
1380
1567
  /* ----- Filter Active Styles ----- */
1381
1568
 
1382
- .pill:where([data-type^="filter"][data-type*="active"]) {
1569
+ .bs-pill:where([data-variant^="filter"][data-active]) {
1383
1570
  --pill-background: var(--bs-blue-400);
1384
1571
  --pill-border: transparent;
1385
1572
  --pill-text: var(--bs-white);
1386
1573
  }
1387
1574
 
1388
- .pill:where([data-type^="filter"][data-type*="active"]):is(:hover, :focus) {
1575
+ .bs-pill:where([data-variant^="filter"][data-active]):is(:hover, :focus) {
1389
1576
  --pill-border: transparent;
1390
1577
  }
1391
1578
 
1392
- :is(a, button).pill:where([data-type^="filter"][data-type*="active"]):is(:hover, :focus) {
1579
+ :is(a, button).bs-pill:where([data-variant^="filter"][data-active]):is(:hover, :focus) {
1393
1580
  --pill-background: var(--bs-blue-500);
1394
1581
  --pill-border: transparent;
1395
1582
  }
1396
1583
 
1397
1584
  /* White X */
1398
1585
 
1399
- .pill:where([data-type^="filter"][data-type*="active"])::after {
1586
+ .bs-pill:where([data-variant^="filter"][data-active])::after {
1400
1587
  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");
1401
1588
  }
1402
1589
 
1403
1590
  /* Black X */
1404
1591
 
1405
- .pill:where([data-type^="filter"][data-type*="active"]):where(:disabled, [aria-disabled="true"])::after {
1592
+ .bs-pill:where([data-variant^="filter"][data-active]):where(:disabled, [aria-disabled="true"])::after {
1406
1593
  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");
1407
1594
  }
1408
1595
 
1409
1596
  /* ------------------------------ Restricted Styles ------------------------------ */
1410
1597
 
1411
- .pill:where([data-type^="restricted"]) {
1598
+ .bs-pill:where([data-variant^="restricted"]) {
1412
1599
  --pill-background: var(--bs-gray-400);
1413
1600
  --pill-text: var(--bs-white);
1601
+ --pill-gap: var(--bs-space-1);
1414
1602
  }
1415
1603
 
1416
- .pill:where([data-type^="restricted"]):hover {
1604
+ .bs-pill:where([data-variant^="restricted"]):hover {
1417
1605
  --pill-border: transparent;
1418
1606
  }
1419
1607
 
1420
- .pill:where([data-type^="restricted"])::before {
1608
+ .bs-pill:where([data-variant^="restricted"])::before {
1421
1609
  content: url("data:image/svg+xml,%3Csvg width='11' height='12' viewBox='0 0 8 9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.25 4.5H7v3.715a.34.34 0 0 1-.37.285H1V5.285A.34.34 0 0 1 1.37 5h5a.25.25 0 0 0 .25-.25V3.275A2.545 2.545 0 0 0 4 1a2.55 2.55 0 0 0-2.625 2.29L1.39 4.5a.83.83 0 0 0-.89.785V8.75A.25.25 0 0 0 .75 9h5.88a.835.835 0 0 0 .87-.785V4.75a.25.25 0 0 0-.25-.25Zm-2.225 0H2.96V3.425c0-.035 0-.845 1.03-.845a.96.96 0 0 1 1.035.8V4.5ZM4 1.5a2.045 2.045 0 0 1 2.115 1.79V4.5h-.59V3.37A1.455 1.455 0 0 0 4 2.075a1.385 1.385 0 0 0-1.53 1.35V4.5h-.58V3.31A2.045 2.045 0 0 1 4 1.5Zm-.495 4.25H1.5v.5h2.005v-.5Zm-2.005 1h1.505v.5H1.5v-.5Z' fill='%23F0F0FA'/%3E%3C/svg%3E");
1422
1610
  line-height: 1.1;
1423
1611
  }
1424
1612
 
1425
- :where(.dark) .pill:where([data-type^="restricted"]) {
1613
+ :where(.dark) .bs-pill:where([data-variant^="restricted"]) {
1426
1614
  --pill-background: var(--bs-navy-300);
1427
1615
  --pill-text: var(--bs-white);
1428
1616
  }
1429
1617
 
1430
1618
  /* ------------------------------ Live Now Styles ------------------------------ */
1431
1619
 
1432
- .pill:where([data-type^="live"]) {
1620
+ .bs-pill:where([data-variant^="live"]) {
1433
1621
  --pill-background: var(--bs-royal-400);
1434
1622
  --pill-text: var(--bs-white);
1623
+ --pill-gap: var(--bs-space-1);
1435
1624
  text-transform: uppercase;
1436
1625
  }
1437
1626
 
1438
- .pill:where([data-type^="live"]):hover {
1627
+ .bs-pill:where([data-variant^="live"]):hover {
1439
1628
  --pill-border: transparent;
1440
1629
  }
1441
1630
 
1442
- .pill:where([data-type^="live"])::before {
1631
+ .bs-pill:where([data-variant^="live"])::before {
1443
1632
  background-color: var(--bs-red-400);
1444
1633
  border: 3px solid var(--bs-white);
1445
1634
  border-radius: 100%;
@@ -1450,18 +1639,18 @@ a.button {
1450
1639
 
1451
1640
  /* ----- Disabled Styles ----- */
1452
1641
 
1453
- .pill:is(:disabled, [aria-disabled="true"]) {
1642
+ .bs-pill:is(:disabled, [aria-disabled="true"]) {
1454
1643
  pointer-events: none;
1455
1644
  color: var(--bs-gray-400);
1456
1645
  background-color: var(--bs-gray-200);
1457
1646
  }
1458
1647
 
1459
- .pill:where([data-type^="filter"]):not([data-type*="active"]):is(:disabled, [aria-disabled="true"]) {
1648
+ .bs-pill:where([data-variant^="filter"]):not([data-active]):is(:disabled, [aria-disabled="true"]) {
1460
1649
  --pill-border: var(--bs-gray-400);
1461
1650
  }
1462
1651
 
1463
- :where(.profile-img),
1464
- :where(.profile-img[data-img-size^='sm']) {
1652
+ .profile-img,
1653
+ .profile-img:where([data-img-size^='sm']) {
1465
1654
  --profile-size: 2rem;
1466
1655
  --profile-text: var(--bs-text-sm);
1467
1656
 
@@ -1473,41 +1662,41 @@ a.button {
1473
1662
  width: var(--profile-size);
1474
1663
  }
1475
1664
 
1476
- :where(.profile-img img) {
1665
+ .profile-img :where(img) {
1477
1666
  height: 100%;
1478
1667
  -o-object-fit: cover;
1479
1668
  object-fit: cover;
1480
1669
  width: 100%;
1481
1670
  }
1482
1671
 
1483
- :where(.profile-img[data-no-img="true"]) img {
1672
+ .profile-img:where([data-no-img]) img {
1484
1673
  display: none;
1485
1674
  }
1486
1675
 
1487
- :where(.profile-img)::before,
1488
- :where(.profile-img)::after {
1676
+ .profile-img::before,
1677
+ .profile-img::after {
1489
1678
  border-radius: 50%;
1490
1679
  border-collapse: collapse;
1491
1680
  height: 100%;
1492
1681
  inset: 0;
1493
- position:absolute;
1682
+ position: absolute;
1494
1683
  width: 100%;
1495
1684
  }
1496
1685
 
1497
1686
  /* Shadow */
1498
1687
 
1499
- :where(.profile-img)::before {
1688
+ .profile-img::before {
1500
1689
  box-shadow: var(--bs-shadow-profilePhoto);
1501
1690
  content: '';
1502
1691
  }
1503
1692
 
1504
- :where(.profile-img[data-no-img="true"])::before {
1505
- display: none;
1693
+ .profile-img:where([data-no-img])::before {
1694
+ display: none;
1506
1695
  }
1507
1696
 
1508
1697
  /* Initials */
1509
1698
 
1510
- :where(.profile-img[data-no-img="true"])::after {
1699
+ .profile-img:where([data-no-img])::after {
1511
1700
  border: 1px solid currentColor;
1512
1701
  color: var(--bs-blue-500);
1513
1702
  content: attr(data-initials);
@@ -1519,26 +1708,41 @@ a.button {
1519
1708
 
1520
1709
  /* Profile Sizes */
1521
1710
 
1522
- :where([data-img-size^='xs']) {
1711
+ .profile-img:where([data-img-size^='xs']) {
1523
1712
  --profile-size: 1.5rem;
1524
1713
  --profile-text: var(--bs-text-xs);
1525
1714
  }
1526
1715
 
1527
- :where([data-img-size^='md']) {
1716
+ .profile-img:where([data-img-size^='md']) {
1528
1717
  --profile-size: 3rem;
1529
1718
  --profile-text: var(--bs-text-md);
1530
1719
  }
1531
1720
 
1532
- :where([data-img-size^='lg']) {
1721
+ .profile-img:where([data-img-size^='lg']) {
1533
1722
  --profile-size: 4rem;
1534
1723
  --profile-text: var(--bs-text-lg);
1535
1724
  }
1536
1725
 
1537
- :where([data-img-size^='xl']) {
1726
+ .profile-img:where([data-img-size^='xl']) {
1538
1727
  --profile-size: 5.75rem;
1539
1728
  --profile-text: var(--bs-text-xl);
1540
1729
  }
1541
1730
 
1731
+ :where(.profile-details) {
1732
+ color: var(--bs-ink-light);
1733
+ font-size: var(--bs-text-sm);
1734
+ }
1735
+
1736
+ :where(.profile-details > *) {
1737
+ display: block;
1738
+ }
1739
+
1740
+ :where(.profile-details > *:first-child) {
1741
+ --profile-name-color: var(--bs-ink-base);
1742
+
1743
+ color: var(--profile-name-color);
1744
+ }
1745
+
1542
1746
  /* Profile with User Details */
1543
1747
 
1544
1748
  :where(.profile[data-layout]),
@@ -1551,22 +1755,25 @@ a.button {
1551
1755
  -moz-column-gap: 1rem;
1552
1756
  column-gap: 1rem;
1553
1757
  grid-template-columns: auto 1fr;
1758
+ align-items: center;
1554
1759
  }
1555
1760
 
1556
- :where(.profile-content) {
1557
- color: var(--bs-ink-light);
1558
- font-size: var(--bs-text-xs);
1761
+ /* When wrapped in a link */
1762
+
1763
+ a.profile[data-layout] {
1764
+ text-decoration: none;
1559
1765
  }
1560
1766
 
1561
- :where(.profile[data-layout]:hover .profile-content > *:first-child) {
1562
- --profile-ink-hover: var(--bs-blue-500);
1767
+ a.profile[data-layout] .profile-details > *:first-child {
1768
+ --profile-name-color: var(--bs-blue-500);
1769
+ }
1563
1770
 
1564
- color: var(--profile-ink-hover);
1771
+ a.profile[data-layout]:hover .profile-details > *:first-child {
1565
1772
  text-decoration: underline;
1566
1773
  }
1567
1774
 
1568
- .dark :where(.profile[data-layout]:hover .profile-content > *:first-child) {
1569
- --profile-ink-hover: var(--bs-blue-200);
1775
+ .dark a.profile[data-layout] .profile-details > *:first-child {
1776
+ --profile-name-color: var(--bs-blue-200);
1570
1777
  }
1571
1778
 
1572
1779
  table {
@@ -1691,6 +1898,11 @@ table:where([data-sticky^="left"]) :is(td:first-child, th:first-child) {
1691
1898
  justify-content: flex-start;
1692
1899
  }
1693
1900
 
1901
+ :where(.cluster[data-variant^="brick"]) > * {
1902
+ align-self: stretch;
1903
+ flex-grow: 1;
1904
+ }
1905
+
1694
1906
  .cluster[data-gap="tight"] {
1695
1907
  gap: var(--cluster-space, var(--bs-space-2));
1696
1908
  }