bullframe.css 5.1.0 → 6.1.0

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