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
+ /* Always-dark class-based build. */
4
+
5
+ /* Class-based default build (light). Import map for the full framework. */
6
+
7
+ /* Variables */
8
+ /* Design tokens (--bf-*). Shared by every build variant.
9
+ * Override on :root (or a scope) to theme without rebuilding. */
10
+
11
+ :root {
12
+ /* Neutrals */
13
+ --bf-white: rgb(255 255 255);
14
+ --bf-light: rgb(240 240 240);
15
+ --bf-gray-light-extra: rgb(233 233 233);
16
+ --bf-gray-light: rgb(204 204 204);
17
+ --bf-gray: rgb(153 153 153);
18
+ --bf-gray-dark: rgb(102 102 102);
19
+ --bf-gray-dark-extra: rgb(51 51 51);
20
+ --bf-dark: rgb(34 34 34);
21
+ --bf-dark-extra: rgb(17 17 17);
22
+ --bf-black: rgb(0 0 0);
23
+
24
+ /* Highlight / mark */
25
+ --bf-yellow-light: rgb(255 255 153);
26
+ --bf-yellow: rgb(255 255 0);
27
+ --bf-orange: rgb(255 165 0);
28
+
29
+ /* Accent: WCAG AA on white (links 4.5:1) and white-on-blue buttons (4.5:1) */
30
+ --bf-blue: rgb(0 86 179);
31
+ --bf-blue-light: rgb(0 65 135);
32
+ --bf-blue-light-extra: rgb(190 216 254);
33
+
34
+ /* Invalid / error */
35
+ --bf-red: rgb(255 0 0);
36
+
37
+ /* 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,500 +468,227 @@ 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 {
405
- display: inline-block;
406
- vertical-align: baseline;
407
- width: 100%;
408
- max-width: 100%;
409
- }
410
-
411
- progress[value] {
412
- -webkit-appearance: none;
413
- -moz-appearance: none;
414
- appearance: none;
415
- border: none;
416
- height: 20px;
417
- height: 2rem;
418
- background: #ccc;
419
- color: #007bff;
420
- }
421
-
422
- progress[value]::-webkit-progress-bar {
423
- background: #ccc;
424
- }
425
-
426
- progress[value]::-webkit-progress-value {
427
- background: #007bff;
428
- }
429
-
430
- iframe {
431
- border-style: none;
432
- }
433
-
434
- address {
435
- font-style: normal;
436
- margin-bottom: 10px;
437
- margin-bottom: 1rem;
438
- line-height: inherit;
439
- }
440
-
441
- details > summary:first-of-type {
442
- display: list-item;
443
- }
444
-
445
- summary {
446
- cursor: pointer;
447
- font-weight: 700;
448
- word-break: break-all;
449
- }
450
-
451
- dialog {
452
- background-color: #fff;
453
- color: #222;
454
- border: none;
455
- border-radius: 0.25rem;
456
- padding: 20px;
457
- padding: 2rem;
458
- height: -moz-fit-content;
459
- height: fit-content;
460
- min-width: 25rem;
461
- max-width: calc(100vw - 3rem);
462
- }
463
- @media (min-width: 768px) {
464
- dialog {
465
- max-width: 50rem;
466
- }
467
- }
468
-
469
- dialog[open] {
470
- display: block !important;
471
- }
472
-
473
- dialog::backdrop {
474
- background: rgba(0, 0, 0, 0.4);
475
- }
476
-
477
- @media (prefers-reduced-motion: no-preference) {
478
- :root {
479
- scroll-behavior: smooth;
480
- }
481
- }
482
- table {
483
- caption-side: bottom;
484
- max-width: 100%;
485
- border-collapse: collapse;
486
- border-color: currentcolor;
487
- text-indent: 0;
488
- }
489
-
490
- thead,
491
- tbody,
492
- tfoot,
493
- tr,
494
- td,
495
- th {
496
- border-color: inherit;
497
- border-style: solid;
498
- border-width: 0;
499
- }
500
-
501
- thead th {
502
- vertical-align: bottom;
503
- }
504
-
505
- th,
506
- td {
507
- vertical-align: top;
508
- }
509
-
510
- th {
511
- text-align: inherit;
512
- text-align: -webkit-match-parent;
513
- font-weight: 700;
514
- }
515
-
516
- caption {
517
- padding-top: 0.5rem;
518
- padding-bottom: 0.5rem;
519
- color: #999;
520
- text-align: left;
521
- caption-side: bottom;
522
- line-height: 1.375;
523
- font-size: 90%;
524
- }
525
-
526
- /* Accessibility
527
- * ========================================================================== */
528
- /**
529
- * Change the cursor on busy elements in all browsers (opinionated).
530
- */
531
- :where([aria-busy=true i]) {
532
- cursor: progress;
533
- }
534
-
535
- /*
536
- * Change the cursor on disabled, not-editable, or otherwise
537
- * inoperable elements in all browsers (opinionated).
538
- */
539
- :where([aria-disabled=true i], [disabled]) {
540
- cursor: not-allowed;
541
- }
542
-
543
- /*
544
- * Change the display on visually hidden accessible elements
545
- * in all browsers (opinionated).
546
- */
547
- :where([aria-hidden=false i][hidden]) {
548
- display: initial;
549
- }
550
-
551
- :where([aria-hidden=false i][hidden]:not(:focus)) {
552
- clip: rect(0, 0, 0, 0);
553
- position: absolute;
554
- }
555
-
556
- :where(html input, button, select, optgroup, textarea) {
557
- color: inherit;
558
- font-family: inherit;
559
- font-size: inherit;
560
- line-height: inherit;
561
- }
562
-
563
- :where(html input,
564
- button,
565
- [type=radio],
566
- [type=checkbox],
567
- select,
568
- optgroup,
569
- textarea) {
570
- margin: 0;
571
- }
572
-
573
- :where(html input, select, textarea, legend) {
574
- width: 100%;
575
- }
576
-
577
- :where(html label,
578
- button,
579
- [type=image],
580
- [type=submit],
581
- [type=reset],
582
- html [type=button],
583
- [type=radio],
584
- [type=checkbox]) {
585
- width: auto;
586
- }
587
-
588
- :where(html input,
589
- label,
590
- select,
591
- textarea,
592
- button,
593
- html [type=button],
594
- [type=reset],
595
- [type=submit],
596
- output) {
597
- display: inline-block;
598
- }
599
-
600
- :where([type=file]) {
601
- display: block;
602
- background-color: transparent;
603
- }
604
-
605
- :where(button, html input, select, textarea) {
606
- background-image: none;
607
- }
608
-
609
- :where(input, select, textarea) {
610
- vertical-align: baseline;
611
- }
612
-
613
- :where(form) {
614
- margin: 0;
615
- }
616
-
617
- :where(fieldset) {
618
- border: 0;
619
- padding: 0;
620
- margin: 0;
621
- min-width: 0;
622
- }
623
-
624
- :where(legend) {
625
- display: table;
626
- max-width: 100%;
627
- white-space: normal;
628
- border: 0;
629
- padding: 0;
630
- font-weight: 400;
631
- margin-bottom: 5px;
632
- margin-bottom: 0.5rem;
633
- font-size: inherit;
634
- line-height: 1.375;
635
- color: inherit;
636
- }
637
-
638
- :where(label) {
639
- font-weight: 400;
640
- font-size: 90%;
641
- line-height: 1.375;
642
- margin-bottom: 5px;
643
- margin-bottom: 0.5rem;
644
- }
645
-
646
- :where(label input, label select, label textarea) {
647
- font-size: 110%;
648
- }
649
-
650
- ::-webkit-inner-spin-button {
651
- height: auto;
652
- }
653
-
654
- ::-webkit-datetime-edit-fields-wrapper,
655
- ::-webkit-datetime-edit-text,
656
- ::-webkit-datetime-edit-minute,
657
- ::-webkit-datetime-edit-hour-field,
658
- ::-webkit-datetime-edit-day-field,
659
- ::-webkit-datetime-edit-month-field,
660
- ::-webkit-datetime-edit-year-field {
661
- padding: 0;
662
- }
663
-
664
- ::-webkit-color-swatch-wrapper {
665
- padding: 0;
666
- }
667
-
668
- :where([type=search]) {
669
- outline-offset: -0.25rem;
670
- }
671
-
672
- :where(output) {
673
- vertical-align: middle;
674
- }
675
-
676
- :where(button, select) {
677
- text-transform: none;
678
- }
679
-
680
- :where(select) {
681
- word-wrap: normal;
682
- }
683
-
684
- :where([list]):not([type=date],
685
- [type=datetime-local],
686
- [type=month],
687
- [type=week],
688
- [type=time])::-webkit-calendar-picker-indicator {
689
- display: none !important;
690
- }
691
-
692
- :where(optgroup) {
693
- font-family: inherit;
694
- font-size: inherit;
695
- font-style: inherit;
696
- font-weight: 600;
697
- }
698
-
699
- :where(button,
700
- html [type=button],
701
- [type=reset],
702
- [type=submit],
703
- [type=email],
704
- [type=number],
705
- [type=text],
706
- [type=tel],
707
- [type=date],
708
- [type=datetime-local],
709
- [type=month],
710
- [type=week],
711
- [type=url],
712
- [type=image],
713
- [type=password],
714
- [type=search],
715
- [type=search]::-webkit-search-decoration,
716
- [type=search]::-webkit-search-cancel-button,
717
- input[list],
718
- textarea) {
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
+ ) {
719
692
  -webkit-appearance: none;
720
693
  appearance: none;
721
694
  }
@@ -728,23 +701,23 @@ textarea) {
728
701
  }
729
702
 
730
703
  :where(button, input, select, textarea) {
731
- border-radius: 0.25rem;
704
+ border-radius: var(--bf-spacing-sm);
732
705
  }
733
706
 
