bullframe.css 5.1.0 → 6.0.0

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