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