734
- :where([type=radio]) {
707
+ :where([type='radio']) {
735
708
  border-radius: 50%;
736
709
  }
737
710
 
738
- :where([type=checkbox]) {
739
- border-radius: 0.5rem;
711
+ :where([type='checkbox']) {
712
+ border-radius: var(--bf-spacing-md);
740
713
  }
741
714
 
742
- :where([type=radio], [type=checkbox]) {
715
+ :where([type='radio'], [type='checkbox']) {
743
716
  padding: 0;
744
- background-color: #fff;
717
+ background-color: var(--bf-white);
745
718
  }
746
719
 
747
- :where([type=range i]) {
720
+ :where([type='range' i]) {
748
721
  background-color: transparent;
749
722
  }
750
723
 
@@ -765,161 +738,194 @@ textarea) {
765
738
  resize: vertical;
766
739
  }
767
740
 
741
+ /* Firefox: strip inner focus padding/border. */
768
742
  ::-moz-focus-inner {
769
743
  padding: 0;
770
744
  border-style: none;
771
745
  }
772
746
 
773
- :where(button, [type=button], [type=reset], [type=submit]) {
747
+ :where(button, [type='button'], [type='reset'], [type='submit']) {
774
748
  line-height: normal;
775
749
  text-align: center;
776
750
  margin: 0;
777
751
  background-clip: padding-box;
778
752
  vertical-align: baseline;
779
753
  overflow: visible;
780
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
754
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
781
755
  -webkit-user-select: none;
782
756
  -moz-user-select: none;
783
757
  user-select: none;
784
758
  border: 0;
785
- background-image: none;
759
+ background-image: none; /* Firefox mobile */
786
760
  }
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 {
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 {
788
765
  text-decoration: none;
789
- color: #222;
766
+ color: var(--bf-dark);
790
767
  }
791
768
 
792
- :where(button:not(:disabled),
793
- [type=button]:not(:disabled),
794
- [type=reset]:not(:disabled),
795
- [type=submit]:not(:disabled)) {
769
+ :where(
770
+ button:not(:disabled),
771
+ [type='button']:not(:disabled),
772
+ [type='reset']:not(:disabled),
773
+ [type='submit']:not(:disabled)
774
+ ) {
796
775
  cursor: pointer;
797
776
  }
798
777
 
778
+ /* Firefox: input color must not override placeholder color.
779
+ * https://github.com/necolas/normalize.css/issues/150 */
799
780
  :where(input::-moz-placeholder, textarea::-moz-placeholder) {
800
- color: #666;
781
+ color: var(--bf-gray-dark);
801
782
  }
802
-
803
783
  :where(input::placeholder, textarea::placeholder) {
804
- color: #666;
784
+ color: var(--bf-gray-dark);
805
785
  }
806
786
 
807
- /*
808
- Use the modern Firefox focus style for all focusable elements.
809
- */
787
+ /* Firefox: modern focus ring on all focusable elements. */
810
788
  :-moz-focusring {
811
789
  outline: auto;
812
790
  }
813
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 */
814
794
  :-moz-ui-invalid {
815
795
  box-shadow: none;
816
796
  }
817
-
818
- :where([type=email],
819
- [type=number],
820
- [type=password],
821
- [type=tel],
822
- [type=search],
823
- [type=text],
824
- [type=date],
825
- [type=datetime-local],
826
- [type=month],
827
- [type=week],
828
- [type=time],
829
- [type=url],
830
- input[list],
831
- select,
832
- textarea) {
833
- background-color: #fff;
834
- border: 1px solid #999;
835
- padding: 0.5rem 0.75rem;
836
- }
837
-
838
- :where([type=email],
839
- [type=number],
840
- [type=password],
841
- [type=tel],
842
- [type=search],
843
- [type=text],
844
- [type=date],
845
- [type=datetime-local],
846
- [type=month],
847
- [type=week],
848
- [type=time],
849
- [type=url],
850
- input[list],
851
- select,
852
- textarea,
853
- [type=radio],
854
- [type=checkbox]):active, :where([type=email],
855
- [type=number],
856
- [type=password],
857
- [type=tel],
858
- [type=search],
859
- [type=text],
860
- [type=date],
861
- [type=datetime-local],
862
- [type=month],
863
- [type=week],
864
- [type=time],
865
- [type=url],
866
- input[list],
867
- select,
868
- textarea,
869
- [type=radio],
870
- [type=checkbox]):focus {
871
- transition: border 0.2s, background-color 0.2s, box-shadow 0.2s;
872
- border-color: #007bff;
873
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.25);
874
- }
875
-
876
- :where(button, [type=button], [type=reset], [type=submit]) {
877
- color: #222;
878
- padding: 0.6666666667rem 1.3333333333rem;
879
- background: #ccc;
880
- transition: color 0.2s, background 0.2s, box-shadow 0.2s;
881
- }
882
- :where(button, [type=button], [type=reset], [type=submit]):hover, :where(button, [type=button], [type=reset], [type=submit]):active, :where(button, [type=button], [type=reset], [type=submit]):focus {
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
+ ) {
883
882
  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]) {
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
+ ) {
923
929
  cursor: default !important;
924
930
  cursor: not-allowed !important;
925
931
  pointer-events: none !important;
@@ -927,311 +933,586 @@ label[aria-disabled=true]) {
927
933
  -moz-user-select: none !important;
928
934
  user-select: none !important;
929
935
  box-shadow: none !important;
936
+ outline: none !important;
930
937
  opacity: 0.5 !important;
931
938
  }
939
+ /* Select: custom arrow for single-value controls.
940
+ * Skip [size] / [multiple] (native UI differs by engine). Inspired by water.css. */
932
941
 
933
942
  :where(select):not([size], select[multiple]) {
934
943
  -webkit-appearance: none;
935
944
  -moz-appearance: none;
936
945
  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;
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));
939
950
  }
940
951
 
941
- :where(select)::-ms-expand {
942
- display: none;
943
- }
944
-
945
- :where(*[dir=rtl]) :where(select):not([size], select[multiple]),
946
- :where(select[dir=rtl]):not([size], select[multiple]) {
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]) {
947
955
  background-position: left 0.85rem top 50%;
948
- padding-right: 0.75rem;
949
- padding-left: 2rem;
950
- }
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
+ }
951
970
 
952
- :where([type=checkbox], [type=radio]) {
953
- -webkit-appearance: none;
954
- -moz-appearance: none;
955
- appearance: none;
956
- height: 1.8rem;
957
- width: 1.8rem;
958
- vertical-align: top;
959
- position: relative;
960
- border: 1px solid/#999;
961
- }
962
- :where([type=checkbox], [type=radio]) + label {
963
- line-height: 1.8rem;
964
- vertical-align: top;
965
- margin-left: 5px;
966
- margin-left: 0.5rem;
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
+ }
967
1069
  }
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;
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. */
972
1078
  }
