bullframe.css 5.1.0 → 6.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.
Files changed (117) hide show
  1. package/CHANGELOG.md +63 -2
  2. package/LICENSE +1 -1
  3. package/README.md +81 -445
  4. package/dist/css/bullframe-classless-dark.css +1260 -892
  5. package/dist/css/bullframe-classless-dark.css.map +1 -1
  6. package/dist/css/bullframe-classless-dark.min.css +1 -3
  7. package/dist/css/bullframe-classless-dark.min.css.map +1 -1
  8. package/dist/css/bullframe-classless-system-default.css +1307 -908
  9. package/dist/css/bullframe-classless-system-default.css.map +1 -1
  10. package/dist/css/bullframe-classless-system-default.min.css +1 -3
  11. package/dist/css/bullframe-classless-system-default.min.css.map +1 -1
  12. package/dist/css/bullframe-classless.css +1083 -713
  13. package/dist/css/bullframe-classless.css.map +1 -1
  14. package/dist/css/bullframe-classless.min.css +1 -3
  15. package/dist/css/bullframe-classless.min.css.map +1 -1
  16. package/dist/css/bullframe-dark.css +2166 -1541
  17. package/dist/css/bullframe-dark.css.map +1 -1
  18. package/dist/css/bullframe-dark.min.css +1 -3
  19. package/dist/css/bullframe-dark.min.css.map +1 -1
  20. package/dist/css/bullframe-system-default.css +2083 -1438
  21. package/dist/css/bullframe-system-default.css.map +1 -1
  22. package/dist/css/bullframe-system-default.min.css +1 -3
  23. package/dist/css/bullframe-system-default.min.css.map +1 -1
  24. package/dist/css/bullframe-utilities.css +846 -503
  25. package/dist/css/bullframe-utilities.css.map +1 -1
  26. package/dist/css/bullframe-utilities.min.css +1 -2
  27. package/dist/css/bullframe-utilities.min.css.map +1 -1
  28. package/dist/css/bullframe.css +1963 -1328
  29. package/dist/css/bullframe.css.map +1 -1
  30. package/dist/css/bullframe.min.css +1 -3
  31. package/dist/css/bullframe.min.css.map +1 -1
  32. package/package.json +74 -28
  33. package/.browserslistrc +0 -3
  34. package/.editorconfig +0 -15
  35. package/.htmlhintrc +0 -12
  36. package/.prettierignore +0 -1
  37. package/.stylelintignore +0 -3
  38. package/.stylelintrc.json +0 -26
  39. package/dist/apple-touch-icon.png +0 -0
  40. package/dist/css/bullframe-classless-dark-prefers.css +0 -1280
  41. package/dist/css/bullframe-classless-dark-prefers.css.map +0 -1
  42. package/dist/css/bullframe-classless-dark-prefers.min.css +0 -3
  43. package/dist/css/bullframe-classless-dark-prefers.min.css.map +0 -1
  44. package/dist/css/bullframe-dark-prefers.css +0 -2296
  45. package/dist/css/bullframe-dark-prefers.css.map +0 -1
  46. package/dist/css/bullframe-dark-prefers.min.css +0 -3
  47. package/dist/css/bullframe-dark-prefers.min.css.map +0 -1
  48. package/dist/docs/demo/index.html +0 -1154
  49. package/dist/favicon-16x16.png +0 -0
  50. package/dist/favicon-32x32.png +0 -0
  51. package/dist/favicon.ico +0 -0
  52. package/dist/index.css +0 -1
  53. package/dist/index.js.map +0 -1
  54. package/dist/placeholder-img-800x400.jpg +0 -0
  55. package/dist/video-poster.png +0 -0
  56. package/prettier.config.js +0 -26
  57. package/src/scss/bullframe-classless-dark-prefers.scss +0 -2
  58. package/src/scss/bullframe-classless-dark.scss +0 -2
  59. package/src/scss/bullframe-classless-system-default.scss +0 -2
  60. package/src/scss/bullframe-classless.scss +0 -49
  61. package/src/scss/bullframe-dark-prefers.scss +0 -2
  62. package/src/scss/bullframe-dark.scss +0 -2
  63. package/src/scss/bullframe-system-default.scss +0 -2
  64. package/src/scss/bullframe-utilities.scss +0 -21
  65. package/src/scss/bullframe.scss +0 -49
  66. package/src/scss/custom/_author-styles.scss +0 -5
  67. package/src/scss/forms/_forms-normalization.scss +0 -300
  68. package/src/scss/forms/_forms-styling-radio-checkbox.scss +0 -81
  69. package/src/scss/forms/_forms-styling-range.scss +0 -106
  70. package/src/scss/forms/_forms-styling-select.scss +0 -58
  71. package/src/scss/forms/_forms-styling.scss +0 -118
  72. package/src/scss/miscellaneous/_misc-accessibility.scss +0 -36
  73. package/src/scss/miscellaneous/_misc-anchors.scss +0 -37
  74. package/src/scss/miscellaneous/_misc-embedded-content.scss +0 -117
  75. package/src/scss/miscellaneous/_misc-focus.scss +0 -80
  76. package/src/scss/miscellaneous/_misc-interactive.scss +0 -48
  77. package/src/scss/miscellaneous/_misc-layout.scss +0 -30
  78. package/src/scss/miscellaneous/_misc-lists.scss +0 -53
  79. package/src/scss/miscellaneous/_misc-scrolling.scss +0 -5
  80. package/src/scss/miscellaneous/_misc-shame.scss +0 -37
  81. package/src/scss/miscellaneous/_misc-tables.scss +0 -53
  82. package/src/scss/mixins/_mixin-dark-prefers.scss +0 -413
  83. package/src/scss/mixins/_mixin-dark.scss +0 -415
  84. package/src/scss/mixins/_mixin-grid-flex.scss +0 -80
  85. package/src/scss/mixins/_mixin-layout.scss +0 -42
  86. package/src/scss/mixins/_mixin-texts.scss +0 -37
  87. package/src/scss/typography/_typography-blockquotes.scss +0 -28
  88. package/src/scss/typography/_typography-headings.scss +0 -45
  89. package/src/scss/typography/_typography-html-body.scss +0 -75
  90. package/src/scss/typography/_typography-misc.scss +0 -90
  91. package/src/scss/typography/_typography-monospaced-elements.scss +0 -59
  92. package/src/scss/utilities/_utility-buttons.scss +0 -73
  93. package/src/scss/utilities/_utility-debugging.scss +0 -31
  94. package/src/scss/utilities/_utility-embeds.scss +0 -34
  95. package/src/scss/utilities/_utility-filters.scss +0 -21
  96. package/src/scss/utilities/_utility-form-states.scss +0 -89
  97. package/src/scss/utilities/_utility-global-dark-classless.scss +0 -3
  98. package/src/scss/utilities/_utility-global-dark-prefers-classless.scss +0 -3
  99. package/src/scss/utilities/_utility-global-dark-prefers.scss +0 -3
  100. package/src/scss/utilities/_utility-global-dark-scrollbars.scss +0 -34
  101. package/src/scss/utilities/_utility-global-dark.scss +0 -4
  102. package/src/scss/utilities/_utility-global-system-default-classless.scss +0 -3
  103. package/src/scss/utilities/_utility-global-system-default.scss +0 -3
  104. package/src/scss/utilities/_utility-grid-system.scss +0 -140
  105. package/src/scss/utilities/_utility-layout.scss +0 -187
  106. package/src/scss/utilities/_utility-lists.scss +0 -17
  107. package/src/scss/utilities/_utility-print.scss +0 -101
  108. package/src/scss/utilities/_utility-reduced-motion.scss +0 -29
  109. package/src/scss/utilities/_utility-spacing.scss +0 -148
  110. package/src/scss/utilities/_utility-tables.scss +0 -34
  111. package/src/scss/utilities/_utility-texts.scss +0 -225
  112. package/src/scss/utilities/_utility-z-index.scss +0 -83
  113. package/src/scss/variables/_variables-breakpoints.scss +0 -6
  114. package/src/scss/variables/_variables-colors.scss +0 -34
  115. package/src/scss/variables/_variables-spacing.scss +0 -24
  116. package/src/scss/variables/_variables-texts.scss +0 -8
  117. package/vite.config.js +0 -148
@@ -1,5 +1,85 @@
1
- /* ! Bullframe CSS v5.1.0 | MIT License | https://github.com/marcop135/bullframe.css */
2
- @charset "UTF-8";
1
+ /* ! Bullframe CSS v6.1.0 | MIT License | https://github.com/marcop135/bullframe.css */
2
+
3
+ /* Class-based default build (light). Import map for the full framework. */
4
+
5
+ /* Variables */
6
+ /* Design tokens (--bf-*). Shared by every build variant.
7
+ * Override on :root (or a scope) to theme without rebuilding. */
8
+
9
+ :root {
10
+ /* Neutrals */
11
+ --bf-white: rgb(255 255 255);
12
+ --bf-light: rgb(240 240 240);
13
+ --bf-gray-light-extra: rgb(233 233 233);
14
+ --bf-gray-light: rgb(204 204 204);
15
+ --bf-gray: rgb(153 153 153);
16
+ --bf-gray-dark: rgb(102 102 102);
17
+ --bf-gray-dark-extra: rgb(51 51 51);
18
+ --bf-dark: rgb(34 34 34);
19
+ --bf-dark-extra: rgb(17 17 17);
20
+ --bf-black: rgb(0 0 0);
21
+
22
+ /* Highlight / mark */
23
+ --bf-yellow-light: rgb(255 255 153);
24
+ --bf-yellow: rgb(255 255 0);
25
+ --bf-orange: rgb(255 165 0);
26
+
27
+ /* Accent: WCAG AA on white (links 4.5:1) and white-on-blue buttons (4.5:1) */
28
+ --bf-blue: rgb(0 86 179);
29
+ --bf-blue-light: rgb(0 65 135);
30
+ --bf-blue-light-extra: rgb(190 216 254);
31
+
32
+ /* Invalid / error */
33
+ --bf-red: rgb(255 0 0);
34
+
35
+ /* Focus ring (prefers-contrast: more raises colour for WCAG 1.4.11) */
36
+ --bf-focus-ring-color: var(--bf-orange);
37
+ --bf-focus-ring-width: 0.2rem;
38
+ --bf-focus-ring-offset: 0.3rem;
39
+
40
+ /* Dark-mode surfaces (used by utility-global-dark*.css) */
41
+ --bf-dark-bg: rgb(28 28 28);
42
+ --bf-dark-link: rgb(77 165 255);
43
+ --bf-dark-link-hover: rgb(77 165 255);
44
+ --bf-dark-border-focus: rgb(26 140 255);
45
+ --bf-dark-shadow-focus: rgb(3 102 214 / 50%);
46
+ --bf-dark-mark-bg: rgb(230 230 0);
47
+ --bf-dark-ins-bg: rgb(255 255 200);
48
+ --bf-dark-button-hover: rgb(184 184 184);
49
+ --bf-dark-button-shadow: rgb(255 255 255 / 45%);
50
+ --bf-dark-invalid: rgb(255 38 38);
51
+
52
+ /* Spacing scale + grid gutter */
53
+ --bf-spacing-sm: 0.25rem;
54
+ --bf-spacing-md: 0.5rem;
55
+ --bf-spacing-lg: 1rem;
56
+ --bf-spacing-xl: 2rem;
57
+ --bf-spacing-xxl: 3rem;
58
+ --bf-spacing-grid-gutter: 1.5rem;
59
+
60
+ /* Type */
61
+ --bf-font-sans-serif:
62
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,
63
+ 'Helvetica Neue', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
64
+ 'Segoe UI Symbol', 'Noto Color Emoji';
65
+ --bf-font-serif: Georgia, Times, 'Times New Roman', serif;
66
+ --bf-font-monospace:
67
+ SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
68
+ --bf-body-font-size-rem: 1.6rem;
69
+ --bf-body-line-height: 1.5;
70
+
71
+ /* Breakpoint tokens (documentation / tooling; media queries use literal px below) */
72
+ --bf-breakpoint-xs: 0;
73
+ --bf-breakpoint-sm: 576px;
74
+ --bf-breakpoint-md: 768px;
75
+ --bf-breakpoint-lg: 992px;
76
+ --bf-breakpoint-xl: 1200px;
77
+ --bf-breakpoint-xxl: 1400px;
78
+ }
79
+
80
+ /* Layout */
81
+ /* Border-box and HTML5 block elements. */
82
+
3
83
  *,
4
84
  *::before,
