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