973
- :where([type=checkbox], [type=radio])::after {
974
- content: "";
975
- display: block;
976
- position: absolute;
1079
+
1080
+ a:hover,
1081
+ a:focus {
1082
+ text-decoration: underline;
1083
+ color: var(--bf-blue-light);
977
1084
  }
978
- :where([type=checkbox], [type=radio]):checked {
979
- background-color: #007bff;
980
- border-color: #000;
1085
+
1086
+ /* Non-href anchors inherit text (Bootstrap reboot pattern). */
1087
+ a:not([href], [tabindex]) {
1088
+ color: inherit;
1089
+ text-decoration: none;
981
1090
  }
982
1091
 
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);
1092
+ a:not([href], [class]),
1093
+ a:not([href], [class]):hover {
1094
+ color: inherit;
1095
+ text-decoration: none;
991
1096
  }
992
1097
 
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);
1098
+ a:not([href], [tabindex]):focus {
1099
+ outline: 0;
1002
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. */
1003
1103
 
1004
- :where([type=range]) {
1005
- -webkit-appearance: none;
1006
- -moz-appearance: none;
1007
- appearance: none;
1008
- width: 100%;
1009
- height: 1.4rem;
1104
+ :where(:focus:not(:focus-visible)) {
1105
+ outline: none;
1010
1106
  }
1011
1107
 
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;
1108
+ /* tabindex="-1" targets should not show a ring on programmatic focus. */
1109
+ :where([tabindex='-1']:focus:not(:focus-visible)) {
1110
+ outline: 0 !important;
1023
1111
  }
1024
- :where([type=range])::-webkit-slider-thumb:active {
1025
- background-color: #007bff;
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;
1026
1142
  }
1143
+ /* List spacing and nav list reset. */
1027
1144
 
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;
1145
+ menu,
1146
+ ol,
1147
+ ul,
1148
+ dl {
1149
+ margin: 0 0 var(--bf-spacing-xl) 0;
1150
+ padding: 0;
1038
1151
  }
1039
- :where([type=range])::-moz-range-thumb:active {
1040
- background-color: #007bff;
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;
1041
1161
  }
1042
1162
 
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;
1163
+ ul,
1164
+ ol {
1165
+ margin-left: var(--bf-spacing-xl);
1050
1166
  }
1051
1167
 
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;
1168
+ nav ol,
1169
+ nav ul {
1170
+ list-style: none;
1171
+ margin-left: 0;
1059
1172
  }
1060
1173
 
1061
- :where([type=range]):focus {
1062
- outline: none;
1174
+ dt {
1175
+ font-weight: 700;
1063
1176
  }
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);
1177
+
1178
+ dd {
1179
+ margin-left: 0;
1066
1180
  }
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);
1181
+
1182
+ /* VoiceOver: zero-width space so list-style:none lists stay announced. */
1183
+ nav li::before {
1184
+ content: '\200B';
1185
+ position: absolute;
1069
1186
  }
1187
+ /* Media elements, figures, progress/meter, and iframes. */
1070
1188
 
1071
- :where([type=range])::-moz-focus-outer {
1072
- border: 0;
1189
+ audio,
1190
+ canvas,
1191
+ progress,
1192
+ video {
1193
+ display: inline-block;
1073
1194
  }
1074
1195
 
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);
1196
+ img,
1197
+ canvas,
1198
+ audio,
1199
+ video,
1200
+ iframe,
1201
+ object,
1202
+ embed {
1203
+ max-width: 100%;
1077
1204
  }
1078
1205
 
1079
- :where([type=range]):disabled {
1080
- pointer-events: none;
1206
+ audio,
1207
+ video,
1208
+ canvas,
1209
+ img,
1210
+ svg {
1211
+ vertical-align: middle;
1081
1212
  }
1082
- :where([type=range]):disabled::-webkit-slider-thumb {
1083
- background-color: #ccc;
1213
+
1214
+ img {
1215
+ height: auto;
1216
+ border-style: none;
1084
1217
  }
1085
- :where([type=range]):disabled::-moz-slider-thumb {
1086
- background-color: #ccc;
1218
+
1219
+ figure {
1220
+ margin: 0;
1087
1221
  }
1088
1222
 
1089
- .bf-container,
1090
- .bf-container--fluid {
1091
- box-sizing: border-box;
1223
+ figure,
1224
+ figcaption {
1092
1225
  display: block;
1093
- margin-right: auto;
1094
- margin-left: auto;
1095
- padding-left: 1.5rem;
1096
- padding-right: 1.5rem;
1097
1226
  }
1098
1227
 
1099
- .bf-container {
1100
- max-width: 114rem;
1228
+ figcaption {
1229
+ line-height: 1.375;
1230
+ font-size: 90%;
1101
1231
  }
1102
1232
 
1103
- .bf-row {
1104
- display: flex;
1105
- flex-wrap: wrap;
1106
- margin-left: -1.5rem;
1107
- margin-right: -1.5rem;
1233
+ video {
1234
+ height: auto;
1108
1235
  }
1109
1236
 
1110
- [class^=bf-col-] {
1111
- position: relative;
1112
- min-height: 1px;
1113
- padding-left: 1.5rem;
1114
- padding-right: 1.5rem;
1115
- flex-grow: 0;
1116
- flex-shrink: 0;
1237
+ audio {
1238
+ width: 100%;
1117
1239
  }
1118
1240
 
1119
- .bf-no-gutters {
1120
- margin-right: 0;
1121
- margin-left: 0;
1241
+ audio:not([controls]) {
1242
+ display: none;
1243
+ height: 0;
1122
1244
  }
1123
- .bf-no-gutters > [class^=bf-col] {
1124
- padding-right: 0;
1125
- padding-left: 0;
1245
+
1246
+ svg:not(:root) {
1247
+ overflow: hidden;
1126
1248
  }
1127
1249
 
1128
- .bf-col-12 {
1129
- flex-basis: 100%;
1250
+ svg:not([fill]) {
1251
+ fill: currentColor;
1252
+ }
1253
+
1254
+ progress,
1255
+ meter {
1256
+ display: inline-block;
1257
+ vertical-align: baseline;
1258
+ width: 100%;
1130
1259
  max-width: 100%;
1131
1260
  }
1132
1261
 
1133
- .bf-col-11 {
1134
- flex-basis: 91.6667%;
1135
- max-width: 91.6667%;
1262
+ /* progress[value] reset (https://css-tricks.com/html5-progress-element/). */
1263
+ progress[value] {
1264
+ -webkit-appearance: none;
1265
+ -moz-appearance: none;
1266
+ appearance: none;
1267
+ border: none; /* Firefox default border. */
1268
+
1269
+ height: 20px;
1270
+ height: 2rem;
1271
+
1272
+ background: var(--bf-gray-light);
1273
+ color: var(--bf-blue); /* Progress fill in IE10+. */
1136
1274
  }
1137
1275
 
1138
- .bf-col-10 {
1139
- flex-basis: 83.3333%;
1140
- max-width: 83.3333%;
1276
+ progress[value]::-webkit-progress-bar {
1277
+ background: var(--bf-gray-light);
1141
1278
  }
1142
1279
 
1143
- .bf-col-9 {
1144
- flex-basis: 75%;
1145
- max-width: 75%;
1280
+ progress[value]::-webkit-progress-value {
1281
+ background: var(--bf-blue);
1146
1282
  }
1147
1283
 
1148
- .bf-col-8 {
1149
- flex-basis: 66.6667%;
1150
- max-width: 66.6667%;
1284
+ /* No default border (covers embeds that ignore frameborder="0"). */
1285
+ iframe {
1286
+ border-style: none;
1151
1287
  }
1288
+ /* Address, details/summary, and dialog defaults. */
1152
1289
 
1153
- .bf-col-7 {
1154
- flex-basis: 58.3333%;
1155
- max-width: 58.3333%;
1290
+ address {
1291
+ font-style: normal;
1292
+ margin-bottom: var(--bf-spacing-lg);
1293
+ line-height: inherit;
1156
1294
  }
1157
1295
 
1158
- .bf-col-6 {
1159
- flex-basis: 50%;
1160
- max-width: 50%;
1296
+ details > summary:first-of-type {
1297
+ display: list-item;
1161
1298
  }
1162
1299
 
1163
- .bf-col-5 {
1164
- flex-basis: 41.6667%;
1165
- max-width: 41.6667%;
1300
+ summary {
1301
+ cursor: pointer;
1302
+ font-weight: 700;
1303
+ word-break: break-all;
1304
+ }
1305
+
1306
+ dialog {
1307
+ background-color: var(--bf-white);
1308
+ color: var(--bf-dark);
1309
+ border: none;
1310
+ border-radius: var(--bf-spacing-sm);
1311
+ padding: var(--bf-spacing-xl);
1312
+ height: -moz-fit-content;
1313
+ height: fit-content;
1314
+ min-width: min(25rem, 100%);
1315
+ max-width: calc(100vw - (var(--bf-spacing-grid-gutter) * 2));
1316
+ }
1317
+
1318
+ @media (min-width: 768px) {
1319
+ dialog {
1320
+ max-width: 50rem;
1321
+ }
1322
+ }
1323
+
1324
+ /* Open dialog wins over [hidden] (e.g. <dialog hidden open>). */
1325
+ dialog[open] {
1326
+ display: block !important;
1327
+ }
1328
+
1329
+ dialog::backdrop {
1330
+ background: rgb(0 0 0 / 40%);
1331
+ }
1332
+ /* Smooth scrolling when motion is allowed. */
1333
+
1334
+ @media (prefers-reduced-motion: no-preference) {
1335
+ :root {
1336
+ scroll-behavior: smooth;
1337
+ }
1338
+ }
1339
+ /* Table border collapse and cell alignment. */
1340
+
1341
+ table {
1342
+ caption-side: bottom;
1343
+ max-width: 100%;
1344
+ border-collapse: collapse;
1345
+ border-color: currentcolor; /* Chrome / Safari inheritance. */
1346
+ text-indent: 0; /* Chrome / Safari table indent. */
1347
+ }
1348
+
1349
+ thead,
1350
+ tbody,
1351
+ tfoot,
1352
+ tr,
1353
+ td,
1354
+ th {
1355
+ border-color: inherit;
1356
+ border-style: solid;
1357
+ border-width: 0;
1358
+ }
1359
+
1360
+ thead th {
1361
+ vertical-align: bottom;
1362
+ }
1363
+
1364
+ th,
1365
+ td {
1366
+ vertical-align: top;
1367
+ }
1368
+
1369
+ th {
1370
+ text-align: inherit;
1371
+ text-align: -webkit-match-parent;
1372
+ font-weight: 700;
1373
+ }
1374
+
1375
+ caption {
1376
+ padding-top: var(--bf-spacing-md);
1377
+ padding-bottom: var(--bf-spacing-md);
1378
+ color: var(--bf-gray);
1379
+ text-align: left;
1380
+ caption-side: bottom;
1381
+ line-height: 1.375;
1382
+ font-size: 90%;
1166
1383
  }
1384
+ /* Accessibility helpers (adapted from sanitize.css). */
1167
1385
 
1168
- .bf-col-4 {
1169
- flex-basis: 33.3333%;
1170
- max-width: 33.3333%;
1386
+ /* Busy: progress cursor. */
1387
+ :where([aria-busy='true' i]) {
1388
+ cursor: progress;
1171
1389
  }
1172
1390
 
1173
- .bf-col-3 {
1174
- flex-basis: 25%;
1175
- max-width: 25%;
1391
+ /* Disabled / inoperable: not-allowed cursor. */
1392
+ :where([aria-disabled='true' i], [disabled]) {
1393
+ cursor: not-allowed;
1176
1394
  }
1177
1395
 
1178
- .bf-col-2 {
1179
- flex-basis: 16.6667%;
1180
- max-width: 16.6667%;
1396
+ /* aria-hidden="false" on [hidden]: keep in a11y tree when not focused. */
1397
+ :where([aria-hidden='false' i][hidden]) {
1398
+ display: initial;
1181
1399
  }
1182
1400
 
1183
- .bf-col-1 {
1184
- flex-basis: 8.3333%;
1185
- max-width: 8.3333%;
1401
+ :where([aria-hidden='false' i][hidden]:not(:focus)) {
1402
+ clip: rect(0, 0, 0, 0);
1403
+ position: absolute;
1186
1404
  }
1405
+ /* Preference queries only (prefers-contrast, forced-colors). Additive. */
1187
1406
 
1188
- @media (max-width: 575px) {
1189
- .bf-container--break-xs .bf-row {
1190
- margin-left: 0;
1191
- margin-right: 0;
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;
1192
1411
  }
1193
- .bf-container--break-xs [class^=bf-col] {
1194
- flex-basis: 100%;
1195
- max-width: 100%;
1196
- margin-left: 0;
1197
- padding-left: 0;
1198
- padding-right: 0;
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);
1199
1417
  }
1200
- }
1201
- @media (max-width: 767px) {
1202
- .bf-container--break-md .bf-row {
1203
- margin-left: 0;
1204
- margin-right: 0;
1418
+
1419
+ :focus-visible {
1420
+ outline-width: 0.3rem;
1421
+ outline-offset: 0.4rem;
1205
1422
  }
1206
- .bf-container--break-md [class^=bf-col] {
1207
- flex-basis: 100%;
1208
- max-width: 100%;
1209
- margin-left: 0;
1210
- padding-left: 0;
1211
- padding-right: 0;
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;
1212
1440
  }
1213
1441
  }
1214
- @media (max-width: 991px) {
1215
- .bf-container--break-lg .bf-row {
1216
- margin-left: 0;
1217
- margin-right: 0;
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;
1218
1447
  }
1219
- .bf-container--break-lg [class^=bf-col] {
1220
- flex-basis: 100%;
1221
- max-width: 100%;
1222
- margin-left: 0;
1223
- padding-left: 0;
1224
- padding-right: 0;
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;
1225
1459
  }
1226
1460
  }
1227
- table td[class^=bf-col],
1228
- table th[class^=bf-col] {
1229
- position: static;
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%);
1230
1503
  }
1231
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
+
1232
1513
  .bf-clearfix::before,
1233
1514
  .bf-clearfix::after {
1234
- content: " ";
1515
+ content: ' ';
1235
1516
  display: table;
1236
1517
  }
1237
1518
 
@@ -1249,7 +1530,6 @@ table th[class^=bf-col] {
1249
1530
  }
1250
1531
 
1251
1532
  .bf-text-hide {
1252
- /* stylelint-disable-next-line */
1253
1533
  font: 0/0 a !important;
1254
1534
  color: transparent !important;
1255
1535
  text-shadow: none !important;
@@ -1259,45 +1539,8 @@ table th[class^=bf-col] {
1259
1539
  padding: 0 !important;
1260
1540
  }
1261
1541
 
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
- }
1542
+ /* .bf-sr-only, .bf-focusable and .bf-skip-link live in
1543
+ * miscellaneous/a11y-helpers.css (class-based and utilities builds). */
1301
1544
 
1302
1545
  .bf-invisible {
1303
1546
  visibility: hidden !important;
@@ -1354,496 +1597,694 @@ table th[class^=bf-col] {
1354
1597
  flex-wrap: nowrap !important;
1355
1598
  }
1356
1599
 
1357
- .bf-float-left {
1358
- float: left !important;
1600
+ .bf-float-left {
1601
+ float: left !important;
1602
+ }
1603
+
1604
+ .bf-float-right {
1605
+ float: right !important;
1606
+ }
1607
+
1608
+ .bf-position-fixed {
1609
+ position: fixed !important;
1610
+ }
1611
+
1612
+ .bf-position-sticky {
1613
+ position: sticky !important;
1614
+ top: 0 !important;
1615
+ }
1616
+
1617
+ .bf-position-relative {
1618
+ position: relative !important;
1619
+ }
1620
+
1621
+ /* Absolute center inside a relative parent. */
1622
+ .bf-align-center-unknown {
1623
+ position: relative !important;
1624
+ }
1625
+
1626
+ .bf-align-center-unknown--item {
1627
+ position: absolute !important;
1628
+ top: 50% !important;
1629
+ left: 50% !important;
1630
+ transform: translate(-50%, -50%) !important;
1631
+ }
1632
+
1633
+ .bf-align-center-flex {
1634
+ display: flex !important;
1635
+ justify-content: center !important;
1636
+ align-items: center !important;
1637
+ height: 100vh !important;
1638
+ }
1639
+
1640
+ .bf-width-25 {
1641
+ width: 25% !important;
1642
+ }
1643
+
1644
+ .bf-width-33 {
1645
+ width: 33.3333% !important;
1646
+ }
1647
+
1648
+ .bf-width-50 {
1649
+ width: 50% !important;
1650
+ }
1651
+
1652
+ .bf-width-75 {
1653
+ width: 75% !important;
1654
+ }
1655
+
1656
+ .bf-width-100 {
1657
+ width: 100% !important;
1658
+ }
1659
+
1660
+ .bf-width-auto {
1661
+ width: auto !important;
1662
+ }
1663
+ /* Text alignment, weight, truncate, and font-stack helpers. */
1664
+
1665
+ .bf-t-transform-uppercase {
1666
+ text-transform: uppercase !important;
1667
+ }
1668
+
1669
+ .bf-t-transform-none {
1670
+ text-transform: none !important;
1671
+ }
1672
+
1673
+ .bf-t-left {
1674
+ text-align: left !important;
1675
+ }
1676
+
1677
+ .bf-t-center {
1678
+ text-align: center !important;
1679
+ }
1680
+
1681
+ .bf-t-right {
1682
+ text-align: right !important;
1683
+ }
1684
+
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;
1688
+ }
1689
+
1690
+ .bf-t-italic {
1691
+ font-style: italic !important;
1692
+ }
1693
+
1694
+ /* Reset italic inheritance (e.g. nested <i>). */
1695
+ .bf-t-style-normal {
1696
+ font-style: normal !important;
1697
+ }
1698
+
1699
+ /* Weight utilities (e.g. reset <b>). */
1700
+ .bf-t-weight-300 {
1701
+ font-weight: 300 !important;
1702
+ }
1703
+
1704
+ .bf-t-weight-400 {
1705
+ font-weight: 400 !important;
1706
+ }
1707
+
1708
+ .bf-t-weight-500 {
1709
+ font-weight: 500 !important;
1710
+ }
1711
+
1712
+ .bf-t-weight-600 {
1713
+ font-weight: 600 !important;
1714
+ }
1715
+
1716
+ .bf-t-weight-700 {
1717
+ font-weight: 700 !important;
1718
+ }
1719
+
1720
+ .bf-t-weight-800 {
1721
+ font-weight: 800 !important;
1722
+ }
1723
+
1724
+ .bf-text-break {
1725
+ word-wrap: break-word !important;
1726
+ }
1727
+
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;
1734
+ }
1735
+
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;
1743
+ }
1744
+
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;
1359
1752
  }
1360
1753
 
1361
- .bf-float-right {
1362
- float: right !important;
1754
+ .bf-no-select {
1755
+ -webkit-user-select: none !important;
1756
+ -moz-user-select: none !important;
1757
+ user-select: none !important;
1758
+ -webkit-touch-callout: none !important;
1363
1759
  }
1364
1760
 
1365
- .bf-position-fixed {
1366
- position: fixed !important;
1761
+ .bf-font-sans-serif {
1762
+ font-family: var(--bf-font-sans-serif) !important;
1367
1763
  }
1368
1764
 
1369
- .bf-position-sticky {
1370
- position: sticky !important;
1371
- top: 0 !important;
1765
+ .bf-font-serif {
1766
+ font-family: var(--bf-font-serif) !important;
1372
1767
  }
1373
1768
 
1374
- .bf-align-center-unknown {
1375
- position: relative !important;
1769
+ .bf-font-monospace {
1770
+ font-family: var(--bf-font-monospace) !important;
1376
1771
  }
1377
1772
 
1378
- .bf-align-center-unknown--item {
1379
- position: absolute !important;
1380
- top: 50% !important;
1381
- left: 50% !important;
1382
- transform: translate(-50%, -50%) !important;
1773
+ /* Opt-in stacks from Modern Font Stacks (https://modernfontstacks.com/). */
1774
+ .bf-sans-serif--system {
1775
+ font-family: system-ui, sans-serif;
1383
1776
  }
1384
1777
 
1385
- .bf-align-center-flex {
1386
- display: flex;
1387
- align-items: center;
1388
- justify-content: center;
1778
+ .bf-serif--transitional {
1779
+ font-family: Charter, 'Bitstream Charter', 'Sitka Text', Cambria, serif;
1389
1780
  }
1390
1781
 
1391
- .bf-width-25 {
1392
- width: 25% !important;
1782
+ .bf-serif--oldstyle {
1783
+ font-family: 'Iowan Old Style', 'Palatino Linotype', 'URW Palladio L', P052, serif;
1393
1784
  }
1394
1785
 
1395
- .bf-width-33 {
1396
- width: 33.3333% !important;
1786
+ .bf-sans-serif--humanist {
1787
+ font-family:
1788
+ Seravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serif;
1397
1789
  }
1398
1790
 
1399
- .bf-width-50 {
1400
- width: 50% !important;
1791
+ .bf-sans-serif--geometric {
1792
+ font-family: Avenir, Montserrat, Corbel, 'URW Gothic', source-sans-pro, sans-serif;
1401
1793
  }
1402
1794
 
1403
- .bf-width-75 {
1404
- width: 75% !important;
1795
+ .bf-sans-serif--classical {
1796
+ font-family: Optima, Candara, 'Noto Sans', source-sans-pro, sans-serif;
1405
1797
  }
1406
1798
 
1407
- .bf-width-100 {
1408
- width: 100% !important;
1799
+ .bf-sans-serif--neo-grotesque {
1800
+ font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
1409
1801
  }
1410
1802
 
1411
- .bf-width-auto {
1412
- width: auto !important;
1803
+ .bf-monospace--slab {
1804
+ font-family: 'Nimbus Mono PS', 'Courier New', monospace;
1413
1805
  }
1414
1806
 
1415
- .bf-z-index-1 {
1416
- z-index: 1;
1807
+ .bf-monospace--code {
1808
+ font-family:
1809
+ ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',
1810
+ monospace;
1417
1811
  }
1418
1812
 
1419
- .bf-z-index-2 {
1420
- z-index: 2;
1813
+ .bf-sans-serif--industrial {
1814
+ font-family:
1815
+ Bahnschrift, 'DIN Alternate', 'Franklin Gothic Medium', 'Nimbus Sans Narrow',
1816
+ sans-serif-condensed, sans-serif;
1421
1817
  }
1422
1818
 
1423
- .bf-z-index-3 {
1424
- z-index: 3;
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;
1425
1823
  }
1426
1824
 
1427
- .bf-z-index-4 {
1428
- z-index: 4;
1825
+ .bf-serif--slab {
1826
+ font-family: Rockwell, 'Rockwell Nova', 'Roboto Slab', 'DejaVu Serif', 'Sitka Small', serif;
1429
1827
  }
1430
1828
 
1431
- .bf-z-index-5 {
1432
- z-index: 5;
1829
+ .bf-serif--antique {
1830
+ font-family:
1831
+ Superclarendon, 'Bookman Old Style', 'URW Bookman', 'URW Bookman L', 'Georgia Pro', Georgia,
1832
+ serif;
1433
1833
  }
1434
1834
 
1435
- .bf-z-index-6 {
1436
- z-index: 6;
1835
+ .bf-serif--didone {
1836
+ font-family: Didot, 'Bodoni MT', 'Noto Serif Display', 'URW Palladio L', P052, Sylfaen, serif;
1437
1837
  }
1438
1838
 
1439
- .bf-z-index-7 {
1440
- z-index: 7;
1839
+ .bf-cursive--handwritten {
1840
+ font-family: 'Segoe Print', 'Bradley Hand', Chilanka, TSCu_Comic, casual, cursive;
1441
1841
  }
1442
1842
 
1443
- .bf-z-index-8 {
1444
- z-index: 8;
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;
1445
1853
  }
1446
1854
 
1447
- .bf-z-index-9 {
1448
- z-index: 9;
1855
+ .bf-h1 {
1856
+ font-size: 36px !important;
1857
+ font-size: 3.6rem !important;
1449
1858
  }
1450
1859
 
1451
- .bf-z-index-10 {
1452
- z-index: 10;
1860
+ .bf-h2 {
1861
+ font-size: 30px !important;
1862
+ font-size: 3rem !important;
1453
1863
  }
1454
1864
 
1455
- .bf-z-index-20 {
1456
- z-index: 20;
1865
+ .bf-h3 {
1866
+ font-size: 24px !important;
1867
+ font-size: 2.4rem !important;
1457
1868
  }
1458
1869
 
1459
- .bf-z-index-30 {
1460
- z-index: 30;
1870
+ .bf-h4 {
1871
+ font-size: 20px !important;
1872
+ font-size: 2rem !important;
1461
1873
  }
1462
1874
 
1463
- .bf-z-index-40 {
1464
- z-index: 40;
1875
+ .bf-h5,
1876
+ .bf-h6 {
1877
+ font-size: 16px !important;
1878
+ font-size: 1.6rem !important;
1465
1879
  }
1466
1880
 
1467
- .bf-z-index-50 {
1468
- z-index: 50;
1881
+ p.bf-lead {
1882
+ font-size: 120% !important;
1469
1883
  }
1470
1884
 
1471
- .bf-z-index-60 {
1472
- z-index: 60;
1885
+ body.bf-responsive-typography {
1886
+ font-size: clamp(1.5rem, 2vw, 1.8rem);
1473
1887
  }
1888
+ /* 12-column flex grid: .bf-container / .bf-row / .bf-col-* (+ optional --break-* stacking). */
1474
1889
 
1475
- .bf-z-index-70 {
1476
- z-index: 70;
1890
+ .bf-container,
1891
+ .bf-container--fluid {
1892
+ box-sizing: border-box;
1893
+ display: block;
1894
+ margin-right: auto;
1895
+ margin-left: auto;
1896
+ padding-left: var(--bf-spacing-grid-gutter);
1897
+ padding-right: var(--bf-spacing-grid-gutter);
1477
1898
  }
1478
1899
 
1479
- .bf-z-index-80 {
1480
- z-index: 80;
1900
+ .bf-container {
1901
+ max-width: 114rem;
1481
1902
  }
1482
1903
 
1483
- .bf-z-index-90 {
1484
- z-index: 90;
1904
+ .bf-row {
1905
+ display: flex;
1906
+ flex-wrap: wrap;
1907
+ margin-left: calc(-1 * var(--bf-spacing-grid-gutter));
1908
+ margin-right: calc(-1 * var(--bf-spacing-grid-gutter));
1485
1909
  }
1486
1910
 
1487
- .bf-z-index-100 {
1488
- z-index: 100;
1911
+ [class^='bf-col-'] {
1912
+ position: relative;
1913
+ min-height: 1px;
1914
+ padding-left: var(--bf-spacing-grid-gutter);
1915
+ padding-right: var(--bf-spacing-grid-gutter);
1916
+ flex-grow: 0;
1917
+ flex-shrink: 0;
1489
1918
  }
1490
1919
 
1491
- .bf-z-index-200 {
1492
- z-index: 200;
1920
+ .bf-no-gutters {
1921
+ margin-right: 0;
1922
+ margin-left: 0;
1493
1923
  }
1494
1924
 
1495
- .bf-z-index-300 {
1496
- z-index: 200;
1925
+ .bf-no-gutters > [class^='bf-col'] {
1926
+ padding-right: 0;
1927
+ padding-left: 0;
1497
1928
  }
1498
1929
 
1499
- .bf-m-0 {
1500
- margin: 0 !important;
1930
+ /* Column spans (12ths). */
1931
+ .bf-col-12 {
1932
+ flex-basis: 100%;
1933
+ max-width: 100%;
1501
1934
  }
1502
1935
 
1503
- .bf-m-t-0 {
1504
- margin-top: 0 !important;
1936
+ .bf-col-11 {
1937
+ flex-basis: 91.6667%;
1938
+ max-width: 91.6667%;
1505
1939
  }
1506
1940
 
1507
- .bf-m-b-0 {
1508
- margin-bottom: 0 !important;
1941
+ .bf-col-10 {
1942
+ flex-basis: 83.3333%;
1943
+ max-width: 83.3333%;
1509
1944
  }
1510
1945
 
1511
- .bf-m-l-0 {
1512
- margin-left: 0 !important;
1946
+ .bf-col-9 {
1947
+ flex-basis: 75%;
1948
+ max-width: 75%;
1513
1949
  }
1514
1950
 
1515
- .bf-m-r-0 {
1516
- margin-right: 0 !important;
1951
+ .bf-col-8 {
1952
+ flex-basis: 66.6667%;
1953
+ max-width: 66.6667%;
1517
1954
  }
1518
1955
 
1519
- .bf-m-1 {
1520
- margin-bottom: 0.5rem !important;
1956
+ .bf-col-7 {
1957
+ flex-basis: 58.3333%;
1958
+ max-width: 58.3333%;
1521
1959
  }
1522
1960
 
1523
- .bf-m-2 {
1524
- margin-bottom: 1rem !important;
1961
+ .bf-col-6 {
1962
+ flex-basis: 50%;
1963
+ max-width: 50%;
1525
1964
  }
1526
1965
 
1527
- .bf-m-3 {
1528
- margin-bottom: 2rem !important;
1966
+ .bf-col-5 {
1967
+ flex-basis: 41.6667%;
1968
+ max-width: 41.6667%;
1529
1969
  }
1530
1970
 
1531
- .bf-m-4 {
1532
- margin-bottom: 3rem !important;
1971
+ .bf-col-4 {
1972
+ flex-basis: 33.3333%;
1973
+ max-width: 33.3333%;
1533
1974
  }
1534
1975
 
1535
- .bf-m-t-1 {
1536
- margin-top: 0.5rem !important;
1976
+ .bf-col-3 {
1977
+ flex-basis: 25%;
1978
+ max-width: 25%;
1537
1979
  }
1538
1980
 
1539
- .bf-m-t-2 {
1540
- margin-top: 1rem !important;
1981
+ .bf-col-2 {
1982
+ flex-basis: 16.6667%;
1983
+ max-width: 16.6667%;
1541
1984
  }
1542
1985
 
1543
- .bf-m-t-3 {
1544
- margin-top: 2rem !important;
1986
+ .bf-col-1 {
1987
+ flex-basis: 8.3333%;
1988
+ max-width: 8.3333%;
1545
1989
  }
1546
1990
 
1547
- .bf-m-t-4 {
1548
- margin-top: 3rem !important;
1549
- }
1991
+ /* Breakpoint stacking via .bf-container--break-{xs|md|lg}. */
1992
+ @media (max-width: 575px) {
1993
+ .bf-container--break-xs .bf-row {
1994
+ margin-left: 0;
1995
+ margin-right: 0;
1996
+ }
1550
1997
 
1551
- .bf-m-b-1 {
1552
- margin-bottom: 0.5rem !important;
1998
+ .bf-container--break-xs [class^='bf-col'] {
1999
+ flex-basis: 100%;
2000
+ max-width: 100%;
2001
+ margin-left: 0;
2002
+ padding-left: 0;
2003
+ padding-right: 0;
2004
+ }
1553
2005
  }
1554
2006
 
1555
- .bf-m-b-2 {
1556
- margin-bottom: 1rem !important;
1557
- }
2007
+ @media (max-width: 767px) {
2008
+ .bf-container--break-md .bf-row {
2009
+ margin-left: 0;
2010
+ margin-right: 0;
2011
+ }
1558
2012
 
1559
- .bf-m-b-3 {
1560
- margin-bottom: 2rem !important;
2013
+ .bf-container--break-md [class^='bf-col'] {
2014
+ flex-basis: 100%;
2015
+ max-width: 100%;
2016
+ margin-left: 0;
2017
+ padding-left: 0;
2018
+ padding-right: 0;
2019
+ }
1561
2020
  }
1562
2021
 
1563
- .bf-m-b-4 {
1564
- margin-bottom: 3rem !important;
1565
- }
2022
+ @media (max-width: 991px) {
2023
+ .bf-container--break-lg .bf-row {
2024
+ margin-left: 0;
2025
+ margin-right: 0;
2026
+ }
1566
2027
 
1567
- .bf-p-0 {
1568
- padding: 0 !important;
2028
+ .bf-container--break-lg [class^='bf-col'] {
2029
+ flex-basis: 100%;
2030
+ max-width: 100%;
2031
+ margin-left: 0;
2032
+ padding-left: 0;
2033
+ padding-right: 0;
2034
+ }
1569
2035
  }
1570
2036
 
1571
- .bf-p-t-0 {
1572
- padding-top: 0 !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;
1573
2041
  }
2042
+ /* Z-index scale (.bf-z-index-*). */
1574
2043
 
1575
- .bf-p-b-0 {
1576
- padding-bottom: 0 !important;
2044
+ .bf-z-index-1 {
2045
+ z-index: 1;
1577
2046
  }
1578
-
1579
- .bf-p-l-0 {
1580
- padding-left: 0 !important;
2047
+ .bf-z-index-2 {
2048
+ z-index: 2;
1581
2049
  }
1582
-
1583
- .bf-p-r-0 {
1584
- padding-right: 0 !important;
2050
+ .bf-z-index-3 {
2051
+ z-index: 3;
1585
2052
  }
1586
-
1587
- .bf-p-1 {
1588
- padding-bottom: 0.5rem !important;
2053
+ .bf-z-index-4 {
2054
+ z-index: 4;
1589
2055
  }
1590
-
1591
- .bf-p-2 {
1592
- padding-bottom: 1rem !important;
2056
+ .bf-z-index-5 {
2057
+ z-index: 5;
2058
+ }
2059
+ .bf-z-index-6 {
2060
+ z-index: 6;
2061
+ }
2062
+ .bf-z-index-7 {
2063
+ z-index: 7;
1593
2064
  }
1594
-
1595
- .bf-p-3 {
1596
- padding-bottom: 2rem !important;
2065
+ .bf-z-index-8 {
2066
+ z-index: 8;
1597
2067
  }
1598
-
1599
- .bf-p-4 {
1600
- padding-bottom: 3rem !important;
2068
+ .bf-z-index-9 {
2069
+ z-index: 9;
1601
2070
  }
1602
-
1603
- .bf-p-t-1 {
1604
- padding-top: 0.5rem !important;
2071
+ .bf-z-index-10 {
2072
+ z-index: 10;
1605
2073
  }
1606
-
1607
- .bf-p-t-2 {
1608
- padding-top: 1rem !important;
2074
+ .bf-z-index-20 {
2075
+ z-index: 20;
1609
2076
  }
1610
-
1611
- .bf-p-t-3 {
1612
- padding-top: 2rem !important;
2077
+ .bf-z-index-30 {
2078
+ z-index: 30;
1613
2079
  }
1614
-
1615
- .bf-p-t-4 {
1616
- padding-top: 3rem !important;
2080
+ .bf-z-index-40 {
2081
+ z-index: 40;
1617
2082
  }
1618
-
1619
- .bf-p-b-1 {
1620
- padding-bottom: 0.5rem !important;
2083
+ .bf-z-index-50 {
2084
+ z-index: 50;
1621
2085
  }
1622
-
1623
- .bf-p-b-2 {
1624
- padding-bottom: 1rem !important;
2086
+ .bf-z-index-60 {
2087
+ z-index: 60;
1625
2088
  }
1626
-
1627
- .bf-p-b-3 {
1628
- padding-bottom: 2rem !important;
2089
+ .bf-z-index-70 {
2090
+ z-index: 70;
1629
2091
  }
1630
-
1631
- .bf-p-b-4 {
1632
- padding-bottom: 3rem !important;
2092
+ .bf-z-index-80 {
2093
+ z-index: 80;
1633
2094
  }
1634
-
1635
- .bf-t-transform-uppercase {
1636
- text-transform: uppercase !important;
2095
+ .bf-z-index-90 {
2096
+ z-index: 90;
1637
2097
  }
1638
-
1639
- .bf-t-transform-none {
1640
- text-transform: none !important;
2098
+ .bf-z-index-100 {
2099
+ z-index: 100;
1641
2100
  }
1642
-
1643
- .bf-t-left {
1644
- text-align: left !important;
2101
+ .bf-z-index-200 {
2102
+ z-index: 200;
1645
2103
  }
1646
-
1647
- .bf-t-center {
1648
- text-align: center !important;
2104
+ .bf-z-index-300 {
2105
+ z-index: 300;
1649
2106
  }
2107
+ /* Margin / padding scale (.bf-m-*, .bf-p-*). */
1650
2108
 
1651
- .bf-t-right {
1652
- text-align: right !important;
2109
+ .bf-m-0 {
2110
+ margin: 0 !important;
1653
2111
  }
1654
2112
 
1655
- .bf-t-shadow {
1656
- text-shadow: 0 0 2px #222 !important;
1657
- text-shadow: 0 0 0.2rem #222 !important;
2113
+ .bf-m-t-0 {
2114
+ margin-top: 0 !important;
1658
2115
  }
1659
2116
 
1660
- .bf-t-italic {
1661
- font-style: italic !important;
2117
+ .bf-m-b-0 {
2118
+ margin-bottom: 0 !important;
1662
2119
  }
1663
2120
 
1664
- .bf-t-style-normal {
1665
- font-style: normal !important;
2121
+ .bf-m-l-0 {
2122
+ margin-left: 0 !important;
1666
2123
  }
1667
2124
 
1668
- .bf-t-weight-300 {
1669
- font-weight: 300 !important;
2125
+ .bf-m-r-0 {
2126
+ margin-right: 0 !important;
1670
2127
  }
1671
2128
 
1672
- .bf-t-weight-400 {
1673
- font-weight: 400 !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;
1674
2133
  }
1675
2134
 
1676
- .bf-t-weight-500 {
1677
- font-weight: 500 !important;
2135
+ .bf-m-2,
2136
+ .bf-m-b-2 {
2137
+ margin-bottom: var(--bf-spacing-lg) !important;
1678
2138
  }
1679
2139
 
1680
- .bf-t-weight-600 {
1681
- font-weight: 600 !important;
2140
+ .bf-m-3,
2141
+ .bf-m-b-3 {
2142
+ margin-bottom: var(--bf-spacing-xl) !important;
1682
2143
  }
1683
2144
 
1684
- .bf-t-weight-700 {
1685
- font-weight: 700 !important;
2145
+ .bf-m-4,
2146
+ .bf-m-b-4 {
2147
+ margin-bottom: var(--bf-spacing-xxl) !important;
1686
2148
  }
1687
2149
 
1688
- .bf-t-weight-800 {
1689
- font-weight: 800 !important;
2150
+ .bf-m-t-1 {
2151
+ margin-top: var(--bf-spacing-md) !important;
1690
2152
  }
1691
2153
 
1692
- .bf-text-break {
1693
- word-wrap: break-word !important;
2154
+ .bf-m-t-2 {
2155
+ margin-top: var(--bf-spacing-lg) !important;
1694
2156
  }
1695
2157
 
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;
2158
+ .bf-m-t-3 {
2159
+ margin-top: var(--bf-spacing-xl) !important;
1702
2160
  }
1703
2161
 
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;
2162
+ .bf-m-t-4 {
2163
+ margin-top: var(--bf-spacing-xxl) !important;
1711
2164
  }
1712
2165
 
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;
2166
+ .bf-p-0 {
2167
+ padding: 0 !important;
1720
2168
  }
1721
2169
 
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;
2170
+ .bf-p-t-0 {
2171
+ padding-top: 0 !important;
1727
2172
  }
1728
2173
 
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;
2174
+ .bf-p-b-0 {
2175
+ padding-bottom: 0 !important;
1731
2176
  }
1732
2177
 
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;
2178
+ .bf-p-l-0 {
2179
+ padding-left: 0 !important;
1735
2180
  }
1736
2181
 
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;
2182
+ .bf-p-r-0 {
2183
+ padding-right: 0 !important;
1739
2184
  }
1740
2185
 
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;
2186
+ /* .bf-p-N is the historical short form of .bf-p-b-N; both set padding-bottom. */
2187
+ .bf-p-1,
2188
+ .bf-p-b-1 {
2189
+ padding-bottom: var(--bf-spacing-md) !important;
1752
2190
  }
1753
2191
 
1754
- .bf-h1 {
1755
- font-size: 36px !important;
1756
- font-size: 3.6rem !important;
2192
+ .bf-p-2,
2193
+ .bf-p-b-2 {
2194
+ padding-bottom: var(--bf-spacing-lg) !important;
1757
2195
  }
1758
2196
 
1759
- .bf-h2 {
1760
- font-size: 30px !important;
1761
- font-size: 3rem !important;
2197
+ .bf-p-3,
2198
+ .bf-p-b-3 {
2199
+ padding-bottom: var(--bf-spacing-xl) !important;
1762
2200
  }
1763
2201
 
1764
- .bf-h3 {
1765
- font-size: 24px !important;
1766
- font-size: 2.4rem !important;
2202
+ .bf-p-4,
2203
+ .bf-p-b-4 {
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,74 +2329,165 @@ 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);
2334
+ }
2335
+
2336
+ label.bf-disabled {
2337
+ background-color: transparent;
2338
+ border-color: transparent;
2339
+ }
2340
+
2341
+ button.bf-disabled,
2342
+ [type='button'].bf-disabled,
2343
+ [type='reset'].bf-disabled,
2344
+ [type='submit'].bf-disabled,
2345
+ .bf-btn.bf-disabled {
2346
+ cursor: default;
2347
+ cursor: not-allowed;
2348
+ pointer-events: none;
2349
+ -webkit-user-select: none;
2350
+ -moz-user-select: none;
2351
+ user-select: none;
2352
+ box-shadow: none;
2353
+ opacity: 0.5;
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,
2370
+ .bf-btn.bf-disabled:hover,
2371
+ .bf-btn.bf-disabled:active,
2372
+ .bf-btn.bf-disabled:focus {
2373
+ box-shadow: none;
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);
1882
2442
  }
1883
2443
 
1884
- label.bf-disabled {
1885
- background-color: transparent;
1886
- border-color: transparent;
2444
+ .custom-checkbox-wrapper [type='checkbox']:checked {
2445
+ background-color: var(--bf-blue);
2446
+ border-color: var(--bf-black);
1887
2447
  }
1888
2448
 
1889
- button.bf-disabled,
1890
- [type=button].bf-disabled,
1891
- [type=reset].bf-disabled,
1892
- [type=submit].bf-disabled,
1893
- .bf-btn.bf-disabled {
1894
- cursor: default;
1895
- cursor: not-allowed;
1896
- pointer-events: none;
1897
- -webkit-user-select: none;
1898
- -moz-user-select: none;
1899
- user-select: none;
1900
- box-shadow: none;
1901
- 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,
1915
- .bf-btn.bf-disabled:hover,
1916
- .bf-btn.bf-disabled:active,
1917
- .bf-btn.bf-disabled:focus {
1918
- box-shadow: none;
1919
- color: #222;
1920
- background: #ccc;
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,400 +2588,423 @@ 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
+ /* Always-dark overrides (no media query). Shared rules + disabled buttons.
2744
+ * Scrollbars come from utilities/global-dark-scrollbars.css via dark entry builds. */
2745
+
2746
+ /* Shared dark-mode rules for always-dark and prefers-color-scheme builds.
2747
+ * Element rules come from _utility-global-dark-elements.css, which the
2748
+ * classless dark sheet imports too; only the .bf-* extras live here.
2749
+ * Variant-only extras: utility-global-dark.css. Scrollbars: global-dark-scrollbars.css.
2750
+ * Underscore prefix excludes this file from the buildAllCss glob. */
2751
+
2752
+ /* Element-level dark-mode rules, shared by the class-based and classless dark
2753
+ * sheets. Contains no .bf-* selector, so the classless builds can import it as
2754
+ * they are. Class-based extras live in _utility-global-dark-shared.css.
2755
+ * Underscore prefix excludes this file from the buildAllCss glob. */
2756
+
2757
+ html {
2758
+ color: var(--bf-light);
2759
+ }
2760
+
2761
+ body {
2762
+ background-color: var(--bf-dark-bg);
2763
+ }
2764
+
2765
+ a {
2766
+ color: var(--bf-dark-link);
2767
+ }
2768
+
2769
+ a:hover,
2770
+ a:focus {
2771
+ color: var(--bf-dark-link-hover);
2772
+ }
2773
+
2774
+ mark {
2775
+ background-color: var(--bf-dark-mark-bg);
2776
+ }
2777
+
2778
+ ins {
2779
+ background-color: var(--bf-dark-ins-bg);
2780
+ }
2781
+
2782
+ [type='email'],
2783
+ [type='number'],
2784
+ [type='password'],
2785
+ [type='tel'],
2786
+ [type='search'],
2787
+ [type='text'],
2788
+ [type='date'],
2789
+ [type='datetime-local'],
2790
+ [type='month'],
2791
+ [type='week'],
2792
+ [type='time'],
2793
+ [type='url'],
2794
+ [type='range'],
2795
+ input[list],
2796
+ select,
2797
+ select:not([size], select[multiple]),
2798
+ textarea {
2799
+ background-color: var(--bf-dark-extra);
2800
+ border-color: var(--bf-black);
2801
+ color: var(--bf-gray-light);
2802
+ }
2803
+
2804
+ [type='email']:active,
2805
+ [type='email']:focus,
2806
+ [type='number']:active,
2807
+ [type='number']:focus,
2808
+ [type='password']:active,
2809
+ [type='password']:focus,
2810
+ [type='tel']:active,
2811
+ [type='tel']:focus,
2812
+ [type='search']:active,
2813
+ [type='search']:focus,
2814
+ [type='text']:active,
2815
+ [type='text']:focus,
2816
+ [type='date']:active,
2817
+ [type='date']:focus,
2818
+ [type='datetime-local']:active,
2819
+ [type='datetime-local']:focus,
2820
+ [type='month']:active,
2821
+ [type='month']:focus,
2822
+ [type='week']:active,
2823
+ [type='week']:focus,
2824
+ [type='time']:active,
2825
+ [type='time']:focus,
2826
+ [type='url']:active,
2827
+ [type='url']:focus,
2828
+ input[list]:active,
2829
+ input[list]:focus,
2830
+ select:active,
2831
+ select:focus,
2832
+ select:not([size], select[multiple]):active,
2833
+ select:not([size], select[multiple]):focus,
2834
+ textarea:active,
2835
+ textarea:focus {
2836
+ background-color: var(--bf-dark-extra);
2837
+ border-color: var(--bf-dark-border-focus);
2838
+ box-shadow: 0 0 0 3px var(--bf-dark-shadow-focus);
2839
+ }
2840
+
2841
+ select:not([size], select[multiple]) {
2842
+ 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");
2843
+ }
2844
+
2845
+ [type='range'] {
2846
+ background-color: transparent;
2847
+ }
2848
+
2849
+ [type='range']:focus {
2850
+ background-color: transparent;
2851
+ }
2852
+
2853
+ [type='range']::-webkit-slider-runnable-track {
2854
+ background-color: var(--bf-dark-extra);
2855
+ }
2856
+
2857
+ [type='range']::-moz-range-track {
2858
+ background-color: var(--bf-dark-extra);
2859
+ }
2860
+
2861
+ input::-moz-placeholder, textarea::-moz-placeholder {
2862
+ color: var(--bf-gray);
2863
+ }
2864
+
2865
+ input::placeholder,
2866
+ textarea::placeholder {
2867
+ color: var(--bf-gray);
2868
+ }
2869
+
2870
+ button,
2871
+ [type='button'],
2872
+ [type='reset'],
2873
+ [type='submit'] {
2874
+ background: var(--bf-gray-light);
2875
+ }
2876
+
2877
+ button:hover,
2878
+ button:active,
2879
+ button:focus,
2880
+ [type='button']:hover,
2881
+ [type='button']:active,
2882
+ [type='button']:focus,
2883
+ [type='reset']:hover,
2884
+ [type='reset']:active,
2885
+ [type='reset']:focus,
2886
+ [type='submit']:hover,
2887
+ [type='submit']:active,
2888
+ [type='submit']:focus {
2889
+ background: var(--bf-dark-button-hover);
2890
+ }
2891
+
2892
+ button:active,
2893
+ button:focus,
2894
+ [type='button']:active,
2895
+ [type='button']:focus,
2896
+ [type='reset']:active,
2897
+ [type='reset']:focus,
2898
+ [type='submit']:active,
2899
+ [type='submit']:focus {
2900
+ box-shadow: 0 0 0 3px var(--bf-dark-button-shadow);
2901
+ }
2902
+
2903
+ dialog {
2904
+ color: var(--bf-light);
2905
+ background-color: var(--bf-dark-bg);
2906
+ }
2907
+
2908
+ caption {
2909
+ color: var(--bf-gray-light);
2910
+ }
2911
+
2912
+ progress[value] {
2913
+ background: var(--bf-gray-dark-extra);
2914
+ color: var(--bf-blue);
2104
2915
  }
2916
+
2917
+ progress[value]::-webkit-progress-bar {
2918
+ background: var(--bf-gray-dark-extra);
2919
+ }
2920
+
2921
+ progress[value]::-webkit-progress-value {
2922
+ background: var(--bf-blue);
2923
+ }
2924
+
2925
+ .bf-focused {
2926
+ border-color: var(--bf-dark-border-focus) !important;
2927
+ box-shadow: 0 0 0 3px var(--bf-dark-shadow-focus) !important;
2928
+ }
2929
+
2930
+ .bf-invalid,
2931
+ .bf-invalid:focus {
2932
+ color: var(--bf-dark-invalid) !important;
2933
+ border-color: var(--bf-dark-invalid) !important;
2934
+ }
2935
+
2936
+ .bf-btn {
2937
+ background: var(--bf-gray-light);
2938
+ }
2939
+
2940
+ .bf-btn:hover,
2941
+ .bf-btn:active,
2942
+ .bf-btn:focus {
2943
+ background: var(--bf-dark-button-hover);
2944
+ }
2945
+
2946
+ .bf-btn:active,
2947
+ .bf-btn:focus {
2948
+ box-shadow: 0 0 0 3px var(--bf-dark-button-shadow);
2949
+ }
2950
+
2951
+ .bf-btn.bf-btn--primary {
2952
+ background: var(--bf-blue);
2953
+ }
2954
+
2955
+ .bf-btn.bf-btn--primary:hover,
2956
+ .bf-btn.bf-btn--primary:active,
2957
+ .bf-btn.bf-btn--primary:focus {
2958
+ background: var(--bf-blue-light);
2959
+ }
2960
+
2961
+ .bf-btn.bf-btn--primary:active,
2962
+ .bf-btn.bf-btn--primary:focus {
2963
+ box-shadow: 0 0 0 3px rgb(190 216 254 / 75%);
2964
+ }
2965
+
2966
+ .bf-table th,
2967
+ .bf-table td {
2968
+ border-color: var(--bf-gray-dark);
2969
+ }
2970
+
2971
+ .bf-table--zebra tbody tr:nth-child(odd),
2972
+ .bf-table-responsive--zebra tbody tr:nth-child(odd) {
2973
+ background-color: var(--bf-gray-dark-extra);
2974
+ }
2975
+
2976
+ button.bf-disabled,
2977
+ [type='button'].bf-disabled,
2978
+ [type='reset'].bf-disabled,
2979
+ [type='submit'].bf-disabled,
2980
+ .bf-btn.bf-disabled {
2981
+ background: var(--bf-gray-light);
2982
+ }
2983
+
2984
+ .bf-btn--primary.bf-disabled {
2985
+ background: var(--bf-blue);
2986
+ }
2987
+ /* Dark scrollbar colors (Firefox + WebKit). */
2988
+
2105
2989
  html {
2106
- scrollbar-color: rgb(89.25, 89.25, 89.25) #111;
2990
+ scrollbar-color: rgb(97 97 97) var(--bf-dark-extra); /* gray-dark -5% lightness */
2107
2991
  }
2108
2992
 
2993
+ /* WebKit thumb / track. */
2994
+
2109
2995
  ::-webkit-scrollbar {
2110
2996
  width: 1.5rem;
2111
2997
  height: 1.5rem;
2112
2998
  }
2113
2999
 
2114
3000
  ::-webkit-scrollbar-track {
2115
- background-color: #111;
3001
+ background-color: var(--bf-dark-extra);
2116
3002
  }
2117
3003
 
2118
3004
  ::-webkit-scrollbar-thumb {
2119
- background-color: rgb(89.25, 89.25, 89.25);
3005
+ background-color: rgb(97 97 97); /* gray-dark -5% lightness */
2120
3006
  }
2121
3007
 
2122
3008
  ::-webkit-scrollbar-thumb:hover {
2123
- background-color: rgb(127.5, 127.5, 127.5);
2124
- }
2125
-
2126
- @media (prefers-color-scheme: dark) {
2127
- html {
2128
- color: #f0f0f0;
2129
- }
2130
- body {
2131
- background-color: rgb(36.125, 36.125, 36.125);
2132
- }
2133
- a {
2134
- color: rgb(102, 175.8, 255);
2135
- }
2136
- a:hover, a:focus {
2137
- color: rgb(26, 136.0223463687, 255);
2138
- }
2139
- mark {
2140
- background-color: #cccc00;
2141
- }
2142
- ins {
2143
- background-color: hsl(60, 100%, 125%);
2144
- }
2145
- [type=email],
2146
- [type=number],
2147
- [type=password],
2148
- [type=tel],
2149
- [type=search],
2150
- [type=text],
2151
- [type=date],
2152
- [type=datetime-local],
2153
- [type=month],
2154
- [type=week],
2155
- [type=time],
2156
- [type=url],
2157
- [type=range],
2158
- input[list],
2159
- select,
2160
- select:not([size], select[multiple]),
2161
- textarea {
2162
- background-color: #111;
2163
- border-color: #000;
2164
- color: #ccc;
2165
- }
2166
- [type=email]:active, [type=email]:focus,
2167
- [type=number]:active,
2168
- [type=number]:focus,
2169
- [type=password]:active,
2170
- [type=password]:focus,
2171
- [type=tel]:active,
2172
- [type=tel]:focus,
2173
- [type=search]:active,
2174
- [type=search]:focus,
2175
- [type=text]:active,
2176
- [type=text]:focus,
2177
- [type=date]:active,
2178
- [type=date]:focus,
2179
- [type=datetime-local]:active,
2180
- [type=datetime-local]:focus,
2181
- [type=month]:active,
2182
- [type=month]:focus,
2183
- [type=week]:active,
2184
- [type=week]:focus,
2185
- [type=time]:active,
2186
- [type=time]:focus,
2187
- [type=url]:active,
2188
- [type=url]:focus,
2189
- [type=range]:active,
2190
- [type=range]:focus,
2191
- input[list]:active,
2192
- input[list]:focus,
2193
- select:active,
2194
- select:focus,
2195
- select:not([size], select[multiple]):active,
2196
- select:not([size], select[multiple]):focus,
2197
- textarea:active,
2198
- textarea:focus {
2199
- background-color: #111;
2200
- border-color: rgb(51, 149.4, 255);
2201
- }
2202
- [type=email]:active, [type=email]:focus,
2203
- [type=number]:active,
2204
- [type=number]:focus,
2205
- [type=password]:active,
2206
- [type=password]:focus,
2207
- [type=tel]:active,
2208
- [type=tel]:focus,
2209
- [type=search]:active,
2210
- [type=search]:focus,
2211
- [type=text]:active,
2212
- [type=text]:focus,
2213
- [type=date]:active,
2214
- [type=date]:focus,
2215
- [type=datetime-local]:active,
2216
- [type=datetime-local]:focus,
2217
- [type=month]:active,
2218
- [type=month]:focus,
2219
- [type=week]:active,
2220
- [type=week]:focus,
2221
- [type=time]:active,
2222
- [type=time]:focus,
2223
- [type=url]:active,
2224
- [type=url]:focus,
2225
- input[list]:active,
2226
- input[list]:focus,
2227
- select:active,
2228
- select:focus,
2229
- select:not([size], select[multiple]):active,
2230
- select:not([size], select[multiple]):focus,
2231
- textarea:active,
2232
- textarea:focus {
2233
- box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.5);
2234
- }
2235
- .bf-focused {
2236
- border-color: rgb(51, 149.4, 255);
2237
- box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.5) !important;
2238
- }
2239
- .bf-invalid,
2240
- .bf-invalid:focus {
2241
- color: rgb(255, 38.25, 38.25) !important;
2242
- border-color: rgb(255, 38.25, 38.25) !important;
2243
- }
2244
- select:not([size], select[multiple]) {
2245
- 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");
2246
- }
2247
- /* stylelint-disable-next-line */
2248
- }
2249
- @media screen and (prefers-color-scheme: dark) and (min-width: 0\0 ) and (min-resolution: 0.001dpcm) {
2250
- select:not([size], select[multiple]),
2251
- *[dir=rtl] select:not([size], select[multiple]),
2252
- select[dir=rtl]:not([size], select[multiple]) {
2253
- background-image: none;
2254
- }
2255
- }
2256
- @media (prefers-color-scheme: dark) {
2257
- [type=range] {
2258
- background-color: transparent;
2259
- }
2260
- [type=range]:focus {
2261
- background-color: transparent;
2262
- }
2263
- [type=range]::-webkit-slider-runnable-track {
2264
- background-color: #111;
2265
- }
2266
- [type=range]::-moz-range-track {
2267
- background-color: #111;
2268
- }
2269
- input::-moz-placeholder, textarea::-moz-placeholder {
2270
- color: #999;
2271
- }
2272
- input::placeholder,
2273
- textarea::placeholder {
2274
- color: #999;
2275
- }
2276
- button,
2277
- [type=button],
2278
- [type=reset],
2279
- [type=submit],
2280
- .bf-btn,
2281
- button.bf-disabled,
2282
- [type=button].bf-disabled,
2283
- [type=reset].bf-disabled,
2284
- [type=submit].bf-disabled,
2285
- .bf-btn.bf-disabled {
2286
- background: #ccc;
2287
- }
2288
- button:hover, button:active, button:focus,
2289
- [type=button]:hover,
2290
- [type=button]:active,
2291
- [type=button]:focus,
2292
- [type=reset]:hover,
2293
- [type=reset]:active,
2294
- [type=reset]:focus,
2295
- [type=submit]:hover,
2296
- [type=submit]:active,
2297
- [type=submit]:focus,
2298
- .bf-btn:hover,
2299
- .bf-btn:active,
2300
- .bf-btn:focus,
2301
- button.bf-disabled:hover,
2302
- button.bf-disabled:active,
2303
- button.bf-disabled:focus,
2304
- [type=button].bf-disabled:hover,
2305
- [type=button].bf-disabled:active,
2306
- [type=button].bf-disabled:focus,
2307
- [type=reset].bf-disabled:hover,
2308
- [type=reset].bf-disabled:active,
2309
- [type=reset].bf-disabled:focus,
2310
- [type=submit].bf-disabled:hover,
2311
- [type=submit].bf-disabled:active,
2312
- [type=submit].bf-disabled:focus,
2313
- .bf-btn.bf-disabled:hover,
2314
- .bf-btn.bf-disabled:active,
2315
- .bf-btn.bf-disabled:focus {
2316
- background: rgb(178.5, 178.5, 178.5);
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
- button.bf-disabled:active,
2328
- button.bf-disabled:focus,
2329
- [type=button].bf-disabled:active,
2330
- [type=button].bf-disabled:focus,
2331
- [type=reset].bf-disabled:active,
2332
- [type=reset].bf-disabled:focus,
2333
- [type=submit].bf-disabled:active,
2334
- [type=submit].bf-disabled:focus,
2335
- .bf-btn.bf-disabled:active,
2336
- .bf-btn.bf-disabled:focus {
2337
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.45);
2338
- }
2339
- button:active, button:focus,
2340
- [type=button]:active,
2341
- [type=button]:focus,
2342
- [type=reset]:active,
2343
- [type=reset]:focus,
2344
- [type=submit]:active,
2345
- [type=submit]:focus,
2346
- .bf-btn:active,
2347
- .bf-btn:focus {
2348
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.45);
2349
- }
2350
- .bf-btn--primary.bf-disabled,
2351
- .bf-btn.bf-btn--primary {
2352
- background: #007bff;
2353
- }
2354
- .bf-btn--primary.bf-disabled:hover, .bf-btn--primary.bf-disabled:active, .bf-btn--primary.bf-disabled:focus,
2355
- .bf-btn.bf-btn--primary:hover,
2356
- .bf-btn.bf-btn--primary:active,
2357
- .bf-btn.bf-btn--primary:focus {
2358
- background: rgb(0, 110.7, 229.5);
2359
- }
2360
- .bf-btn--primary.bf-disabled:active, .bf-btn--primary.bf-disabled:focus,
2361
- .bf-btn.bf-btn--primary:active,
2362
- .bf-btn.bf-btn--primary:focus {
2363
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.75);
2364
- }
2365
- a:focus,
2366
- input:focus {
2367
- outline-color: rgb(178.5, 115.5, 0);
2368
- }
2369
- :focus-visible {
2370
- outline-color: rgb(178.5, 115.5, 0);
2371
- }
2372
- .bf-table th,
2373
- .bf-table td {
2374
- border-color: #666;
2375
- }
2376
- .bf-table--zebra tbody tr:nth-child(odd),
2377
- .bf-table-responsive--zebra tbody tr:nth-child(odd) {
2378
- background-color: #333;
2379
- }
2380
- dialog {
2381
- color: #f0f0f0;
2382
- background-color: rgb(36.125, 36.125, 36.125);
2383
- }
3009
+ background-color: rgb(115 115 115); /* gray-dark +10% lightness */
2384
3010
  }
2385
- /*# sourceMappingURL=bullframe-dark.css.map */