5
85
  *::after {
@@ -26,32 +106,211 @@ template {
26
106
  display: none;
27
107
  }
28
108
 
29
- [hidden] {
109
+ /* [hidden] stays hidden (except until-found). */
110
+ [hidden]:where(:not([hidden='until-found'])) {
30
111
  display: none !important;
31
112
  }
113
+ /* UA+ enhancements (adapted from https://fokus.dev/tools/uaplus/).
114
+ * Light UA improvements; complements Bullframe base styles. */
115
+
116
+ @layer {
117
+ /* Disable mobile landscape text inflation on optimized layouts. */
118
+ html {
119
+ -webkit-text-size-adjust: none;
120
+ -moz-text-size-adjust: none;
121
+ text-size-adjust: none;
122
+ }
123
+
124
+ /* Stable scrollbar gutter avoids layout jump on short pages. */
125
+ @supports (scrollbar-gutter: stable) {
126
+ html {
127
+ scrollbar-gutter: stable;
128
+ }
129
+ }
130
+
131
+ /* Nested h1 size/margin: match modern UA (Safari still nests sectioning styles). */
132
+ h1 {
133
+ font-size: 2em;
134
+ margin-block: 0.67em;
135
+ }
136
+
137
+ /* mark: system Highlight colors under forced-colors. */
138
+ @media (forced-colors: active) {
139
+ mark {
140
+ color: HighlightText;
141
+ background-color: Highlight;
142
+ }
143
+ }
144
+
145
+ /* Embedded media: stay within container block/inline size. */
146
+ audio,
147
+ iframe,
148
+ img,
149
+ svg,
150
+ video {
151
+ max-block-size: 100%;
152
+ max-inline-size: 100%;
153
+ }
154
+
155
+ /* fieldset: avoid min-content overflow from children. */
156
+ fieldset {
157
+ min-inline-size: 0;
158
+ }
159
+
160
+ /* Labels for text-like controls are block; :has() gated for older engines. */
161
+ @supports selector(:has(*)) {
162
+ label:has(+ input:not([type='radio'], [type='checkbox']), select, textarea) {
163
+ display: block;
164
+ }
165
+ }
166
+
167
+ /* Taller default textarea when rows is omitted. */
168
+ textarea:not([rows]) {
169
+ min-block-size: 6em;
170
+ }
171
+
172
+ /* Form controls inherit page font family/size. */
173
+ button,
174
+ input,
175
+ select,
176
+ textarea {
177
+ font-family: inherit;
178
+ font-size: inherit;
179
+ }
180
+
181
+ /* Search: drop WebKit rounded search chrome. */
182
+ [type='search'] {
183
+ -webkit-appearance: textfield;
184
+ }
185
+
186
+ /* iOS only: system border/background for search. */
187
+ @supports (-webkit-touch-callout: none) {
188
+ [type='search'] {
189
+ border: 1px solid -apple-system-secondary-label;
190
+ background-color: canvas;
191
+ }
192
+ }
193
+
194
+ /* Keep tel/url/email/number LTR when a value is present (RTL placeholders stay). */
195
+ input:where([type='tel'], [type='url'], [type='email'], [type='number']):not(
196
+ :-moz-placeholder
197
+ ) {
198
+ direction: ltr;
199
+ }
200
+ input:where([type='tel'], [type='url'], [type='email'], [type='number']):not(
201
+ :placeholder-shown
202
+ ) {
203
+ direction: ltr;
204
+ }
205
+
206
+ /* Tables: outer border. Cell borders and padding come from
207
+ * miscellaneous/tables.css, which is unlayered and therefore wins. */
208
+ table {
209
+ border: 1px solid currentColor;
210
+ }
211
+
212
+ /* Soft dialog / popover enter transitions (skip when reduced-motion is on). */
213
+ @media (prefers-reduced-motion: no-preference) {
214
+ dialog::backdrop {
215
+ background: rgb(0 0 0 / 0.3);
216
+ }
217
+
218
+ @supports (overlay: auto) {
219
+ dialog,
220
+ [popover],
221
+ dialog::backdrop {
222
+ opacity: 0;
223
+ transition:
224
+ opacity 300ms ease-out,
225
+ display 300ms allow-discrete,
226
+ overlay 300ms allow-discrete;
227
+ }
228
+
229
+ dialog[open],
230
+ :popover-open,
231
+ dialog[open]::backdrop {
232
+ opacity: 1;
233
+ }
234
+
235
+ @starting-style {
236
+ dialog[open],
237
+ :popover-open,
238
+ dialog[open]::backdrop {
239
+ opacity: 0;
240
+ }
241
+ }
242
+ }
243
+ }
244
+
245
+ /* Images as blocks (max-width still from embedded-content.css). */
246
+ img {
247
+ display: block;
248
+ }
249
+
250
+ /* Popovers: anchor near trigger when position-area is supported. */
251
+ @supports (position-area: block-end span-inline-end) {
252
+ [popover] {
253
+ margin: 0;
254
+ position-area: block-end span-inline-end;
255
+ }
256
+ }
257
+ }
258
+
259
+ /* Typography */
260
+ /* Root type and page chrome. */
32
261
 
33
262
  html {
34
263
  -webkit-text-size-adjust: 100%;
35
264
  -moz-text-size-adjust: 100%;
36
265
  text-size-adjust: 100%;
266
+
267
+ /* 62.5% root so 1rem ≈ 10px. */
37
268
  font-size: 62.5%;
38
- color: #222;
39
- font-family: sans-serif;
269
+
270
+ color: var(--bf-dark);
271
+ font-family: system-ui, sans-serif;
40
272
  line-height: 1.15;
41
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
273
+
274
+ /* No tap flash on touch. */
275
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
42
276
  }
43
277
 
44
278
  body {
45
279
  margin: 0;
46
- font-size: 1.6rem;
47
- line-height: 1.5;
280
+ font-size: var(--bf-body-font-size-rem);
281
+ line-height: var(--bf-body-line-height);
48
282
  font-weight: 400;
49
283
  text-align: left;
50
- font-family: BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
284
+
285
+ /* System UI stack (OS-native). */
286
+ font-family:
287
+ /* Safari / iOS (San Francisco) */
288
+ -apple-system,
289
+ /* Chrome < 56 on macOS (San Francisco) */ BlinkMacSystemFont,
290
+ /* Windows */ 'Segoe UI',
291
+ /* Android */ Roboto,
292
+ /* KDE */ Oxygen-Sans,
293
+ /* Ubuntu */ Ubuntu,
294
+ /* GNOME */ Cantarell,
295
+ /* macOS 10.10 and below */ 'Helvetica Neue',
296
+ Helvetica,
297
+ /* Web fallback */ Arial,
298
+ 'Noto Sans',
299
+ sans-serif,
300
+ /* Emoji */ 'Apple Color Emoji',
301
+ 'Segoe UI Emoji',
302
+ 'Segoe UI Symbol',
303
+ 'Noto Color Emoji';
304
+
305
+ /* Ligatures and kerning. */
51
306
  text-rendering: optimizeLegibility;
307
+
308
+ /* Long unbroken strings (e.g. headlines) wrap instead of overflowing. */
52
309
  word-wrap: break-word;
53
- background-color: #fff;
310
+
311
+ background-color: var(--bf-white);
54
312
  }
313
+ /* Heading scale and rhythm. */
55
314
 
56
315
  h1,
57
316
  h2,
@@ -64,7 +323,19 @@ h6 {
64
323
  font-family: inherit;
65
324
  color: inherit;
66
325
  line-height: 1.25;
67
- margin-bottom: 1rem;
326
+ margin-bottom: var(--bf-spacing-lg);
327
+ }
328
+
329
+ /* Balanced headings where supported; no-op elsewhere. */
330
+ @supports (text-wrap: balance) {
331
+ h1,
332
+ h2,
333
+ h3,
334
+ h4,
335
+ h5,
336
+ h6 {
337
+ text-wrap: balance;
338
+ }
68
339
  }
69
340
 
70
341
  h1 {
@@ -92,9 +363,10 @@ h6 {
92
363
  font-size: 16px;
93
364
  font-size: 1.6rem;
94
365
  }
366
+ /* Blockquote and citation. */
95
367
 
96
368
  blockquote {
97
- margin-bottom: 2rem;
369
+ margin: 0 0 var(--bf-spacing-xl);
98
370
  padding-left: 0;
99
371
  font-style: italic;
100
372
  }
@@ -104,56 +376,24 @@ blockquote p {
104
376
  }
105
377
 
106
378
  blockquote small {
107
- color: #999;
379
+ color: var(--bf-gray);
108
380
  display: block;
109
381
  }
110
382
 
111
383
  blockquote small::before {
112
- content: "— ";
384
+ content: '\2014 \00A0';
113
385
  }
114
386
 
115
387
  q {
116
- quotes: "“" "”" "‘" "’";
117
- }
118
-
119
- pre {
120
- margin: 0 0 2rem 0;
121
- display: block;
122
- overflow: auto;
123
- word-break: break-all;
124
- word-wrap: break-word;
125
- white-space: pre;
126
- -webkit-hyphens: none;
127
- hyphens: none;
128
- -ms-overflow-style: auto;
129
- }
130
-
131
- pre,
132
- code,
133
- kbd,
134
- samp {
135
- font-family: Menlo, Consolas, "Roboto Mono", "Ubuntu Monospace", "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
136
- font-size: 0.875em;
137
- }
138
-
139
- code {
140
- word-wrap: break-word;
141
- }
142
-
143
- a > code {
144
- color: inherit;
145
- }
146
-
147
- pre code {
148
- font-size: inherit;
149
- color: inherit;
150
- word-break: normal;
388
+ quotes: '\201C' '\201D' '\2018' '\2019';
151
389
  }
390
+ /* Paragraphs, abbr, mark/ins, emphasis, sub/sup, small, hr. */
152
391
 
153
392
  p {
154
- margin: 0 0 2rem 0;
393
+ margin: 0 0 var(--bf-spacing-xl) 0;
155
394
  }
156
395
 
396
+ /* abbr (Bootstrap 4): dotted underline + help cursor. */
157
397
  abbr[title],
158
398
  abbr[data-original-title] {
159
399
  cursor: help;
@@ -164,24 +404,25 @@ abbr[data-original-title] {
164
404
  }
165
405
 
166
406
  mark {
167
- background-color: #ff0;
168
- color: #000;
407
+ background-color: var(--bf-yellow);
408
+ color: var(--bf-black);
169
409
  }
170
410
 
171
411
  ins {
172
- background-color: #ff9;
173
- color: #000;
412
+ background-color: var(--bf-yellow-light);
413
+ color: var(--bf-black);
174
414
  text-decoration: none;
175
415
  }
176
416
 
417
+ /* Inherit first so Safari does not double-apply bolder, then set bolder. */
177
418
  b,
178
419
  strong {
179
420
  font-weight: inherit;
180
421
  }
181
422
 
423
+ /* stylelint-disable-next-line no-duplicate-selectors -- normalize.css Safari fix */
182
424
  b,
183
425
  strong {
184
- /* stylelint-disable-next-line */
185
426
  font-weight: bolder;
186
427
  }
187
428
 
@@ -211,8 +452,11 @@ small {
211
452
  font-size: 80%;
212
453
  }
213
454
 
214
- p:has(small) {
215
- line-height: 1.25;
455
+ /* Tighter leading when a paragraph contains <small>. */
456
+ @supports selector(:has(*)) {
457
+ p:has(small) {
458
+ line-height: 1.25;
459
+ }
216
460
  }
217
461
 
218
462
  hr {
@@ -222,500 +466,227 @@ hr {
222
466
  border-style: solid;
223
467
  border-width: 1px 0 0;
224
468
  color: inherit;
225
- margin: 2rem 0;
469
+ margin: var(--bf-spacing-xl) 0;
226
470
  padding: 0;
227
- overflow: visible;
471
+ overflow: visible; /* Edge: show overflow. */
228
472
  }
473
+ /* pre / code / kbd / samp. */
229
474
 
230
- a {
231
- color: #007bff;
232
- text-decoration: none;
233
- background-color: transparent;
475
+ pre {
476
+ margin: 0 0 var(--bf-spacing-xl) 0;
477
+
478
+ display: block;
479
+ overflow: auto;
480
+ word-break: break-all; /* WebKit */
481
+ word-wrap: break-word;
482
+ white-space: pre;
483
+ hyphens: none;
484
+
485
+ /* Keep scrollbars visible in legacy Edge.
486
+ * https://github.com/twbs/bootstrap/pull/30685 */
487
+ -ms-overflow-style: auto;
234
488
  }
235
- a:hover, a:focus {
236
- text-decoration: underline;
237
- color: #0056b3;
489
+
490
+ pre,
491
+ code,
492
+ kbd,
493
+ samp {
494
+ font-family:
495
+ /* macOS 10.10+ */
496
+ Menlo, Consolas, 'Roboto Mono', 'Ubuntu Monospace', 'Noto Mono', 'Oxygen Mono',
497
+ 'Liberation Mono', monospace, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
498
+ 'Noto Color Emoji';
499
+
500
+ /* Mono faces read large; use a slightly smaller size. */
501
+ font-size: 0.875em;
238
502
  }
239
503
 
240
- a:not([href], [tabindex]) {
241
- color: inherit;
242
- text-decoration: none;
504
+ code {
505
+ word-wrap: break-word;
243
506
  }
244
507
 
245
- a:not([href], [class]),
246
- a:not([href], [class]):hover {
508
+ a > code {
247
509
  color: inherit;
248
- text-decoration: none;
249
510
  }
250
511
 
251
- a:not([href], [tabindex]):focus {
252
- outline: 0;
512
+ pre code {
513
+ font-size: inherit;
514
+ color: inherit;
515
+ word-break: normal;
253
516
  }
254
517
 
255
- :where(:focus:not(:focus-visible)) {
256
- outline: none;
257
- }
518
+ /* Forms */
519
+ /* Form control reset: inheritance, sizing, and UA quirks. */
258
520
 
259
- :where([tabindex="-1"]:focus:not(:focus-visible)) {
260
- outline: 0 !important;
521
+ :where(html input, button, select, optgroup, textarea) {
522
+ color: inherit;
523
+ font-family: inherit;
524
+ font-size: inherit;
525
+ line-height: inherit;
261
526
  }
262
527
 
263
- :where(a:focus, input:focus) {
264
- outline: 2px solid orange;
265
- }
266
-
267
- :where(:focus-visible) {
268
- outline: 2px solid orange;
269
- }
270
-
271
- :where(button,
272
- [type=button],
273
- [type=reset],
274
- [type=submit],
275
- [type=email],
276
- [type=number],
277
- [type=password],
278
- [type=tel],
279
- [type=search],
280
- [type=text],
281
- [type=date],
282
- [type=datetime-local],
283
- [type=month],
284
- [type=time],
285
- [type=week],
286
- [type=url],
287
- [type=radio],
288
- [type=checkbox],
289
- input[list],
290
- select,
291
- textarea):focus {
292
- outline: 0;
528
+ :where(html input, button, [type='radio'], [type='checkbox'], select, optgroup, textarea) {
529
+ margin: 0;
293
530
  }
294
531
 
295
- menu,
296
- ol,
297
- ul,
298
- dl {
299
- margin: 0 0 2rem 0;
300
- padding: 0;
532
+ :where(html input, select, textarea, legend) {
533
+ width: 100%;
301
534
  }
302
535
 
303
- menu ul,
304
- menu ol,
305
- ul ul,
306
- ul ol,
307
- ol ol,
308
- ol ul,
309
- dd {
310
- margin-bottom: 0;
536
+ /* Shrink-to-content controls stay auto-width. */
537
+ :where(
538
+ html label,
539
+ button,
540
+ [type='image'],
541
+ [type='submit'],
542
+ [type='reset'],
543
+ html [type='button'],
544
+ [type='radio'],
545
+ [type='checkbox']
546
+ ) {
547
+ width: auto;
311
548
  }
312
549
 
313
- ul,
314
- ol {
315
- margin-left: 2rem;
550
+ /* inline-block: consistent sizing and vertical-align across engines. */
551
+ :where(
552
+ html input,
553
+ label,
554
+ select,
555
+ textarea,
556
+ button,
557
+ html [type='button'],
558
+ [type='reset'],
559
+ [type='submit'],
560
+ output
561
+ ) {
562
+ display: inline-block;
316
563
  }
317
564
 
318
- nav ol,
319
- nav ul {
320
- list-style: none;
321
- list-style-image: none;
322
- margin-left: 0;
565
+ :where([type='file']) {
566
+ display: block;
567
+ background-color: transparent;
323
568
  }
324
569
 
325
- dt {
326
- font-weight: 700;
570
+ :where(button, html input, select, textarea) {
571
+ background-image: none;
327
572
  }
328
573
 
329
- dd {
330
- margin-left: 0;
574
+ :where(input, select, textarea) {
575
+ vertical-align: baseline;
331
576
  }
332
577
 
333
- nav li::before {
334
- content: "​";
335
- position: absolute;
578
+ :where(form) {
579
+ margin: 0;
336
580
  }
337
581
 
338
- audio,
339
- canvas,
340
- progress,
341
- video {
342
- display: inline-block;
582
+ /* Drop fieldset min-content width so nested grids can shrink. */
583
+ :where(fieldset) {
584
+ border: 0;
585
+ padding: 0;
586
+ margin: 0;
587
+ min-width: 0;
343
588
  }
344
589
 
345
- img,
346
- canvas,
347
- audio,
348
- video,
349
- iframe,
350
- object,
351
- embed {
590
+ :where(legend) {
591
+ display: table; /* Text wrapping in Edge / IE. */
352
592
  max-width: 100%;
593
+ white-space: normal;
594
+ border: 0;
595
+ padding: 0;
596
+ font-weight: 400;
597
+ margin-bottom: var(--bf-spacing-md);
598
+ font-size: inherit;
599
+ line-height: 1.375;
600
+ color: inherit;
353
601
  }
354
602
 
355
- audio,
356
- video,
357
- canvas,
358
- img,
359
- svg {
360
- vertical-align: middle;
603
+ :where(label) {
604
+ font-weight: 400;
605
+ font-size: 90%;
606
+ line-height: 1.375;
607
+ margin-bottom: var(--bf-spacing-md);
361
608
  }
362
609
 
363
- img {
364
- height: auto;
365
- border-style: none;
610
+ :where(label input, label select, label textarea) {
611
+ font-size: 110%;
366
612
  }
367
613
 
368
- figure {
369
- margin: 0;
614
+ ::-webkit-inner-spin-button {
615
+ height: auto;
370
616
  }
371
617
 
372
- figure,
373
- figcaption {
374
- display: block;
618
+ ::-webkit-datetime-edit-fields-wrapper,
619
+ ::-webkit-datetime-edit-text,
620
+ ::-webkit-datetime-edit-minute,
621
+ ::-webkit-datetime-edit-hour-field,
622
+ ::-webkit-datetime-edit-day-field,
623
+ ::-webkit-datetime-edit-month-field,
624
+ ::-webkit-datetime-edit-year-field {
625
+ padding: 0;
375
626
  }
376
627
 
377
- figcaption {
378
- line-height: 1.375;
379
- font-size: 90%;
628
+ ::-webkit-color-swatch-wrapper {
629
+ padding: 0;
380
630
  }
381
631
 
382
- video {
383
- height: auto;
632
+ :where([type='search']) {
633
+ outline-offset: calc(-1 * var(--bf-spacing-sm));
384
634
  }
385
635
 
386
- audio {
387
- width: 100%;
636
+ :where(output) {
637
+ vertical-align: middle;
388
638
  }
389
639
 
390
- audio:not([controls]) {
391
- display: none;
392
- height: 0;
640
+ :where(button, select) {
641
+ text-transform: none;
393
642
  }
394
643
 
395
- svg:not(:root) {
396
- overflow: hidden;
644
+ :where(select) {
645
+ word-wrap: normal;
397
646
  }
398
647
 
399
- svg:not([fill]) {
400
- fill: currentColor;
648
+ /* Hide WebKit datalist picker chrome (Bootstrap Reboot 5.2).
649
+ * https://unpkg.com/browse/bootstrap@5.2.0/dist/css/bootstrap-reboot.css */
650
+ :where([list]):not(
651
+ [type='date'],
652
+ [type='datetime-local'],
653
+ [type='month'],
654
+ [type='week'],
655
+ [type='time']
656
+ )::-webkit-calendar-picker-indicator {
657
+ display: none !important;
401
658
  }
402
659
 
403
- progress,
404
- meter {
405
- display: inline-block;
406
- vertical-align: baseline;
407
- width: 100%;
408
- max-width: 100%;
660
+ :where(optgroup) {
661
+ font-family: inherit;
662
+ font-size: inherit;
663
+ font-style: inherit; /* Families without a 600 face. */
664
+ font-weight: 600;
409
665
  }
410
666
 
411
- progress[value] {
412
- -webkit-appearance: none;
413
- -moz-appearance: none;
414
- appearance: none;
415
- border: none;
416
- height: 20px;
417
- height: 2rem;
418
- background: #ccc;
419
- color: #007bff;
420
- }
421
-
422
- progress[value]::-webkit-progress-bar {
423
- background: #ccc;
424
- }
425
-
426
- progress[value]::-webkit-progress-value {
427
- background: #007bff;
428
- }
429
-
430
- iframe {
431
- border-style: none;
432
- }
433
-
434
- address {
435
- font-style: normal;
436
- margin-bottom: 10px;
437
- margin-bottom: 1rem;
438
- line-height: inherit;
439
- }
440
-
441
- details > summary:first-of-type {
442
- display: list-item;
443
- }
444
-
445
- summary {
446
- cursor: pointer;
447
- font-weight: 700;
448
- word-break: break-all;
449
- }
450
-
451
- dialog {
452
- background-color: #fff;
453
- color: #222;
454
- border: none;
455
- border-radius: 0.25rem;
456
- padding: 20px;
457
- padding: 2rem;
458
- height: -moz-fit-content;
459
- height: fit-content;
460
- min-width: 25rem;
461
- max-width: calc(100vw - 3rem);
462
- }
463
- @media (min-width: 768px) {
464
- dialog {
465
- max-width: 50rem;
466
- }
467
- }
468
-
469
- dialog[open] {
470
- display: block !important;
471
- }
472
-
473
- dialog::backdrop {
474
- background: rgba(0, 0, 0, 0.4);
475
- }
476
-
477
- @media (prefers-reduced-motion: no-preference) {
478
- :root {
479
- scroll-behavior: smooth;
480
- }
481
- }
482
- table {
483
- caption-side: bottom;
484
- max-width: 100%;
485
- border-collapse: collapse;
486
- border-color: currentcolor;
487
- text-indent: 0;
488
- }
489
-
490
- thead,
491
- tbody,
492
- tfoot,
493
- tr,
494
- td,
495
- th {
496
- border-color: inherit;
497
- border-style: solid;
498
- border-width: 0;
499
- }
500
-
501
- thead th {
502
- vertical-align: bottom;
503
- }
504
-
505
- th,
506
- td {
507
- vertical-align: top;
508
- }
509
-
510
- th {
511
- text-align: inherit;
512
- text-align: -webkit-match-parent;
513
- font-weight: 700;
514
- }
515
-
516
- caption {
517
- padding-top: 0.5rem;
518
- padding-bottom: 0.5rem;
519
- color: #999;
520
- text-align: left;
521
- caption-side: bottom;
522
- line-height: 1.375;
523
- font-size: 90%;
524
- }
525
-
526
- /* Accessibility
527
- * ========================================================================== */
528
- /**
529
- * Change the cursor on busy elements in all browsers (opinionated).
530
- */
531
- :where([aria-busy=true i]) {
532
- cursor: progress;
533
- }
534
-
535
- /*
536
- * Change the cursor on disabled, not-editable, or otherwise
537
- * inoperable elements in all browsers (opinionated).
538
- */
539
- :where([aria-disabled=true i], [disabled]) {
540
- cursor: not-allowed;
541
- }
542
-
543
- /*
544
- * Change the display on visually hidden accessible elements
545
- * in all browsers (opinionated).
546
- */
547
- :where([aria-hidden=false i][hidden]) {
548
- display: initial;
549
- }
550
-
551
- :where([aria-hidden=false i][hidden]:not(:focus)) {
552
- clip: rect(0, 0, 0, 0);
553
- position: absolute;
554
- }
555
-
556
- :where(html input, button, select, optgroup, textarea) {
557
- color: inherit;
558
- font-family: inherit;
559
- font-size: inherit;
560
- line-height: inherit;
561
- }
562
-
563
- :where(html input,
564
- button,
565
- [type=radio],
566
- [type=checkbox],
567
- select,
568
- optgroup,
569
- textarea) {
570
- margin: 0;
571
- }
572
-
573
- :where(html input, select, textarea, legend) {
574
- width: 100%;
575
- }
576
-
577
- :where(html label,
578
- button,
579
- [type=image],
580
- [type=submit],
581
- [type=reset],
582
- html [type=button],
583
- [type=radio],
584
- [type=checkbox]) {
585
- width: auto;
586
- }
587
-
588
- :where(html input,
589
- label,
590
- select,
591
- textarea,
592
- button,
593
- html [type=button],
594
- [type=reset],
595
- [type=submit],
596
- output) {
597
- display: inline-block;
598
- }
599
-
600
- :where([type=file]) {
601
- display: block;
602
- background-color: transparent;
603
- }
604
-
605
- :where(button, html input, select, textarea) {
606
- background-image: none;
607
- }
608
-
609
- :where(input, select, textarea) {
610
- vertical-align: baseline;
611
- }
612
-
613
- :where(form) {
614
- margin: 0;
615
- }
616
-
617
- :where(fieldset) {
618
- border: 0;
619
- padding: 0;
620
- margin: 0;
621
- min-width: 0;
622
- }
623
-
624
- :where(legend) {
625
- display: table;
626
- max-width: 100%;
627
- white-space: normal;
628
- border: 0;
629
- padding: 0;
630
- font-weight: 400;
631
- margin-bottom: 5px;
632
- margin-bottom: 0.5rem;
633
- font-size: inherit;
634
- line-height: 1.375;
635
- color: inherit;
636
- }
637
-
638
- :where(label) {
639
- font-weight: 400;
640
- font-size: 90%;
641
- line-height: 1.375;
642
- margin-bottom: 5px;
643
- margin-bottom: 0.5rem;
644
- }
645
-
646
- :where(label input, label select, label textarea) {
647
- font-size: 110%;
648
- }
649
-
650
- ::-webkit-inner-spin-button {
651
- height: auto;
652
- }
653
-
654
- ::-webkit-datetime-edit-fields-wrapper,
655
- ::-webkit-datetime-edit-text,
656
- ::-webkit-datetime-edit-minute,
657
- ::-webkit-datetime-edit-hour-field,
658
- ::-webkit-datetime-edit-day-field,
659
- ::-webkit-datetime-edit-month-field,
660
- ::-webkit-datetime-edit-year-field {
661
- padding: 0;
662
- }
663
-
664
- ::-webkit-color-swatch-wrapper {
665
- padding: 0;
666
- }
667
-
668
- :where([type=search]) {
669
- outline-offset: -0.25rem;
670
- }
671
-
672
- :where(output) {
673
- vertical-align: middle;
674
- }
675
-
676
- :where(button, select) {
677
- text-transform: none;
678
- }
679
-
680
- :where(select) {
681
- word-wrap: normal;
682
- }
683
-
684
- :where([list]):not([type=date],
685
- [type=datetime-local],
686
- [type=month],
687
- [type=week],
688
- [type=time])::-webkit-calendar-picker-indicator {
689
- display: none !important;
690
- }
691
-
692
- :where(optgroup) {
693
- font-family: inherit;
694
- font-size: inherit;
695
- font-style: inherit;
696
- font-weight: 600;
697
- }
698
-
699
- :where(button,
700
- html [type=button],
701
- [type=reset],
702
- [type=submit],
703
- [type=email],
704
- [type=number],
705
- [type=text],
706
- [type=tel],
707
- [type=date],
708
- [type=datetime-local],
709
- [type=month],
710
- [type=week],
711
- [type=url],
712
- [type=image],
713
- [type=password],
714
- [type=search],
715
- [type=search]::-webkit-search-decoration,
716
- [type=search]::-webkit-search-cancel-button,
717
- input[list],
718
- textarea) {
667
+ /* Reset WebKit / Blink appearance on text-like controls. */
668
+ :where(
669
+ button,
670
+ html [type='button'],
671
+ [type='reset'],
672
+ [type='submit'],
673
+ [type='email'],
674
+ [type='number'],
675
+ [type='text'],
676
+ [type='tel'],
677
+ [type='date'],
678
+ [type='datetime-local'],
679
+ [type='month'],
680
+ [type='week'],
681
+ [type='url'],
682
+ [type='image'],
683
+ [type='password'],
684
+ [type='search'],
685
+ [type='search']::-webkit-search-decoration,
686
+ [type='search']::-webkit-search-cancel-button,
687
+ input[list],
688
+ textarea
689
+ ) {
719
690
  -webkit-appearance: none;
720
691
  appearance: none;
721
692
  }
@@ -728,23 +699,23 @@ textarea) {
728
699
  }
729
700
 
730
701
  :where(button, input, select, textarea) {
731
- border-radius: 0.25rem;
702
+ border-radius: var(--bf-spacing-sm);
732
703
  }
733
704
 
734
- :where([type=radio]) {
705
+ :where([type='radio']) {
735
706
  border-radius: 50%;
736
707
  }
737
708
 
738
- :where([type=checkbox]) {
739
- border-radius: 0.5rem;
709
+ :where([type='checkbox']) {
710
+ border-radius: var(--bf-spacing-md);
740
711
  }
741
712
 
742
- :where([type=radio], [type=checkbox]) {
713
+ :where([type='radio'], [type='checkbox']) {
743
714
  padding: 0;
744
- background-color: #fff;
715
+ background-color: var(--bf-white);
745
716
  }
746
717
 
747
- :where([type=range i]) {
718
+ :where([type='range' i]) {
748
719
  background-color: transparent;
749
720
  }
750
721
 
@@ -765,161 +736,194 @@ textarea) {
765
736
  resize: vertical;
766
737
  }
767
738
 
739
+ /* Firefox: strip inner focus padding/border. */
768
740
  ::-moz-focus-inner {
769
741
  padding: 0;
770
742
  border-style: none;
771
743
  }
772
744
 
773
- :where(button, [type=button], [type=reset], [type=submit]) {
745
+ :where(button, [type='button'], [type='reset'], [type='submit']) {
774
746
  line-height: normal;
775
747
  text-align: center;
776
748
  margin: 0;
777
749
  background-clip: padding-box;
778
750
  vertical-align: baseline;
779
751
  overflow: visible;
780
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
752
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
781
753
  -webkit-user-select: none;
782
754
  -moz-user-select: none;
783
755
  user-select: none;
784
756
  border: 0;
785
- background-image: none;
757
+ background-image: none; /* Firefox mobile */
786
758
  }
787
- :where(button, [type=button], [type=reset], [type=submit]):hover, :where(button, [type=button], [type=reset], [type=submit]):active, :where(button, [type=button], [type=reset], [type=submit]):focus {
759
+
760
+ :where(button, [type='button'], [type='reset'], [type='submit']):hover,
761
+ :where(button, [type='button'], [type='reset'], [type='submit']):active,
762
+ :where(button, [type='button'], [type='reset'], [type='submit']):focus {
788
763
  text-decoration: none;
789
- color: #222;
764
+ color: var(--bf-dark);
790
765
  }
791
766
 
792
- :where(button:not(:disabled),
793
- [type=button]:not(:disabled),
794
- [type=reset]:not(:disabled),
795
- [type=submit]:not(:disabled)) {
767
+ :where(
768
+ button:not(:disabled),
769
+ [type='button']:not(:disabled),
770
+ [type='reset']:not(:disabled),
771
+ [type='submit']:not(:disabled)
772
+ ) {
796
773
  cursor: pointer;
797
774
  }
798
775
 
776
+ /* Firefox: input color must not override placeholder color.
777
+ * https://github.com/necolas/normalize.css/issues/150 */
799
778
  :where(input::-moz-placeholder, textarea::-moz-placeholder) {
800
- color: #666;
779
+ color: var(--bf-gray-dark);
801
780
  }
802
-
803
781
  :where(input::placeholder, textarea::placeholder) {
804
- color: #666;
782
+ color: var(--bf-gray-dark);
805
783
  }
806
784
 
807
- /*
808
- Use the modern Firefox focus style for all focusable elements.
809
- */
785
+ /* Firefox: modern focus ring on all focusable elements. */
810
786
  :-moz-focusring {
811
787
  outline: auto;
812
788
  }
813
789
 
790
+ /* Firefox: drop :-moz-ui-invalid glow; use .bf-invalid for JS validation.
791
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-ui-invalid */
814
792
  :-moz-ui-invalid {
815
793
  box-shadow: none;
816
794
  }
817
-
818
- :where([type=email],
819
- [type=number],
820
- [type=password],
821
- [type=tel],
822
- [type=search],
823
- [type=text],
824
- [type=date],
825
- [type=datetime-local],
826
- [type=month],
827
- [type=week],
828
- [type=time],
829
- [type=url],
830
- input[list],
831
- select,
832
- textarea) {
833
- background-color: #fff;
834
- border: 1px solid #999;
835
- padding: 0.5rem 0.75rem;
836
- }
837
-
838
- :where([type=email],
839
- [type=number],
840
- [type=password],
841
- [type=tel],
842
- [type=search],
843
- [type=text],
844
- [type=date],
845
- [type=datetime-local],
846
- [type=month],
847
- [type=week],
848
- [type=time],
849
- [type=url],
850
- input[list],
851
- select,
852
- textarea,
853
- [type=radio],
854
- [type=checkbox]):active, :where([type=email],
855
- [type=number],
856
- [type=password],
857
- [type=tel],
858
- [type=search],
859
- [type=text],
860
- [type=date],
861
- [type=datetime-local],
862
- [type=month],
863
- [type=week],
864
- [type=time],
865
- [type=url],
866
- input[list],
867
- select,
868
- textarea,
869
- [type=radio],
870
- [type=checkbox]):focus {
871
- transition: border 0.2s, background-color 0.2s, box-shadow 0.2s;
872
- border-color: #007bff;
873
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.25);
874
- }
875
-
876
- :where(button, [type=button], [type=reset], [type=submit]) {
877
- color: #222;
878
- padding: 0.6666666667rem 1.3333333333rem;
879
- background: #ccc;
880
- transition: color 0.2s, background 0.2s, box-shadow 0.2s;
881
- }
882
- :where(button, [type=button], [type=reset], [type=submit]):hover, :where(button, [type=button], [type=reset], [type=submit]):active, :where(button, [type=button], [type=reset], [type=submit]):focus {
795
+ /* Form field and button chrome (borders, focus, disabled). */
796
+
797
+ :where(
798
+ [type='email'],
799
+ [type='number'],
800
+ [type='password'],
801
+ [type='tel'],
802
+ [type='search'],
803
+ [type='text'],
804
+ [type='date'],
805
+ [type='datetime-local'],
806
+ [type='month'],
807
+ [type='week'],
808
+ [type='time'],
809
+ [type='url'],
810
+ input[list],
811
+ select,
812
+ textarea
813
+ ) {
814
+ background-color: var(--bf-white);
815
+ border: 1px solid var(--bf-gray);
816
+ padding: var(--bf-spacing-md) calc(var(--bf-spacing-lg) * 0.75);
817
+ }
818
+
819
+ :where(
820
+ [type='email'],
821
+ [type='number'],
822
+ [type='password'],
823
+ [type='tel'],
824
+ [type='search'],
825
+ [type='text'],
826
+ [type='date'],
827
+ [type='datetime-local'],
828
+ [type='month'],
829
+ [type='week'],
830
+ [type='time'],
831
+ [type='url'],
832
+ input[list],
833
+ select,
834
+ textarea,
835
+ [type='radio'],
836
+ [type='checkbox']
837
+ ):active,
838
+ :where(
839
+ [type='email'],
840
+ [type='number'],
841
+ [type='password'],
842
+ [type='tel'],
843
+ [type='search'],
844
+ [type='text'],
845
+ [type='date'],
846
+ [type='datetime-local'],
847
+ [type='month'],
848
+ [type='week'],
849
+ [type='time'],
850
+ [type='url'],
851
+ input[list],
852
+ select,
853
+ textarea,
854
+ [type='radio'],
855
+ [type='checkbox']
856
+ ):focus {
857
+ transition:
858
+ border 0.2s,
859
+ background-color 0.2s,
860
+ box-shadow 0.2s;
861
+ border-color: var(--bf-blue);
862
+ box-shadow: 0 0 0 3px rgb(0 86 179 / 25%);
863
+ }
864
+
865
+ :where(button, [type='button'], [type='reset'], [type='submit']) {
866
+ color: var(--bf-dark);
867
+ padding: calc(var(--bf-spacing-xl) / 3) calc(calc(var(--bf-spacing-xl) / 3) * 2);
868
+ background: var(--bf-gray-light);
869
+ transition:
870
+ color 0.2s,
871
+ background 0.2s,
872
+ box-shadow 0.2s;
873
+ }
874
+
875
+ :where(button, [type='button'], [type='reset'], [type='submit']):hover,
876
+ :where(button, [type='button'], [type='reset'], [type='submit']):active,
877
+ :where(button, [type='button'], [type='reset'], [type='submit']):focus:not(.bf-disabled):not(
878
+ [aria-disabled='true']
879
+ ) {
883
880
  text-decoration: none;
884
- color: #222;
885
- background: rgb(178.5, 178.5, 178.5);
886
- }
887
- :where(button, [type=button], [type=reset], [type=submit]):active, :where(button, [type=button], [type=reset], [type=submit]):focus {
888
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
889
- }
890
-
891
- :where(fieldset[disabled] button,
892
- fieldset[disabled] input,
893
- fieldset[disabled] input::after,
894
- fieldset[disabled] input::before,
895
- fieldset[disabled] input:checked,
896
- fieldset[disabled] select,
897
- fieldset[disabled] textarea,
898
- fieldset[disabled] label,
899
- button[disabled],
900
- input[disabled],
901
- input[disabled]::after,
902
- input[disabled]::before,
903
- input[disabled]:checked,
904
- select[disabled],
905
- textarea[disabled],
906
- label[disabled],
907
- button:disabled,
908
- input:disabled,
909
- input:disabled::after,
910
- input:disabled::before,
911
- input:disabled:checked,
912
- select:disabled,
913
- textarea:disabled,
914
- label:disabled,
915
- button[aria-disabled=true],
916
- input[aria-disabled=true],
917
- input[aria-disabled=true]::after,
918
- input[aria-disabled=true]::before,
919
- input[aria-disabled=true]:checked,
920
- select[aria-disabled=true],
921
- textarea[aria-disabled=true],
922
- label[aria-disabled=true]) {
881
+ color: var(--bf-dark);
882
+ background: rgb(184 184 184); /* --bf-gray-light, ~10% darker */
883
+ }
884
+
885
+ :where(button, [type='button'], [type='reset'], [type='submit']):active,
886
+ :where(button, [type='button'], [type='reset'], [type='submit']):focus:not(.bf-disabled):not(
887
+ [aria-disabled='true']
888
+ ) {
889
+ box-shadow: 0 0 0 3px rgb(0 0 0 / 15%);
890
+ }
891
+
892
+ /* Disabled / aria-disabled / fieldset[disabled]. */
893
+ :where(
894
+ fieldset[disabled] button,
895
+ fieldset[disabled] input,
896
+ fieldset[disabled] input::after,
897
+ fieldset[disabled] input::before,
898
+ fieldset[disabled] input:checked,
899
+ fieldset[disabled] select,
900
+ fieldset[disabled] textarea,
901
+ fieldset[disabled] label,
902
+ button[disabled],
903
+ input[disabled],
904
+ input[disabled]::after,
905
+ input[disabled]::before,
906
+ input[disabled]:checked,
907
+ select[disabled],
908
+ textarea[disabled],
909
+ label[disabled],
910
+ button:disabled,
911
+ input:disabled,
912
+ input:disabled::after,
913
+ input:disabled::before,
914
+ input:disabled:checked,
915
+ select:disabled,
916
+ textarea:disabled,
917
+ label:disabled,
918
+ button[aria-disabled='true'],
919
+ input[aria-disabled='true'],
920
+ input[aria-disabled='true']::after,
921
+ input[aria-disabled='true']::before,
922
+ input[aria-disabled='true']:checked,
923
+ select[aria-disabled='true'],
924
+ textarea[aria-disabled='true'],
925
+ label[aria-disabled='true']
926
+ ) {
923
927
  cursor: default !important;
924
928
  cursor: not-allowed !important;
925
929
  pointer-events: none !important;
@@ -927,574 +931,1178 @@ label[aria-disabled=true]) {
927
931
  -moz-user-select: none !important;
928
932
  user-select: none !important;
929
933
  box-shadow: none !important;
934
+ outline: none !important;
930
935
  opacity: 0.5 !important;
931
936
  }
937
+ /* Select: custom arrow for single-value controls.
938
+ * Skip [size] / [multiple] (native UI differs by engine). Inspired by water.css. */
932
939
 
933
940
  :where(select):not([size], select[multiple]) {
934
941
  -webkit-appearance: none;
935
942
  -moz-appearance: none;
936
943
  appearance: none;
937
- background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.85rem center/8px 10px;
938
- padding-right: 2rem;
939
- }
940
-
941
- :where(select)::-ms-expand {
942
- display: none;
944
+ background: var(--bf-white)
945
+ url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e")
946
+ no-repeat right 0.85rem center/8px 10px;
947
+ padding-right: calc(var(--bf-spacing-lg) + var(--bf-spacing-lg));
943
948
  }
944
949
 
945
- :where(*[dir=rtl]) :where(select):not([size], select[multiple]),
946
- :where(select[dir=rtl]):not([size], select[multiple]) {
950
+ /* RTL: mirror arrow after appearance:none removes the native control. */
951
+ :where(*[dir='rtl']) :where(select):not([size], select[multiple]),
952
+ :where(select[dir='rtl']):not([size], select[multiple]) {
947
953
  background-position: left 0.85rem top 50%;
948
- padding-right: 0.75rem;
949
- padding-left: 2rem;
950
- }
954
+ padding-right: calc(var(--bf-spacing-lg) * 0.75);
955
+ padding-left: calc(var(--bf-spacing-lg) + var(--bf-spacing-lg));
956
+ }
957
+ /* Range: custom thumb/track when appearance:none is supported.
958
+ * CodePen: https://codepen.io/marcop135/pen/JjGrNMx */
959
+
960
+ @supports ((-webkit-appearance: none) or (-moz-appearance: none) or (appearance: none)) {
961
+ :where([type='range']) {
962
+ -webkit-appearance: none;
963
+ -moz-appearance: none;
964
+ appearance: none;
965
+ width: 100%;
966
+ height: 1.4rem;
967
+ }
951
968
 
952
- :where([type=checkbox], [type=radio]) {
953
- -webkit-appearance: none;
954
- -moz-appearance: none;
955
- appearance: none;
956
- height: 1.8rem;
957
- width: 1.8rem;
958
- vertical-align: top;
959
- position: relative;
960
- border: 1px solid/#999;
961
- }
962
- :where([type=checkbox], [type=radio]) + label {
963
- line-height: 1.8rem;
964
- vertical-align: top;
965
- margin-left: 5px;
966
- margin-left: 0.5rem;
967
- }
968
- *[dir=rtl] :where([type=checkbox], [type=radio]) + label, :where([type=checkbox], [type=radio])[dir=rtl] + label {
969
- margin-left: 0;
970
- margin-right: 5px;
971
- margin-right: 0.5rem;
972
- }
973
- :where([type=checkbox], [type=radio])::after {
974
- content: "";
975
- display: block;
976
- position: absolute;
977
- }
978
- :where([type=checkbox], [type=radio]):checked {
979
- background-color: #007bff;
980
- border-color: #000;
981
- }
969
+ :where([type='range'])::-webkit-slider-thumb {
970
+ border: 0;
971
+ -webkit-appearance: none;
972
+ appearance: none;
973
+
974
+ width: 1.5rem;
975
+ height: 1.5rem;
976
+ margin-top: -0.25rem;
977
+ background-color: var(--bf-blue);
978
+ border-radius: 1.5rem;
979
+ -webkit-transition:
980
+ background-color 0.15s ease-in-out,
981
+ border-color 0.15s ease-in-out,
982
+ box-shadow 0.15s ease-in-out;
983
+ transition:
984
+ background-color 0.15s ease-in-out,
985
+ border-color 0.15s ease-in-out,
986
+ box-shadow 0.15s ease-in-out;
987
+ }
982
988
 
983
- :where([type=radio])::after {
984
- width: 1.8rem;
985
- height: 1.8rem;
986
- left: -0.05rem;
987
- top: -0.05rem;
988
- border-radius: 50%;
989
- background: #fff;
990
- transform: scale(0.35);
991
- }
989
+ :where([type='range'])::-webkit-slider-thumb:active {
990
+ background-color: var(--bf-blue);
991
+ }
992
992
 
993
- :where([type=checkbox])::after {
994
- width: 0.6rem;
995
- height: 0.8rem;
996
- border: 2px solid/#fff;
997
- border-top: 0;
998
- border-left: 0;
999
- left: 35%;
1000
- top: 20%;
1001
- transform: rotate(43deg);
1002
- }
993
+ :where([type='range'])::-moz-range-thumb {
994
+ border: 0;
995
+ -moz-appearance: none;
996
+ appearance: none;
997
+
998
+ width: 1.5rem;
999
+ height: 1.5rem;
1000
+ background-color: var(--bf-blue);
1001
+ border-radius: 1.5rem;
1002
+ -moz-transition:
1003
+ background-color 0.15s ease-in-out,
1004
+ border-color 0.15s ease-in-out,
1005
+ box-shadow 0.15s ease-in-out;
1006
+ transition:
1007
+ background-color 0.15s ease-in-out,
1008
+ border-color 0.15s ease-in-out,
1009
+ box-shadow 0.15s ease-in-out;
1010
+ }
1003
1011
 
1004
- :where([type=range]) {
1005
- -webkit-appearance: none;
1006
- -moz-appearance: none;
1007
- appearance: none;
1012
+ :where([type='range'])::-moz-range-thumb:active {
1013
+ background-color: var(--bf-blue);
1014
+ }
1015
+
1016
+ :where([type='range'])::-webkit-slider-runnable-track {
1017
+ color: transparent;
1018
+ border-color: transparent;
1019
+
1020
+ width: 100%;
1021
+ height: 0.65rem;
1022
+ cursor: pointer;
1023
+ background-color: var(--bf-gray-light-extra);
1024
+ }
1025
+
1026
+ :where([type='range'])::-moz-range-track {
1027
+ color: transparent;
1028
+ border-color: transparent;
1029
+
1030
+ width: 100%;
1031
+ height: 0.65rem;
1032
+ cursor: pointer;
1033
+ background-color: var(--bf-gray-light-extra);
1034
+ }
1035
+
1036
+ :where([type='range']):focus {
1037
+ outline: none;
1038
+ }
1039
+
1040
+ :where([type='range']):focus::-webkit-slider-thumb {
1041
+ box-shadow:
1042
+ 0 0 0 0.1rem var(--bf-white),
1043
+ 0 0 0 0.2rem rgb(0 123 255 / 25%);
1044
+ }
1045
+
1046
+ :where([type='range']):focus::-moz-range-thumb {
1047
+ box-shadow:
1048
+ 0 0 0 0.1rem var(--bf-white),
1049
+ 0 0 0 0.2rem rgb(0 123 255 / 25%);
1050
+ }
1051
+
1052
+ :where([type='range'])::-moz-focus-outer {
1053
+ border: 0;
1054
+ }
1055
+
1056
+ :where([type='range']):disabled {
1057
+ pointer-events: none;
1058
+ }
1059
+
1060
+ :where([type='range']):disabled::-webkit-slider-thumb {
1061
+ background-color: var(--bf-gray-light);
1062
+ }
1063
+
1064
+ :where([type='range']):disabled::-moz-range-thumb {
1065
+ background-color: var(--bf-gray-light);
1066
+ }
1067
+ }
1068
+
1069
+ /* Miscellaneous */
1070
+ /* Link defaults. --bf-blue meets WCAG AA 4.5:1 on white. */
1071
+
1072
+ a {
1073
+ color: var(--bf-blue);
1074
+ text-decoration: none;
1075
+ background-color: transparent; /* Legacy Edge active background. */
1076
+ }
1077
+
1078
+ a:hover,
1079
+ a:focus {
1080
+ text-decoration: underline;
1081
+ color: var(--bf-blue-light);
1082
+ }
1083
+
1084
+ /* Non-href anchors inherit text (Bootstrap reboot pattern). */
1085
+ a:not([href], [tabindex]) {
1086
+ color: inherit;
1087
+ text-decoration: none;
1088
+ }
1089
+
1090
+ a:not([href], [class]),
1091
+ a:not([href], [class]):hover {
1092
+ color: inherit;
1093
+ text-decoration: none;
1094
+ }
1095
+
1096
+ a:not([href], [tabindex]):focus {
1097
+ outline: 0;
1098
+ }
1099
+ /* Keyboard-first focus: :focus-visible ring from --bf-focus-ring-*; mute mouse outline.
1100
+ * Text-like controls clear UA outline here; field chrome is in forms/styling.css. */
1101
+
1102
+ :where(:focus:not(:focus-visible)) {
1103
+ outline: none;
1104
+ }
1105
+
1106
+ /* tabindex="-1" targets should not show a ring on programmatic focus. */
1107
+ :where([tabindex='-1']:focus:not(:focus-visible)) {
1108
+ outline: 0 !important;
1109
+ }
1110
+
1111
+ :focus-visible {
1112
+ outline: var(--bf-focus-ring-width) solid var(--bf-focus-ring-color);
1113
+ outline-offset: var(--bf-focus-ring-offset);
1114
+ }
1115
+
1116
+ /* Clear UA outline on text-like controls (styled fields keep their own chrome).
1117
+ * Leave color / range / file alone; they often use custom widgets. */
1118
+ button:focus,
1119
+ [type='button']:focus,
1120
+ [type='reset']:focus,
1121
+ [type='submit']:focus,
1122
+ [type='email']:focus,
1123
+ [type='number']:focus,
1124
+ [type='password']:focus,
1125
+ [type='tel']:focus,
1126
+ [type='search']:focus,
1127
+ [type='text']:focus,
1128
+ [type='date']:focus,
1129
+ [type='datetime-local']:focus,
1130
+ [type='month']:focus,
1131
+ [type='time']:focus,
1132
+ [type='week']:focus,
1133
+ [type='url']:focus,
1134
+ [type='radio']:focus,
1135
+ [type='checkbox']:focus,
1136
+ input[list]:focus,
1137
+ select:focus,
1138
+ textarea:focus {
1139
+ outline: 0;
1140
+ }
1141
+ /* List spacing and nav list reset. */
1142
+
1143
+ menu,
1144
+ ol,
1145
+ ul,
1146
+ dl {
1147
+ margin: 0 0 var(--bf-spacing-xl) 0;
1148
+ padding: 0;
1149
+ }
1150
+
1151
+ menu ul,
1152
+ menu ol,
1153
+ ul ul,
1154
+ ul ol,
1155
+ ol ol,
1156
+ ol ul,
1157
+ dd {
1158
+ margin-bottom: 0;
1159
+ }
1160
+
1161
+ ul,
1162
+ ol {
1163
+ margin-left: var(--bf-spacing-xl);
1164
+ }
1165
+
1166
+ nav ol,
1167
+ nav ul {
1168
+ list-style: none;
1169
+ margin-left: 0;
1170
+ }
1171
+
1172
+ dt {
1173
+ font-weight: 700;
1174
+ }
1175
+
1176
+ dd {
1177
+ margin-left: 0;
1178
+ }
1179
+
1180
+ /* VoiceOver: zero-width space so list-style:none lists stay announced. */
1181
+ nav li::before {
1182
+ content: '\200B';
1183
+ position: absolute;
1184
+ }
1185
+ /* Media elements, figures, progress/meter, and iframes. */
1186
+
1187
+ audio,
1188
+ canvas,
1189
+ progress,
1190
+ video {
1191
+ display: inline-block;
1192
+ }
1193
+
1194
+ img,
1195
+ canvas,
1196
+ audio,
1197
+ video,
1198
+ iframe,
1199
+ object,
1200
+ embed {
1201
+ max-width: 100%;
1202
+ }
1203
+
1204
+ audio,
1205
+ video,
1206
+ canvas,
1207
+ img,
1208
+ svg {
1209
+ vertical-align: middle;
1210
+ }
1211
+
1212
+ img {
1213
+ height: auto;
1214
+ border-style: none;
1215
+ }
1216
+
1217
+ figure {
1218
+ margin: 0;
1219
+ }
1220
+
1221
+ figure,
1222
+ figcaption {
1223
+ display: block;
1224
+ }
1225
+
1226
+ figcaption {
1227
+ line-height: 1.375;
1228
+ font-size: 90%;
1229
+ }
1230
+
1231
+ video {
1232
+ height: auto;
1233
+ }
1234
+
1235
+ audio {
1008
1236
  width: 100%;
1009
- height: 1.4rem;
1010
1237
  }
1011
1238
 
1012
- :where([type=range])::-webkit-slider-thumb {
1013
- border: 0;
1239
+ audio:not([controls]) {
1240
+ display: none;
1241
+ height: 0;
1242
+ }
1243
+
1244
+ svg:not(:root) {
1245
+ overflow: hidden;
1246
+ }
1247
+
1248
+ svg:not([fill]) {
1249
+ fill: currentColor;
1250
+ }
1251
+
1252
+ progress,
1253
+ meter {
1254
+ display: inline-block;
1255
+ vertical-align: baseline;
1256
+ width: 100%;
1257
+ max-width: 100%;
1258
+ }
1259
+
1260
+ /* progress[value] reset (https://css-tricks.com/html5-progress-element/). */
1261
+ progress[value] {
1014
1262
  -webkit-appearance: none;
1263
+ -moz-appearance: none;
1015
1264
  appearance: none;
1016
- width: 1.5rem;
1017
- height: 1.5rem;
1018
- margin-top: -0.25rem;
1019
- background-color: #007bff;
1020
- border-radius: 1.5rem;
1021
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1022
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1265
+ border: none; /* Firefox default border. */
1266
+
1267
+ height: 20px;
1268
+ height: 2rem;
1269
+
1270
+ background: var(--bf-gray-light);
1271
+ color: var(--bf-blue); /* Progress fill in IE10+. */
1023
1272
  }
1024
- :where([type=range])::-webkit-slider-thumb:active {
1025
- background-color: #007bff;
1273
+
1274
+ progress[value]::-webkit-progress-bar {
1275
+ background: var(--bf-gray-light);
1026
1276
  }
1027
1277
 
1028
- :where([type=range])::-moz-range-thumb {
1029
- border: 0;
1030
- -moz-appearance: none;
1031
- appearance: none;
1032
- width: 1.5rem;
1033
- height: 1.5rem;
1034
- background-color: #007bff;
1035
- border-radius: 1.5rem;
1036
- -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1037
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1278
+ progress[value]::-webkit-progress-value {
1279
+ background: var(--bf-blue);
1038
1280
  }
1039
- :where([type=range])::-moz-range-thumb:active {
1040
- background-color: #007bff;
1281
+
1282
+ /* No default border (covers embeds that ignore frameborder="0"). */
1283
+ iframe {
1284
+ border-style: none;
1041
1285
  }
1286
+ /* Address, details/summary, and dialog defaults. */
1042
1287
 
1043
- :where([type=range])::-webkit-slider-runnable-track {
1044
- color: transparent;
1045
- border-color: transparent;
1046
- width: 100%;
1047
- height: 0.65rem;
1048
- cursor: pointer;
1049
- background-color: #e9e9e9;
1288
+ address {
1289
+ font-style: normal;
1290
+ margin-bottom: var(--bf-spacing-lg);
1291
+ line-height: inherit;
1050
1292
  }
1051
1293
 
1052
- :where([type=range])::-moz-range-track {
1053
- color: transparent;
1054
- border-color: transparent;
1055
- width: 100%;
1056
- height: 0.65rem;
1294
+ details > summary:first-of-type {
1295
+ display: list-item;
1296
+ }
1297
+
1298
+ summary {
1057
1299
  cursor: pointer;
1058
- background-color: #e9e9e9;
1300
+ font-weight: 700;
1301
+ word-break: break-all;
1302
+ }
1303
+
1304
+ dialog {
1305
+ background-color: var(--bf-white);
1306
+ color: var(--bf-dark);
1307
+ border: none;
1308
+ border-radius: var(--bf-spacing-sm);
1309
+ padding: var(--bf-spacing-xl);
1310
+ height: -moz-fit-content;
1311
+ height: fit-content;
1312
+ min-width: min(25rem, 100%);
1313
+ max-width: calc(100vw - (var(--bf-spacing-grid-gutter) * 2));
1314
+ }
1315
+
1316
+ @media (min-width: 768px) {
1317
+ dialog {
1318
+ max-width: 50rem;
1319
+ }
1320
+ }
1321
+
1322
+ /* Open dialog wins over [hidden] (e.g. <dialog hidden open>). */
1323
+ dialog[open] {
1324
+ display: block !important;
1325
+ }
1326
+
1327
+ dialog::backdrop {
1328
+ background: rgb(0 0 0 / 40%);
1329
+ }
1330
+ /* Smooth scrolling when motion is allowed. */
1331
+
1332
+ @media (prefers-reduced-motion: no-preference) {
1333
+ :root {
1334
+ scroll-behavior: smooth;
1335
+ }
1336
+ }
1337
+ /* Table border collapse and cell alignment. */
1338
+
1339
+ table {
1340
+ caption-side: bottom;
1341
+ max-width: 100%;
1342
+ border-collapse: collapse;
1343
+ border-color: currentcolor; /* Chrome / Safari inheritance. */
1344
+ text-indent: 0; /* Chrome / Safari table indent. */
1345
+ }
1346
+
1347
+ thead,
1348
+ tbody,
1349
+ tfoot,
1350
+ tr,
1351
+ td,
1352
+ th {
1353
+ border-color: inherit;
1354
+ border-style: solid;
1355
+ border-width: 0;
1356
+ }
1357
+
1358
+ thead th {
1359
+ vertical-align: bottom;
1360
+ }
1361
+
1362
+ th,
1363
+ td {
1364
+ vertical-align: top;
1365
+ }
1366
+
1367
+ th {
1368
+ text-align: inherit;
1369
+ text-align: -webkit-match-parent;
1370
+ font-weight: 700;
1371
+ }
1372
+
1373
+ caption {
1374
+ padding-top: var(--bf-spacing-md);
1375
+ padding-bottom: var(--bf-spacing-md);
1376
+ color: var(--bf-gray);
1377
+ text-align: left;
1378
+ caption-side: bottom;
1379
+ line-height: 1.375;
1380
+ font-size: 90%;
1381
+ }
1382
+ /* Accessibility helpers (adapted from sanitize.css). */
1383
+
1384
+ /* Busy: progress cursor. */
1385
+ :where([aria-busy='true' i]) {
1386
+ cursor: progress;
1387
+ }
1388
+
1389
+ /* Disabled / inoperable: not-allowed cursor. */
1390
+ :where([aria-disabled='true' i], [disabled]) {
1391
+ cursor: not-allowed;
1392
+ }
1393
+
1394
+ /* aria-hidden="false" on [hidden]: keep in a11y tree when not focused. */
1395
+ :where([aria-hidden='false' i][hidden]) {
1396
+ display: initial;
1397
+ }
1398
+
1399
+ :where([aria-hidden='false' i][hidden]:not(:focus)) {
1400
+ clip: rect(0, 0, 0, 0);
1401
+ position: absolute;
1402
+ }
1403
+ /* Preference queries only (prefers-contrast, forced-colors). Additive. */
1404
+
1405
+ /* prefers-contrast: more: underline links, thicker focus, stronger borders (WCAG 1.4.1). */
1406
+ @media (prefers-contrast: more) {
1407
+ a {
1408
+ text-decoration: underline;
1409
+ }
1410
+
1411
+ /* Darker amber clears WCAG 1.4.11 (3:1) on white, --bf-light and --bf-dark-bg;
1412
+ * the default --bf-orange ring is only ~2:1 on white. */
1413
+ :root {
1414
+ --bf-focus-ring-color: rgb(184 115 0);
1415
+ }
1416
+
1417
+ :focus-visible {
1418
+ outline-width: 0.3rem;
1419
+ outline-offset: 0.4rem;
1420
+ }
1421
+
1422
+ [type='email'],
1423
+ [type='number'],
1424
+ [type='password'],
1425
+ [type='tel'],
1426
+ [type='search'],
1427
+ [type='text'],
1428
+ [type='date'],
1429
+ [type='datetime-local'],
1430
+ [type='month'],
1431
+ [type='time'],
1432
+ [type='url'],
1433
+ [type='week'],
1434
+ input[list],
1435
+ select,
1436
+ textarea {
1437
+ border-width: 2px;
1438
+ }
1439
+ }
1440
+
1441
+ /* forced-colors: restore focus via Highlight; underline links; keep button borders. */
1442
+ @media (forced-colors: active) {
1443
+ :focus-visible {
1444
+ outline-color: Highlight;
1445
+ }
1446
+
1447
+ a {
1448
+ text-decoration: underline;
1449
+ }
1450
+
1451
+ /* Keep button borders so disabled/active stay distinguishable. */
1452
+ button,
1453
+ [type='button'],
1454
+ [type='reset'],
1455
+ [type='submit'] {
1456
+ border: 1px solid ButtonText;
1457
+ }
1458
+ }
1459
+ /* Screen-reader and keyboard helpers (.bf-sr-only, .bf-skip-link, .bf-focusable).
1460
+ * Class-based and utilities builds only; classless ships no .bf-* classes. */
1461
+
1462
+ /* Visually hidden; available to screen readers (h5bp / Snook). */
1463
+ .bf-sr-only {
1464
+ border: 0 !important;
1465
+ clip: rect(0, 0, 0, 0) !important;
1466
+ height: 1px !important;
1467
+ margin: -1px !important;
1468
+ overflow: hidden !important;
1469
+ padding: 0 !important;
1470
+ position: absolute !important;
1471
+ white-space: nowrap !important;
1472
+ width: 1px !important;
1473
+ }
1474
+
1475
+ /* .bf-sr-only, revealed on focus. .focusable is the legacy name; both work. */
1476
+ .bf-sr-only.focusable:active,
1477
+ .bf-sr-only.focusable:focus,
1478
+ .bf-sr-only.bf-focusable:active,
1479
+ .bf-sr-only.bf-focusable:focus {
1480
+ clip: auto !important;
1481
+ height: auto !important;
1482
+ margin: 0 !important;
1483
+ overflow: visible !important;
1484
+ position: static !important;
1485
+ white-space: inherit !important;
1486
+ width: auto !important;
1487
+ }
1488
+
1489
+ /* Skip link: hidden until focused, then pinned to the top-left without
1490
+ * reflowing the page (unlike .bf-sr-only.focusable, which returns to flow). */
1491
+ .bf-skip-link {
1492
+ position: absolute;
1493
+ top: 0;
1494
+ left: 0;
1495
+ z-index: 9999;
1496
+ padding: var(--bf-spacing-md) var(--bf-spacing-lg);
1497
+ color: var(--bf-blue);
1498
+ background-color: var(--bf-white);
1499
+ border: 1px solid var(--bf-gray-light);
1500
+ transform: translateY(-100%);
1501
+ }
1502
+
1503
+ .bf-skip-link:focus,
1504
+ .bf-skip-link:focus-visible {
1505
+ transform: translateY(0);
1506
+ }
1507
+
1508
+ /* Utilities */
1509
+ /* Display, visibility, float, position, and width helpers. */
1510
+
1511
+ .bf-clearfix::before,
1512
+ .bf-clearfix::after {
1513
+ content: ' ';
1514
+ display: table;
1515
+ }
1516
+
1517
+ .bf-clearfix::after {
1518
+ clear: both;
1519
+ }
1520
+
1521
+ .bf-hide {
1522
+ display: none !important;
1523
+ }
1524
+
1525
+ .bf-hidden {
1526
+ display: none !important;
1527
+ visibility: hidden !important;
1528
+ }
1529
+
1530
+ .bf-text-hide {
1531
+ font: 0/0 a !important;
1532
+ color: transparent !important;
1533
+ text-shadow: none !important;
1534
+ background-color: transparent !important;
1535
+ border: 0 !important;
1536
+ margin: 0 !important;
1537
+ padding: 0 !important;
1538
+ }
1539
+
1540
+ /* .bf-sr-only, .bf-focusable and .bf-skip-link live in
1541
+ * miscellaneous/a11y-helpers.css (class-based and utilities builds). */
1542
+
1543
+ .bf-invisible {
1544
+ visibility: hidden !important;
1545
+ }
1546
+
1547
+ .bf-visible {
1548
+ visibility: visible !important;
1549
+ }
1550
+
1551
+ .bf-display-block {
1552
+ display: block !important;
1553
+ }
1554
+
1555
+ .bf-display-block-center {
1556
+ display: block !important;
1557
+ margin-left: auto !important;
1558
+ margin-right: auto !important;
1559
+ text-align: center !important;
1560
+ }
1561
+
1562
+ .bf-display-inline {
1563
+ display: inline !important;
1564
+ }
1565
+
1566
+ .bf-display-inline-block {
1567
+ display: inline-block !important;
1568
+ }
1569
+
1570
+ .bf-display-flex {
1571
+ display: flex !important;
1572
+ }
1573
+
1574
+ .bf-display-inline-flex {
1575
+ display: inline-flex !important;
1576
+ }
1577
+
1578
+ .bf-display-flex--justify-start {
1579
+ justify-content: flex-start !important;
1580
+ }
1581
+
1582
+ .bf-display-flex--justify-end {
1583
+ justify-content: flex-end !important;
1584
+ }
1585
+
1586
+ .bf-display-flex--justify-center {
1587
+ justify-content: center !important;
1588
+ }
1589
+
1590
+ .bf-display-flex--wrap {
1591
+ flex-wrap: wrap !important;
1592
+ }
1593
+
1594
+ .bf-display-flex--nowrap {
1595
+ flex-wrap: nowrap !important;
1596
+ }
1597
+
1598
+ .bf-float-left {
1599
+ float: left !important;
1600
+ }
1601
+
1602
+ .bf-float-right {
1603
+ float: right !important;
1604
+ }
1605
+
1606
+ .bf-position-fixed {
1607
+ position: fixed !important;
1608
+ }
1609
+
1610
+ .bf-position-sticky {
1611
+ position: sticky !important;
1612
+ top: 0 !important;
1613
+ }
1614
+
1615
+ .bf-position-relative {
1616
+ position: relative !important;
1617
+ }
1618
+
1619
+ /* Absolute center inside a relative parent. */
1620
+ .bf-align-center-unknown {
1621
+ position: relative !important;
1622
+ }
1623
+
1624
+ .bf-align-center-unknown--item {
1625
+ position: absolute !important;
1626
+ top: 50% !important;
1627
+ left: 50% !important;
1628
+ transform: translate(-50%, -50%) !important;
1629
+ }
1630
+
1631
+ .bf-align-center-flex {
1632
+ display: flex !important;
1633
+ justify-content: center !important;
1634
+ align-items: center !important;
1635
+ height: 100vh !important;
1636
+ }
1637
+
1638
+ .bf-width-25 {
1639
+ width: 25% !important;
1640
+ }
1641
+
1642
+ .bf-width-33 {
1643
+ width: 33.3333% !important;
1644
+ }
1645
+
1646
+ .bf-width-50 {
1647
+ width: 50% !important;
1648
+ }
1649
+
1650
+ .bf-width-75 {
1651
+ width: 75% !important;
1652
+ }
1653
+
1654
+ .bf-width-100 {
1655
+ width: 100% !important;
1656
+ }
1657
+
1658
+ .bf-width-auto {
1659
+ width: auto !important;
1660
+ }
1661
+ /* Text alignment, weight, truncate, and font-stack helpers. */
1662
+
1663
+ .bf-t-transform-uppercase {
1664
+ text-transform: uppercase !important;
1665
+ }
1666
+
1667
+ .bf-t-transform-none {
1668
+ text-transform: none !important;
1669
+ }
1670
+
1671
+ .bf-t-left {
1672
+ text-align: left !important;
1673
+ }
1674
+
1675
+ .bf-t-center {
1676
+ text-align: center !important;
1677
+ }
1678
+
1679
+ .bf-t-right {
1680
+ text-align: right !important;
1681
+ }
1682
+
1683
+ .bf-t-shadow {
1684
+ text-shadow: 0 0 2px var(--bf-dark) !important;
1685
+ text-shadow: 0 0 0.2rem var(--bf-dark) !important;
1686
+ }
1687
+
1688
+ .bf-t-italic {
1689
+ font-style: italic !important;
1690
+ }
1691
+
1692
+ /* Reset italic inheritance (e.g. nested <i>). */
1693
+ .bf-t-style-normal {
1694
+ font-style: normal !important;
1059
1695
  }
1060
1696
 
1061
- :where([type=range]):focus {
1062
- outline: none;
1063
- }
1064
- :where([type=range]):focus::-webkit-slider-thumb {
1065
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1066
- }
1067
- :where([type=range]):focus::-moz-slider-thumb {
1068
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1697
+ /* Weight utilities (e.g. reset <b>). */
1698
+ .bf-t-weight-300 {
1699
+ font-weight: 300 !important;
1069
1700
  }
1070
1701
 
1071
- :where([type=range])::-moz-focus-outer {
1072
- border: 0;
1702
+ .bf-t-weight-400 {
1703
+ font-weight: 400 !important;
1073
1704
  }
1074
1705
 
1075
- :where([type=range]):focus::-moz-range-thumb {
1076
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1706
+ .bf-t-weight-500 {
1707
+ font-weight: 500 !important;
1077
1708
  }
1078
1709
 
1079
- :where([type=range]):disabled {
1080
- pointer-events: none;
1710
+ .bf-t-weight-600 {
1711
+ font-weight: 600 !important;
1081
1712
  }
1082
- :where([type=range]):disabled::-webkit-slider-thumb {
1083
- background-color: #ccc;
1713
+
1714
+ .bf-t-weight-700 {
1715
+ font-weight: 700 !important;
1084
1716
  }
1085
- :where([type=range]):disabled::-moz-slider-thumb {
1086
- background-color: #ccc;
1717
+
1718
+ .bf-t-weight-800 {
1719
+ font-weight: 800 !important;
1087
1720
  }
1088
1721
 
1089
- .bf-container,
1090
- .bf-container--fluid {
1091
- box-sizing: border-box;
1092
- display: block;
1093
- margin-right: auto;
1094
- margin-left: auto;
1095
- padding-left: 1.5rem;
1096
- padding-right: 1.5rem;
1722
+ .bf-text-break {
1723
+ word-wrap: break-word !important;
1097
1724
  }
1098
1725
 
1099
- .bf-container {
1100
- max-width: 114rem;
1726
+ .bf-t-truncate {
1727
+ max-width: 100% !important;
1728
+ overflow: hidden !important;
1729
+ text-overflow: ellipsis !important;
1730
+ white-space: nowrap !important;
1731
+ word-wrap: normal !important;
1101
1732
  }
1102
1733
 
1103
- .bf-row {
1104
- display: flex;
1105
- flex-wrap: wrap;
1106
- margin-left: -1.5rem;
1107
- margin-right: -1.5rem;
1734
+ .bf-t-truncate--multiline-2 {
1735
+ overflow: hidden !important;
1736
+ text-overflow: ellipsis !important;
1737
+ display: -webkit-box !important;
1738
+ line-clamp: 2 !important;
1739
+ -webkit-line-clamp: 2 !important;
1740
+ -webkit-box-orient: vertical !important;
1108
1741
  }
1109
1742
 
1110
- [class^=bf-col-] {
1111
- position: relative;
1112
- min-height: 1px;
1113
- padding-left: 1.5rem;
1114
- padding-right: 1.5rem;
1115
- flex-grow: 0;
1116
- flex-shrink: 0;
1743
+ .bf-t-truncate--multiline-3 {
1744
+ overflow: hidden !important;
1745
+ text-overflow: ellipsis !important;
1746
+ display: -webkit-box !important;
1747
+ line-clamp: 3 !important;
1748
+ -webkit-line-clamp: 3 !important;
1749
+ -webkit-box-orient: vertical !important;
1117
1750
  }
1118
1751
 
1119
- .bf-no-gutters {
1120
- margin-right: 0;
1121
- margin-left: 0;
1752
+ .bf-no-select {
1753
+ -webkit-user-select: none !important;
1754
+ -moz-user-select: none !important;
1755
+ user-select: none !important;
1756
+ -webkit-touch-callout: none !important;
1122
1757
  }
1123
- .bf-no-gutters > [class^=bf-col] {
1124
- padding-right: 0;
1125
- padding-left: 0;
1758
+
1759
+ .bf-font-sans-serif {
1760
+ font-family: var(--bf-font-sans-serif) !important;
1126
1761
  }
1127
1762
 
1128
- .bf-col-12 {
1129
- flex-basis: 100%;
1130
- max-width: 100%;
1763
+ .bf-font-serif {
1764
+ font-family: var(--bf-font-serif) !important;
1131
1765
  }
1132
1766
 
1133
- .bf-col-11 {
1134
- flex-basis: 91.6667%;
1135
- max-width: 91.6667%;
1767
+ .bf-font-monospace {
1768
+ font-family: var(--bf-font-monospace) !important;
1136
1769
  }
1137
1770
 
1138
- .bf-col-10 {
1139
- flex-basis: 83.3333%;
1140
- max-width: 83.3333%;
1771
+ /* Opt-in stacks from Modern Font Stacks (https://modernfontstacks.com/). */
1772
+ .bf-sans-serif--system {
1773
+ font-family: system-ui, sans-serif;
1141
1774
  }
1142
1775
 
1143
- .bf-col-9 {
1144
- flex-basis: 75%;
1145
- max-width: 75%;
1776
+ .bf-serif--transitional {
1777
+ font-family: Charter, 'Bitstream Charter', 'Sitka Text', Cambria, serif;
1146
1778
  }
1147
1779
 
1148
- .bf-col-8 {
1149
- flex-basis: 66.6667%;
1150
- max-width: 66.6667%;
1780
+ .bf-serif--oldstyle {
1781
+ font-family: 'Iowan Old Style', 'Palatino Linotype', 'URW Palladio L', P052, serif;
1151
1782
  }
1152
1783
 
1153
- .bf-col-7 {
1154
- flex-basis: 58.3333%;
1155
- max-width: 58.3333%;
1784
+ .bf-sans-serif--humanist {
1785
+ font-family:
1786
+ Seravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serif;
1156
1787
  }
1157
1788
 
1158
- .bf-col-6 {
1159
- flex-basis: 50%;
1160
- max-width: 50%;
1789
+ .bf-sans-serif--geometric {
1790
+ font-family: Avenir, Montserrat, Corbel, 'URW Gothic', source-sans-pro, sans-serif;
1161
1791
  }
1162
1792
 
1163
- .bf-col-5 {
1164
- flex-basis: 41.6667%;
1165
- max-width: 41.6667%;
1793
+ .bf-sans-serif--classical {
1794
+ font-family: Optima, Candara, 'Noto Sans', source-sans-pro, sans-serif;
1166
1795
  }
1167
1796
 
1168
- .bf-col-4 {
1169
- flex-basis: 33.3333%;
1170
- max-width: 33.3333%;
1797
+ .bf-sans-serif--neo-grotesque {
1798
+ font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
1171
1799
  }
1172
1800
 
1173
- .bf-col-3 {
1174
- flex-basis: 25%;
1175
- max-width: 25%;
1801
+ .bf-monospace--slab {
1802
+ font-family: 'Nimbus Mono PS', 'Courier New', monospace;
1176
1803
  }
1177
1804
 
1178
- .bf-col-2 {
1179
- flex-basis: 16.6667%;
1180
- max-width: 16.6667%;
1805
+ .bf-monospace--code {
1806
+ font-family:
1807
+ ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',
1808
+ monospace;
1181
1809
  }
1182
1810
 
1183
- .bf-col-1 {
1184
- flex-basis: 8.3333%;
1185
- max-width: 8.3333%;
1811
+ .bf-sans-serif--industrial {
1812
+ font-family:
1813
+ Bahnschrift, 'DIN Alternate', 'Franklin Gothic Medium', 'Nimbus Sans Narrow',
1814
+ sans-serif-condensed, sans-serif;
1186
1815
  }
1187
1816
 
1188
- @media (max-width: 575px) {
1189
- .bf-container--break-xs .bf-row {
1190
- margin-left: 0;
1191
- margin-right: 0;
1192
- }
1193
- .bf-container--break-xs [class^=bf-col] {
1194
- flex-basis: 100%;
1195
- max-width: 100%;
1196
- margin-left: 0;
1197
- padding-left: 0;
1198
- padding-right: 0;
1199
- }
1817
+ .bf-sans-serif--rounded {
1818
+ font-family:
1819
+ ui-rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT',
1820
+ 'Arial Rounded MT Bold', Calibri, source-sans-pro, sans-serif;
1200
1821
  }
1201
- @media (max-width: 767px) {
1202
- .bf-container--break-md .bf-row {
1203
- margin-left: 0;
1204
- margin-right: 0;
1205
- }
1206
- .bf-container--break-md [class^=bf-col] {
1207
- flex-basis: 100%;
1208
- max-width: 100%;
1209
- margin-left: 0;
1210
- padding-left: 0;
1211
- padding-right: 0;
1212
- }
1822
+
1823
+ .bf-serif--slab {
1824
+ font-family: Rockwell, 'Rockwell Nova', 'Roboto Slab', 'DejaVu Serif', 'Sitka Small', serif;
1213
1825
  }
1214
- @media (max-width: 991px) {
1215
- .bf-container--break-lg .bf-row {
1216
- margin-left: 0;
1217
- margin-right: 0;
1218
- }
1219
- .bf-container--break-lg [class^=bf-col] {
1220
- flex-basis: 100%;
1221
- max-width: 100%;
1222
- margin-left: 0;
1223
- padding-left: 0;
1224
- padding-right: 0;
1225
- }
1826
+
1827
+ .bf-serif--antique {
1828
+ font-family:
1829
+ Superclarendon, 'Bookman Old Style', 'URW Bookman', 'URW Bookman L', 'Georgia Pro', Georgia,
1830
+ serif;
1226
1831
  }
1227
- table td[class^=bf-col],
1228
- table th[class^=bf-col] {
1229
- position: static;
1832
+
1833
+ .bf-serif--didone {
1834
+ font-family: Didot, 'Bodoni MT', 'Noto Serif Display', 'URW Palladio L', P052, Sylfaen, serif;
1230
1835
  }
1231
1836
 
1232
- .bf-clearfix::before,
1233
- .bf-clearfix::after {
1234
- content: " ";
1235
- display: table;
1837
+ .bf-cursive--handwritten {
1838
+ font-family: 'Segoe Print', 'Bradley Hand', Chilanka, TSCu_Comic, casual, cursive;
1236
1839
  }
1237
1840
 
1238
- .bf-clearfix::after {
1239
- clear: both;
1841
+ .bf-h1,
1842
+ .bf-h2,
1843
+ .bf-h3,
1844
+ .bf-h4,
1845
+ .bf-h5,
1846
+ .bf-h6 {
1847
+ font-weight: 600 !important;
1848
+ margin-top: 0 !important;
1849
+ line-height: 1.2 !important;
1850
+ margin-bottom: var(--bf-spacing-lg) !important;
1240
1851
  }
1241
1852
 
1242
- .bf-hide {
1243
- display: none !important;
1853
+ .bf-h1 {
1854
+ font-size: 36px !important;
1855
+ font-size: 3.6rem !important;
1244
1856
  }
1245
1857
 
1246
- .bf-hidden {
1247
- display: none !important;
1248
- visibility: hidden !important;
1858
+ .bf-h2 {
1859
+ font-size: 30px !important;
1860
+ font-size: 3rem !important;
1249
1861
  }
1250
1862
 
1251
- .bf-text-hide {
1252
- /* stylelint-disable-next-line */
1253
- font: 0/0 a !important;
1254
- color: transparent !important;
1255
- text-shadow: none !important;
1256
- background-color: transparent !important;
1257
- border: 0 !important;
1258
- margin: 0 !important;
1259
- padding: 0 !important;
1863
+ .bf-h3 {
1864
+ font-size: 24px !important;
1865
+ font-size: 2.4rem !important;
1260
1866
  }
1261
1867
 
1262
- /*
1263
- // taken from https://github.com/h5bp/html5-boilerplate/blob/v7.3.0/dist/css/main.css
1264
- //
1265
- * Hide only visually, but have it available for screen readers:
1266
- * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility
1267
- *
1268
- * 1. For long content, line feeds are not interpreted as spaces and small width
1269
- * causes content to wrap 1 word per line:
1270
- * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe
1271
- */
1272
- .bf-sr-only {
1273
- border: 0 !important;
1274
- clip: rect(0, 0, 0, 0) !important;
1275
- height: 1px !important;
1276
- margin: -1px !important;
1277
- overflow: hidden !important;
1278
- padding: 0 !important;
1279
- position: absolute !important;
1280
- white-space: nowrap !important;
1281
- width: 1px !important;
1868
+ .bf-h4 {
1869
+ font-size: 20px !important;
1870
+ font-size: 2rem !important;
1282
1871
  }
1283
1872
 
1284
- /*
1285
- // taken from https://github.com/h5bp/html5-boilerplate/blob/v7.3.0/dist/css/main.css
1286
- //
1287
- * Extends the .sr-only class to allow the element
1288
- * to be focusable when navigated to via the keyboard:
1289
- * https://www.drupal.org/node/897638
1290
- */
1291
- .bf-sr-only.focusable:active,
1292
- .bf-sr-only.focusable:focus {
1293
- clip: auto !important;
1294
- height: auto !important;
1295
- margin: 0 !important;
1296
- overflow: visible !important;
1297
- position: static !important;
1298
- white-space: inherit !important;
1299
- width: auto !important;
1873
+ .bf-h5,
1874
+ .bf-h6 {
1875
+ font-size: 16px !important;
1876
+ font-size: 1.6rem !important;
1300
1877
  }
1301
1878
 
1302
- .bf-invisible {
1303
- visibility: hidden !important;
1879
+ p.bf-lead {
1880
+ font-size: 120% !important;
1304
1881
  }
1305
1882
 
1306
- .bf-visible {
1307
- visibility: visible !important;
1883
+ body.bf-responsive-typography {
1884
+ font-size: clamp(1.5rem, 2vw, 1.8rem);
1308
1885
  }
1886
+ /* 12-column flex grid: .bf-container / .bf-row / .bf-col-* (+ optional --break-* stacking). */
1309
1887
 
1310
- .bf-display-block {
1311
- display: block !important;
1888
+ .bf-container,
1889
+ .bf-container--fluid {
1890
+ box-sizing: border-box;
1891
+ display: block;
1892
+ margin-right: auto;
1893
+ margin-left: auto;
1894
+ padding-left: var(--bf-spacing-grid-gutter);
1895
+ padding-right: var(--bf-spacing-grid-gutter);
1312
1896
  }
1313
1897
 
1314
- .bf-display-block-center {
1315
- display: block !important;
1316
- margin-left: auto !important;
1317
- margin-right: auto !important;
1318
- text-align: center !important;
1898
+ .bf-container {
1899
+ max-width: 114rem;
1319
1900
  }
1320
1901
 
1321
- .bf-display-inline {
1322
- display: inline !important;
1902
+ .bf-row {
1903
+ display: flex;
1904
+ flex-wrap: wrap;
1905
+ margin-left: calc(-1 * var(--bf-spacing-grid-gutter));
1906
+ margin-right: calc(-1 * var(--bf-spacing-grid-gutter));
1323
1907
  }
1324
1908
 
1325
- .bf-display-inline-block {
1326
- display: inline-block !important;
1909
+ [class^='bf-col-'] {
1910
+ position: relative;
1911
+ min-height: 1px;
1912
+ padding-left: var(--bf-spacing-grid-gutter);
1913
+ padding-right: var(--bf-spacing-grid-gutter);
1914
+ flex-grow: 0;
1915
+ flex-shrink: 0;
1327
1916
  }
1328
1917
 
1329
- .bf-display-flex {
1330
- display: flex !important;
1918
+ .bf-no-gutters {
1919
+ margin-right: 0;
1920
+ margin-left: 0;
1331
1921
  }
1332
1922
 
1333
- .bf-display-inline-flex {
1334
- display: inline-flex !important;
1923
+ .bf-no-gutters > [class^='bf-col'] {
1924
+ padding-right: 0;
1925
+ padding-left: 0;
1335
1926
  }
1336
1927
 
1337
- .bf-display-flex--justify-start {
1338
- justify-content: flex-start !important;
1928
+ /* Column spans (12ths). */
1929
+ .bf-col-12 {
1930
+ flex-basis: 100%;
1931
+ max-width: 100%;
1339
1932
  }
1340
1933
 
1341
- .bf-display-flex--justify-end {
1342
- justify-content: flex-end !important;
1934
+ .bf-col-11 {
1935
+ flex-basis: 91.6667%;
1936
+ max-width: 91.6667%;
1343
1937
  }
1344
1938
 
1345
- .bf-display-flex--justify-center {
1346
- justify-content: center !important;
1939
+ .bf-col-10 {
1940
+ flex-basis: 83.3333%;
1941
+ max-width: 83.3333%;
1347
1942
  }
1348
1943
 
1349
- .bf-display-flex--wrap {
1350
- flex-wrap: wrap !important;
1944
+ .bf-col-9 {
1945
+ flex-basis: 75%;
1946
+ max-width: 75%;
1351
1947
  }
1352
1948
 
1353
- .bf-display-flex--nowrap {
1354
- flex-wrap: nowrap !important;
1949
+ .bf-col-8 {
1950
+ flex-basis: 66.6667%;
1951
+ max-width: 66.6667%;
1355
1952
  }
1356
1953
 
1357
- .bf-float-left {
1358
- float: left !important;
1954
+ .bf-col-7 {
1955
+ flex-basis: 58.3333%;
1956
+ max-width: 58.3333%;
1359
1957
  }
1360
1958
 
1361
- .bf-float-right {
1362
- float: right !important;
1959
+ .bf-col-6 {
1960
+ flex-basis: 50%;
1961
+ max-width: 50%;
1363
1962
  }
1364
1963
 
1365
- .bf-position-fixed {
1366
- position: fixed !important;
1964
+ .bf-col-5 {
1965
+ flex-basis: 41.6667%;
1966
+ max-width: 41.6667%;
1367
1967
  }
1368
1968
 
1369
- .bf-position-sticky {
1370
- position: sticky !important;
1371
- top: 0 !important;
1969
+ .bf-col-4 {
1970
+ flex-basis: 33.3333%;
1971
+ max-width: 33.3333%;
1372
1972
  }
1373
1973
 
1374
- .bf-align-center-unknown {
1375
- position: relative !important;
1974
+ .bf-col-3 {
1975
+ flex-basis: 25%;
1976
+ max-width: 25%;
1376
1977
  }
1377
1978
 
1378
- .bf-align-center-unknown--item {
1379
- position: absolute !important;
1380
- top: 50% !important;
1381
- left: 50% !important;
1382
- transform: translate(-50%, -50%) !important;
1979
+ .bf-col-2 {
1980
+ flex-basis: 16.6667%;
1981
+ max-width: 16.6667%;
1383
1982
  }
1384
1983
 
1385
- .bf-align-center-flex {
1386
- display: flex;
1387
- align-items: center;
1388
- justify-content: center;
1984
+ .bf-col-1 {
1985
+ flex-basis: 8.3333%;
1986
+ max-width: 8.3333%;
1389
1987
  }
1390
1988
 
1391
- .bf-width-25 {
1392
- width: 25% !important;
1393
- }
1989
+ /* Breakpoint stacking via .bf-container--break-{xs|md|lg}. */
1990
+ @media (max-width: 575px) {
1991
+ .bf-container--break-xs .bf-row {
1992
+ margin-left: 0;
1993
+ margin-right: 0;
1994
+ }
1394
1995
 
1395
- .bf-width-33 {
1396
- width: 33.3333% !important;
1996
+ .bf-container--break-xs [class^='bf-col'] {
1997
+ flex-basis: 100%;
1998
+ max-width: 100%;
1999
+ margin-left: 0;
2000
+ padding-left: 0;
2001
+ padding-right: 0;
2002
+ }
1397
2003
  }
1398
2004
 
1399
- .bf-width-50 {
1400
- width: 50% !important;
1401
- }
2005
+ @media (max-width: 767px) {
2006
+ .bf-container--break-md .bf-row {
2007
+ margin-left: 0;
2008
+ margin-right: 0;
2009
+ }
1402
2010
 
1403
- .bf-width-75 {
1404
- width: 75% !important;
2011
+ .bf-container--break-md [class^='bf-col'] {
2012
+ flex-basis: 100%;
2013
+ max-width: 100%;
2014
+ margin-left: 0;
2015
+ padding-left: 0;
2016
+ padding-right: 0;
2017
+ }
1405
2018
  }
1406
2019
 
1407
- .bf-width-100 {
1408
- width: 100% !important;
2020
+ @media (max-width: 991px) {
2021
+ .bf-container--break-lg .bf-row {
2022
+ margin-left: 0;
2023
+ margin-right: 0;
2024
+ }
2025
+
2026
+ .bf-container--break-lg [class^='bf-col'] {
2027
+ flex-basis: 100%;
2028
+ max-width: 100%;
2029
+ margin-left: 0;
2030
+ padding-left: 0;
2031
+ padding-right: 0;
2032
+ }
1409
2033
  }
1410
2034
 
1411
- .bf-width-auto {
1412
- width: auto !important;
2035
+ /* Table cells with col classes stay position:static (v4 compat). */
2036
+ table td[class^='bf-col'],
2037
+ table th[class^='bf-col'] {
2038
+ position: static;
1413
2039
  }
2040
+ /* Z-index scale (.bf-z-index-*). */
1414
2041
 
1415
2042
  .bf-z-index-1 {
1416
2043
  z-index: 1;
1417
2044
  }
1418
-
1419
2045
  .bf-z-index-2 {
1420
2046
  z-index: 2;
1421
2047
  }
1422
-
1423
2048
  .bf-z-index-3 {
1424
2049
  z-index: 3;
1425
2050
  }
1426
-
1427
2051
  .bf-z-index-4 {
1428
2052
  z-index: 4;
1429
2053
  }
1430
-
1431
2054
  .bf-z-index-5 {
1432
2055
  z-index: 5;
1433
2056
  }
1434
-
1435
2057
  .bf-z-index-6 {
1436
2058
  z-index: 6;
1437
2059
  }
1438
-
1439
2060
  .bf-z-index-7 {
1440
2061
  z-index: 7;
1441
2062
  }
1442
-
1443
2063
  .bf-z-index-8 {
1444
2064
  z-index: 8;
1445
2065
  }
1446
-
1447
2066
  .bf-z-index-9 {
1448
2067
  z-index: 9;
1449
2068
  }
1450
-
1451
2069
  .bf-z-index-10 {
1452
2070
  z-index: 10;
1453
2071
  }
1454
-
1455
2072
  .bf-z-index-20 {
1456
2073
  z-index: 20;
1457
2074
  }
1458
-
1459
2075
  .bf-z-index-30 {
1460
2076
  z-index: 30;
1461
2077
  }
1462
-
1463
2078
  .bf-z-index-40 {
1464
2079
  z-index: 40;
1465
2080
  }
1466
-
1467
2081
  .bf-z-index-50 {
1468
2082
  z-index: 50;
1469
2083
  }
1470
-
1471
2084
  .bf-z-index-60 {
1472
2085
  z-index: 60;
1473
2086
  }
1474
-
1475
2087
  .bf-z-index-70 {
1476
2088
  z-index: 70;
1477
2089
  }
1478
-
1479
2090
  .bf-z-index-80 {
1480
2091
  z-index: 80;
1481
2092
  }
1482
-
1483
2093
  .bf-z-index-90 {
1484
2094
  z-index: 90;
1485
2095
  }
1486
-
1487
2096
  .bf-z-index-100 {
1488
2097
  z-index: 100;
1489
2098
  }
1490
-
1491
2099
  .bf-z-index-200 {
1492
2100
  z-index: 200;
1493
2101
  }
1494
-
1495
2102
  .bf-z-index-300 {
1496
- z-index: 200;
2103
+ z-index: 300;
1497
2104
  }
2105
+ /* Margin / padding scale (.bf-m-*, .bf-p-*). */
1498
2106
 
1499
2107
  .bf-m-0 {
1500
2108
  margin: 0 !important;
@@ -1516,334 +2124,165 @@ table th[class^=bf-col] {
1516
2124
  margin-right: 0 !important;
1517
2125
  }
1518
2126
 
1519
- .bf-m-1 {
1520
- margin-bottom: 0.5rem !important;
1521
- }
1522
-
1523
- .bf-m-2 {
1524
- margin-bottom: 1rem !important;
1525
- }
1526
-
1527
- .bf-m-3 {
1528
- margin-bottom: 2rem !important;
1529
- }
1530
-
1531
- .bf-m-4 {
1532
- margin-bottom: 3rem !important;
1533
- }
1534
-
1535
- .bf-m-t-1 {
1536
- margin-top: 0.5rem !important;
1537
- }
1538
-
1539
- .bf-m-t-2 {
1540
- margin-top: 1rem !important;
1541
- }
1542
-
1543
- .bf-m-t-3 {
1544
- margin-top: 2rem !important;
1545
- }
1546
-
1547
- .bf-m-t-4 {
1548
- margin-top: 3rem !important;
1549
- }
1550
-
2127
+ /* .bf-m-N is the historical short form of .bf-m-b-N; both set margin-bottom. */
2128
+ .bf-m-1,
1551
2129
  .bf-m-b-1 {
1552
- margin-bottom: 0.5rem !important;
2130
+ margin-bottom: var(--bf-spacing-md) !important;
1553
2131
  }
1554
2132
 
2133
+ .bf-m-2,
1555
2134
  .bf-m-b-2 {
1556
- margin-bottom: 1rem !important;
2135
+ margin-bottom: var(--bf-spacing-lg) !important;
1557
2136
  }
1558
2137
 
2138
+ .bf-m-3,
1559
2139
  .bf-m-b-3 {
1560
- margin-bottom: 2rem !important;
1561
- }
1562
-
1563
- .bf-m-b-4 {
1564
- margin-bottom: 3rem !important;
1565
- }
1566
-
1567
- .bf-p-0 {
1568
- padding: 0 !important;
1569
- }
1570
-
1571
- .bf-p-t-0 {
1572
- padding-top: 0 !important;
1573
- }
1574
-
1575
- .bf-p-b-0 {
1576
- padding-bottom: 0 !important;
1577
- }
1578
-
1579
- .bf-p-l-0 {
1580
- padding-left: 0 !important;
1581
- }
1582
-
1583
- .bf-p-r-0 {
1584
- padding-right: 0 !important;
1585
- }
1586
-
1587
- .bf-p-1 {
1588
- padding-bottom: 0.5rem !important;
1589
- }
1590
-
1591
- .bf-p-2 {
1592
- padding-bottom: 1rem !important;
1593
- }
1594
-
1595
- .bf-p-3 {
1596
- padding-bottom: 2rem !important;
1597
- }
1598
-
1599
- .bf-p-4 {
1600
- padding-bottom: 3rem !important;
1601
- }
1602
-
1603
- .bf-p-t-1 {
1604
- padding-top: 0.5rem !important;
1605
- }
1606
-
1607
- .bf-p-t-2 {
1608
- padding-top: 1rem !important;
1609
- }
1610
-
1611
- .bf-p-t-3 {
1612
- padding-top: 2rem !important;
1613
- }
1614
-
1615
- .bf-p-t-4 {
1616
- padding-top: 3rem !important;
1617
- }
1618
-
1619
- .bf-p-b-1 {
1620
- padding-bottom: 0.5rem !important;
1621
- }
1622
-
1623
- .bf-p-b-2 {
1624
- padding-bottom: 1rem !important;
1625
- }
1626
-
1627
- .bf-p-b-3 {
1628
- padding-bottom: 2rem !important;
1629
- }
1630
-
1631
- .bf-p-b-4 {
1632
- padding-bottom: 3rem !important;
1633
- }
1634
-
1635
- .bf-t-transform-uppercase {
1636
- text-transform: uppercase !important;
1637
- }
1638
-
1639
- .bf-t-transform-none {
1640
- text-transform: none !important;
1641
- }
1642
-
1643
- .bf-t-left {
1644
- text-align: left !important;
1645
- }
1646
-
1647
- .bf-t-center {
1648
- text-align: center !important;
1649
- }
1650
-
1651
- .bf-t-right {
1652
- text-align: right !important;
1653
- }
1654
-
1655
- .bf-t-shadow {
1656
- text-shadow: 0 0 2px #222 !important;
1657
- text-shadow: 0 0 0.2rem #222 !important;
1658
- }
1659
-
1660
- .bf-t-italic {
1661
- font-style: italic !important;
1662
- }
1663
-
1664
- .bf-t-style-normal {
1665
- font-style: normal !important;
1666
- }
1667
-
1668
- .bf-t-weight-300 {
1669
- font-weight: 300 !important;
1670
- }
1671
-
1672
- .bf-t-weight-400 {
1673
- font-weight: 400 !important;
1674
- }
1675
-
1676
- .bf-t-weight-500 {
1677
- font-weight: 500 !important;
1678
- }
1679
-
1680
- .bf-t-weight-600 {
1681
- font-weight: 600 !important;
1682
- }
1683
-
1684
- .bf-t-weight-700 {
1685
- font-weight: 700 !important;
1686
- }
1687
-
1688
- .bf-t-weight-800 {
1689
- font-weight: 800 !important;
2140
+ margin-bottom: var(--bf-spacing-xl) !important;
1690
2141
  }
1691
2142
 
1692
- .bf-text-break {
1693
- word-wrap: break-word !important;
2143
+ .bf-m-4,
2144
+ .bf-m-b-4 {
2145
+ margin-bottom: var(--bf-spacing-xxl) !important;
1694
2146
  }
1695
2147
 
1696
- .bf-t-truncate {
1697
- max-width: 100% !important;
1698
- overflow: hidden !important;
1699
- text-overflow: ellipsis !important;
1700
- white-space: nowrap !important;
1701
- word-wrap: normal !important;
2148
+ .bf-m-t-1 {
2149
+ margin-top: var(--bf-spacing-md) !important;
1702
2150
  }
1703
2151
 
1704
- .bf-t-truncate--multiline-2 {
1705
- overflow: hidden !important;
1706
- text-overflow: ellipsis !important;
1707
- display: -webkit-box !important;
1708
- line-clamp: 2 !important;
1709
- -webkit-line-clamp: 2 !important;
1710
- -webkit-box-orient: vertical !important;
2152
+ .bf-m-t-2 {
2153
+ margin-top: var(--bf-spacing-lg) !important;
1711
2154
  }
1712
2155
 
1713
- .bf-t-truncate--multiline-3 {
1714
- overflow: hidden !important;
1715
- text-overflow: ellipsis !important;
1716
- display: -webkit-box !important;
1717
- line-clamp: 3 !important;
1718
- -webkit-line-clamp: 3 !important;
1719
- -webkit-box-orient: vertical !important;
2156
+ .bf-m-t-3 {
2157
+ margin-top: var(--bf-spacing-xl) !important;
1720
2158
  }
1721
2159
 
1722
- .bf-no-select {
1723
- -webkit-user-select: none !important;
1724
- -moz-user-select: none !important;
1725
- user-select: none !important;
1726
- -webkit-touch-callout: none !important;
2160
+ .bf-m-t-4 {
2161
+ margin-top: var(--bf-spacing-xxl) !important;
1727
2162
  }
1728
2163
 
1729
- .bf-font-sans-serif {
1730
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !important;
2164
+ .bf-p-0 {
2165
+ padding: 0 !important;
1731
2166
  }
1732
2167
 
1733
- .bf-font-serif {
1734
- font-family: Georgia, Times, "Times New Roman", serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !important;
2168
+ .bf-p-t-0 {
2169
+ padding-top: 0 !important;
1735
2170
  }
1736
2171
 
1737
- .bf-font-monospace {
1738
- font-family: Menlo, Consolas, "Roboto Mono", "Ubuntu Monospace", "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !important;
2172
+ .bf-p-b-0 {
2173
+ padding-bottom: 0 !important;
1739
2174
  }
1740
2175
 
1741
- .bf-h1,
1742
- .bf-h2,
1743
- .bf-h3,
1744
- .bf-h4,
1745
- .bf-h5,
1746
- .bf-h6 {
1747
- font-weight: 600 !important;
1748
- margin-top: 0 !important;
1749
- line-height: 1.2 !important;
1750
- margin-bottom: 10px !important;
1751
- margin-bottom: 1rem !important;
2176
+ .bf-p-l-0 {
2177
+ padding-left: 0 !important;
1752
2178
  }
1753
2179
 
1754
- .bf-h1 {
1755
- font-size: 36px !important;
1756
- font-size: 3.6rem !important;
2180
+ .bf-p-r-0 {
2181
+ padding-right: 0 !important;
1757
2182
  }
1758
2183
 
1759
- .bf-h2 {
1760
- font-size: 30px !important;
1761
- font-size: 3rem !important;
2184
+ /* .bf-p-N is the historical short form of .bf-p-b-N; both set padding-bottom. */
2185
+ .bf-p-1,
2186
+ .bf-p-b-1 {
2187
+ padding-bottom: var(--bf-spacing-md) !important;
1762
2188
  }
1763
2189
 
1764
- .bf-h3 {
1765
- font-size: 24px !important;
1766
- font-size: 2.4rem !important;
2190
+ .bf-p-2,
2191
+ .bf-p-b-2 {
2192
+ padding-bottom: var(--bf-spacing-lg) !important;
1767
2193
  }
1768
2194
 
1769
- .bf-h4 {
1770
- font-size: 20px !important;
1771
- font-size: 2rem !important;
2195
+ .bf-p-3,
2196
+ .bf-p-b-3 {
2197
+ padding-bottom: var(--bf-spacing-xl) !important;
1772
2198
  }
1773
2199
 
1774
- .bf-h5,
1775
- .bf-h6 {
1776
- font-size: 16px !important;
1777
- font-size: 1.6rem !important;
2200
+ .bf-p-4,
2201
+ .bf-p-b-4 {
2202
+ padding-bottom: var(--bf-spacing-xxl) !important;
1778
2203
  }
1779
2204
 
1780
- p.bf-lead {
1781
- font-size: 120% !important;
2205
+ .bf-p-t-1 {
2206
+ padding-top: var(--bf-spacing-md) !important;
1782
2207
  }
1783
2208
 
1784
- body.bf-responsive-typography {
1785
- --body-rt-font-size-flex: calc(1.5rem + 3 * ((100vw - 320px) / 680));
1786
- --body-rt-font-size-max: 1.8rem;
2209
+ .bf-p-t-2 {
2210
+ padding-top: var(--bf-spacing-lg) !important;
1787
2211
  }
1788
2212
 
1789
- @media (min-width: 320px) {
1790
- body.bf-responsive-typography {
1791
- font-size: var(--body-rt-font-size-flex);
1792
- }
2213
+ .bf-p-t-3 {
2214
+ padding-top: var(--bf-spacing-xl) !important;
1793
2215
  }
1794
- @media (min-width: 1000px) {
1795
- body.bf-responsive-typography {
1796
- font-size: var(--body-rt-font-size-max);
1797
- }
2216
+
2217
+ .bf-p-t-4 {
2218
+ padding-top: var(--bf-spacing-xxl) !important;
1798
2219
  }
2220
+ /* .bf-btn and variants. */
2221
+
1799
2222
  .bf-btn {
1800
2223
  display: inline-block;
1801
2224
  cursor: pointer;
1802
- color: #222;
1803
- padding: 0.6666666667rem 1.3333333333rem;
2225
+ color: var(--bf-dark);
2226
+ padding: calc(var(--bf-spacing-xl) / 3) calc(calc(var(--bf-spacing-xl) / 3) * 2);
1804
2227
  line-height: normal;
1805
2228
  text-align: center;
1806
2229
  margin: 0;
1807
2230
  background-clip: padding-box;
1808
2231
  vertical-align: baseline;
1809
2232
  overflow: visible;
1810
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
2233
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
1811
2234
  -webkit-user-select: none;
1812
2235
  -moz-user-select: none;
1813
2236
  user-select: none;
1814
- border-radius: 0.25rem;
2237
+ border-radius: var(--bf-spacing-sm);
2238
+
1815
2239
  border: 0;
1816
2240
  background-image: none;
1817
- background-color: #ccc;
2241
+ background-color: var(--bf-gray-light);
1818
2242
  transition: all 0.2s;
1819
2243
  }
1820
- .bf-btn:hover, .bf-btn:active, .bf-btn:focus {
1821
- text-decoration: none;
1822
- color: #222;
1823
- background: rgb(178.5, 178.5, 178.5);
2244
+
2245
+ .bf-btn:focus {
2246
+ outline: 0;
1824
2247
  }
1825
- .bf-btn:active, .bf-btn:focus {
1826
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
2248
+
2249
+ .bf-btn:hover,
2250
+ .bf-btn:active,
2251
+ .bf-btn:focus {
2252
+ text-decoration: none;
2253
+ color: var(--bf-dark);
2254
+ background: rgb(184 184 184); /* --bf-gray-light, ~10% darker */
1827
2255
  }
2256
+
2257
+ .bf-btn:active,
1828
2258
  .bf-btn:focus {
1829
- outline: 0;
2259
+ box-shadow: 0 0 0 3px rgb(0 0 0 / 15%);
1830
2260
  }
2261
+
2262
+ /* Primary: white on --bf-blue (WCAG AA 4.5:1). */
1831
2263
  .bf-btn.bf-btn--primary {
1832
- color: #fff;
1833
- background: #007bff;
2264
+ color: var(--bf-white);
2265
+ background: var(--bf-blue);
1834
2266
  }
1835
- .bf-btn.bf-btn--primary:hover, .bf-btn.bf-btn--primary:active, .bf-btn.bf-btn--primary:focus {
1836
- color: #fff;
1837
- background: rgb(0, 98.4, 204);
2267
+
2268
+ .bf-btn.bf-btn--primary:hover,
2269
+ .bf-btn.bf-btn--primary:active,
2270
+ .bf-btn.bf-btn--primary:focus {
2271
+ color: var(--bf-white);
2272
+ background: var(--bf-blue-light);
1838
2273
  }
1839
- .bf-btn.bf-btn--primary:active, .bf-btn.bf-btn--primary:focus {
1840
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.25);
2274
+
2275
+ .bf-btn.bf-btn--primary:active,
2276
+ .bf-btn.bf-btn--primary:focus {
2277
+ box-shadow: 0 0 0 3px rgb(0 65 135 / 35%);
1841
2278
  }
1842
2279
 
1843
- fieldset[disabled] .bf-btn,
1844
- .bf-btn[disabled],
1845
- .bf-btn:disabled,
1846
- .bf-btn[aria-disabled=true] {
2280
+ :where(
2281
+ fieldset[disabled] .bf-btn,
2282
+ .bf-btn[disabled],
2283
+ .bf-btn:disabled,
2284
+ .bf-btn[aria-disabled='true']
2285
+ ) {
1847
2286
  cursor: default !important;
1848
2287
  cursor: not-allowed !important;
1849
2288
  pointer-events: none !important;
@@ -1852,13 +2291,24 @@ fieldset[disabled] .bf-btn,
1852
2291
  user-select: none !important;
1853
2292
  box-shadow: none !important;
1854
2293
  opacity: 0.5 !important;
1855
- background-color: #ccc;
2294
+ background-color: var(--bf-gray-light);
2295
+ outline: none !important;
1856
2296
  }
1857
2297
 
2298
+ @media (forced-colors: active) {
2299
+ .bf-btn {
2300
+ border: 1px solid ButtonText;
2301
+ }
2302
+ }
2303
+ /* Focused / invalid / disabled form state classes. */
2304
+
1858
2305
  .bf-focused {
1859
- transition: border 0.2s, background-color 0.2s, box-shadow 0.2s !important;
1860
- border-color: #007bff !important;
1861
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.25) !important;
2306
+ transition:
2307
+ border 0.2s,
2308
+ background-color 0.2s,
2309
+ box-shadow 0.2s !important;
2310
+ border-color: var(--bf-blue) !important;
2311
+ box-shadow: 0 0 0 3px rgb(0 86 179 / 25%) !important;
1862
2312
  }
1863
2313
 
1864
2314
  .bf-disabled,
@@ -1877,8 +2327,8 @@ fieldset[disabled] .bf-btn,
1877
2327
  user-select: none !important;
1878
2328
  box-shadow: none !important;
1879
2329
  opacity: 0.5 !important;
1880
- background-color: #fff;
1881
- border-color: #999;
2330
+ background-color: var(--bf-white);
2331
+ border-color: var(--bf-gray);
1882
2332
  }
1883
2333
 
1884
2334
  label.bf-disabled {
@@ -1887,9 +2337,9 @@ label.bf-disabled {
1887
2337
  }
1888
2338
 
1889
2339
  button.bf-disabled,
1890
- [type=button].bf-disabled,
1891
- [type=reset].bf-disabled,
1892
- [type=submit].bf-disabled,
2340
+ [type='button'].bf-disabled,
2341
+ [type='reset'].bf-disabled,
2342
+ [type='submit'].bf-disabled,
1893
2343
  .bf-btn.bf-disabled {
1894
2344
  cursor: default;
1895
2345
  cursor: not-allowed;
@@ -1899,25 +2349,28 @@ button.bf-disabled,
1899
2349
  user-select: none;
1900
2350
  box-shadow: none;
1901
2351
  opacity: 0.5;
1902
- color: #222;
1903
- background: #ccc;
1904
- }
1905
- button.bf-disabled:hover, button.bf-disabled:active, button.bf-disabled:focus,
1906
- [type=button].bf-disabled:hover,
1907
- [type=button].bf-disabled:active,
1908
- [type=button].bf-disabled:focus,
1909
- [type=reset].bf-disabled:hover,
1910
- [type=reset].bf-disabled:active,
1911
- [type=reset].bf-disabled:focus,
1912
- [type=submit].bf-disabled:hover,
1913
- [type=submit].bf-disabled:active,
1914
- [type=submit].bf-disabled:focus,
2352
+ color: var(--bf-dark);
2353
+ background: var(--bf-gray-light);
2354
+ }
2355
+
2356
+ button.bf-disabled:hover,
2357
+ button.bf-disabled:active,
2358
+ button.bf-disabled:focus,
2359
+ [type='button'].bf-disabled:hover,
2360
+ [type='button'].bf-disabled:active,
2361
+ [type='button'].bf-disabled:focus,
2362
+ [type='reset'].bf-disabled:hover,
2363
+ [type='reset'].bf-disabled:active,
2364
+ [type='reset'].bf-disabled:focus,
2365
+ [type='submit'].bf-disabled:hover,
2366
+ [type='submit'].bf-disabled:active,
2367
+ [type='submit'].bf-disabled:focus,
1915
2368
  .bf-btn.bf-disabled:hover,
1916
2369
  .bf-btn.bf-disabled:active,
1917
2370
  .bf-btn.bf-disabled:focus {
1918
2371
  box-shadow: none;
1919
- color: #222;
1920
- background: #ccc;
2372
+ color: var(--bf-dark);
2373
+ background: var(--bf-gray-light);
1921
2374
  }
1922
2375
 
1923
2376
  .bf-btn--primary.bf-disabled {
@@ -1929,21 +2382,109 @@ button.bf-disabled:hover, button.bf-disabled:active, button.bf-disabled:focus,
1929
2382
  user-select: none;
1930
2383
  box-shadow: none;
1931
2384
  opacity: 0.5;
1932
- color: #fff;
1933
- background: #007bff;
2385
+ color: var(--bf-white);
2386
+ background: var(--bf-blue);
1934
2387
  }
1935
- .bf-btn--primary.bf-disabled:hover, .bf-btn--primary.bf-disabled:active, .bf-btn--primary.bf-disabled:focus {
2388
+
2389
+ .bf-btn--primary.bf-disabled:hover,
2390
+ .bf-btn--primary.bf-disabled:active,
2391
+ .bf-btn--primary.bf-disabled:focus {
1936
2392
  box-shadow: none;
1937
- color: #fff;
1938
- background: #007bff;
2393
+ color: var(--bf-white);
2394
+ background: var(--bf-blue);
1939
2395
  }
1940
2396
 
1941
2397
  .bf-invalid,
1942
2398
  .bf-invalid:focus {
1943
- color: #f00 !important;
1944
- border-color: #f00 !important;
1945
- box-shadow: 0 0 0 3px rgba(255, 0, 0, 0.25) !important;
2399
+ color: var(--bf-red) !important;
2400
+ border-color: var(--bf-red) !important;
2401
+ box-shadow: 0 0 0 3px rgb(255 0 0 / 25%) !important;
2402
+ }
2403
+ /* Custom radio / checkbox appearance. */
2404
+
2405
+ .custom-checkbox-wrapper [type='checkbox'] {
2406
+ -webkit-appearance: none;
2407
+ -moz-appearance: none;
2408
+ appearance: none;
2409
+ height: 1.8rem;
2410
+ width: 1.8rem;
2411
+ vertical-align: top;
2412
+ position: relative;
2413
+ border: 1px solid var(--bf-gray);
2414
+ }
2415
+
2416
+ .custom-checkbox-wrapper [type='checkbox'] + label {
2417
+ line-height: 1.8rem;
2418
+ vertical-align: top;
2419
+ margin-left: var(--bf-spacing-md);
2420
+ }
2421
+
2422
+ *[dir='rtl'] .custom-checkbox-wrapper [type='checkbox'] + label,
2423
+ .custom-checkbox-wrapper [type='checkbox'][dir='rtl'] + label {
2424
+ margin-left: 0;
2425
+ margin-right: var(--bf-spacing-md);
2426
+ }
2427
+
2428
+ .custom-checkbox-wrapper [type='checkbox']::after {
2429
+ content: '';
2430
+ display: block;
2431
+ position: absolute;
2432
+ width: 0.6rem;
2433
+ height: 0.8rem;
2434
+ border: 2px solid var(--bf-white);
2435
+ border-top: 0;
2436
+ border-left: 0;
2437
+ left: 35%;
2438
+ top: 20%;
2439
+ transform: rotate(43deg);
2440
+ }
2441
+
2442
+ .custom-checkbox-wrapper [type='checkbox']:checked {
2443
+ background-color: var(--bf-blue);
2444
+ border-color: var(--bf-black);
2445
+ }
2446
+
2447
+ .custom-radio-wrapper [type='radio'] {
2448
+ -webkit-appearance: none;
2449
+ -moz-appearance: none;
2450
+ appearance: none;
2451
+ height: 1.8rem;
2452
+ width: 1.8rem;
2453
+ vertical-align: top;
2454
+ position: relative;
2455
+ border: 1px solid var(--bf-gray);
2456
+ }
2457
+
2458
+ .custom-radio-wrapper [type='radio'] + label {
2459
+ line-height: 1.8rem;
2460
+ vertical-align: top;
2461
+ margin-left: var(--bf-spacing-md);
2462
+ }
2463
+
2464
+ *[dir='rtl'] .custom-radio-wrapper [type='radio'] + label,
2465
+ .custom-radio-wrapper [type='radio'][dir='rtl'] + label {
2466
+ margin-left: 0;
2467
+ margin-right: var(--bf-spacing-md);
2468
+ }
2469
+
2470
+ .custom-radio-wrapper [type='radio']::after {
2471
+ content: '';
2472
+ display: block;
2473
+ position: absolute;
2474
+ width: 1.8rem;
2475
+ height: 1.8rem;
2476
+ left: -0.05rem;
2477
+ top: -0.05rem;
2478
+ border-radius: 50%;
2479
+ background: var(--bf-white);
2480
+ transform: scale(0.35);
2481
+ }
2482
+
2483
+ .custom-radio-wrapper [type='radio']:checked {
2484
+ background-color: var(--bf-blue);
2485
+ border-color: var(--bf-black);
1946
2486
  }
2487
+ /* Unstyled and inline list helpers. */
1947
2488
 
1948
2489
  .bf-list-unstyled,
1949
2490
  menu ul.bf-list-unstyled,
@@ -1961,6 +2502,58 @@ dd.bf-list-unstyled {
1961
2502
  dt {
1962
2503
  font-weight: 700;
1963
2504
  }
2505
+ /* Filter helpers (.bf-filter-*). */
2506
+
2507
+ .bf-filter-invert {
2508
+ filter: invert(100%) !important;
2509
+ }
2510
+
2511
+ .bf-filter-dim-images {
2512
+ filter: brightness(0.8) contrast(1.2);
2513
+ }
2514
+
2515
+ .bf-filter-grayscale {
2516
+ filter: grayscale(1) !important;
2517
+ }
2518
+
2519
+ .bf-filter-blur {
2520
+ filter: blur(0.3rem) !important;
2521
+ }
2522
+
2523
+ .bf-filter-none {
2524
+ filter: none !important;
2525
+ }
2526
+ /* Table padding, overflow, and zebra helpers. */
2527
+
2528
+ .bf-table th,
2529
+ .bf-table td {
2530
+ padding: var(--bf-spacing-lg);
2531
+ border-bottom: 1px solid var(--bf-gray);
2532
+ margin-bottom: var(--bf-spacing-md);
2533
+ }
2534
+
2535
+ /* Horizontal scroll wrapper. */
2536
+ .bf-table-responsive {
2537
+ overflow: auto hidden;
2538
+ -ms-overflow-style: scrollbar;
2539
+ }
2540
+
2541
+ .bf-table-responsive table {
2542
+ width: 100%;
2543
+ margin-bottom: var(--bf-spacing-md);
2544
+ }
2545
+
2546
+ /* Prefer always-visible scrollbars on WebKit. */
2547
+ .bf-table-responsive.scrollbar {
2548
+ -webkit-overflow-scrolling: auto;
2549
+ }
2550
+
2551
+ /* Odd-row striping. */
2552
+ .bf-table--zebra tbody tr:nth-child(odd),
2553
+ .bf-table-responsive--zebra tbody tr:nth-child(odd) {
2554
+ background-color: var(--bf-gray-light-extra);
2555
+ }
2556
+ /* Responsive embed box (Bootstrap-style aspect ratio). */
1964
2557
 
1965
2558
  .bf-embed-responsive {
1966
2559
  position: relative;
@@ -1969,15 +2562,22 @@ dt {
1969
2562
  padding: 0;
1970
2563
  overflow: hidden;
1971
2564
  }
2565
+
1972
2566
  .bf-embed-responsive::before {
1973
2567
  display: block;
1974
- content: "";
1975
- padding-top: 56.25%;
2568
+ content: '';
2569
+ padding-top: 56.25%; /* 16:9 by default */
1976
2570
  }
1977
- .bf-embed-responsive .bf-embed-responsive--4-3::before {
2571
+
2572
+ .bf-embed-responsive.bf-embed-responsive--4-3::before {
1978
2573
  padding-top: 75%;
1979
2574
  }
1980
- .bf-embed-responsive .bf-embed-responsive--item, .bf-embed-responsive iframe, .bf-embed-responsive embed, .bf-embed-responsive object, .bf-embed-responsive video {
2575
+
2576
+ .bf-embed-responsive .bf-embed-responsive--item,
2577
+ .bf-embed-responsive iframe,
2578
+ .bf-embed-responsive embed,
2579
+ .bf-embed-responsive object,
2580
+ .bf-embed-responsive video {
1981
2581
  position: absolute;
1982
2582
  top: 0;
1983
2583
  bottom: 0;
@@ -1986,120 +2586,155 @@ dt {
1986
2586
  height: 100%;
1987
2587
  border: 0;
1988
2588
  }
2589
+ /* Reduced-motion opt-in (cssremedy-style). */
1989
2590
 
1990
- .bf-table th,
1991
- .bf-table td {
1992
- padding: 1rem;
1993
- border-bottom: 1px solid #999;
1994
- margin-bottom: 0.5rem;
2591
+ @media (prefers-reduced-motion: reduce) {
2592
+ .bf-reduced-motion,
2593
+ .bf-reduced-motion::before,
2594
+ .bf-reduced-motion::after,
2595
+ .bf-reduced-motion *,
2596
+ .bf-reduced-motion *::before,
2597
+ .bf-reduced-motion *::after {
2598
+ animation-delay: -1ms !important;
2599
+ animation-duration: 1ms !important;
2600
+ animation-iteration-count: 1 !important;
2601
+ background-attachment: initial !important;
2602
+ scroll-behavior: auto !important;
2603
+ transition-delay: 0s !important;
2604
+ transition-duration: 0s !important;
2605
+ }
1995
2606
  }
2607
+ /* Opt-in font-smoothing (.bf-antialiased / .bf-subpixel-antialiased).
2608
+ * Names match Tailwind. Not applied globally: Apple recommends subpixel for body text on macOS. */
1996
2609
 
1997
- .bf-table-responsive {
1998
- overflow: auto hidden;
1999
- -ms-overflow-style: scrollbar;
2610
+ .bf-antialiased {
2611
+ -webkit-font-smoothing: antialiased;
2612
+ -moz-osx-font-smoothing: grayscale;
2000
2613
  }
2001
2614
 
2002
- .bf-table-responsive table {
2003
- width: 100%;
2004
- margin-bottom: 0.5rem;
2615
+ .bf-subpixel-antialiased {
2616
+ -webkit-font-smoothing: auto;
2617
+ -moz-osx-font-smoothing: auto;
2005
2618
  }
2619
+ /* Opt-in color-scheme. Put one on <html> so the UA themes native widgets
2620
+ * (date pickers, select popups, autofill, scrollbars) to match the build. */
2006
2621
 
2007
- .bf-table-responsive.scrollbar {
2008
- -webkit-overflow-scrolling: auto;
2622
+ .bf-scheme-light {
2623
+ color-scheme: light;
2009
2624
  }
2010
2625
 
2011
- .bf-table--zebra tbody tr:nth-child(odd),
2012
- .bf-table-responsive--zebra tbody tr:nth-child(odd) {
2013
- background-color: #e9e9e9;
2626
+ .bf-scheme-dark {
2627
+ color-scheme: dark;
2628
+ }
2629
+
2630
+ .bf-scheme-auto {
2631
+ color-scheme: light dark;
2632
+ }
2633
+ /* Opt-in minimum target size (WCAG 2.5.8, 24x24 CSS px).
2634
+ * Grows the hit box only; the painted control keeps its size. */
2635
+
2636
+ .bf-target-size,
2637
+ .bf-target-size a,
2638
+ .bf-target-size button,
2639
+ .bf-target-size [type='button'],
2640
+ .bf-target-size [type='reset'],
2641
+ .bf-target-size [type='submit'],
2642
+ .bf-target-size [type='checkbox'],
2643
+ .bf-target-size [type='radio'],
2644
+ .bf-target-size select,
2645
+ .bf-target-size summary,
2646
+ .bf-target-size .bf-btn {
2647
+ min-block-size: 24px;
2648
+ min-inline-size: 24px;
2649
+ }
2650
+
2651
+ /* Inline links in running text are exempt (WCAG 2.5.8 inline exception). */
2652
+ .bf-target-size p a,
2653
+ .bf-target-size li a,
2654
+ .bf-target-size td a,
2655
+ .bf-target-size dd a {
2656
+ min-block-size: 0;
2657
+ min-inline-size: 0;
2658
+ }
2659
+ /* Opt-in accent-color: native checkbox, radio, range and progress follow
2660
+ * --bf-blue instead of the UA default. Put it on <html> or any container. */
2661
+
2662
+ .bf-accent-native {
2663
+ accent-color: var(--bf-blue);
2014
2664
  }
2665
+ /* Print styles (adapted from h5bp main.css). */
2015
2666
 
2016
- /* main.css 3.0.0 | MIT License | https://github.com/h5bp/main.css#readme */
2017
- /* ==========================================================================
2018
- Print styles.
2019
- Inlined to avoid the additional HTTP request:
2020
- https://www.phpied.com/delay-loading-your-print-css/
2021
- ========================================================================== */
2022
2667
  @media print {
2023
2668
  *,
2024
2669
  *::before,
2025
2670
  *::after {
2026
2671
  background: #fff !important;
2027
2672
  color: #000 !important;
2028
- /* Black prints faster */
2029
2673
  box-shadow: none !important;
2030
2674
  text-shadow: none !important;
2031
2675
  }
2676
+
2032
2677
  a,
2033
2678
  a:visited {
2034
2679
  text-decoration: underline;
2035
2680
  }
2681
+
2036
2682
  a[href]::after {
2037
- content: " (" attr(href) ")";
2683
+ content: ' (' attr(href) ')';
2038
2684
  }
2685
+
2039
2686
  abbr[title]::after {
2040
- content: " (" attr(title) ")";
2687
+ content: ' (' attr(title) ')';
2041
2688
  }
2042
- /*
2043
- * Don't show links that are fragment identifiers,
2044
- * or use the `javascript:` pseudo protocol
2045
- */
2046
- a[href^="#"]::after,
2047
- a[href^="javascript:"]::after {
2048
- content: "";
2689
+
2690
+ a[href^='#']::after,
2691
+ a[href^='javascript:']::after {
2692
+ content: '';
2049
2693
  }
2694
+
2050
2695
  pre {
2051
2696
  white-space: pre-wrap !important;
2052
2697
  }
2698
+
2053
2699
  pre,
2054
2700
  blockquote {
2055
2701
  border: 1px solid #999;
2056
2702
  page-break-inside: avoid;
2057
2703
  }
2704
+
2058
2705
  tr,
2059
2706
  img {
2060
2707
  page-break-inside: avoid;
2061
2708
  }
2709
+
2062
2710
  p,
2063
2711
  h2,
2064
2712
  h3 {
2065
2713
  orphans: 3;
2066
2714
  widows: 3;
2067
2715
  }
2716
+
2068
2717
  h2,
2069
2718
  h3 {
2070
2719
  page-break-after: avoid;
2071
2720
  }
2072
- }
2073
- @media print {
2721
+
2722
+ /* Framework print tweaks. */
2074
2723
  body,
2075
2724
  .bf-container {
2076
2725
  min-width: 992px !important;
2077
2726
  }
2727
+
2078
2728
  .bf-table-responsive {
2079
2729
  overflow: auto;
2080
2730
  }
2731
+
2081
2732
  .bf-table-responsive table {
2082
2733
  width: auto;
2083
2734
  }
2735
+
2084
2736
  .bf-table-responsive table,
2085
2737
  .bf-table {
2086
2738
  border-collapse: collapse !important;
2087
2739
  }
2088
2740
  }
2089
- @media (prefers-reduced-motion: reduce) {
2090
- .bf-reduced-motion,
2091
- .bf-reduced-motion::before,
2092
- .bf-reduced-motion::after,
2093
- .bf-reduced-motion *,
2094
- .bf-reduced-motion *::before,
2095
- .bf-reduced-motion *::after {
2096
- animation-delay: -1ms !important;
2097
- animation-duration: 1ms !important;
2098
- animation-iteration-count: 1 !important;
2099
- background-attachment: initial !important;
2100
- scroll-behavior: auto !important;
2101
- transition-delay: 0s !important;
2102
- transition-duration: 0s !important;
2103
- }
2104
- }
2105
- /*# sourceMappingURL=bullframe.css.map */