bullframe.css 5.0.1 → 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 (142) hide show
  1. package/CHANGELOG.md +276 -234
  2. package/LICENSE +2 -2
  3. package/README.md +34 -455
  4. package/dist/css/bullframe-classless-dark.css +1218 -932
  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 +1316 -936
  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 +1038 -715
  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 +1943 -1459
  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 +2005 -1489
  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 +769 -491
  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 +1911 -1383
  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 +71 -29
  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/css/bullframe-classless-dark-prefers.css +0 -1340
  40. package/dist/css/bullframe-classless-dark-prefers.css.map +0 -1
  41. package/dist/css/bullframe-classless-dark-prefers.min.css +0 -3
  42. package/dist/css/bullframe-classless-dark-prefers.min.css.map +0 -1
  43. package/dist/css/bullframe-dark-prefers.css +0 -2356
  44. package/dist/css/bullframe-dark-prefers.css.map +0 -1
  45. package/dist/css/bullframe-dark-prefers.min.css +0 -3
  46. package/dist/css/bullframe-dark-prefers.min.css.map +0 -1
  47. package/dist/docs/demo/css/style.css +0 -131
  48. package/dist/docs/demo/icons/android-chrome-192x192.png +0 -0
  49. package/dist/docs/demo/icons/android-chrome-384x384.png +0 -0
  50. package/dist/docs/demo/icons/apple-touch-icon.png +0 -0
  51. package/dist/docs/demo/icons/favicon-16x16.png +0 -0
  52. package/dist/docs/demo/icons/favicon-32x32.png +0 -0
  53. package/dist/docs/demo/icons/favicon.ico +0 -0
  54. package/dist/docs/demo/icons/mstile-150x150.png +0 -0
  55. package/dist/docs/demo/icons/safari-pinned-tab.svg +0 -28
  56. package/dist/docs/demo/images/logo.png +0 -0
  57. package/dist/docs/demo/images/placeholder-img-130x140.jpg +0 -0
  58. package/dist/docs/demo/images/placeholder-img-16x16.jpg +0 -0
  59. package/dist/docs/demo/images/placeholder-img-800x400.jpg +0 -0
  60. package/dist/docs/demo/images/video-poster.png +0 -0
  61. package/dist/docs/demo/index.html +0 -1152
  62. package/dist/docs/github-readme/bf-logo-full-dark.png +0 -0
  63. package/dist/docs/github-readme/bf-logo-full-light.png +0 -0
  64. package/prettier.config.js +0 -26
  65. package/src/docs/demo/css/style.css +0 -131
  66. package/src/docs/demo/icons/android-chrome-192x192.png +0 -0
  67. package/src/docs/demo/icons/android-chrome-384x384.png +0 -0
  68. package/src/docs/demo/icons/apple-touch-icon.png +0 -0
  69. package/src/docs/demo/icons/favicon-16x16.png +0 -0
  70. package/src/docs/demo/icons/favicon-32x32.png +0 -0
  71. package/src/docs/demo/icons/favicon.ico +0 -0
  72. package/src/docs/demo/icons/mstile-150x150.png +0 -0
  73. package/src/docs/demo/icons/safari-pinned-tab.svg +0 -28
  74. package/src/docs/demo/images/logo.png +0 -0
  75. package/src/docs/demo/images/placeholder-img-130x140.jpg +0 -0
  76. package/src/docs/demo/images/placeholder-img-16x16.jpg +0 -0
  77. package/src/docs/demo/images/placeholder-img-800x400.jpg +0 -0
  78. package/src/docs/demo/images/video-poster.png +0 -0
  79. package/src/docs/demo/index.html +0 -1152
  80. package/src/docs/github-readme/bf-logo-full-dark.png +0 -0
  81. package/src/docs/github-readme/bf-logo-full-light.png +0 -0
  82. package/src/scss/bullframe-classless-dark-prefers.scss +0 -2
  83. package/src/scss/bullframe-classless-dark.scss +0 -2
  84. package/src/scss/bullframe-classless-system-default.scss +0 -2
  85. package/src/scss/bullframe-classless.scss +0 -49
  86. package/src/scss/bullframe-dark-prefers.scss +0 -2
  87. package/src/scss/bullframe-dark.scss +0 -2
  88. package/src/scss/bullframe-system-default.scss +0 -2
  89. package/src/scss/bullframe-utilities.scss +0 -21
  90. package/src/scss/bullframe.scss +0 -49
  91. package/src/scss/custom/_author-styles.scss +0 -5
  92. package/src/scss/forms/_forms-normalization.scss +0 -316
  93. package/src/scss/forms/_forms-styling-radio-checkbox.scss +0 -82
  94. package/src/scss/forms/_forms-styling-range.scss +0 -113
  95. package/src/scss/forms/_forms-styling-select.scss +0 -65
  96. package/src/scss/forms/_forms-styling.scss +0 -131
  97. package/src/scss/miscellaneous/_misc-accessibility.scss +0 -36
  98. package/src/scss/miscellaneous/_misc-anchors.scss +0 -37
  99. package/src/scss/miscellaneous/_misc-embedded-content.scss +0 -117
  100. package/src/scss/miscellaneous/_misc-focus.scss +0 -79
  101. package/src/scss/miscellaneous/_misc-interactive.scss +0 -48
  102. package/src/scss/miscellaneous/_misc-layout.scss +0 -30
  103. package/src/scss/miscellaneous/_misc-lists.scss +0 -53
  104. package/src/scss/miscellaneous/_misc-scrolling.scss +0 -5
  105. package/src/scss/miscellaneous/_misc-shame.scss +0 -37
  106. package/src/scss/miscellaneous/_misc-tables.scss +0 -53
  107. package/src/scss/mixins/_mixin-dark-prefers.scss +0 -414
  108. package/src/scss/mixins/_mixin-dark.scss +0 -396
  109. package/src/scss/mixins/_mixin-grid-flex.scss +0 -80
  110. package/src/scss/mixins/_mixin-layout.scss +0 -42
  111. package/src/scss/mixins/_mixin-texts.scss +0 -37
  112. package/src/scss/typography/_typography-blockquotes.scss +0 -28
  113. package/src/scss/typography/_typography-headings.scss +0 -45
  114. package/src/scss/typography/_typography-html-body.scss +0 -75
  115. package/src/scss/typography/_typography-misc.scss +0 -90
  116. package/src/scss/typography/_typography-monospaced-elements.scss +0 -59
  117. package/src/scss/utilities/_utility-buttons.scss +0 -73
  118. package/src/scss/utilities/_utility-debugging.scss +0 -31
  119. package/src/scss/utilities/_utility-embeds.scss +0 -34
  120. package/src/scss/utilities/_utility-filters.scss +0 -21
  121. package/src/scss/utilities/_utility-form-states.scss +0 -89
  122. package/src/scss/utilities/_utility-global-dark-classless.scss +0 -3
  123. package/src/scss/utilities/_utility-global-dark-prefers-classless.scss +0 -3
  124. package/src/scss/utilities/_utility-global-dark-prefers.scss +0 -3
  125. package/src/scss/utilities/_utility-global-dark-scrollbars.scss +0 -34
  126. package/src/scss/utilities/_utility-global-dark.scss +0 -4
  127. package/src/scss/utilities/_utility-global-system-default-classless.scss +0 -3
  128. package/src/scss/utilities/_utility-global-system-default.scss +0 -3
  129. package/src/scss/utilities/_utility-grid-system.scss +0 -140
  130. package/src/scss/utilities/_utility-layout.scss +0 -187
  131. package/src/scss/utilities/_utility-lists.scss +0 -17
  132. package/src/scss/utilities/_utility-print.scss +0 -101
  133. package/src/scss/utilities/_utility-reduced-motion.scss +0 -29
  134. package/src/scss/utilities/_utility-spacing.scss +0 -148
  135. package/src/scss/utilities/_utility-tables.scss +0 -34
  136. package/src/scss/utilities/_utility-texts.scss +0 -225
  137. package/src/scss/utilities/_utility-z-index.scss +0 -83
  138. package/src/scss/variables/_variables-breakpoints.scss +0 -6
  139. package/src/scss/variables/_variables-colors.scss +0 -34
  140. package/src/scss/variables/_variables-spacing.scss +0 -24
  141. package/src/scss/variables/_variables-texts.scss +0 -8
  142. package/vite.config.js +0 -116
@@ -1,5 +1,80 @@
1
- /*! Bullframe CSS v5.0.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,516 +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;
234
- }
235
- a:hover, a:focus {
236
- text-decoration: underline;
237
- color: #0056b3;
238
- }
493
+ pre {
494
+ margin: 0 0 var(--bf-spacing-xl) 0;
239
495
 
240
- a:not([href], [tabindex]) {
241
- color: inherit;
242
- text-decoration: none;
243
- }
496
+ display: block;
497
+ overflow: auto;
498
+ word-break: break-all; /* WebKit */
499
+ word-wrap: break-word;
500
+ white-space: pre;
501
+ hyphens: none;
244
502
 
245
- a:not([href], [class]),
246
- a:not([href], [class]):hover {
247
- color: inherit;
248
- text-decoration: none;
503
+ /* Keep scrollbars visible in legacy Edge.
504
+ * https://github.com/twbs/bootstrap/pull/30685 */
505
+ -ms-overflow-style: auto;
249
506
  }
250
507
 
251
- a:not([href], [tabindex]):focus {
252
- outline: 0;
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;
253
520
  }
254
521
 
