@wwtdev/bsds-css 1.2.0 → 1.4.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
@@ -729,16 +729,16 @@ h6,
729
729
  .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
730
730
  transform: rotate(180deg);
731
731
  }
732
- .bs-accordion :where(header button) > :where(h2, h3, h4, h5) {
732
+ .bs-accordion :where(header button) > :where(span) {
733
733
  grid-area: main;
734
734
  margin-right: var(--bs-space-2);
735
735
  text-align: left;
736
736
  }
737
- .bs-accordion :where(header button) > :where(h2, h3, h4, h5) :where(*) {
737
+ .bs-accordion :where(header button) > :where(span) {
738
738
  vertical-align: middle;
739
739
  }
740
740
  @media (min-width: 957px) {
741
- .bs-accordion :where(header button) > :where(h2, h3, h4, h5) {
741
+ .bs-accordion :where(header button) > :where(span) {
742
742
  margin-right: var(--bs-space-3);
743
743
  }
744
744
  }
@@ -756,8 +756,7 @@ h6,
756
756
  }
757
757
  .bs-accordion :where(.bs-accordion-content[data-open]:not([data-open="false"])) {
758
758
  grid-template-rows: 1fr;
759
- -webkit-padding-after: var(--bs-space-f-2);
760
- padding-block-end: var(--bs-space-f-2);
759
+ padding-block-end: var(--bs-space-f-2);
761
760
  }
762
761
  /* Accordion Group */
763
762
  :where(.bs-accordion[data-stacked]) + .bs-accordion:where([data-stacked]) {
@@ -1044,6 +1043,172 @@ a.bs-button {
1044
1043
  outline: none;
1045
1044
  vertical-align: middle;
1046
1045
  }
1046
+ /* Positioning the parent */
1047
+ .bs-dropdown {
1048
+ display: inline-block;
1049
+ position: relative;
1050
+ }
1051
+ /* Option list */
1052
+ .bs-dropdown :where(ul) {
1053
+ background-color: var(--bs-white);
1054
+ border-radius: 4px;
1055
+ bottom: auto;
1056
+ box-shadow: var(--bs-shadow-contentMedium);
1057
+ line-height: 1.5rem;
1058
+ list-style: none;
1059
+ margin: 0;
1060
+ max-height: 0;
1061
+ max-width: 16.875rem;
1062
+ opacity: 0;
1063
+ overflow-y: auto;
1064
+ padding: 0;
1065
+ position: absolute;
1066
+ top: calc(100% + 0.5rem);
1067
+ transition-duration: 75ms;
1068
+ transition-property: opacity, max-height;
1069
+ transition-timing-function: ease-in-out;
1070
+ z-index: 999;
1071
+ }
1072
+ /* (not) data-variant="fit" */
1073
+ .bs-dropdown:not([data-variant="fit"]) :where(ul) {
1074
+ width: 16.875rem;
1075
+ }
1076
+ /* data-shown */
1077
+ .bs-dropdown:where([data-shown]) :where(ul) {
1078
+ max-height: 20rem;
1079
+ opacity: 1;
1080
+ padding-top: 0.75rem;
1081
+ }
1082
+ /* data-position="top" */
1083
+ .bs-dropdown:where([data-position="top"]) :where(ul) {
1084
+ bottom: calc(100% + 0.5rem);
1085
+ top: auto;
1086
+ }
1087
+ /* data-justify="center" */
1088
+ .bs-dropdown:where([data-justify="center"]) :where(ul) {
1089
+ left: 50%;
1090
+ transform: translateX(-50%);
1091
+ }
1092
+ /* Option list item */
1093
+ .bs-dropdown :where(ul li) {
1094
+ align-items: center;
1095
+ border-bottom: 2px solid transparent;
1096
+ border-left: 4px solid transparent;
1097
+ border-radius: 3px;
1098
+ border-right: 2px solid transparent;
1099
+ border-top: 2px solid transparent;
1100
+ color: var(--bs-ink-base);
1101
+ -moz-column-gap: 0.5rem;
1102
+ column-gap: 0.5rem;
1103
+ cursor: pointer;
1104
+ display: grid;
1105
+ margin-bottom: 0.5rem;
1106
+ padding-bottom: 0.25rem;
1107
+ padding-left: 0.5rem;
1108
+ padding-right: 0.75rem;
1109
+ padding-top: 0.25rem;
1110
+ row-gap: 0.125rem;
1111
+ }
1112
+ /* data-variant="search" (search input) */
1113
+ .bs-dropdown :where(ul li[data-variant~="search"]) {
1114
+ border-left: none;
1115
+ cursor: default;
1116
+ display: block;
1117
+ }
1118
+ /* data-variant="break" (list item) */
1119
+ .bs-dropdown :where(ul li[data-variant~="break"]) {
1120
+ border-left: none;
1121
+ cursor: default;
1122
+ display: block;
1123
+ padding: 0;
1124
+ }
1125
+ /* data-variant="break" (actual line break) */
1126
+ .bs-dropdown :where(ul li[data-variant~="break"] hr) {
1127
+ background: var(--bs-navy-200);
1128
+ }
1129
+ /* data-variant="2-col" */
1130
+ .bs-dropdown :where(ul li[data-variant~="2-col"]) {
1131
+ grid-template-columns: min-content 1fr;
1132
+ }
1133
+ /* data-variant="description" */
1134
+ /* Description will be the 2nd child in a 1-column item */
1135
+ .bs-dropdown :where(ul li:not([data-variant~="2-col"])[data-variant~="description"] :nth-child(2)) {
1136
+ color: var(--bs-ink-light);
1137
+ font-size: var(--bs-text-xs);
1138
+ height: 1.125rem;
1139
+ line-height: 1.125rem;
1140
+ }
1141
+ /* data-variant="2-col description" */
1142
+ /* Description will be the 3rd child in a 2-column item */
1143
+ .bs-dropdown :where(ul li[data-variant~="2-col"][data-variant~="description"] :nth-child(3)) {
1144
+ color: var(--bs-ink-light);
1145
+ font-size: var(--bs-text-xs);
1146
+ grid-column-start: 2;
1147
+ height: 1.125rem;
1148
+ line-height: 1.125rem;
1149
+ }
1150
+ /* List item hover or data-selected */
1151
+ .bs-dropdown :where(ul li:hover),
1152
+ .bs-dropdown :where(ul li[data-selected]) {
1153
+ background-color: var(--bs-bg-subtle);
1154
+ border-left: 4px solid var(--bs-blue-400);
1155
+ color: var(--bs-blue-400);
1156
+ outline: none;
1157
+ }
1158
+ /* data-variant="search" or data-variant="break" hover */
1159
+ .bs-dropdown :where(ul li[data-variant~="search"]:hover),
1160
+ .bs-dropdown :where(ul li[data-variant~="break"]:hover) {
1161
+ background-color: transparent;
1162
+ border-left: none;
1163
+ color: var(--bs-ink-base);
1164
+ }
1165
+ /* data-variant="negative" hover, data-selected, and both */
1166
+ .bs-dropdown :where(ul li[data-variant~="negative"]:hover),
1167
+ .bs-dropdown :where(ul li[data-variant~="negative"][data-selected]),
1168
+ .bs-dropdown :where(ul li[data-variant~="negative"][data-selected]:hover) {
1169
+ /* 25% alpha version of --bs-red-400 */
1170
+ background-color: rgba(248, 169, 170, 0.25);
1171
+ border-left: 4px solid var(--bs-red-500);
1172
+ color: var(--bs-red-500);
1173
+ }
1174
+ /* data-variant="description" or data-variant="2-col description" hover or data-selected */
1175
+ .bs-dropdown :where(ul li:not([data-variant~="2-col"])[data-variant~="description"]:hover :nth-child(2)),
1176
+ .bs-dropdown :where(ul li[data-variant~="2-col"][data-variant~="description"]:hover :nth-child(3)),
1177
+ .bs-dropdown :where(ul li:not([data-variant~="2-col"])[data-variant~="description"][data-selected] :nth-child(2)),
1178
+ .bs-dropdown :where(ul li[data-variant~="2-col"][data-variant~="description"][data-selected] :nth-child(3)) {
1179
+ color: var(--bs-blue-400);
1180
+ }
1181
+ /* data-variant="negative description" or data-variant="2-col negative description" hover or data-selected */
1182
+ .bs-dropdown :where(ul li[data-variant~="negative"]:not([data-variant~="2-col"])[data-variant~="description"]:hover :nth-child(2)),
1183
+ .bs-dropdown :where(ul li[data-variant~="negative"][data-variant~="2-col"][data-variant~="description"]:hover :nth-child(3)),
1184
+ .bs-dropdown :where(ul li[data-variant~="negative"]:not([data-variant~="2-col"])[data-variant~="description"][data-selected] :nth-child(2)),
1185
+ .bs-dropdown :where(ul li[data-variant~="negative"][data-variant~="2-col"][data-variant~="description"][data-selected] :nth-child(3)) {
1186
+ color: var(--bs-red-500);
1187
+ }
1188
+ /* List option mouse click focus (do not show) */
1189
+ .bs-dropdown :where(ul li:focus:not(:focus-visible)){
1190
+ outline: none;
1191
+ }
1192
+ /* data-variant="negative" list option mouse click focus (do not show) */
1193
+ li[data-variant~="negative"]:focus:not(:focus-visible) {
1194
+ outline: none;
1195
+ }
1196
+ /* List option keyboard navigation focus */
1197
+ .bs-dropdown :where(ul li:focus-visible) {
1198
+ --focus-border-color: var(--bs-blue-400);
1199
+ border: 2px solid var(--focus-border-color);
1200
+ outline: none;
1201
+ padding-left: 0.625rem;
1202
+ }
1203
+ /* Navigation focus on a selected element should preserve 4px left border */
1204
+ .bs-dropdown :where(ul li[data-selected]:focus-visible) {
1205
+ border-left: 4px solid var(--focus-border-color);
1206
+ padding-left: 0.5rem;
1207
+ }
1208
+ /* data-variant="negative" list option keyboard navigation focus */
1209
+ .bs-dropdown :where(ul li[data-variant~="negative"]:focus-visible) {
1210
+ --focus-border-color: var(--bs-red-200);
1211
+ }
1047
1212
  :where(label, legend) {
1048
1213
  --label-color: var(--bs-ink-base);
1049
1214
 
@@ -1060,6 +1225,7 @@ a.bs-button {
1060
1225
  :where(label[data-disabled], [data-disabled] [data-required], [data-disabled] label) {
1061
1226
  --label-color: var(--bs-ink-light);
1062
1227
  }
1228
+ /* Generally applicable (all input types) */
1063
1229
  :where([data-required]) {
1064
1230
  color: var(--bs-red-500);
1065
1231
  font-weight: var(--bs-font-bold, 600);
@@ -1067,6 +1233,27 @@ a.bs-button {
1067
1233
  :where([data-disabled], [data-disabled] [data-required]) {
1068
1234
  color: var(--bs-gray-400);
1069
1235
  }
1236
+ :where(.box) :is(input, textarea, select):where(:focus-visible) {
1237
+ --offset-color: var(--bs-bg-subtle);
1238
+ }
1239
+ :where(.box[data-invert]) :is(input, textarea, select):where(:focus-visible) {
1240
+ --offset-color: var(--bs-bg-invert);
1241
+ }
1242
+ /* Errors and Messages */
1243
+ :is(input, select, textarea):where([data-error]) {
1244
+ --input-border: var(--bs-red-500);
1245
+ }
1246
+ /* Fieldset */
1247
+ :where(fieldset) {
1248
+ border: none;
1249
+ margin-left: 0;
1250
+ margin-right: 0;
1251
+ padding: 0;
1252
+ }
1253
+ :where(fieldset legend) {
1254
+ margin-bottom: 0.25rem;
1255
+ padding: 0;
1256
+ }
1070
1257
  :where(label + input, label > input):where(:not([type='checkbox'], [type='radio'])),
1071
1258
  :where(label + textarea, label > textarea),
1072
1259
  :where(label + select, label > select) {
@@ -1078,8 +1265,11 @@ textarea, select {
1078
1265
  -moz-appearance: none;
1079
1266
  appearance: none;
1080
1267
  background-color: var(--input-bg, var(--bs-bg-base));
1081
- border: 1px solid var(--input-border, var(--bs-violet-300));
1268
+ border-color: var(--input-border, var(--bs-violet-300));
1082
1269
  border-radius: 0.25rem;
1270
+ border-style: solid;
1271
+ border-width: var(--input-border-width, 1px);
1272
+ caret-color: var(--bs-blue-400);
1083
1273
  color: var(--bs-ink-base);
1084
1274
  font-size: var(--bs-text-base);
1085
1275
  font-weight: 400;
@@ -1089,39 +1279,40 @@ textarea, select {
1089
1279
  padding-inline: 0.75rem;
1090
1280
  width: 100%;
1091
1281
  }
1282
+ input:where([type='text'], [type='email'], [type='url']),
1283
+ select {
1284
+ text-overflow: ellipsis;
1285
+ }
1092
1286
  textarea {
1093
1287
  height: auto;
1094
1288
  padding-block: 0.5rem;
1095
1289
  resize: vertical;
1096
1290
  }
1097
- /* Generally applicable (all input types) */
1098
1291
  :is(input, textarea, select)::-moz-placeholder {
1099
1292
  color: var(--bs-violet-200);
1100
- opacity: 1;
1101
1293
  }
1102
1294
  :is(input, textarea, select)::placeholder {
1103
1295
  color: var(--bs-violet-200);
1104
- opacity: 1;
1105
1296
  }
1106
- :is(input:where(:not([type='checkbox'], [type='radio']), textarea, select):where(:focus)) {
1107
- box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
1108
- 0 0 0 4px var(--outline-color, var(--bs-blue-400));
1109
- outline: 2px solid transparent;
1110
- }
1111
- :where(.box) :is(input, textarea, select):where(:focus) {
1112
- --offset-color: var(--bs-bg-subtle);
1297
+ :is(input, textarea, select):where(:focus-visible)::-moz-placeholder {
1298
+ opacity: 0;
1113
1299
  }
1114
- :where(.box[data-invert]) :is(input, textarea, select):where(:focus) {
1115
- --offset-color: var(--bs-bg-invert);
1300
+ :is(input, textarea, select):where(:focus-visible)::placeholder {
1301
+ opacity: 0;
1116
1302
  }
1117
- :is(input, textarea, select):where([data-error]) {
1118
- --outline-color: var(--bs-red-200);
1303
+ :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:focus-visible) {
1304
+ --input-border: var(--bs-blue-400);
1305
+ outline-width: 0px;
1119
1306
  }
1120
1307
  :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled) {
1308
+ --input-border: var(--bs-gray-400);
1121
1309
  background-color: var(--bs-gray-200);
1122
- border-color: var(--bs-gray-400);
1123
1310
  color: var(--bs-gray-400);
1124
1311
  }
1312
+ /* Errors and Messages */
1313
+ :is(input, select, textarea):where([data-error]) {
1314
+ --input-border: var(--bs-red-500);
1315
+ }
1125
1316
  /*
1126
1317
  Removes the built-in 'margin' on bottom of textarea
1127
1318
  see https://bugs.chromium.org/p/chromium/issues/detail?id=89530
@@ -1151,6 +1342,7 @@ select {
1151
1342
  background-position: right 0.75rem center;
1152
1343
  background-repeat: no-repeat;
1153
1344
  background-size: 1em 1em;
1345
+ padding-right: var(--bs-space-9);
1154
1346
  }
1155
1347
  .dark select {
1156
1348
  /* URL Encoded SVG dropdown caret so there is something there */
@@ -1160,20 +1352,181 @@ select {
1160
1352
  /* URL Encoded SVG dropdown caret so there is something there */
1161
1353
  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");
1162
1354
  }
1163
- /* Errors and Messages */
1164
- :is(input, select, textarea):where([data-error]) {
1355
+ .bs-input-addon {
1356
+ --input-border: var(--bs-violet-300);
1357
+ align-items: center;
1358
+ background-color: var(--input-bg, var(--bs-bg-base));
1359
+ border-radius: .25rem;
1360
+ color: var(--bs-ink-base);
1361
+ display: flex;
1362
+ height: 2.5rem;
1363
+ overflow: hidden;
1364
+ padding: 0;
1365
+ pointer-events: none;
1366
+ position: relative;
1367
+ width: 100%;
1368
+ }
1369
+ /**
1370
+ Implement an outer 'border' via pseudo-element instead of
1371
+ on main element to avoid content shifting, double-stroke effect,
1372
+ and issues with box-sizing
1373
+ */
1374
+ .bs-input-addon::after,
1375
+ .bs-input-addon::before,
1376
+ .bs-input-addon ::after,
1377
+ .bs-input-addon ::before {
1378
+ pointer-events: none;
1379
+ }
1380
+ .bs-input-addon::after,
1381
+ .bs-input-addon::before {
1382
+ content: '';
1383
+ height: 100%;
1384
+ left: 0;
1385
+ position: absolute;
1386
+ top: 0;
1387
+ width: 100%;
1388
+ }
1389
+ .bs-input-addon::after {
1390
+ border-radius: .25rem;
1391
+ border: 1px solid var(--input-border);
1392
+ }
1393
+ .bs-input-addon :where(.bs-input-addon)::after {
1394
+ border: 1px solid var(--input-addon-nested-border);
1395
+ }
1396
+ .bs-input-addon > * {
1397
+ flex-grow: 0;
1398
+ flex-shrink: 0;
1399
+ position: relative;
1400
+ }
1401
+ .bs-input-addon > :where([data-autowidth]:not([data-autowidth="false"]), .bs-input-addon, bs-input) {
1402
+ flex-grow: 1;
1403
+ flex-shrink: 1;
1404
+ }
1405
+ .bs-input-addon > :where([data-autowidth]:not([data-autowidth="false"])) > :where(input, select) {
1406
+ width: 100%;
1407
+ }
1408
+ .bs-input-addon > *:where(:not(.bs-input-addon)) {
1409
+ background-color: var(--input-bg, var(--bs-bg-base));
1410
+ border-width: 0px;
1411
+ display: flex;
1412
+ height: 100%;
1413
+ overflow: hidden;
1414
+ pointer-events: auto;
1415
+ }
1416
+ /* Remove (hide) children's borders, outlines */
1417
+ .bs-input-addon > *,
1418
+ .bs-input-addon :where(input, select),
1419
+ .bs-input-addon :is(bs-input, bs-select) :where(input, select),
1420
+ .bs-input-addon :where(.bs-input-addon) {
1421
+ --input-border: transparent;
1422
+ --input-border-width: 0px;
1423
+ }
1424
+ .bs-input-addon {
1425
+ --input-addon-nested-border: transparent;
1426
+ }
1427
+ .bs-input-addon :where(:focus-within) :where(input, select),
1428
+ .bs-input-addon :where(:focus-within) :is(bs-input, bs-select) :where(input, select),
1429
+ .bs-input-addon :where(input, select):where(:focus, :focus-within, :focus-visible),
1430
+ .bs-input-addon :is(bs-input, bs-select) :where(input, select):where(:focus, :focus-within, :focus-visible) {
1431
+ --input-border: transparent;
1432
+ box-shadow: none;
1433
+ outline: none;
1434
+ }
1435
+ /* -------- Inner-bordered styles -------- */
1436
+ /** Inner borders should be straight; shown only if variant: "inner-bordered" */
1437
+ .bs-input-addon:where([data-variant="inner-bordered"]),
1438
+ .bs-input-addon:where([data-variant="inner-bordered"]) :where(.bs-input-addon) {
1439
+ --input-addon-nested-border: var(--bs-violet-100);
1440
+ }
1441
+ .bs-input-addon > :where(.bs-input-addon:not(:last-child, :focus-within)),
1442
+ .bs-input-addon > :where(:not(:last-child, :focus-within))::after {
1443
+ border-top-right-radius: 0;
1444
+ border-bottom-right-radius: 0;
1445
+ }
1446
+ .bs-input-addon > :where(.bs-input-addon:not(:first-child, :focus-within)),
1447
+ .bs-input-addon > :where(:not(:first-child, :focus-within))::after {
1448
+ border-top-left-radius: 0;
1449
+ border-bottom-left-radius: 0;
1450
+ }
1451
+ .bs-input-addon:where([data-variant="inner-bordered"]) > :where(:not(:focus, :focus-within))::after {
1452
+ border-left-width: 0px;
1453
+ border-right-width: 1px;
1454
+ border-right-color: var(--input-addon-nested-border);
1455
+ }
1456
+ .bs-input-addon:where([data-variant="inner-bordered"]) > :where(:not(.bs-input-addon, :focus, :focus-within))::after {
1457
+ content: '';
1458
+ height: 100%;
1459
+ left: 0;
1460
+ position: absolute;
1461
+ top: 0;
1462
+ width: 100%;
1463
+ }
1464
+ .bs-input-addon:where([data-variant="inner-bordered"]) > :where(.bs-input-addon)::after {
1465
+ border-radius: 0px;
1466
+ }
1467
+ /* -------- Focus styles -------- */
1468
+ .bs-input-addon {
1469
+ --focus-border: var(--bs-blue-400);
1470
+ }
1471
+ .bs-input-addon:where(:not([data-multifocus]):focus-within),
1472
+ .bs-input-addon:where([data-multifocus]) :where(input, select):where(:focus, :focus-within, :focus-visible),
1473
+ .bs-input-addon:where([data-multifocus]) :is(bs-input, bs-select) :where(input, select):where(:focus, :focus-within, :focus-visible) {
1474
+ --input-border: var(--focus-border);
1475
+ position: relative;
1476
+ z-index: 1;
1477
+ }
1478
+ .bs-input-addon :where(.bs-input-addon:focus-within) {
1479
+ --input-addon-nested-border: var(--focus-border);
1480
+ z-index: 1;
1481
+ }
1482
+ .bs-input-addon :where(.bs-input-addon:focus-within)::after {
1483
+ z-index: 1;
1484
+ }
1485
+ .bs-input-addon:where([data-multifocus]) > :where(:not(.bs-input-addon)) > :where(input:focus, select:focus),
1486
+ .bs-input-addon:where([data-multifocus]) > :is(bs-input, bs-select) :where(input:focus, select:focus),
1487
+ .bs-input-addon:where([data-multifocus]) > :where(input:focus, select:focus) {
1488
+ border-radius: .25rem;
1489
+ box-shadow: var(--focus-border) 0px 0px 0px 1px inset;
1490
+ }
1491
+ .bs-input-addon:where(:not([data-multifocus]):focus-within)::after {
1492
+ border-width: 1px;
1493
+ border-radius: .25rem;
1494
+ }
1495
+ .bs-input-addon:where(:focus-within) :where(:not(:focus, :focus-within))::after,
1496
+ .bs-input-addon:where(:focus-within) :where(:not(:focus, :focus-within)) {
1497
+ border-color: transparent;
1498
+ }
1499
+ /* Straight-lined ::before border to fill the gap below the rounded ::after border */
1500
+ .bs-input-addon:where([data-multifocus]) :where(:focus-within)::before {
1501
+ border-bottom-width: 1px;
1502
+ border-color: var(--bs-violet-300);
1503
+ border-radius: 0;
1504
+ border-top-width: 1px;
1505
+ z-index: 1;
1506
+ }
1507
+ /* -------- Disabled styles -------- */
1508
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])),
1509
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) bs-button .bs-button {
1510
+ --input-bg: var(--bs-gray-200);
1511
+ --input-border: var(--bs-gray-400);
1512
+ color: var(--bs-gray-400);
1513
+ }
1514
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) * {
1515
+ pointer-events: none;
1516
+ }
1517
+ /* -------- Error styles -------- */
1518
+ .bs-input-addon:where([data-error]),
1519
+ .bs-input-addon:where([data-error]) :where(.bs-input-addon) {
1520
+ --focus-border: var(--bs-red-400);
1165
1521
  --input-border: var(--bs-red-400);
1166
1522
  }
1167
- /* Fieldset */
1168
- :where(fieldset) {
1169
- border: none;
1170
- margin-left: 0;
1171
- margin-right: 0;
1172
- padding: 0;
1523
+ .bs-input-addon:where([data-error],[data-disabled]) > *::before,
1524
+ .bs-input-addon:where(.bs-input-addon[data-error] .bs-input-addon, .bs-input-addon[data-disabled] .bs-input-addon) > *::before {
1525
+ border-color: var(--input-border);
1173
1526
  }
1174
- :where(fieldset legend) {
1175
- margin-bottom: 0.25rem;
1176
- padding: 0;
1527
+ /* -------- Label margin -------- */
1528
+ :where(label, .bs-label, bs-label) + .bs-input-addon {
1529
+ margin-top: 0.25rem;
1177
1530
  }
1178
1531
  .bs-field-details {
1179
1532
  display: flex;
@@ -1224,8 +1577,7 @@ select {
1224
1577
  }
1225
1578
  /* not using gap on .bs-boolean due to dead click zone */
1226
1579
  .bs-boolean label {
1227
- -webkit-padding-end: 0.5em;
1228
- padding-inline-end: 0.5em;
1580
+ padding-inline-end: 0.5em;
1229
1581
  }
1230
1582
  .bs-boolean input + label {
1231
1583
  padding-inline: 0.5em 0;
@@ -1245,6 +1597,7 @@ select {
1245
1597
  appearance: none;
1246
1598
  background-color: var(--bg-base);
1247
1599
  box-shadow: inset 0 0 0 0.125rem var(--box-shadow);
1600
+ cursor: pointer;
1248
1601
  display: grid;
1249
1602
  height: 1rem;
1250
1603
  margin: 0;
@@ -1347,6 +1700,7 @@ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='r
1347
1700
  input:where([type='checkbox'], [type='radio']):disabled {
1348
1701
  --box-shadow: var(--bs-gray-400);
1349
1702
  background-color: transparent;
1703
+ cursor: default;
1350
1704
  }
1351
1705
  input:where([type='checkbox']):checked:disabled::before,
1352
1706
  input:where([type='checkbox']):indeterminate:disabled::before {
@@ -1357,7 +1711,8 @@ input:where([type='radio']):checked:disabled::before {
1357
1711
  }
1358
1712
  /* Error state */
1359
1713
  input:where([type='checkbox'], [type='radio'])[data-error] {
1360
- --box-shadow: var(--bs-red-400);
1714
+ --box-shadow: var(--bs-red-500);
1715
+ --outline-color: var(--bs-red-200);
1361
1716
  }
1362
1717
  .bs-switch {
1363
1718
  --box-shadow: var(--bs-ink-base);
@@ -1476,11 +1831,13 @@ input:where([type='checkbox'], [type='radio'])[data-error] {
1476
1831
  cursor: default;
1477
1832
  }
1478
1833
  .bs-hint {
1834
+ min-width: 0;
1479
1835
  color: var(--bs-ink-light);
1480
1836
  font-size: var(--bs-text-xs);
1481
1837
  padding: 0;
1482
1838
  margin: 0;
1483
1839
  list-style: none;
1840
+ overflow-wrap: break-word;
1484
1841
  }
1485
1842
  .bs-hint:where([data-error]) {
1486
1843
  color: var(--bs-red-400);