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
+ /* Always-dark class-based build. */
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;
495
+ pre {
496
+ margin: 0 0 var(--bf-spacing-xl) 0;
497
+
498
+ display: block;
499
+ overflow: auto;
500
+ word-break: break-all; /* WebKit */
501
+ word-wrap: break-word;
502
+ white-space: pre;
503
+ hyphens: none;
504
+
505
+ /* Keep scrollbars visible in legacy Edge.
506
+ * https://github.com/twbs/bootstrap/pull/30685 */
507
+ -ms-overflow-style: auto;
234
508
  }
235
- a:hover, a:focus {
236
- text-decoration: underline;
237
- color: #0056b3;
509
+
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;
238
522
  }
239
523
 
240
- a:not([href], [tabindex]) {
524
+ code {
525
+ word-wrap: break-word;
526
+ }
527
+
528
+ a > code {
241
529
  color: inherit;
242
- text-decoration: none;
243
530
  }
244
531
 
245
- a:not([href], [class]),
246
- a:not([href], [class]):hover {
532
+ pre code {
533
+ font-size: inherit;
247
534
  color: inherit;
248
- text-decoration: none;
535
+ word-break: normal;
249
536
  }
250
537
 
251
- a:not([href], [tabindex]):focus {
252
- outline: 0;
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;
253
546
  }
254
547
 
255
- :focus:not(:focus-visible) {
256
- outline: none;
548
+ :where(html input, button, [type='radio'], [type='checkbox'], select, optgroup, textarea) {
549
+ margin: 0;
257
550
  }
258
551
 
259
- [tabindex="-1"]:focus:not(:focus-visible) {
260
- outline: 0 !important;
552
+ :where(html input, select, textarea, legend) {
553
+ width: 100%;
261
554
  }
262
555
 
263
- a:focus,
264
- input:focus {
265
- outline: 2px solid orange;
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;
266
568
  }
267
569
 
268
- :focus-visible {
269
- outline: 2px solid orange;
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;
270
583
  }
271
584
 
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;
585
+ :where([type='file']) {
586
+ display: block;
587
+ background-color: transparent;
294
588
  }
295
589
 
296
- menu,
297
- ol,
298
- ul,
299
- dl {
300
- margin: 0 0 2rem 0;
301
- padding: 0;
590
+ :where(button, html input, select, textarea) {
591
+ background-image: none;
302
592
  }
303
593
 
304
- menu ul,
305
- menu ol,
306
- ul ul,
307
- ul ol,
308
- ol ol,
309
- ol ul,
310
- dd {
311
- margin-bottom: 0;
594
+ :where(input, select, textarea) {
595
+ vertical-align: baseline;
312
596
  }
313
597
 
314
- ul,
315
- ol {
316
- margin-left: 2rem;
598
+ :where(form) {
599
+ margin: 0;
317
600
  }
318
601
 
319
- nav ol,
320
- nav ul {
321
- list-style: none;
322
- list-style-image: none;
323
- margin-left: 0;
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;
324
608
  }
325
609
 
326
- dt {
327
- font-weight: 700;
610
+ :where(legend) {
611
+ display: table; /* Text wrapping in Edge / IE. */
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;
328
621
  }
329
622
 
330
- dd {
331
- margin-left: 0;
623
+ :where(label) {
624
+ font-weight: 400;
625
+ font-size: 90%;
626
+ line-height: 1.375;
627
+ margin-bottom: var(--bf-spacing-md);
332
628
  }
333
629
 
334
- nav li::before {
335
- content: "​";
336
- position: absolute;
630
+ :where(label input, label select, label textarea) {
631
+ font-size: 110%;
337
632
  }
338
633
 
339
- audio,
340
- canvas,
341
- progress,
342
- video {
343
- display: inline-block;
634
+ ::-webkit-inner-spin-button {
635
+ height: auto;
344
636
  }
345
637
 
346
- img,
347
- canvas,
348
- audio,
349
- video,
350
- iframe,
351
- object,
352
- embed {
353
- max-width: 100%;
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;
354
646
  }
355
647
 
356
- audio,
357
- video,
358
- canvas,
359
- img,
360
- svg {
361
- vertical-align: middle;
648
+ ::-webkit-color-swatch-wrapper {
649
+ padding: 0;
362
650
  }
363
651
 
364
- img {
365
- height: auto;
366
- border-style: none;
652
+ :where([type='search']) {
653
+ outline-offset: calc(-1 * var(--bf-spacing-sm));
367
654
  }
368
655
 
369
- figure {
370
- margin: 0;
656
+ :where(output) {
657
+ vertical-align: middle;
371
658
  }
372
659
 
373
- figure,
374
- figcaption {
375
- display: block;
660
+ :where(button, select) {
661
+ text-transform: none;
376
662
  }
377
663
 
378
- figcaption {
379
- line-height: 1.375;
380
- font-size: 90%;
664
+ :where(select) {
665
+ word-wrap: normal;
381
666
  }
382
667
 
383
- video {
384
- height: auto;
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;
385
678
  }
386
679
 
387
- audio {
388
- width: 100%;
680
+ :where(optgroup) {
681
+ font-family: inherit;
682
+ font-size: inherit;
683
+ font-style: inherit; /* Families without a 600 face. */
684
+ font-weight: 600;
389
685
  }
390
686
 
391
- audio:not([controls]) {
392
- display: none;
393
- height: 0;
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;
394
712
  }
395
713
 
396
- svg:not(:root) {
397
- overflow: hidden;
714
+ ::file-selector-button {
715
+ font: inherit;
716
+ -webkit-appearance: auto;
717
+ -moz-appearance: auto;
718
+ appearance: auto;
398
719
  }
399
720
 
400
- svg:not([fill]) {
401
- fill: currentColor;
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). */
526
1405
 
527
- /* Accessibility
528
- * ========================================================================== */
529
- /**
530
- * Change the cursor on busy elements in all browsers (opinionated).
531
- */
532
- :where([aria-busy=true i]) {
1406
+ /* Busy: progress cursor. */
1407
+ :where([aria-busy='true' i]) {
533
1408
  cursor: progress;
534
1409
  }
535
1410
 
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]) {
1411
+ /* Disabled / inoperable: not-allowed cursor. */
1412
+ :where([aria-disabled='true' i], [disabled]) {
541
1413
  cursor: not-allowed;
542
1414
  }
543
1415
 
544
- /*
545
- * Change the display on visually hidden accessible elements
546
- * in all browsers (opinionated).
547
- */
548
- :where([aria-hidden=false i][hidden]) {
1416
+ /* aria-hidden="false" on [hidden]: keep in a11y tree when not focused. */
1417
+ :where([aria-hidden='false' i][hidden]) {
549
1418
  display: initial;
550
1419
  }
551
1420
 
552
- :where([aria-hidden=false i][hidden]:not(:focus)) {
1421
+ :where([aria-hidden='false' i][hidden]:not(:focus)) {
553
1422
  clip: rect(0, 0, 0, 0);
554
1423
  position: absolute;
555
1424
  }
1425
+ /* Preference queries only (prefers-contrast, forced-colors). Additive. */
556
1426
 
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;
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
+ }
566
1455
  }
567
1456
 
568
- html input,
569
- button,
570
- [type=radio],
571
- [type=checkbox],
572
- select,
573
- optgroup,
574
- textarea {
575
- margin: 0;
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
+ }
576
1475
  }
577
1476
 
578
- html input,
579
- select,
580
- textarea,
581
- legend {
582
- width: 100%;
1477
+ /* Utilities */
1478
+ /* Display, visibility, float, position, and width helpers. */
1479
+
1480
+ .bf-clearfix::before,
1481
+ .bf-clearfix::after {
1482
+ content: ' ';
1483
+ display: table;
583
1484
  }
584
1485
 
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;
1486
+ .bf-clearfix::after {
1487
+ clear: both;
594
1488
  }
595
1489
 
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;
1490
+ .bf-hide {
1491
+ display: none !important;
606
1492
  }
607
1493
 
608
- [type=file] {
609
- display: block;
610
- background-color: transparent;
1494
+ .bf-hidden {
1495
+ display: none !important;
1496
+ visibility: hidden !important;
611
1497
  }
612
1498
 
613
- button,
614
- html input,
615
- select,
616
- textarea {
617
- background-image: none;
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;
618
1507
  }
619
1508
 
620
- input,
621
- select,
622
- textarea {
623
- vertical-align: baseline;
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;
624
1520
  }
625
1521
 
626
- form {
627
- margin: 0;
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;
628
1532
  }
629
1533
 
630
- fieldset {
631
- border: 0;
632
- padding: 0;
633
- margin: 0;
634
- min-width: 0;
1534
+ .bf-invisible {
1535
+ visibility: hidden !important;
635
1536
  }
636
1537
 
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;
1538
+ .bf-visible {
1539
+ visibility: visible !important;
649
1540
  }
650
1541
 
651
- label {
652
- font-weight: 400;
653
- font-size: 90%;
654
- line-height: 1.375;
655
- margin-bottom: 5px;
656
- margin-bottom: 0.5rem;
1542
+ .bf-display-block {
1543
+ display: block !important;
657
1544
  }
658
1545
 
659
- label input,
660
- label select,
661
- label textarea {
662
- font-size: 110%;
1546
+ .bf-display-block-center {
1547
+ display: block !important;
1548
+ margin-left: auto !important;
1549
+ margin-right: auto !important;
1550
+ text-align: center !important;
663
1551
  }
664
1552
 
665
- ::-webkit-inner-spin-button {
666
- height: auto;
1553
+ .bf-display-inline {
1554
+ display: inline !important;
667
1555
  }
668
1556
 
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;
1557
+ .bf-display-inline-block {
1558
+ display: inline-block !important;
677
1559
  }
678
1560
 
679
- ::-webkit-color-swatch-wrapper {
680
- padding: 0;
1561
+ .bf-display-flex {
1562
+ display: flex !important;
681
1563
  }
682
1564
 
683
- [type=search] {
684
- outline-offset: -0.25rem;
1565
+ .bf-display-inline-flex {
1566
+ display: inline-flex !important;
685
1567
  }
686
1568
 
687
- output {
688
- vertical-align: middle;
1569
+ .bf-display-flex--justify-start {
1570
+ justify-content: flex-start !important;
689
1571
  }
690
1572
 
691
- button,
692
- select {
693
- text-transform: none;
1573
+ .bf-display-flex--justify-end {
1574
+ justify-content: flex-end !important;
694
1575
  }
695
1576
 
696
- select {
697
- word-wrap: normal;
1577
+ .bf-display-flex--justify-center {
1578
+ justify-content: center !important;
698
1579
  }
699
1580
 
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;
1581
+ .bf-display-flex--wrap {
1582
+ flex-wrap: wrap !important;
706
1583
  }
707
1584
 
708
- optgroup {
709
- font-family: inherit;
710
- font-size: inherit;
711
- font-style: inherit;
712
- font-weight: 600;
1585
+ .bf-display-flex--nowrap {
1586
+ flex-wrap: nowrap !important;
713
1587
  }
714
1588
 
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;
1589
+ .bf-float-left {
1590
+ float: left !important;
737
1591
  }
738
1592
 
739
- ::file-selector-button {
740
- font: inherit;
741
- -webkit-appearance: auto;
742
- -moz-appearance: auto;
743
- appearance: auto;
1593
+ .bf-float-right {
1594
+ float: right !important;
744
1595
  }
745
1596
 
746
- button,
747
- input,
748
- select,
749
- textarea {
750
- border-radius: 0.25rem;
1597
+ .bf-position-fixed {
1598
+ position: fixed !important;
751
1599
  }
752
1600
 
753
- [type=radio] {
754
- border-radius: 50%;
1601
+ .bf-position-sticky {
1602
+ position: sticky !important;
1603
+ top: 0 !important;
1604
+ }
1605
+
1606
+ .bf-position-relative {
1607
+ position: relative !important;
755
1608
  }
756
1609
 
757
- [type=checkbox] {
758
- border-radius: 0.5rem;
1610
+ /* Absolute center inside a relative parent. */
1611
+ .bf-align-center-unknown {
1612
+ position: relative !important;
759
1613
  }
760
1614
 
761
- [type=radio],
762
- [type=checkbox] {
763
- padding: 0;
764
- background-color: #fff;
1615
+ .bf-align-center-unknown--item {
1616
+ position: absolute !important;
1617
+ top: 50% !important;
1618
+ left: 50% !important;
1619
+ transform: translate(-50%, -50%) !important;
765
1620
  }
766
1621
 
767
- [type=range i] {
768
- background-color: transparent;
1622
+ .bf-align-center-flex {
1623
+ display: flex !important;
1624
+ justify-content: center !important;
1625
+ align-items: center !important;
1626
+ height: 100vh !important;
769
1627
  }
770
1628
 
771
- select[size],
772
- select[multiple] {
773
- height: auto;
1629
+ .bf-width-25 {
1630
+ width: 25% !important;
774
1631
  }
775
1632
 
776
- select[multiple] {
777
- background-image: none;
1633
+ .bf-width-33 {
1634
+ width: 33.3333% !important;
778
1635
  }
779
1636
 
780
- textarea {
781
- height: auto;
782
- min-height: 60px;
783
- min-height: 6rem;
784
- overflow: auto;
785
- vertical-align: top;
786
- resize: vertical;
1637
+ .bf-width-50 {
1638
+ width: 50% !important;
787
1639
  }
788
1640
 
789
- ::-moz-focus-inner {
790
- padding: 0;
791
- border-style: none;
1641
+ .bf-width-75 {
1642
+ width: 75% !important;
792
1643
  }
793
1644
 
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;
1645
+ .bf-width-100 {
1646
+ width: 100% !important;
810
1647
  }
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;
1648
+
1649
+ .bf-width-auto {
1650
+ width: auto !important;
823
1651
  }
1652
+ /* Text alignment, weight, truncate, and font-stack helpers. */
824
1653
 
825
- button:not(:disabled),
826
- [type=button]:not(:disabled),
827
- [type=reset]:not(:disabled),
828
- [type=submit]:not(:disabled) {
829
- cursor: pointer;
1654
+ .bf-t-transform-uppercase {
1655
+ text-transform: uppercase !important;
830
1656
  }
831
1657
 
832
- input::-moz-placeholder, textarea::-moz-placeholder {
833
- color: #666;
1658
+ .bf-t-transform-none {
1659
+ text-transform: none !important;
834
1660
  }
835
1661
 
836
- input::placeholder,
837
- textarea::placeholder {
838
- color: #666;
1662
+ .bf-t-left {
1663
+ text-align: left !important;
839
1664
  }
840
1665
 
841
- /*
842
- Use the modern Firefox focus style for all focusable elements.
843
- */
844
- :-moz-focusring {
845
- outline: auto;
1666
+ .bf-t-center {
1667
+ text-align: center !important;
846
1668
  }
847
1669
 
848
- :-moz-ui-invalid {
849
- box-shadow: none;
1670
+ .bf-t-right {
1671
+ text-align: right !important;
850
1672
  }
851
1673
 
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);
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;
909
1677
  }
910
1678
 
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;
1679
+ .bf-t-italic {
1680
+ font-style: italic !important;
1681
+ }
1682
+
1683
+ /* Reset italic inheritance (e.g. nested <i>). */
1684
+ .bf-t-style-normal {
1685
+ font-style: normal !important;
1686
+ }
1687
+
1688
+ /* Weight utilities (e.g. reset <b>). */
1689
+ .bf-t-weight-300 {
1690
+ font-weight: 300 !important;
1691
+ }
1692
+
1693
+ .bf-t-weight-400 {
1694
+ font-weight: 400 !important;
1695
+ }
1696
+
1697
+ .bf-t-weight-500 {
1698
+ font-weight: 500 !important;
1699
+ }
1700
+
1701
+ .bf-t-weight-600 {
1702
+ font-weight: 600 !important;
1703
+ }
1704
+
1705
+ .bf-t-weight-700 {
1706
+ font-weight: 700 !important;
1707
+ }
1708
+
1709
+ .bf-t-weight-800 {
1710
+ font-weight: 800 !important;
1711
+ }
1712
+
1713
+ .bf-text-break {
1714
+ word-wrap: break-word !important;
1715
+ }
1716
+
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;
1723
+ }
1724
+
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;
1732
+ }
1733
+
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;
1741
+ }
1742
+
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;
1007
1760
  }
1008
1761
 
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;
1762
+ /* Opt-in stacks from Modern Font Stacks (https://modernfontstacks.com/). */
1763
+ .bf-sans-serif--system {
1764
+ font-family: system-ui, sans-serif;
1765
+ }
1766
+
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%;
@@ -1223,341 +1952,148 @@ select[dir=rtl]:not([size], [multiple]) {
1223
1952
  max-width: 50%;
1224
1953
  }
1225
1954
 
1226
- .bf-col-5 {
1227
- flex-basis: 41.6667%;
1228
- max-width: 41.6667%;
1229
- }
1230
-
1231
- .bf-col-4 {
1232
- flex-basis: 33.3333%;
1233
- max-width: 33.3333%;
1234
- }
1235
-
1236
- .bf-col-3 {
1237
- flex-basis: 25%;
1238
- max-width: 25%;
1239
- }
1240
-
1241
- .bf-col-2 {
1242
- flex-basis: 16.6667%;
1243
- max-width: 16.6667%;
1244
- }
1245
-
1246
- .bf-col-1 {
1247
- flex-basis: 8.3333%;
1248
- max-width: 8.3333%;
1249
- }
1250
-
1251
- @media (max-width: 575px) {
1252
- .bf-container--break-xs .bf-row {
1253
- margin-left: 0;
1254
- margin-right: 0;
1255
- }
1256
- .bf-container--break-xs [class^=bf-col] {
1257
- flex-basis: 100%;
1258
- max-width: 100%;
1259
- margin-left: 0;
1260
- padding-left: 0;
1261
- padding-right: 0;
1262
- }
1263
- }
1264
- @media (max-width: 767px) {
1265
- .bf-container--break-md .bf-row {
1266
- margin-left: 0;
1267
- margin-right: 0;
1268
- }
1269
- .bf-container--break-md [class^=bf-col] {
1270
- flex-basis: 100%;
1271
- max-width: 100%;
1272
- margin-left: 0;
1273
- padding-left: 0;
1274
- padding-right: 0;
1275
- }
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] {
1283
- flex-basis: 100%;
1284
- 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;
1955
+ .bf-col-5 {
1956
+ flex-basis: 41.6667%;
1957
+ max-width: 41.6667%;
1430
1958
  }
1431
1959
 
1432
- .bf-position-sticky {
1433
- position: sticky !important;
1434
- top: 0 !important;
1960
+ .bf-col-4 {
1961
+ flex-basis: 33.3333%;
1962
+ max-width: 33.3333%;
1435
1963
  }
1436
1964
 
1437
- .bf-align-center-unknown {
1438
- position: relative !important;
1965
+ .bf-col-3 {
1966
+ flex-basis: 25%;
1967
+ max-width: 25%;
1439
1968
  }
1440
1969
 
1441
- .bf-align-center-unknown--item {
1442
- position: absolute !important;
1443
- top: 50% !important;
1444
- left: 50% !important;
1445
- transform: translate(-50%, -50%) !important;
1970
+ .bf-col-2 {
1971
+ flex-basis: 16.6667%;
1972
+ max-width: 16.6667%;
1446
1973
  }
1447
1974
 
1448
- .bf-align-center-flex {
1449
- display: flex;
1450
- align-items: center;
1451
- justify-content: center;
1975
+ .bf-col-1 {
1976
+ flex-basis: 8.3333%;
1977
+ max-width: 8.3333%;
1452
1978
  }
1453
1979
 
1454
- .bf-width-25 {
1455
- width: 25% !important;
1456
- }
1980
+ /* Breakpoint stacking via .bf-container--break-{xs|md|lg}. */
1981
+ @media (max-width: 575px) {
1982
+ .bf-container--break-xs .bf-row {
1983
+ margin-left: 0;
1984
+ margin-right: 0;
1985
+ }
1457
1986
 
1458
- .bf-width-33 {
1459
- width: 33.3333% !important;
1987
+ .bf-container--break-xs [class^='bf-col'] {
1988
+ flex-basis: 100%;
1989
+ max-width: 100%;
1990
+ margin-left: 0;
1991
+ padding-left: 0;
1992
+ padding-right: 0;
1993
+ }
1460
1994
  }
1461
1995
 
1462
- .bf-width-50 {
1463
- width: 50% !important;
1464
- }
1996
+ @media (max-width: 767px) {
1997
+ .bf-container--break-md .bf-row {
1998
+ margin-left: 0;
1999
+ margin-right: 0;
2000
+ }
1465
2001
 
1466
- .bf-width-75 {
1467
- width: 75% !important;
2002
+ .bf-container--break-md [class^='bf-col'] {
2003
+ flex-basis: 100%;
2004
+ max-width: 100%;
2005
+ margin-left: 0;
2006
+ padding-left: 0;
2007
+ padding-right: 0;
2008
+ }
1468
2009
  }
1469
2010
 
1470
- .bf-width-100 {
1471
- width: 100% !important;
2011
+ @media (max-width: 991px) {
2012
+ .bf-container--break-lg .bf-row {
2013
+ margin-left: 0;
2014
+ margin-right: 0;
2015
+ }
2016
+
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;
1835
- }
1836
-
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;
2231
+ padding-bottom: var(--bf-spacing-xxl) !important;
1850
2232
  }
2233
+ /* .bf-btn and variants. */
1851
2234
 
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,25 +2352,28 @@ 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);
1984
2377
  }
1985
2378
 
1986
2379
  .bf-btn--primary.bf-disabled {
@@ -1992,21 +2385,109 @@ button.bf-disabled:hover, button.bf-disabled:active, button.bf-disabled:focus,
1992
2385
  user-select: none;
1993
2386
  box-shadow: none;
1994
2387
  opacity: 0.5;
1995
- color: #fff;
1996
- background: #007bff;
2388
+ color: var(--bf-white);
2389
+ background: var(--bf-blue);
1997
2390
  }
1998
- .bf-btn--primary.bf-disabled:hover, .bf-btn--primary.bf-disabled:active, .bf-btn--primary.bf-disabled:focus {
2391
+
2392
+ .bf-btn--primary.bf-disabled:hover,
2393
+ .bf-btn--primary.bf-disabled:active,
2394
+ .bf-btn--primary.bf-disabled:focus {
1999
2395
  box-shadow: none;
2000
- color: #fff;
2001
- background: #007bff;
2396
+ color: var(--bf-white);
2397
+ background: var(--bf-blue);
2002
2398
  }
2003
2399
 
2004
2400
  .bf-invalid,
2005
2401
  .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;
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);
2459
+ }
2460
+
2461
+ .custom-radio-wrapper [type='radio'] + label {
2462
+ line-height: 1.8rem;
2463
+ vertical-align: top;
2464
+ margin-left: var(--bf-spacing-md);
2465
+ }
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);
2471
+ }
2472
+
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,417 +2589,361 @@ 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
- }
2168
- html {
2169
- scrollbar-color: rgb(89.25, 89.25, 89.25) #111;
2170
- }
2171
-
2172
- ::-webkit-scrollbar {
2173
- width: 1.5rem;
2174
- height: 1.5rem;
2175
- }
2176
-
2177
- ::-webkit-scrollbar-track {
2178
- background-color: #111;
2179
- }
2180
-
2181
- ::-webkit-scrollbar-thumb {
2182
- background-color: rgb(89.25, 89.25, 89.25);
2183
- }
2698
+ /* Always-dark overrides (no media query). Shared rules + disabled buttons.
2699
+ * Scrollbars come from utilities/global-dark-scrollbars.css via dark entry builds. */
2184
2700
 
2185
- ::-webkit-scrollbar-thumb:hover {
2186
- background-color: rgb(127.5, 127.5, 127.5);
2187
- }
2701
+ /* Shared dark-mode rules for always-dark and prefers-color-scheme builds.
2702
+ * Variant-only extras: utility-global-dark.css. Scrollbars: global-dark-scrollbars.css.
2703
+ * Underscore prefix excludes this file from the buildAllCss glob. */
2188
2704
 
2189
2705
  html {
2190
- color: #f0f0f0;
2706
+ color: var(--bf-light);
2191
2707
  }
2192
2708
 
2193
2709
  body {
2194
- background-color: rgb(36.125, 36.125, 36.125);
2710
+ background-color: var(--bf-dark-bg);
2195
2711
  }
2196
2712
 
2197
2713
  a {
2198
- color: rgb(102, 175.8, 255);
2714
+ color: var(--bf-dark-link);
2199
2715
  }
2200
- a:hover, a:focus {
2201
- color: rgb(26, 136.0223463687, 255);
2716
+
2717
+ a:hover,
2718
+ a:focus {
2719
+ color: var(--bf-dark-link-hover);
2202
2720
  }
2203
2721
 
2204
2722
  mark {
2205
- background-color: #cccc00;
2723
+ background-color: var(--bf-dark-mark-bg);
2206
2724
  }
2207
2725
 
2208
2726
  ins {
2209
- background-color: hsl(60, 100%, 125%);
2210
- }
2211
-
2212
- [type=email],
2213
- [type=number],
2214
- [type=password],
2215
- [type=tel],
2216
- [type=search],
2217
- [type=text],
2218
- [type=date],
2219
- [type=datetime-local],
2220
- [type=month],
2221
- [type=week],
2222
- [type=time],
2223
- [type=url],
2224
- [type=range],
2727
+ background-color: var(--bf-dark-ins-bg);
2728
+ }
2729
+
2730
+ [type='email'],
2731
+ [type='number'],
2732
+ [type='password'],
2733
+ [type='tel'],
2734
+ [type='search'],
2735
+ [type='text'],
2736
+ [type='date'],
2737
+ [type='datetime-local'],
2738
+ [type='month'],
2739
+ [type='week'],
2740
+ [type='time'],
2741
+ [type='url'],
2742
+ [type='range'],
2225
2743
  input[list],
2226
2744
  select,
2227
- select:not([size], [multiple]),
2745
+ select:not([size], select[multiple]),
2228
2746
  textarea {
2229
- background-color: #111;
2230
- border-color: #000;
2231
- color: #ccc;
2232
- }
2233
- [type=email]:active, [type=email]:focus,
2234
- [type=number]:active,
2235
- [type=number]:focus,
2236
- [type=password]:active,
2237
- [type=password]:focus,
2238
- [type=tel]:active,
2239
- [type=tel]:focus,
2240
- [type=search]:active,
2241
- [type=search]:focus,
2242
- [type=text]:active,
2243
- [type=text]:focus,
2244
- [type=date]:active,
2245
- [type=date]:focus,
2246
- [type=datetime-local]:active,
2247
- [type=datetime-local]:focus,
2248
- [type=month]:active,
2249
- [type=month]:focus,
2250
- [type=week]:active,
2251
- [type=week]:focus,
2252
- [type=time]:active,
2253
- [type=time]:focus,
2254
- [type=url]:active,
2255
- [type=url]:focus,
2256
- [type=range]:active,
2257
- [type=range]:focus,
2258
- input[list]:active,
2259
- input[list]:focus,
2260
- select:active,
2261
- select:focus,
2262
- select:not([size], [multiple]):active,
2263
- select:not([size], [multiple]):focus,
2264
- textarea:active,
2265
- textarea:focus {
2266
- background-color: #111;
2267
- border-color: rgb(51, 149.4, 255);
2268
- }
2269
-
2270
- [type=email]:active, [type=email]:focus,
2271
- [type=number]:active,
2272
- [type=number]:focus,
2273
- [type=password]:active,
2274
- [type=password]:focus,
2275
- [type=tel]:active,
2276
- [type=tel]:focus,
2277
- [type=search]:active,
2278
- [type=search]:focus,
2279
- [type=text]:active,
2280
- [type=text]:focus,
2281
- [type=date]:active,
2282
- [type=date]:focus,
2283
- [type=datetime-local]:active,
2284
- [type=datetime-local]:focus,
2285
- [type=month]:active,
2286
- [type=month]:focus,
2287
- [type=week]:active,
2288
- [type=week]:focus,
2289
- [type=time]:active,
2290
- [type=time]:focus,
2291
- [type=url]:active,
2292
- [type=url]:focus,
2747
+ background-color: var(--bf-dark-extra);
2748
+ border-color: var(--bf-black);
2749
+ color: var(--bf-gray-light);
2750
+ }
2751
+
2752
+ [type='email']:active,
2753
+ [type='email']:focus,
2754
+ [type='number']:active,
2755
+ [type='number']:focus,
2756
+ [type='password']:active,
2757
+ [type='password']:focus,
2758
+ [type='tel']:active,
2759
+ [type='tel']:focus,
2760
+ [type='search']:active,
2761
+ [type='search']:focus,
2762
+ [type='text']:active,
2763
+ [type='text']:focus,
2764
+ [type='date']:active,
2765
+ [type='date']:focus,
2766
+ [type='datetime-local']:active,
2767
+ [type='datetime-local']:focus,
2768
+ [type='month']:active,
2769
+ [type='month']:focus,
2770
+ [type='week']:active,
2771
+ [type='week']:focus,
2772
+ [type='time']:active,
2773
+ [type='time']:focus,
2774
+ [type='url']:active,
2775
+ [type='url']:focus,
2293
2776
  input[list]:active,
2294
2777
  input[list]:focus,
2295
2778
  select:active,
2296
2779
  select:focus,
2297
- select:not([size], [multiple]):active,
2298
- select:not([size], [multiple]):focus,
2780
+ select:not([size], select[multiple]):active,
2781
+ select:not([size], select[multiple]):focus,
2299
2782
  textarea:active,
2300
2783
  textarea:focus {
2301
- box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.5);
2784
+ background-color: var(--bf-dark-extra);
2785
+ border-color: var(--bf-dark-border-focus);
2786
+ box-shadow: 0 0 0 3px var(--bf-dark-shadow-focus);
2302
2787
  }
2303
2788
 
2304
2789
  .bf-focused {
2305
- border-color: rgb(51, 149.4, 255);
2306
- box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.5) !important;
2790
+ border-color: var(--bf-dark-border-focus) !important;
2791
+ box-shadow: 0 0 0 3px var(--bf-dark-shadow-focus) !important;
2307
2792
  }
2308
2793
 
2309
2794
  .bf-invalid,
2310
2795
  .bf-invalid:focus {
2311
- color: rgb(255, 38.25, 38.25) !important;
2312
- border-color: rgb(255, 38.25, 38.25) !important;
2796
+ color: var(--bf-dark-invalid) !important;
2797
+ border-color: var(--bf-dark-invalid) !important;
2313
2798
  }
2314
2799
 
2315
- select:not([size], [multiple]) {
2800
+ select:not([size], select[multiple]) {
2316
2801
  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");
2317
2802
  }
2318
2803
 
2319
- /* stylelint-disable-next-line */
2320
- @media screen and (min-width: 0\0 ) and (min-resolution: 0.001dpcm) {
2321
- select:not([size], [multiple]),
2322
- *[dir=rtl] select:not([size], [multiple]),
2323
- select[dir=rtl]:not([size], [multiple]) {
2324
- background-image: none;
2325
- }
2326
- }
2327
- [type=range] {
2804
+ [type='range'] {
2328
2805
  background-color: transparent;
2329
2806
  }
2330
- [type=range]:focus {
2807
+
2808
+ [type='range']:focus {
2331
2809
  background-color: transparent;
2332
2810
  }
2333
2811
 
2334
- [type=range]::-webkit-slider-runnable-track {
2335
- background-color: #111;
2812
+ [type='range']::-webkit-slider-runnable-track {
2813
+ background-color: var(--bf-dark-extra);
2336
2814
  }
2337
2815
 
2338
- [type=range]::-moz-range-track {
2339
- background-color: #111;
2816
+ [type='range']::-moz-range-track {
2817
+ background-color: var(--bf-dark-extra);
2340
2818
  }
2341
2819
 
2342
2820
  input::-moz-placeholder, textarea::-moz-placeholder {
2343
- color: #999;
2821
+ color: var(--bf-gray);
2344
2822
  }
2345
2823
 
2346
2824
  input::placeholder,
2347
2825
  textarea::placeholder {
2348
- color: #999;
2826
+ color: var(--bf-gray);
2349
2827
  }
2350
2828
 
2351
2829
  button,
2352
- [type=button],
2353
- [type=reset],
2354
- [type=submit],
2355
- .bf-btn,
2356
- button.bf-disabled,
2357
- [type=button].bf-disabled,
2358
- [type=reset].bf-disabled,
2359
- [type=submit].bf-disabled,
2360
- .bf-btn.bf-disabled {
2361
- background: #ccc;
2362
- }
2363
- button:hover, button:active, button:focus,
2364
- [type=button]:hover,
2365
- [type=button]:active,
2366
- [type=button]:focus,
2367
- [type=reset]:hover,
2368
- [type=reset]:active,
2369
- [type=reset]:focus,
2370
- [type=submit]:hover,
2371
- [type=submit]:active,
2372
- [type=submit]:focus,
2830
+ [type='button'],
2831
+ [type='reset'],
2832
+ [type='submit'],
2833
+ .bf-btn {
2834
+ background: var(--bf-gray-light);
2835
+ }
2836
+
2837
+ button:hover,
2838
+ button:active,
2839
+ button:focus,
2840
+ [type='button']:hover,
2841
+ [type='button']:active,
2842
+ [type='button']:focus,
2843
+ [type='reset']:hover,
2844
+ [type='reset']:active,
2845
+ [type='reset']:focus,
2846
+ [type='submit']:hover,
2847
+ [type='submit']:active,
2848
+ [type='submit']:focus,
2373
2849
  .bf-btn:hover,
2374
2850
  .bf-btn:active,
2375
- .bf-btn:focus,
2376
- button.bf-disabled:hover,
2377
- button.bf-disabled:active,
2378
- button.bf-disabled:focus,
2379
- [type=button].bf-disabled:hover,
2380
- [type=button].bf-disabled:active,
2381
- [type=button].bf-disabled:focus,
2382
- [type=reset].bf-disabled:hover,
2383
- [type=reset].bf-disabled:active,
2384
- [type=reset].bf-disabled:focus,
2385
- [type=submit].bf-disabled:hover,
2386
- [type=submit].bf-disabled:active,
2387
- [type=submit].bf-disabled:focus,
2388
- .bf-btn.bf-disabled:hover,
2389
- .bf-btn.bf-disabled:active,
2390
- .bf-btn.bf-disabled:focus {
2391
- background: rgb(178.5, 178.5, 178.5);
2392
- }
2393
- button:active, button:focus,
2394
- [type=button]:active,
2395
- [type=button]:focus,
2396
- [type=reset]:active,
2397
- [type=reset]:focus,
2398
- [type=submit]:active,
2399
- [type=submit]:focus,
2400
- .bf-btn:active,
2401
- .bf-btn:focus,
2402
- button.bf-disabled:active,
2403
- button.bf-disabled:focus,
2404
- [type=button].bf-disabled:active,
2405
- [type=button].bf-disabled:focus,
2406
- [type=reset].bf-disabled:active,
2407
- [type=reset].bf-disabled:focus,
2408
- [type=submit].bf-disabled:active,
2409
- [type=submit].bf-disabled:focus,
2410
- .bf-btn.bf-disabled:active,
2411
- .bf-btn.bf-disabled:focus {
2412
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.45);
2851
+ .bf-btn:focus {
2852
+ background: var(--bf-dark-button-hover);
2413
2853
  }
2414
2854
 
2415
- button:active, button:focus,
2416
- [type=button]:active,
2417
- [type=button]:focus,
2418
- [type=reset]:active,
2419
- [type=reset]:focus,
2420
- [type=submit]:active,
2421
- [type=submit]:focus,
2855
+ button:active,
2856
+ button:focus,
2857
+ [type='button']:active,
2858
+ [type='button']:focus,
2859
+ [type='reset']:active,
2860
+ [type='reset']:focus,
2861
+ [type='submit']:active,
2862
+ [type='submit']:focus,
2422
2863
  .bf-btn:active,
2423
2864
  .bf-btn:focus {
2424
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.45);
2865
+ box-shadow: 0 0 0 3px var(--bf-dark-button-shadow);
2425
2866
  }
2426
2867
 
2427
- .bf-btn--primary.bf-disabled,
2428
2868
  .bf-btn.bf-btn--primary {
2429
- background: #007bff;
2869
+ background: var(--bf-blue);
2430
2870
  }
2431
- .bf-btn--primary.bf-disabled:hover, .bf-btn--primary.bf-disabled:active, .bf-btn--primary.bf-disabled:focus,
2871
+
2432
2872
  .bf-btn.bf-btn--primary:hover,
2433
2873
  .bf-btn.bf-btn--primary:active,
2434
2874
  .bf-btn.bf-btn--primary:focus {
2435
- background: rgb(0, 110.7, 229.5);
2875
+ background: var(--bf-blue-light);
2436
2876
  }
2437
- .bf-btn--primary.bf-disabled:active, .bf-btn--primary.bf-disabled:focus,
2877
+
2438
2878
  .bf-btn.bf-btn--primary:active,
2439
2879
  .bf-btn.bf-btn--primary:focus {
2440
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.75);
2441
- }
2442
-
2443
- a:focus,
2444
- input:focus {
2445
- outline-color: rgb(178.5, 115.5, 0);
2446
- }
2447
-
2448
- :focus-visible {
2449
- outline-color: rgb(178.5, 115.5, 0);
2880
+ box-shadow: 0 0 0 3px rgb(190 216 254 / 75%);
2450
2881
  }
2451
2882
 
2452
2883
  .bf-table th,
2453
2884
  .bf-table td {
2454
- border-color: #666;
2885
+ border-color: var(--bf-gray-dark);
2455
2886
  }
2456
2887
 
2457
2888
  .bf-table--zebra tbody tr:nth-child(odd),
2458
2889
  .bf-table-responsive--zebra tbody tr:nth-child(odd) {
2459
- background-color: #333;
2890
+ background-color: var(--bf-gray-dark-extra);
2460
2891
  }
2461
2892
 
2462
2893
  dialog {
2463
- color: #f0f0f0;
2464
- background-color: rgb(36.125, 36.125, 36.125);
2465
- }
2894
+ color: var(--bf-light);
2895
+ background-color: var(--bf-dark-bg);
2896
+ }
2897
+
2898
+ caption {
2899
+ color: var(--bf-gray-light);
2900
+ }
2901
+
2902
+ progress[value] {
2903
+ background: var(--bf-gray-dark-extra);
2904
+ color: var(--bf-blue);
2905
+ }
2906
+
2907
+ progress[value]::-webkit-progress-bar {
2908
+ background: var(--bf-gray-dark-extra);
2909
+ }
2910
+
2911
+ progress[value]::-webkit-progress-value {
2912
+ background: var(--bf-blue);
2913
+ }
2914
+
2915
+ button.bf-disabled,
2916
+ [type='button'].bf-disabled,
2917
+ [type='reset'].bf-disabled,
2918
+ [type='submit'].bf-disabled,
2919
+ .bf-btn.bf-disabled {
2920
+ background: var(--bf-gray-light);
2921
+ }
2922
+
2923
+ .bf-btn--primary.bf-disabled {
2924
+ background: var(--bf-blue);
2925
+ }
2926
+ /* Dark scrollbar colors (Firefox + WebKit). */
2927
+
2928
+ html {
2929
+ scrollbar-color: rgb(97 97 97) var(--bf-dark-extra); /* gray-dark -5% lightness */
2930
+ }
2931
+
2932
+ /* WebKit thumb / track. */
2933
+
2934
+ ::-webkit-scrollbar {
2935
+ width: 1.5rem;
2936
+ height: 1.5rem;
2937
+ }
2938
+
2939
+ ::-webkit-scrollbar-track {
2940
+ background-color: var(--bf-dark-extra);
2941
+ }
2942
+
2943
+ ::-webkit-scrollbar-thumb {
2944
+ background-color: rgb(97 97 97); /* gray-dark -5% lightness */
2945
+ }
2946
+
2947
+ ::-webkit-scrollbar-thumb:hover {
2948
+ background-color: rgb(115 115 115); /* gray-dark +10% lightness */
2949
+ }