255
- :focus:not(:focus-visible) {
256
- outline: none;
522
+ code {
523
+ word-wrap: break-word;
257
524
  }
258
525
 
259
- [tabindex="-1"]:focus:not(:focus-visible) {
260
- outline: 0 !important;
526
+ a > code {
527
+ color: inherit;
261
528
  }
262
529
 
263
- a:focus,
264
- input:focus {
265
- outline: 2px solid orange;
530
+ pre code {
531
+ font-size: inherit;
532
+ color: inherit;
533
+ word-break: normal;
266
534
  }
267
535
 
268
- :focus-visible {
269
- outline: 2px solid orange;
536
+ /* Forms */
537
+ /* Form control reset: inheritance, sizing, and UA quirks. */
538
+
539
+ :where(html input, button, select, optgroup, textarea) {
540
+ color: inherit;
541
+ font-family: inherit;
542
+ font-size: inherit;
543
+ line-height: inherit;
270
544
  }
271
545
 
272
- button:focus,
273
- [type=button]:focus,
274
- [type=reset]:focus,
275
- [type=submit]:focus,
276
- [type=email]:focus,
277
- [type=number]:focus,
278
- [type=password]:focus,
279
- [type=tel]:focus,
280
- [type=search]:focus,
281
- [type=text]:focus,
282
- [type=date]:focus,
283
- [type=datetime-local]:focus,
284
- [type=month]:focus,
285
- [type=time]:focus,
286
- [type=week]:focus,
287
- [type=url]:focus,
288
- [type=radio]:focus,
289
- [type=checkbox]:focus,
290
- input[list]:focus,
291
- select:focus,
292
- textarea:focus {
293
- outline: 0;
546
+ :where(html input, button, [type='radio'], [type='checkbox'], select, optgroup, textarea) {
547
+ margin: 0;
294
548
  }
295
549
 
296
- menu,
297
- ol,
298
- ul,
299
- dl {
300
- margin: 0 0 2rem 0;
301
- padding: 0;
550
+ :where(html input, select, textarea, legend) {
551
+ width: 100%;
302
552
  }
303
553
 
304
- menu ul,
305
- menu ol,
306
- ul ul,
307
- ul ol,
308
- ol ol,
309
- ol ul,
310
- dd {
311
- 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;
312
566
  }
313
567
 
314
- ul,
315
- ol {
316
- 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;
317
581
  }
318
582
 
319
- nav ol,
320
- nav ul {
321
- list-style: none;
322
- list-style-image: none;
323
- margin-left: 0;
583
+ :where([type='file']) {
584
+ display: block;
585
+ background-color: transparent;
324
586
  }
325
587
 
326
- dt {
327
- font-weight: 700;
588
+ :where(button, html input, select, textarea) {
589
+ background-image: none;
328
590
  }
329
591
 
330
- dd {
331
- margin-left: 0;
592
+ :where(input, select, textarea) {
593
+ vertical-align: baseline;
332
594
  }
333
595
 
334
- nav li::before {
335
- content: "​";
336
- position: absolute;
596
+ :where(form) {
597
+ margin: 0;
337
598
  }
338
599
 
339
- audio,
340
- canvas,
341
- progress,
342
- video {
343
- 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;
344
606
  }
345
607
 
346
- img,
347
- canvas,
348
- audio,
349
- video,
350
- iframe,
351
- object,
352
- embed {
608
+ :where(legend) {
609
+ display: table; /* Text wrapping in Edge / IE. */
353
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;
354
619
  }
355
620
 
356
- audio,
357
- video,
358
- canvas,
359
- img,
360
- svg {
361
- 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);
362
626
  }
363
627
 
364
- img {
365
- height: auto;
366
- border-style: none;
628
+ :where(label input, label select, label textarea) {
629
+ font-size: 110%;
367
630
  }
368
631
 
369
- figure {
370
- margin: 0;
632
+ ::-webkit-inner-spin-button {
633
+ height: auto;
371
634
  }
372
635
 
373
- figure,
374
- figcaption {
375
- display: block;
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;
376
644
  }
377
645
 
378
- figcaption {
379
- line-height: 1.375;
380
- font-size: 90%;
646
+ ::-webkit-color-swatch-wrapper {
647
+ padding: 0;
381
648
  }
382
649
 
383
- video {
384
- height: auto;
650
+ :where([type='search']) {
651
+ outline-offset: calc(-1 * var(--bf-spacing-sm));
385
652
  }
386
653
 
387
- audio {
388
- width: 100%;
654
+ :where(output) {
655
+ vertical-align: middle;
389
656
  }
390
657
 
391
- audio:not([controls]) {
392
- display: none;
393
- height: 0;
658
+ :where(button, select) {
659
+ text-transform: none;
394
660
  }
395
661
 
396
- svg:not(:root) {
397
- overflow: hidden;
662
+ :where(select) {
663
+ word-wrap: normal;
398
664
  }
399
665
 
400
- svg:not([fill]) {
401
- fill: currentColor;
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;
402
676
  }
403
677
 
404
- progress,
405
- meter {
406
- display: inline-block;
407
- vertical-align: baseline;
408
- width: 100%;
409
- max-width: 100%;
678
+ :where(optgroup) {
679
+ font-family: inherit;
680
+ font-size: inherit;
681
+ font-style: inherit; /* Families without a 600 face. */
682
+ font-weight: 600;
410
683
  }
411
684
 
412
- progress[value] {
413
- -webkit-appearance: none;
414
- -moz-appearance: none;
415
- appearance: none;
416
- border: none;
417
- height: 20px;
418
- height: 2rem;
419
- background: #ccc;
420
- color: #007bff;
421
- }
422
-
423
- progress[value]::-webkit-progress-bar {
424
- background: #ccc;
425
- }
426
-
427
- progress[value]::-webkit-progress-value {
428
- background: #007bff;
429
- }
430
-
431
- iframe {
432
- border-style: none;
433
- }
434
-
435
- address {
436
- font-style: normal;
437
- margin-bottom: 10px;
438
- margin-bottom: 1rem;
439
- line-height: inherit;
440
- }
441
-
442
- details > summary:first-of-type {
443
- display: list-item;
444
- }
445
-
446
- summary {
447
- cursor: pointer;
448
- font-weight: 700;
449
- word-break: break-all;
450
- }
451
-
452
- dialog {
453
- background-color: #fff;
454
- color: #222;
455
- border: none;
456
- border-radius: 0.25rem;
457
- padding: 20px;
458
- padding: 2rem;
459
- height: -moz-fit-content;
460
- height: fit-content;
461
- min-width: 25rem;
462
- max-width: calc(100vw - 3rem);
463
- }
464
- @media (min-width: 768px) {
465
- dialog {
466
- max-width: 50rem;
467
- }
468
- }
469
-
470
- dialog[open] {
471
- display: block !important;
472
- }
473
-
474
- dialog::backdrop {
475
- background: rgba(0, 0, 0, 0.4);
476
- }
477
-
478
- @media (prefers-reduced-motion: no-preference) {
479
- :root {
480
- scroll-behavior: smooth;
481
- }
482
- }
483
- table {
484
- caption-side: bottom;
485
- max-width: 100%;
486
- border-collapse: collapse;
487
- border-color: currentcolor;
488
- text-indent: 0;
489
- }
490
-
491
- thead,
492
- tbody,
493
- tfoot,
494
- tr,
495
- td,
496
- th {
497
- border-color: inherit;
498
- border-style: solid;
499
- border-width: 0;
500
- }
501
-
502
- thead th {
503
- vertical-align: bottom;
504
- }
505
-
506
- th,
507
- td {
508
- vertical-align: top;
509
- }
510
-
511
- th {
512
- text-align: inherit;
513
- text-align: -webkit-match-parent;
514
- font-weight: 700;
515
- }
516
-
517
- caption {
518
- padding-top: 0.5rem;
519
- padding-bottom: 0.5rem;
520
- color: #999;
521
- text-align: left;
522
- caption-side: bottom;
523
- line-height: 1.375;
524
- font-size: 90%;
525
- }
526
-
527
- /* Accessibility
528
- * ========================================================================== */
529
- /**
530
- * Change the cursor on busy elements in all browsers (opinionated).
531
- */
532
- :where([aria-busy=true i]) {
533
- cursor: progress;
534
- }
535
-
536
- /*
537
- * Change the cursor on disabled, not-editable, or otherwise
538
- * inoperable elements in all browsers (opinionated).
539
- */
540
- :where([aria-disabled=true i], [disabled]) {
541
- cursor: not-allowed;
542
- }
543
-
544
- /*
545
- * Change the display on visually hidden accessible elements
546
- * in all browsers (opinionated).
547
- */
548
- :where([aria-hidden=false i][hidden]) {
549
- display: initial;
550
- }
551
-
552
- :where([aria-hidden=false i][hidden]:not(:focus)) {
553
- clip: rect(0, 0, 0, 0);
554
- position: absolute;
555
- }
556
-
557
- html input,
558
- button,
559
- select,
560
- optgroup,
561
- textarea {
562
- color: inherit;
563
- font-family: inherit;
564
- font-size: inherit;
565
- line-height: inherit;
566
- }
567
-
568
- html input,
569
- button,
570
- [type=radio],
571
- [type=checkbox],
572
- select,
573
- optgroup,
574
- textarea {
575
- margin: 0;
576
- }
577
-
578
- html input,
579
- select,
580
- textarea,
581
- legend {
582
- width: 100%;
583
- }
584
-
585
- html label,
586
- button,
587
- [type=image],
588
- [type=submit],
589
- [type=reset],
590
- html [type=button],
591
- [type=radio],
592
- [type=checkbox] {
593
- width: auto;
594
- }
595
-
596
- html input,
597
- label,
598
- select,
599
- textarea,
600
- button,
601
- html [type=button],
602
- [type=reset],
603
- [type=submit],
604
- output {
605
- display: inline-block;
606
- }
607
-
608
- [type=file] {
609
- display: block;
610
- background-color: transparent;
611
- }
612
-
613
- button,
614
- html input,
615
- select,
616
- textarea {
617
- background-image: none;
618
- }
619
-
620
- input,
621
- select,
622
- textarea {
623
- vertical-align: baseline;
624
- }
625
-
626
- form {
627
- margin: 0;
628
- }
629
-
630
- fieldset {
631
- border: 0;
632
- padding: 0;
633
- margin: 0;
634
- min-width: 0;
635
- }
636
-
637
- legend {
638
- display: table;
639
- max-width: 100%;
640
- white-space: normal;
641
- border: 0;
642
- padding: 0;
643
- font-weight: 400;
644
- margin-bottom: 5px;
645
- margin-bottom: 0.5rem;
646
- font-size: inherit;
647
- line-height: 1.375;
648
- color: inherit;
649
- }
650
-
651
- label {
652
- font-weight: 400;
653
- font-size: 90%;
654
- line-height: 1.375;
655
- margin-bottom: 5px;
656
- margin-bottom: 0.5rem;
657
- }
658
-
659
- label input,
660
- label select,
661
- label textarea {
662
- font-size: 110%;
663
- }
664
-
665
- ::-webkit-inner-spin-button {
666
- height: auto;
667
- }
668
-
669
- ::-webkit-datetime-edit-fields-wrapper,
670
- ::-webkit-datetime-edit-text,
671
- ::-webkit-datetime-edit-minute,
672
- ::-webkit-datetime-edit-hour-field,
673
- ::-webkit-datetime-edit-day-field,
674
- ::-webkit-datetime-edit-month-field,
675
- ::-webkit-datetime-edit-year-field {
676
- padding: 0;
677
- }
678
-
679
- ::-webkit-color-swatch-wrapper {
680
- padding: 0;
681
- }
682
-
683
- [type=search] {
684
- outline-offset: -0.25rem;
685
- }
686
-
687
- output {
688
- vertical-align: middle;
689
- }
690
-
691
- button,
692
- select {
693
- text-transform: none;
694
- }
695
-
696
- select {
697
- word-wrap: normal;
698
- }
699
-
700
- [list]:not([type=date],
701
- [type=datetime-local],
702
- [type=month],
703
- [type=week],
704
- [type=time])::-webkit-calendar-picker-indicator {
705
- display: none !important;
706
- }
707
-
708
- optgroup {
709
- font-family: inherit;
710
- font-size: inherit;
711
- font-style: inherit;
712
- font-weight: 600;
713
- }
714
-
715
- button,
716
- html [type=button],
717
- [type=reset],
718
- [type=submit],
719
- [type=email],
720
- [type=number],
721
- [type=text],
722
- [type=tel],
723
- [type=date],
724
- [type=datetime-local],
725
- [type=month],
726
- [type=week],
727
- [type=url],
728
- [type=image],
729
- [type=password],
730
- [type=search],
731
- [type=search]::-webkit-search-decoration,
732
- [type=search]::-webkit-search-cancel-button,
733
- input[list],
734
- 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
+ ) {
735
708
  -webkit-appearance: none;
736
709
  appearance: none;
737
710
  }
@@ -743,41 +716,36 @@ textarea {
743
716
  appearance: auto;
744
717
  }
745
718
 
746
- button,
747
- input,
748
- select,
749
- textarea {
750
- border-radius: 0.25rem;
719
+ :where(button, input, select, textarea) {
720
+ border-radius: var(--bf-spacing-sm);
751
721
  }
752
722
 
753
- [type=radio] {
723
+ :where([type='radio']) {
754
724
  border-radius: 50%;
755
725
  }
756
726
 
757
- [type=checkbox] {
758
- border-radius: 0.5rem;
727
+ :where([type='checkbox']) {
728
+ border-radius: var(--bf-spacing-md);
759
729
  }
760
730
 
761
- [type=radio],
762
- [type=checkbox] {
731
+ :where([type='radio'], [type='checkbox']) {
763
732
  padding: 0;
764
- background-color: #fff;
733
+ background-color: var(--bf-white);
765
734
  }
766
735
 
767
- [type=range i] {
736
+ :where([type='range' i]) {
768
737
  background-color: transparent;
769
738
  }
770
739
 
771
- select[size],
772
- select[multiple] {
740
+ :where(select[size], select[multiple]) {
773
741
  height: auto;
774
742
  }
775
743
 
776
- select[multiple] {
744
+ :where(select[multiple]) {
777
745
  background-image: none;
778
746
  }
779
747
 
780
- textarea {
748
+ :where(textarea) {
781
749
  height: auto;
782
750
  min-height: 60px;
783
751
  min-height: 6rem;
@@ -786,194 +754,194 @@ textarea {
786
754
  resize: vertical;
787
755
  }
788
756
 
757
+ /* Firefox: strip inner focus padding/border. */
789
758
  ::-moz-focus-inner {
790
759
  padding: 0;
791
760
  border-style: none;
792
761
  }
793
762
 
794
- button,
795
- [type=button],
796
- [type=reset],
797
- [type=submit] {
763
+ :where(button, [type='button'], [type='reset'], [type='submit']) {
798
764
  line-height: normal;
799
765
  text-align: center;
800
766
  margin: 0;
801
767
  background-clip: padding-box;
802
768
  vertical-align: baseline;
803
769
  overflow: visible;
804
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
770
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
805
771
  -webkit-user-select: none;
806
772
  -moz-user-select: none;
807
773
  user-select: none;
808
774
  border: 0;
809
- background-image: none;
775
+ background-image: none; /* Firefox mobile */
810
776
  }
811
- button:hover, button:active, button:focus,
812
- [type=button]:hover,
813
- [type=button]:active,
814
- [type=button]:focus,
815
- [type=reset]:hover,
816
- [type=reset]:active,
817
- [type=reset]:focus,
818
- [type=submit]:hover,
819
- [type=submit]:active,
820
- [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 {
821
781
  text-decoration: none;
822
- color: #222;
782
+ color: var(--bf-dark);
823
783
  }
824
784
 
825
- button:not(:disabled),
826
- [type=button]:not(:disabled),
827
- [type=reset]:not(:disabled),
828
- [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
+ ) {
829
791
  cursor: pointer;
830
792
  }
831
793
 
832
- input::-moz-placeholder, textarea::-moz-placeholder {
833
- color: #666;
794
+ /* Firefox: input color must not override placeholder color.
795
+ * https://github.com/necolas/normalize.css/issues/150 */
796
+ :where(input::-moz-placeholder, textarea::-moz-placeholder) {
797
+ color: var(--bf-gray-dark);
834
798
  }
835
-
836
- input::placeholder,
837
- textarea::placeholder {
838
- color: #666;
799
+ :where(input::placeholder, textarea::placeholder) {
800
+ color: var(--bf-gray-dark);
839
801
  }
840
802
 
841
- /*
842
- Use the modern Firefox focus style for all focusable elements.
843
- */
803
+ /* Firefox: modern focus ring on all focusable elements. */
844
804
  :-moz-focusring {
845
805
  outline: auto;
846
806
  }
847
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 */
848
810
  :-moz-ui-invalid {
849
811
  box-shadow: none;
850
812
  }
851
-
852
- [type=email],
853
- [type=number],
854
- [type=password],
855
- [type=tel],
856
- [type=search],
857
- [type=text],
858
- [type=date],
859
- [type=datetime-local],
860
- [type=month],
861
- [type=week],
862
- [type=time],
863
- [type=url],
864
- input[list],
865
- select,
866
- textarea {
867
- background-color: #fff;
868
- border: 1px solid/#999;
869
- padding: 5px 7.5px;
870
- padding: 0.5rem 0.75rem;
871
- }
872
-
873
- [type=email]:active, [type=email]:focus,
874
- [type=number]:active,
875
- [type=number]:focus,
876
- [type=password]:active,
877
- [type=password]:focus,
878
- [type=tel]:active,
879
- [type=tel]:focus,
880
- [type=search]:active,
881
- [type=search]:focus,
882
- [type=text]:active,
883
- [type=text]:focus,
884
- [type=date]:active,
885
- [type=date]:focus,
886
- [type=datetime-local]:active,
887
- [type=datetime-local]:focus,
888
- [type=month]:active,
889
- [type=month]:focus,
890
- [type=week]:active,
891
- [type=week]:focus,
892
- [type=time]:active,
893
- [type=time]:focus,
894
- [type=url]:active,
895
- [type=url]:focus,
896
- input[list]:active,
897
- input[list]:focus,
898
- select:active,
899
- select:focus,
900
- textarea:active,
901
- textarea:focus,
902
- [type=radio]:active,
903
- [type=radio]:focus,
904
- [type=checkbox]:active,
905
- [type=checkbox]:focus {
906
- transition: border 0.2s, background-color 0.2s, box-shadow 0.2s;
907
- border-color: #007bff;
908
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.25);
909
- }
910
-
911
- button,
912
- [type=button],
913
- [type=reset],
914
- [type=submit] {
915
- color: #222;
916
- padding: 6.6666666667px 13.3333333333px;
917
- padding: 0.6666666667rem 1.3333333333rem;
918
- background: #ccc;
919
- transition: color 0.2s, background 0.2s, box-shadow 0.2s;
920
- }
921
- button:hover, button:active, button:focus,
922
- [type=button]:hover,
923
- [type=button]:active,
924
- [type=button]:focus,
925
- [type=reset]:hover,
926
- [type=reset]:active,
927
- [type=reset]:focus,
928
- [type=submit]:hover,
929
- [type=submit]:active,
930
- [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
+ ) {
931
898
  text-decoration: none;
932
- color: #222;
933
- background: rgb(178.5, 178.5, 178.5);
934
- }
935
- button:active, button:focus,
936
- [type=button]:active,
937
- [type=button]:focus,
938
- [type=reset]:active,
939
- [type=reset]:focus,
940
- [type=submit]:active,
941
- [type=submit]:focus {
942
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
943
- }
944
-
945
- fieldset[disabled] button,
946
- fieldset[disabled] input,
947
- fieldset[disabled] input::after,
948
- fieldset[disabled] input::before,
949
- fieldset[disabled] input:checked,
950
- fieldset[disabled] select,
951
- fieldset[disabled] textarea,
952
- fieldset[disabled] label,
953
- button[disabled],
954
- input[disabled],
955
- input[disabled]::after,
956
- input[disabled]::before,
957
- input[disabled]:checked,
958
- select[disabled],
959
- textarea[disabled],
960
- label[disabled],
961
- button:disabled,
962
- input:disabled,
963
- input:disabled::after,
964
- input:disabled::before,
965
- input:disabled:checked,
966
- select:disabled,
967
- textarea:disabled,
968
- label:disabled,
969
- button[aria-disabled=true],
970
- input[aria-disabled=true],
971
- input[aria-disabled=true]::after,
972
- input[aria-disabled=true]::before,
973
- input[aria-disabled=true]:checked,
974
- select[aria-disabled=true],
975
- textarea[aria-disabled=true],
976
- 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
+ ) {
977
945
  cursor: default !important;
978
946
  cursor: not-allowed !important;
979
947
  pointer-events: none !important;
@@ -981,583 +949,1149 @@ label[aria-disabled=true] {
981
949
  -moz-user-select: none !important;
982
950
  user-select: none !important;
983
951
  box-shadow: none !important;
952
+ outline: none !important;
984
953
  opacity: 0.5 !important;
985
954
  }
955
+ /* Select: custom arrow for single-value controls.
956
+ * Skip [size] / [multiple] (native UI differs by engine). Inspired by water.css. */
986
957
 
987
- select:not([size], [multiple]) {
958
+ :where(select):not([size], select[multiple]) {
988
959
  -webkit-appearance: none;
989
960
  -moz-appearance: none;
990
961
  appearance: none;
991
- 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;
992
- padding-right: 20px;
993
- padding-right: 2rem;
994
- }
995
-
996
- select::-ms-expand {
997
- 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));
998
966
  }
999
967
 
1000
- *[dir=rtl] select:not([size], [multiple]),
1001
- select[dir=rtl]:not([size], [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]) {
1002
971
  background-position: left 0.85rem top 50%;
1003
- padding-right: 7.5px;
1004
- padding-right: 0.75rem;
1005
- padding-left: 20px;
1006
- padding-left: 2rem;
1007
- }
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
+ }
1008
986
 
1009
- [type=checkbox],
1010
- [type=radio] {
1011
- -webkit-appearance: none;
1012
- -moz-appearance: none;
1013
- appearance: none;
1014
- height: 1.8rem;
1015
- width: 1.8rem;
1016
- vertical-align: top;
1017
- position: relative;
1018
- border: 1px solid/#999;
1019
- }
1020
- [type=checkbox] + label,
1021
- [type=radio] + label {
1022
- line-height: 1.8rem;
1023
- vertical-align: top;
1024
- margin-left: 5px;
1025
- margin-left: 0.5rem;
1026
- }
1027
- *[dir=rtl] [type=checkbox] + label, [type=checkbox][dir=rtl] + label,
1028
- *[dir=rtl] [type=radio] + label,
1029
- [type=radio][dir=rtl] + label {
1030
- margin-left: 0;
1031
- margin-right: 5px;
1032
- margin-right: 0.5rem;
1033
- }
1034
- [type=checkbox]::after,
1035
- [type=radio]::after {
1036
- content: "";
1037
- display: block;
1038
- position: absolute;
1039
- }
1040
- [type=checkbox]:checked,
1041
- [type=radio]:checked {
1042
- background-color: #007bff;
1043
- border-color: #000;
1044
- }
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
+ }
1045
1006
 
1046
- [type=radio]::after {
1047
- width: 1.8rem;
1048
- height: 1.8rem;
1049
- left: -0.05rem;
1050
- top: -0.05rem;
1051
- border-radius: 50%;
1052
- background: #fff;
1053
- transform: scale(0.35);
1054
- }
1007
+ :where([type='range'])::-webkit-slider-thumb:active {
1008
+ background-color: var(--bf-blue);
1009
+ }
1055
1010
 
1056
- [type=checkbox]::after {
1057
- width: 0.6rem;
1058
- height: 0.8rem;
1059
- border: 2px solid/#fff;
1060
- border-top: 0;
1061
- border-left: 0;
1062
- left: 35%;
1063
- top: 20%;
1064
- transform: rotate(43deg);
1065
- }
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
+ }
1066
1029
 
1067
- [type=range] {
1068
- -webkit-appearance: none;
1069
- -moz-appearance: none;
1070
- appearance: none;
1071
- width: 100%;
1072
- height: 1.4rem;
1073
- }
1030
+ :where([type='range'])::-moz-range-thumb:active {
1031
+ background-color: var(--bf-blue);
1032
+ }
1074
1033
 
1075
- [type=range]::-webkit-slider-thumb {
1076
- border: 0;
1077
- -webkit-appearance: none;
1078
- appearance: none;
1079
- width: 1.5rem;
1080
- height: 1.5rem;
1081
- margin-top: -0.25rem;
1082
- background-color: #007bff;
1083
- border-radius: 1.5rem;
1084
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1085
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
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
+ }
1085
+ }
1086
+
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. */
1094
+ }
1095
+
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 {
1256
+ width: 100%;
1257
+ }
1258
+
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] {
1282
+ -webkit-appearance: none;
1283
+ -moz-appearance: none;
1284
+ appearance: none;
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;
1086
1534
  }
1087
- [type=range]::-webkit-slider-thumb:active {
1088
- background-color: #007bff;
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;
1089
1658
  }
1090
1659
 
1091
- [type=range]::-moz-range-thumb {
1092
- border: 0;
1093
- -moz-appearance: none;
1094
- appearance: none;
1095
- width: 1.5rem;
1096
- height: 1.5rem;
1097
- background-color: #007bff;
1098
- border-radius: 1.5rem;
1099
- -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1100
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1660
+ .bf-t-left {
1661
+ text-align: left !important;
1101
1662
  }
1102
- [type=range]::-moz-range-thumb:active {
1103
- background-color: #007bff;
1663
+
1664
+ .bf-t-center {
1665
+ text-align: center !important;
1104
1666
  }
1105
1667
 
1106
- [type=range]::-webkit-slider-runnable-track {
1107
- color: transparent;
1108
- border-color: transparent;
1109
- width: 100%;
1110
- height: 0.65rem;
1111
- cursor: pointer;
1112
- background-color: #e9e9e9;
1668
+ .bf-t-right {
1669
+ text-align: right !important;
1113
1670
  }
1114
1671
 
1115
- [type=range]::-moz-range-track {
1116
- color: transparent;
1117
- border-color: transparent;
1118
- width: 100%;
1119
- height: 0.65rem;
1120
- cursor: pointer;
1121
- 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;
1122
1675
  }
1123
1676
 
1124
- [type=range]:focus {
1125
- outline: none;
1677
+ .bf-t-italic {
1678
+ font-style: italic !important;
1126
1679
  }
1127
- [type=range]:focus::-webkit-slider-thumb {
1128
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1680
+
1681
+ /* Reset italic inheritance (e.g. nested <i>). */
1682
+ .bf-t-style-normal {
1683
+ font-style: normal !important;
1129
1684
  }
1130
- [type=range]:focus::-moz-slider-thumb {
1131
- 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;
1132
1689
  }
1133
1690
 
1134
- [type=range]::-moz-focus-outer {
1135
- border: 0;
1691
+ .bf-t-weight-400 {
1692
+ font-weight: 400 !important;
1136
1693
  }
1137
1694
 
1138
- [type=range]:focus::-moz-range-thumb {
1139
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1695
+ .bf-t-weight-500 {
1696
+ font-weight: 500 !important;
1140
1697
  }
1141
1698
 
1142
- [type=range]:disabled {
1143
- pointer-events: none;
1699
+ .bf-t-weight-600 {
1700
+ font-weight: 600 !important;
1144
1701
  }
1145
- [type=range]:disabled::-webkit-slider-thumb {
1146
- background-color: #ccc;
1702
+
1703
+ .bf-t-weight-700 {
1704
+ font-weight: 700 !important;
1147
1705
  }
1148
- [type=range]:disabled::-moz-slider-thumb {
1149
- background-color: #ccc;
1706
+
1707
+ .bf-t-weight-800 {
1708
+ font-weight: 800 !important;
1150
1709
  }
1151
1710
 
1152
- .bf-container,
1153
- .bf-container--fluid {
1154
- box-sizing: border-box;
1155
- display: block;
1156
- margin-right: auto;
1157
- margin-left: auto;
1158
- padding-left: 1.5rem;
1159
- padding-right: 1.5rem;
1711
+ .bf-text-break {
1712
+ word-wrap: break-word !important;
1160
1713
  }
1161
1714
 
1162
- .bf-container {
1163
- max-width: 114rem;
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;
1164
1721
  }
1165
1722
 
1166
- .bf-row {
1167
- display: flex;
1168
- flex-wrap: wrap;
1169
- margin-left: -1.5rem;
1170
- margin-right: -1.5rem;
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;
1171
1730
  }
1172
1731
 
1173
- [class^=bf-col-] {
1174
- position: relative;
1175
- min-height: 1px;
1176
- padding-left: 1.5rem;
1177
- padding-right: 1.5rem;
1178
- flex-grow: 0;
1179
- flex-shrink: 0;
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;
1180
1739
  }
1181
1740
 
1182
- .bf-no-gutters {
1183
- margin-right: 0;
1184
- margin-left: 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;
1185
1746
  }
1186
- .bf-no-gutters > [class^=bf-col] {
1187
- padding-right: 0;
1188
- padding-left: 0;
1747
+
1748
+ .bf-font-sans-serif {
1749
+ font-family: var(--bf-font-sans-serif) !important;
1189
1750
  }
1190
1751
 
1191
- .bf-col-12 {
1192
- flex-basis: 100%;
1193
- max-width: 100%;
1752
+ .bf-font-serif {
1753
+ font-family: var(--bf-font-serif) !important;
1194
1754
  }
1195
1755
 
1196
- .bf-col-11 {
1197
- flex-basis: 91.6667%;
1198
- max-width: 91.6667%;
1756
+ .bf-font-monospace {
1757
+ font-family: var(--bf-font-monospace) !important;
1199
1758
  }
1200
1759
 
1201
- .bf-col-10 {
1202
- flex-basis: 83.3333%;
1203
- max-width: 83.3333%;
1760
+ /* Opt-in stacks from Modern Font Stacks (https://modernfontstacks.com/). */
1761
+ .bf-sans-serif--system {
1762
+ font-family: system-ui, sans-serif;
1204
1763
  }
1205
1764
 
1206
- .bf-col-9 {
1207
- flex-basis: 75%;
1208
- max-width: 75%;
1765
+ .bf-serif--transitional {
1766
+ font-family: Charter, 'Bitstream Charter', 'Sitka Text', Cambria, serif;
1209
1767
  }
1210
1768
 
1211
- .bf-col-8 {
1212
- flex-basis: 66.6667%;
1213
- max-width: 66.6667%;
1769
+ .bf-serif--oldstyle {
1770
+ font-family: 'Iowan Old Style', 'Palatino Linotype', 'URW Palladio L', P052, serif;
1214
1771
  }
1215
1772
 
1216
- .bf-col-7 {
1217
- flex-basis: 58.3333%;
1218
- max-width: 58.3333%;
1773
+ .bf-sans-serif--humanist {
1774
+ font-family:
1775
+ Seravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serif;
1219
1776
  }
1220
1777
 
1221
- .bf-col-6 {
1222
- flex-basis: 50%;
1223
- max-width: 50%;
1778
+ .bf-sans-serif--geometric {
1779
+ font-family: Avenir, Montserrat, Corbel, 'URW Gothic', source-sans-pro, sans-serif;
1224
1780
  }
1225
1781
 
1226
- .bf-col-5 {
1227
- flex-basis: 41.6667%;
1228
- max-width: 41.6667%;
1782
+ .bf-sans-serif--classical {
1783
+ font-family: Optima, Candara, 'Noto Sans', source-sans-pro, sans-serif;
1229
1784
  }
1230
1785
 
1231
- .bf-col-4 {
1232
- flex-basis: 33.3333%;
1233
- max-width: 33.3333%;
1786
+ .bf-sans-serif--neo-grotesque {
1787
+ font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
1234
1788
  }
1235
1789
 
1236
- .bf-col-3 {
1237
- flex-basis: 25%;
1238
- max-width: 25%;
1790
+ .bf-monospace--slab {
1791
+ font-family: 'Nimbus Mono PS', 'Courier New', monospace;
1239
1792
  }
1240
1793
 
1241
- .bf-col-2 {
1242
- flex-basis: 16.6667%;
1243
- max-width: 16.6667%;
1794
+ .bf-monospace--code {
1795
+ font-family:
1796
+ ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',
1797
+ monospace;
1244
1798
  }
1245
1799
 
1246
- .bf-col-1 {
1247
- flex-basis: 8.3333%;
1248
- max-width: 8.3333%;
1800
+ .bf-sans-serif--industrial {
1801
+ font-family:
1802
+ Bahnschrift, 'DIN Alternate', 'Franklin Gothic Medium', 'Nimbus Sans Narrow',
1803
+ sans-serif-condensed, sans-serif;
1249
1804
  }
1250
1805
 
1251
- @media (max-width: 575px) {
1252
- .bf-container--break-xs .bf-row {
1253
- margin-left: 0;
1254
- margin-right: 0;
1255
- }
1256
- .bf-container--break-xs [class^=bf-col] {
1257
- flex-basis: 100%;
1258
- max-width: 100%;
1259
- margin-left: 0;
1260
- padding-left: 0;
1261
- padding-right: 0;
1262
- }
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;
1263
1810
  }
1264
- @media (max-width: 767px) {
1265
- .bf-container--break-md .bf-row {
1266
- margin-left: 0;
1267
- margin-right: 0;
1268
- }
1269
- .bf-container--break-md [class^=bf-col] {
1270
- flex-basis: 100%;
1271
- max-width: 100%;
1272
- margin-left: 0;
1273
- padding-left: 0;
1274
- padding-right: 0;
1275
- }
1811
+
1812
+ .bf-serif--slab {
1813
+ font-family: Rockwell, 'Rockwell Nova', 'Roboto Slab', 'DejaVu Serif', 'Sitka Small', serif;
1276
1814
  }
1277
- @media (max-width: 991px) {
1278
- .bf-container--break-lg .bf-row {
1279
- margin-left: 0;
1280
- margin-right: 0;
1281
- }
1282
- .bf-container--break-lg [class^=bf-col] {
1283
- flex-basis: 100%;
1284
- max-width: 100%;
1285
- margin-left: 0;
1286
- padding-left: 0;
1287
- padding-right: 0;
1288
- }
1815
+
1816
+ .bf-serif--antique {
1817
+ font-family:
1818
+ Superclarendon, 'Bookman Old Style', 'URW Bookman', 'URW Bookman L', 'Georgia Pro', Georgia,
1819
+ serif;
1289
1820
  }
1290
- table td[class^=bf-col],
1291
- table th[class^=bf-col] {
1292
- position: static;
1821
+
1822
+ .bf-serif--didone {
1823
+ font-family: Didot, 'Bodoni MT', 'Noto Serif Display', 'URW Palladio L', P052, Sylfaen, serif;
1293
1824
  }
1294
1825
 
1295
- .bf-clearfix::before,
1296
- .bf-clearfix::after {
1297
- content: " ";
1298
- display: table;
1826
+ .bf-cursive--handwritten {
1827
+ font-family: 'Segoe Print', 'Bradley Hand', Chilanka, TSCu_Comic, casual, cursive;
1299
1828
  }
1300
1829
 
1301
- .bf-clearfix::after {
1302
- clear: both;
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;
1303
1840
  }
1304
1841
 
1305
- .bf-hide {
1306
- display: none !important;
1842
+ .bf-h1 {
1843
+ font-size: 36px !important;
1844
+ font-size: 3.6rem !important;
1307
1845
  }
1308
1846
 
1309
- .bf-hidden {
1310
- display: none !important;
1311
- visibility: hidden !important;
1847
+ .bf-h2 {
1848
+ font-size: 30px !important;
1849
+ font-size: 3rem !important;
1312
1850
  }
1313
1851
 
1314
- .bf-text-hide {
1315
- /* stylelint-disable-next-line */
1316
- font: 0/0 a !important;
1317
- color: transparent !important;
1318
- text-shadow: none !important;
1319
- background-color: transparent !important;
1320
- border: 0 !important;
1321
- margin: 0 !important;
1322
- padding: 0 !important;
1852
+ .bf-h3 {
1853
+ font-size: 24px !important;
1854
+ font-size: 2.4rem !important;
1323
1855
  }
1324
1856
 
1325
- /*
1326
- // taken from https://github.com/h5bp/html5-boilerplate/blob/v7.3.0/dist/css/main.css
1327
- //
1328
- * Hide only visually, but have it available for screen readers:
1329
- * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility
1330
- *
1331
- * 1. For long content, line feeds are not interpreted as spaces and small width
1332
- * causes content to wrap 1 word per line:
1333
- * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe
1334
- */
1335
- .bf-sr-only {
1336
- border: 0 !important;
1337
- clip: rect(0, 0, 0, 0) !important;
1338
- height: 1px !important;
1339
- margin: -1px !important;
1340
- overflow: hidden !important;
1341
- padding: 0 !important;
1342
- position: absolute !important;
1343
- white-space: nowrap !important;
1344
- width: 1px !important;
1857
+ .bf-h4 {
1858
+ font-size: 20px !important;
1859
+ font-size: 2rem !important;
1345
1860
  }
1346
1861
 
1347
- /*
1348
- // taken from https://github.com/h5bp/html5-boilerplate/blob/v7.3.0/dist/css/main.css
1349
- //
1350
- * Extends the .sr-only class to allow the element
1351
- * to be focusable when navigated to via the keyboard:
1352
- * https://www.drupal.org/node/897638
1353
- */
1354
- .bf-sr-only.focusable:active,
1355
- .bf-sr-only.focusable:focus {
1356
- clip: auto !important;
1357
- height: auto !important;
1358
- margin: 0 !important;
1359
- overflow: visible !important;
1360
- position: static !important;
1361
- white-space: inherit !important;
1362
- width: auto !important;
1862
+ .bf-h5,
1863
+ .bf-h6 {
1864
+ font-size: 16px !important;
1865
+ font-size: 1.6rem !important;
1363
1866
  }
1364
1867
 
1365
- .bf-invisible {
1366
- visibility: hidden !important;
1868
+ p.bf-lead {
1869
+ font-size: 120% !important;
1367
1870
  }
1368
1871
 
1369
- .bf-visible {
1370
- visibility: visible !important;
1872
+ body.bf-responsive-typography {
1873
+ font-size: clamp(1.5rem, 2vw, 1.8rem);
1371
1874
  }
1875
+ /* 12-column flex grid: .bf-container / .bf-row / .bf-col-* (+ optional --break-* stacking). */
1372
1876
 
1373
- .bf-display-block {
1374
- display: block !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);
1375
1885
  }
1376
1886
 
1377
- .bf-display-block-center {
1378
- display: block !important;
1379
- margin-left: auto !important;
1380
- margin-right: auto !important;
1381
- text-align: center !important;
1887
+ .bf-container {
1888
+ max-width: 114rem;
1382
1889
  }
1383
1890
 
1384
- .bf-display-inline {
1385
- display: inline !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));
1386
1896
  }
1387
1897
 
1388
- .bf-display-inline-block {
1389
- display: inline-block !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;
1390
1905
  }
1391
1906
 
1392
- .bf-display-flex {
1393
- display: flex !important;
1907
+ .bf-no-gutters {
1908
+ margin-right: 0;
1909
+ margin-left: 0;
1394
1910
  }
1395
1911
 
1396
- .bf-display-inline-flex {
1397
- display: inline-flex !important;
1912
+ .bf-no-gutters > [class^='bf-col'] {
1913
+ padding-right: 0;
1914
+ padding-left: 0;
1398
1915
  }
1399
1916
 
1400
- .bf-display-flex--justify-start {
1401
- justify-content: flex-start !important;
1917
+ /* Column spans (12ths). */
1918
+ .bf-col-12 {
1919
+ flex-basis: 100%;
1920
+ max-width: 100%;
1402
1921
  }
1403
1922
 
1404
- .bf-display-flex--justify-end {
1405
- justify-content: flex-end !important;
1923
+ .bf-col-11 {
1924
+ flex-basis: 91.6667%;
1925
+ max-width: 91.6667%;
1406
1926
  }
1407
1927
 
1408
- .bf-display-flex--justify-center {
1409
- justify-content: center !important;
1928
+ .bf-col-10 {
1929
+ flex-basis: 83.3333%;
1930
+ max-width: 83.3333%;
1410
1931
  }
1411
1932
 
1412
- .bf-display-flex--wrap {
1413
- flex-wrap: wrap !important;
1933
+ .bf-col-9 {
1934
+ flex-basis: 75%;
1935
+ max-width: 75%;
1414
1936
  }
1415
1937
 
1416
- .bf-display-flex--nowrap {
1417
- flex-wrap: nowrap !important;
1938
+ .bf-col-8 {
1939
+ flex-basis: 66.6667%;
1940
+ max-width: 66.6667%;
1418
1941
  }
1419
1942
 
1420
- .bf-float-left {
1421
- float: left !important;
1943
+ .bf-col-7 {
1944
+ flex-basis: 58.3333%;
1945
+ max-width: 58.3333%;
1422
1946
  }
1423
1947
 
1424
- .bf-float-right {
1425
- float: right !important;
1948
+ .bf-col-6 {
1949
+ flex-basis: 50%;
1950
+ max-width: 50%;
1426
1951
  }
1427
1952
 
1428
- .bf-position-fixed {
1429
- position: fixed !important;
1953
+ .bf-col-5 {
1954
+ flex-basis: 41.6667%;
1955
+ max-width: 41.6667%;
1430
1956
  }
1431
1957
 
1432
- .bf-position-sticky {
1433
- position: sticky !important;
1434
- top: 0 !important;
1958
+ .bf-col-4 {
1959
+ flex-basis: 33.3333%;
1960
+ max-width: 33.3333%;
1435
1961
  }
1436
1962
 
1437
- .bf-align-center-unknown {
1438
- position: relative !important;
1963
+ .bf-col-3 {
1964
+ flex-basis: 25%;
1965
+ max-width: 25%;
1439
1966
  }
1440
1967
 
1441
- .bf-align-center-unknown--item {
1442
- position: absolute !important;
1443
- top: 50% !important;
1444
- left: 50% !important;
1445
- transform: translate(-50%, -50%) !important;
1968
+ .bf-col-2 {
1969
+ flex-basis: 16.6667%;
1970
+ max-width: 16.6667%;
1446
1971
  }
1447
1972
 
1448
- .bf-align-center-flex {
1449
- display: flex;
1450
- align-items: center;
1451
- justify-content: center;
1973
+ .bf-col-1 {
1974
+ flex-basis: 8.3333%;
1975
+ max-width: 8.3333%;
1452
1976
  }
1453
1977
 
1454
- .bf-width-25 {
1455
- width: 25% !important;
1456
- }
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
+ }
1457
1984
 
1458
- .bf-width-33 {
1459
- width: 33.3333% !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
+ }
1460
1992
  }
1461
1993
 
1462
- .bf-width-50 {
1463
- width: 50% !important;
1464
- }
1994
+ @media (max-width: 767px) {
1995
+ .bf-container--break-md .bf-row {
1996
+ margin-left: 0;
1997
+ margin-right: 0;
1998
+ }
1465
1999
 
1466
- .bf-width-75 {
1467
- width: 75% !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
+ }
1468
2007
  }
1469
2008
 
1470
- .bf-width-100 {
1471
- width: 100% !important;
2009
+ @media (max-width: 991px) {
2010
+ .bf-container--break-lg .bf-row {
2011
+ margin-left: 0;
2012
+ margin-right: 0;
2013
+ }
2014
+
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
+ }
1472
2022
  }
1473
2023
 
1474
- .bf-width-auto {
1475
- 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;
1476
2028
  }
2029
+ /* Z-index scale (.bf-z-index-*). */
1477
2030
 
1478
2031
  .bf-z-index-1 {
1479
2032
  z-index: 1;
1480
2033
  }
1481
-
1482
2034
  .bf-z-index-2 {
1483
2035
  z-index: 2;
1484
2036
  }
1485
-
1486
2037
  .bf-z-index-3 {
1487
2038
  z-index: 3;
1488
2039
  }
1489
-
1490
2040
  .bf-z-index-4 {
1491
2041
  z-index: 4;
1492
2042
  }
1493
-
1494
2043
  .bf-z-index-5 {
1495
2044
  z-index: 5;
1496
2045
  }
1497
-
1498
2046
  .bf-z-index-6 {
1499
2047
  z-index: 6;
1500
2048
  }
1501
-
1502
2049
  .bf-z-index-7 {
1503
2050
  z-index: 7;
1504
2051
  }
1505
-
1506
2052
  .bf-z-index-8 {
1507
2053
  z-index: 8;
1508
2054
  }
1509
-
1510
2055
  .bf-z-index-9 {
1511
2056
  z-index: 9;
1512
2057
  }
1513
-
1514
2058
  .bf-z-index-10 {
1515
2059
  z-index: 10;
1516
2060
  }
1517
-
1518
2061
  .bf-z-index-20 {
1519
2062
  z-index: 20;
1520
2063
  }
1521
-
1522
2064
  .bf-z-index-30 {
1523
2065
  z-index: 30;
1524
2066
  }
1525
-
1526
2067
  .bf-z-index-40 {
1527
2068
  z-index: 40;
1528
2069
  }
1529
-
1530
2070
  .bf-z-index-50 {
1531
2071
  z-index: 50;
1532
2072
  }
1533
-
1534
2073
  .bf-z-index-60 {
1535
2074
  z-index: 60;
1536
2075
  }
1537
-
1538
2076
  .bf-z-index-70 {
1539
2077
  z-index: 70;
1540
2078
  }
1541
-
1542
2079
  .bf-z-index-80 {
1543
2080
  z-index: 80;
1544
2081
  }
1545
-
1546
2082
  .bf-z-index-90 {
1547
2083
  z-index: 90;
1548
2084
  }
1549
-
1550
2085
  .bf-z-index-100 {
1551
2086
  z-index: 100;
1552
2087
  }
1553
-
1554
2088
  .bf-z-index-200 {
1555
2089
  z-index: 200;
1556
2090
  }
1557
-
1558
2091
  .bf-z-index-300 {
1559
- z-index: 200;
2092
+ z-index: 300;
1560
2093
  }
2094
+ /* Margin / padding scale (.bf-m-*, .bf-p-*). */
1561
2095
 
1562
2096
  .bf-m-0 {
1563
2097
  margin: 0 !important;
@@ -1580,333 +2114,182 @@ table th[class^=bf-col] {
1580
2114
  }
1581
2115
 
1582
2116
  .bf-m-1 {
1583
- margin-bottom: 0.5rem !important;
2117
+ margin-bottom: var(--bf-spacing-md) !important;
1584
2118
  }
1585
2119
 
1586
2120
  .bf-m-2 {
1587
- margin-bottom: 1rem !important;
2121
+ margin-bottom: var(--bf-spacing-lg) !important;
1588
2122
  }
1589
2123
 
1590
2124
  .bf-m-3 {
1591
- margin-bottom: 2rem !important;
2125
+ margin-bottom: var(--bf-spacing-xl) !important;
1592
2126
  }
1593
2127
 
1594
2128
  .bf-m-4 {
1595
- margin-bottom: 3rem !important;
2129
+ margin-bottom: var(--bf-spacing-xxl) !important;
1596
2130
  }
1597
2131
 
1598
2132
  .bf-m-t-1 {
1599
- margin-top: 0.5rem !important;
2133
+ margin-top: var(--bf-spacing-md) !important;
1600
2134
  }
1601
2135
 
1602
2136
  .bf-m-t-2 {
1603
- margin-top: 1rem !important;
2137
+ margin-top: var(--bf-spacing-lg) !important;
1604
2138
  }
1605
2139
 
1606
2140
  .bf-m-t-3 {
1607
- margin-top: 2rem !important;
1608
- }
1609
-
1610
- .bf-m-t-4 {
1611
- margin-top: 3rem !important;
1612
- }
1613
-
1614
- .bf-m-b-1 {
1615
- margin-bottom: 0.5rem !important;
1616
- }
1617
-
1618
- .bf-m-b-2 {
1619
- margin-bottom: 1rem !important;
1620
- }
1621
-
1622
- .bf-m-b-3 {
1623
- margin-bottom: 2rem !important;
1624
- }
1625
-
1626
- .bf-m-b-4 {
1627
- margin-bottom: 3rem !important;
1628
- }
1629
-
1630
- .bf-p-0 {
1631
- padding: 0 !important;
1632
- }
1633
-
1634
- .bf-p-t-0 {
1635
- padding-top: 0 !important;
1636
- }
1637
-
1638
- .bf-p-b-0 {
1639
- padding-bottom: 0 !important;
1640
- }
1641
-
1642
- .bf-p-l-0 {
1643
- padding-left: 0 !important;
1644
- }
1645
-
1646
- .bf-p-r-0 {
1647
- padding-right: 0 !important;
1648
- }
1649
-
1650
- .bf-p-1 {
1651
- padding-bottom: 0.5rem !important;
1652
- }
1653
-
1654
- .bf-p-2 {
1655
- padding-bottom: 1rem !important;
1656
- }
1657
-
1658
- .bf-p-3 {
1659
- padding-bottom: 2rem !important;
1660
- }
1661
-
1662
- .bf-p-4 {
1663
- padding-bottom: 3rem !important;
1664
- }
1665
-
1666
- .bf-p-t-1 {
1667
- padding-top: 0.5rem !important;
1668
- }
1669
-
1670
- .bf-p-t-2 {
1671
- padding-top: 1rem !important;
1672
- }
1673
-
1674
- .bf-p-t-3 {
1675
- padding-top: 2rem !important;
1676
- }
1677
-
1678
- .bf-p-t-4 {
1679
- padding-top: 3rem !important;
1680
- }
1681
-
1682
- .bf-p-b-1 {
1683
- padding-bottom: 0.5rem !important;
1684
- }
1685
-
1686
- .bf-p-b-2 {
1687
- padding-bottom: 1rem !important;
1688
- }
1689
-
1690
- .bf-p-b-3 {
1691
- padding-bottom: 2rem !important;
1692
- }
1693
-
1694
- .bf-p-b-4 {
1695
- padding-bottom: 3rem !important;
1696
- }
1697
-
1698
- .bf-t-transform-uppercase {
1699
- text-transform: uppercase !important;
1700
- }
1701
-
1702
- .bf-t-transform-none {
1703
- text-transform: none !important;
1704
- }
1705
-
1706
- .bf-t-left {
1707
- text-align: left !important;
1708
- }
1709
-
1710
- .bf-t-center {
1711
- text-align: center !important;
1712
- }
1713
-
1714
- .bf-t-right {
1715
- text-align: right !important;
1716
- }
1717
-
1718
- .bf-t-shadow {
1719
- text-shadow: 0 0 2px #222 !important;
1720
- text-shadow: 0 0 0.2rem #222 !important;
1721
- }
1722
-
1723
- .bf-t-italic {
1724
- font-style: italic !important;
1725
- }
1726
-
1727
- .bf-t-style-normal {
1728
- font-style: normal !important;
1729
- }
1730
-
1731
- .bf-t-weight-300 {
1732
- font-weight: 300 !important;
1733
- }
1734
-
1735
- .bf-t-weight-400 {
1736
- font-weight: 400 !important;
2141
+ margin-top: var(--bf-spacing-xl) !important;
1737
2142
  }
1738
2143
 
1739
- .bf-t-weight-500 {
1740
- font-weight: 500 !important;
2144
+ .bf-m-t-4 {
2145
+ margin-top: var(--bf-spacing-xxl) !important;
1741
2146
  }
1742
2147
 
1743
- .bf-t-weight-600 {
1744
- font-weight: 600 !important;
2148
+ .bf-m-b-1 {
2149
+ margin-bottom: var(--bf-spacing-md) !important;
1745
2150
  }
1746
2151
 
1747
- .bf-t-weight-700 {
1748
- font-weight: 700 !important;
2152
+ .bf-m-b-2 {
2153
+ margin-bottom: var(--bf-spacing-lg) !important;
1749
2154
  }
1750
2155
 
1751
- .bf-t-weight-800 {
1752
- font-weight: 800 !important;
2156
+ .bf-m-b-3 {
2157
+ margin-bottom: var(--bf-spacing-xl) !important;
1753
2158
  }
1754
2159
 
1755
- .bf-text-break {
1756
- word-wrap: break-word !important;
2160
+ .bf-m-b-4 {
2161
+ margin-bottom: var(--bf-spacing-xxl) !important;
1757
2162
  }
1758
2163
 
1759
- .bf-t-truncate {
1760
- max-width: 100% !important;
1761
- overflow: hidden !important;
1762
- text-overflow: ellipsis !important;
1763
- white-space: nowrap !important;
1764
- word-wrap: normal !important;
2164
+ .bf-p-0 {
2165
+ padding: 0 !important;
1765
2166
  }
1766
2167
 
1767
- .bf-t-truncate--multiline-2 {
1768
- overflow: hidden !important;
1769
- text-overflow: ellipsis !important;
1770
- display: -webkit-box !important;
1771
- line-clamp: 2 !important;
1772
- -webkit-line-clamp: 2 !important;
1773
- -webkit-box-orient: vertical !important;
2168
+ .bf-p-t-0 {
2169
+ padding-top: 0 !important;
1774
2170
  }
1775
2171
 
1776
- .bf-t-truncate--multiline-3 {
1777
- overflow: hidden !important;
1778
- text-overflow: ellipsis !important;
1779
- display: -webkit-box !important;
1780
- line-clamp: 3 !important;
1781
- -webkit-line-clamp: 3 !important;
1782
- -webkit-box-orient: vertical !important;
2172
+ .bf-p-b-0 {
2173
+ padding-bottom: 0 !important;
1783
2174
  }
1784
2175
 
1785
- .bf-no-select {
1786
- -webkit-user-select: none !important;
1787
- -moz-user-select: none !important;
1788
- user-select: none !important;
1789
- -webkit-touch-callout: none !important;
2176
+ .bf-p-l-0 {
2177
+ padding-left: 0 !important;
1790
2178
  }
1791
2179
 
1792
- .bf-font-sans-serif {
1793
- 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;
1794
2182
  }
1795
2183
 
1796
- .bf-font-serif {
1797
- 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;
1798
2186
  }
1799
2187
 
1800
- .bf-font-monospace {
1801
- 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;
1802
2190
  }
1803
2191
 
1804
- .bf-h1,
1805
- .bf-h2,
1806
- .bf-h3,
1807
- .bf-h4,
1808
- .bf-h5,
1809
- .bf-h6 {
1810
- font-weight: 600 !important;
1811
- margin-top: 0 !important;
1812
- line-height: 1.2 !important;
1813
- margin-bottom: 10px !important;
1814
- margin-bottom: 1rem !important;
2192
+ .bf-p-3 {
2193
+ padding-bottom: var(--bf-spacing-xl) !important;
1815
2194
  }
1816
2195
 
1817
- .bf-h1 {
1818
- font-size: 36px !important;
1819
- font-size: 3.6rem !important;
2196
+ .bf-p-4 {
2197
+ padding-bottom: var(--bf-spacing-xxl) !important;
1820
2198
  }
1821
2199
 
1822
- .bf-h2 {
1823
- font-size: 30px !important;
1824
- font-size: 3rem !important;
2200
+ .bf-p-t-1 {
2201
+ padding-top: var(--bf-spacing-md) !important;
1825
2202
  }
1826
2203
 
1827
- .bf-h3 {
1828
- font-size: 24px !important;
1829
- font-size: 2.4rem !important;
2204
+ .bf-p-t-2 {
2205
+ padding-top: var(--bf-spacing-lg) !important;
1830
2206
  }
1831
2207
 
1832
- .bf-h4 {
1833
- font-size: 20px !important;
1834
- font-size: 2rem !important;
2208
+ .bf-p-t-3 {
2209
+ padding-top: var(--bf-spacing-xl) !important;
1835
2210
  }
1836
2211
 
1837
- .bf-h5,
1838
- .bf-h6 {
1839
- font-size: 16px !important;
1840
- font-size: 1.6rem !important;
2212
+ .bf-p-t-4 {
2213
+ padding-top: var(--bf-spacing-xxl) !important;
1841
2214
  }
1842
2215
 
1843
- p.bf-lead {
1844
- font-size: 120% !important;
2216
+ .bf-p-b-1 {
2217
+ padding-bottom: var(--bf-spacing-md) !important;
1845
2218
  }
1846
2219
 
1847
- body.bf-responsive-typography {
1848
- --body-rt-font-size-flex: calc(1.5rem + 3 * ((100vw - 320px) / 680));
1849
- --body-rt-font-size-max: 1.8rem;
2220
+ .bf-p-b-2 {
2221
+ padding-bottom: var(--bf-spacing-lg) !important;
1850
2222
  }
1851
2223
 
1852
- @media (min-width: 320px) {
1853
- body.bf-responsive-typography {
1854
- font-size: var(--body-rt-font-size-flex);
1855
- }
2224
+ .bf-p-b-3 {
2225
+ padding-bottom: var(--bf-spacing-xl) !important;
1856
2226
  }
1857
- @media (min-width: 1000px) {
1858
- body.bf-responsive-typography {
1859
- font-size: var(--body-rt-font-size-max);
1860
- }
2227
+
2228
+ .bf-p-b-4 {
2229
+ padding-bottom: var(--bf-spacing-xxl) !important;
1861
2230
  }
2231
+ /* .bf-btn and variants. */
2232
+
1862
2233
  .bf-btn {
1863
2234
  display: inline-block;
1864
2235
  cursor: pointer;
1865
- color: #222;
1866
- 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);
1867
2238
  line-height: normal;
1868
2239
  text-align: center;
1869
2240
  margin: 0;
1870
2241
  background-clip: padding-box;
1871
2242
  vertical-align: baseline;
1872
2243
  overflow: visible;
1873
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
2244
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
1874
2245
  -webkit-user-select: none;
1875
2246
  -moz-user-select: none;
1876
2247
  user-select: none;
1877
- border-radius: 0.25rem;
2248
+ border-radius: var(--bf-spacing-sm);
2249
+
1878
2250
  border: 0;
1879
2251
  background-image: none;
1880
- background-color: #ccc;
2252
+ background-color: var(--bf-gray-light);
1881
2253
  transition: all 0.2s;
1882
2254
  }
1883
- .bf-btn:hover, .bf-btn:active, .bf-btn:focus {
2255
+
2256
+ .bf-btn:hover,
2257
+ .bf-btn:active,
2258
+ .bf-btn:focus {
1884
2259
  text-decoration: none;
1885
- color: #222;
1886
- background: rgb(178.5, 178.5, 178.5);
1887
- }
1888
- .bf-btn:active, .bf-btn:focus {
1889
- 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 */
1890
2262
  }
2263
+
2264
+ .bf-btn:active,
1891
2265
  .bf-btn:focus {
1892
- outline: 0;
2266
+ box-shadow: 0 0 0 3px rgb(0 0 0 / 15%);
1893
2267
  }
2268
+
2269
+ /* Primary: white on --bf-blue (WCAG AA 4.5:1). */
1894
2270
  .bf-btn.bf-btn--primary {
1895
- color: #fff;
1896
- background: #007bff;
2271
+ color: var(--bf-white);
2272
+ background: var(--bf-blue);
1897
2273
  }
1898
- .bf-btn.bf-btn--primary:hover, .bf-btn.bf-btn--primary:active, .bf-btn.bf-btn--primary:focus {
1899
- color: #fff;
1900
- 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);
1901
2280
  }
1902
- .bf-btn.bf-btn--primary:active, .bf-btn.bf-btn--primary:focus {
1903
- 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%);
1904
2285
  }
1905
2286
 
1906
- fieldset[disabled] .bf-btn,
1907
- .bf-btn[disabled],
1908
- .bf-btn:disabled,
1909
- .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
+ ) {
1910
2293
  cursor: default !important;
1911
2294
  cursor: not-allowed !important;
1912
2295
  pointer-events: none !important;
@@ -1915,13 +2298,18 @@ fieldset[disabled] .bf-btn,
1915
2298
  user-select: none !important;
1916
2299
  box-shadow: none !important;
1917
2300
  opacity: 0.5 !important;
1918
- background-color: #ccc;
2301
+ background-color: var(--bf-gray-light);
2302
+ outline: none !important;
1919
2303
  }
2304
+ /* Focused / invalid / disabled form state classes. */
1920
2305
 
1921
2306
  .bf-focused {
1922
- transition: border 0.2s, background-color 0.2s, box-shadow 0.2s !important;
1923
- border-color: #007bff !important;
1924
- 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;
1925
2313
  }
1926
2314
 
1927
2315
  .bf-disabled,
@@ -1940,8 +2328,8 @@ fieldset[disabled] .bf-btn,
1940
2328
  user-select: none !important;
1941
2329
  box-shadow: none !important;
1942
2330
  opacity: 0.5 !important;
1943
- background-color: #fff;
1944
- border-color: #999;
2331
+ background-color: var(--bf-white);
2332
+ border-color: var(--bf-gray);
1945
2333
  }
1946
2334
 
1947
2335
  label.bf-disabled {
@@ -1950,9 +2338,9 @@ label.bf-disabled {
1950
2338
  }
1951
2339
 
1952
2340
  button.bf-disabled,
1953
- [type=button].bf-disabled,
1954
- [type=reset].bf-disabled,
1955
- [type=submit].bf-disabled,
2341
+ [type='button'].bf-disabled,
2342
+ [type='reset'].bf-disabled,
2343
+ [type='submit'].bf-disabled,
1956
2344
  .bf-btn.bf-disabled {
1957
2345
  cursor: default;
1958
2346
  cursor: not-allowed;
@@ -1962,25 +2350,28 @@ button.bf-disabled,
1962
2350
  user-select: none;
1963
2351
  box-shadow: none;
1964
2352
  opacity: 0.5;
1965
- color: #222;
1966
- background: #ccc;
1967
- }
1968
- button.bf-disabled:hover, button.bf-disabled:active, button.bf-disabled:focus,
1969
- [type=button].bf-disabled:hover,
1970
- [type=button].bf-disabled:active,
1971
- [type=button].bf-disabled:focus,
1972
- [type=reset].bf-disabled:hover,
1973
- [type=reset].bf-disabled:active,
1974
- [type=reset].bf-disabled:focus,
1975
- [type=submit].bf-disabled:hover,
1976
- [type=submit].bf-disabled:active,
1977
- [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,
1978
2369
  .bf-btn.bf-disabled:hover,
1979
2370
  .bf-btn.bf-disabled:active,
1980
2371
  .bf-btn.bf-disabled:focus {
1981
2372
  box-shadow: none;
1982
- color: #222;
1983
- background: #ccc;
2373
+ color: var(--bf-dark);
2374
+ background: var(--bf-gray-light);
1984
2375
  }
1985
2376
 
1986
2377
  .bf-btn--primary.bf-disabled {
@@ -1992,22 +2383,110 @@ button.bf-disabled:hover, button.bf-disabled:active, button.bf-disabled:focus,
1992
2383
  user-select: none;
1993
2384
  box-shadow: none;
1994
2385
  opacity: 0.5;
1995
- color: #fff;
1996
- background: #007bff;
2386
+ color: var(--bf-white);
2387
+ background: var(--bf-blue);
1997
2388
  }
1998
- .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 {
1999
2393
  box-shadow: none;
2000
- color: #fff;
2001
- background: #007bff;
2394
+ color: var(--bf-white);
2395
+ background: var(--bf-blue);
2002
2396
  }
2003
2397
 
2004
2398
  .bf-invalid,
2005
2399
  .bf-invalid:focus {
2006
- color: #f00 !important;
2007
- border-color: #f00 !important;
2008
- 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);
2009
2482
  }
2010
2483
 
2484
+ .custom-radio-wrapper [type='radio']:checked {
2485
+ background-color: var(--bf-blue);
2486
+ border-color: var(--bf-black);
2487
+ }
2488
+ /* Unstyled and inline list helpers. */
2489
+
2011
2490
  .bf-list-unstyled,
2012
2491
  menu ul.bf-list-unstyled,
2013
2492
  menu ol.bf-list-unstyled,
@@ -2024,6 +2503,58 @@ dd.bf-list-unstyled {
2024
2503
  dt {
2025
2504
  font-weight: 700;
2026
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). */
2027
2558
 
2028
2559
  .bf-embed-responsive {
2029
2560
  position: relative;
@@ -2032,15 +2563,22 @@ dt {
2032
2563
  padding: 0;
2033
2564
  overflow: hidden;
2034
2565
  }
2566
+
2035
2567
  .bf-embed-responsive::before {
2036
2568
  display: block;
2037
- content: "";
2038
- padding-top: 56.25%;
2569
+ content: '';
2570
+ padding-top: 56.25%; /* 16:9 by default */
2039
2571
  }
2040
- .bf-embed-responsive .bf-embed-responsive--4-3::before {
2572
+
2573
+ .bf-embed-responsive.bf-embed-responsive--4-3::before {
2041
2574
  padding-top: 75%;
2042
2575
  }
2043
- .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 {
2044
2582
  position: absolute;
2045
2583
  top: 0;
2046
2584
  bottom: 0;
@@ -2049,119 +2587,109 @@ dt {
2049
2587
  height: 100%;
2050
2588
  border: 0;
2051
2589
  }
2590
+ /* Reduced-motion opt-in (cssremedy-style). */
2052
2591
 
2053
- .bf-table th,
2054
- .bf-table td {
2055
- padding: 1rem;
2056
- border-bottom: 1px solid #999;
2057
- margin-bottom: 0.5rem;
2058
- }
2059
-
2060
- .bf-table-responsive {
2061
- overflow: auto hidden;
2062
- -ms-overflow-style: scrollbar;
2063
- }
2064
-
2065
- .bf-table-responsive table {
2066
- width: 100%;
2067
- 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
+ }
2068
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. */
2069
2610
 
2070
- .bf-table-responsive.scrollbar {
2071
- -webkit-overflow-scrolling: auto;
2611
+ .bf-antialiased {
2612
+ -webkit-font-smoothing: antialiased;
2613
+ -moz-osx-font-smoothing: grayscale;
2072
2614
  }
2073
2615
 
2074
- .bf-table--zebra tbody tr:nth-child(odd),
2075
- .bf-table-responsive--zebra tbody tr:nth-child(odd) {
2076
- background-color: #e9e9e9;
2616
+ .bf-subpixel-antialiased {
2617
+ -webkit-font-smoothing: auto;
2618
+ -moz-osx-font-smoothing: auto;
2077
2619
  }
2620
+ /* Print styles (adapted from h5bp main.css). */
2078
2621
 
2079
- /* main.css 3.0.0 | MIT License | https://github.com/h5bp/main.css#readme */
2080
- /* ==========================================================================
2081
- Print styles.
2082
- Inlined to avoid the additional HTTP request:
2083
- https://www.phpied.com/delay-loading-your-print-css/
2084
- ========================================================================== */
2085
2622
  @media print {
2086
2623
  *,
2087
2624
  *::before,
2088
2625
  *::after {
2089
2626
  background: #fff !important;
2090
2627
  color: #000 !important;
2091
- /* Black prints faster */
2092
2628
  box-shadow: none !important;
2093
2629
  text-shadow: none !important;
2094
2630
  }
2631
+
2095
2632
  a,
2096
2633
  a:visited {
2097
2634
  text-decoration: underline;
2098
2635
  }
2636
+
2099
2637
  a[href]::after {
2100
- content: " (" attr(href) ")";
2638
+ content: ' (' attr(href) ')';
2101
2639
  }
2640
+
2102
2641
  abbr[title]::after {
2103
- content: " (" attr(title) ")";
2642
+ content: ' (' attr(title) ')';
2104
2643
  }
2105
- /*
2106
- * Don't show links that are fragment identifiers,
2107
- * or use the `javascript:` pseudo protocol
2108
- */
2109
- a[href^="#"]::after,
2110
- a[href^="javascript:"]::after {
2111
- content: "";
2644
+
2645
+ a[href^='#']::after,
2646
+ a[href^='javascript:']::after {
2647
+ content: '';
2112
2648
  }
2649
+
2113
2650
  pre {
2114
2651
  white-space: pre-wrap !important;
2115
2652
  }
2653
+
2116
2654
  pre,
2117
2655
  blockquote {
2118
2656
  border: 1px solid #999;
2119
2657
  page-break-inside: avoid;
2120
2658
  }
2659
+
2121
2660
  tr,
2122
2661
  img {
2123
2662
  page-break-inside: avoid;
2124
2663
  }
2664
+
2125
2665
  p,
2126
2666
  h2,
2127
2667
  h3 {
2128
2668
  orphans: 3;
2129
2669
  widows: 3;
2130
2670
  }
2671
+
2131
2672
  h2,
2132
2673
  h3 {
2133
2674
  page-break-after: avoid;
2134
2675
  }
2135
- }
2136
- @media print {
2676
+
2677
+ /* Framework print tweaks. */
2137
2678
  body,
2138
2679
  .bf-container {
2139
2680
  min-width: 992px !important;
2140
2681
  }
2682
+
2141
2683
  .bf-table-responsive {
2142
2684
  overflow: auto;
2143
2685
  }
2686
+
2144
2687
  .bf-table-responsive table {
2145
2688
  width: auto;
2146
2689
  }
2690
+
2147
2691
  .bf-table-responsive table,
2148
2692
  .bf-table {
2149
2693
  border-collapse: collapse !important;
2150
2694
  }
2151
2695
  }
2152
- @media (prefers-reduced-motion: reduce) {
2153
- .bf-reduced-motion,
2154
- .bf-reduced-motion::before,
2155
- .bf-reduced-motion::after,
2156
- .bf-reduced-motion *,
2157
- .bf-reduced-motion *::before,
2158
- .bf-reduced-motion *::after {
2159
- animation-delay: -1ms !important;
2160
- animation-duration: 1ms !important;
2161
- animation-iteration-count: 1 !important;
2162
- background-attachment: initial !important;
2163
- scroll-behavior: auto !important;
2164
- transition-delay: 0s !important;
2165
- transition-duration: 0s !important;
2166
- }
2167
- }