bullframe.css 5.0.1 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +276 -234
  2. package/LICENSE +2 -2
  3. package/README.md +34 -455
  4. package/dist/css/bullframe-classless-dark.css +1218 -932
  5. package/dist/css/bullframe-classless-dark.css.map +1 -1
  6. package/dist/css/bullframe-classless-dark.min.css +1 -3
  7. package/dist/css/bullframe-classless-dark.min.css.map +1 -1
  8. package/dist/css/bullframe-classless-system-default.css +1316 -936
  9. package/dist/css/bullframe-classless-system-default.css.map +1 -1
  10. package/dist/css/bullframe-classless-system-default.min.css +1 -3
  11. package/dist/css/bullframe-classless-system-default.min.css.map +1 -1
  12. package/dist/css/bullframe-classless.css +1038 -715
  13. package/dist/css/bullframe-classless.css.map +1 -1
  14. package/dist/css/bullframe-classless.min.css +1 -3
  15. package/dist/css/bullframe-classless.min.css.map +1 -1
  16. package/dist/css/bullframe-dark.css +1943 -1459
  17. package/dist/css/bullframe-dark.css.map +1 -1
  18. package/dist/css/bullframe-dark.min.css +1 -3
  19. package/dist/css/bullframe-dark.min.css.map +1 -1
  20. package/dist/css/bullframe-system-default.css +2005 -1489
  21. package/dist/css/bullframe-system-default.css.map +1 -1
  22. package/dist/css/bullframe-system-default.min.css +1 -3
  23. package/dist/css/bullframe-system-default.min.css.map +1 -1
  24. package/dist/css/bullframe-utilities.css +769 -491
  25. package/dist/css/bullframe-utilities.css.map +1 -1
  26. package/dist/css/bullframe-utilities.min.css +1 -2
  27. package/dist/css/bullframe-utilities.min.css.map +1 -1
  28. package/dist/css/bullframe.css +1911 -1383
  29. package/dist/css/bullframe.css.map +1 -1
  30. package/dist/css/bullframe.min.css +1 -3
  31. package/dist/css/bullframe.min.css.map +1 -1
  32. package/package.json +71 -29
  33. package/.browserslistrc +0 -3
  34. package/.editorconfig +0 -15
  35. package/.htmlhintrc +0 -12
  36. package/.prettierignore +0 -1
  37. package/.stylelintignore +0 -3
  38. package/.stylelintrc.json +0 -26
  39. package/dist/css/bullframe-classless-dark-prefers.css +0 -1340
  40. package/dist/css/bullframe-classless-dark-prefers.css.map +0 -1
  41. package/dist/css/bullframe-classless-dark-prefers.min.css +0 -3
  42. package/dist/css/bullframe-classless-dark-prefers.min.css.map +0 -1
  43. package/dist/css/bullframe-dark-prefers.css +0 -2356
  44. package/dist/css/bullframe-dark-prefers.css.map +0 -1
  45. package/dist/css/bullframe-dark-prefers.min.css +0 -3
  46. package/dist/css/bullframe-dark-prefers.min.css.map +0 -1
  47. package/dist/docs/demo/css/style.css +0 -131
  48. package/dist/docs/demo/icons/android-chrome-192x192.png +0 -0
  49. package/dist/docs/demo/icons/android-chrome-384x384.png +0 -0
  50. package/dist/docs/demo/icons/apple-touch-icon.png +0 -0
  51. package/dist/docs/demo/icons/favicon-16x16.png +0 -0
  52. package/dist/docs/demo/icons/favicon-32x32.png +0 -0
  53. package/dist/docs/demo/icons/favicon.ico +0 -0
  54. package/dist/docs/demo/icons/mstile-150x150.png +0 -0
  55. package/dist/docs/demo/icons/safari-pinned-tab.svg +0 -28
  56. package/dist/docs/demo/images/logo.png +0 -0
  57. package/dist/docs/demo/images/placeholder-img-130x140.jpg +0 -0
  58. package/dist/docs/demo/images/placeholder-img-16x16.jpg +0 -0
  59. package/dist/docs/demo/images/placeholder-img-800x400.jpg +0 -0
  60. package/dist/docs/demo/images/video-poster.png +0 -0
  61. package/dist/docs/demo/index.html +0 -1152
  62. package/dist/docs/github-readme/bf-logo-full-dark.png +0 -0
  63. package/dist/docs/github-readme/bf-logo-full-light.png +0 -0
  64. package/prettier.config.js +0 -26
  65. package/src/docs/demo/css/style.css +0 -131
  66. package/src/docs/demo/icons/android-chrome-192x192.png +0 -0
  67. package/src/docs/demo/icons/android-chrome-384x384.png +0 -0
  68. package/src/docs/demo/icons/apple-touch-icon.png +0 -0
  69. package/src/docs/demo/icons/favicon-16x16.png +0 -0
  70. package/src/docs/demo/icons/favicon-32x32.png +0 -0
  71. package/src/docs/demo/icons/favicon.ico +0 -0
  72. package/src/docs/demo/icons/mstile-150x150.png +0 -0
  73. package/src/docs/demo/icons/safari-pinned-tab.svg +0 -28
  74. package/src/docs/demo/images/logo.png +0 -0
  75. package/src/docs/demo/images/placeholder-img-130x140.jpg +0 -0
  76. package/src/docs/demo/images/placeholder-img-16x16.jpg +0 -0
  77. package/src/docs/demo/images/placeholder-img-800x400.jpg +0 -0
  78. package/src/docs/demo/images/video-poster.png +0 -0
  79. package/src/docs/demo/index.html +0 -1152
  80. package/src/docs/github-readme/bf-logo-full-dark.png +0 -0
  81. package/src/docs/github-readme/bf-logo-full-light.png +0 -0
  82. package/src/scss/bullframe-classless-dark-prefers.scss +0 -2
  83. package/src/scss/bullframe-classless-dark.scss +0 -2
  84. package/src/scss/bullframe-classless-system-default.scss +0 -2
  85. package/src/scss/bullframe-classless.scss +0 -49
  86. package/src/scss/bullframe-dark-prefers.scss +0 -2
  87. package/src/scss/bullframe-dark.scss +0 -2
  88. package/src/scss/bullframe-system-default.scss +0 -2
  89. package/src/scss/bullframe-utilities.scss +0 -21
  90. package/src/scss/bullframe.scss +0 -49
  91. package/src/scss/custom/_author-styles.scss +0 -5
  92. package/src/scss/forms/_forms-normalization.scss +0 -316
  93. package/src/scss/forms/_forms-styling-radio-checkbox.scss +0 -82
  94. package/src/scss/forms/_forms-styling-range.scss +0 -113
  95. package/src/scss/forms/_forms-styling-select.scss +0 -65
  96. package/src/scss/forms/_forms-styling.scss +0 -131
  97. package/src/scss/miscellaneous/_misc-accessibility.scss +0 -36
  98. package/src/scss/miscellaneous/_misc-anchors.scss +0 -37
  99. package/src/scss/miscellaneous/_misc-embedded-content.scss +0 -117
  100. package/src/scss/miscellaneous/_misc-focus.scss +0 -79
  101. package/src/scss/miscellaneous/_misc-interactive.scss +0 -48
  102. package/src/scss/miscellaneous/_misc-layout.scss +0 -30
  103. package/src/scss/miscellaneous/_misc-lists.scss +0 -53
  104. package/src/scss/miscellaneous/_misc-scrolling.scss +0 -5
  105. package/src/scss/miscellaneous/_misc-shame.scss +0 -37
  106. package/src/scss/miscellaneous/_misc-tables.scss +0 -53
  107. package/src/scss/mixins/_mixin-dark-prefers.scss +0 -414
  108. package/src/scss/mixins/_mixin-dark.scss +0 -396
  109. package/src/scss/mixins/_mixin-grid-flex.scss +0 -80
  110. package/src/scss/mixins/_mixin-layout.scss +0 -42
  111. package/src/scss/mixins/_mixin-texts.scss +0 -37
  112. package/src/scss/typography/_typography-blockquotes.scss +0 -28
  113. package/src/scss/typography/_typography-headings.scss +0 -45
  114. package/src/scss/typography/_typography-html-body.scss +0 -75
  115. package/src/scss/typography/_typography-misc.scss +0 -90
  116. package/src/scss/typography/_typography-monospaced-elements.scss +0 -59
  117. package/src/scss/utilities/_utility-buttons.scss +0 -73
  118. package/src/scss/utilities/_utility-debugging.scss +0 -31
  119. package/src/scss/utilities/_utility-embeds.scss +0 -34
  120. package/src/scss/utilities/_utility-filters.scss +0 -21
  121. package/src/scss/utilities/_utility-form-states.scss +0 -89
  122. package/src/scss/utilities/_utility-global-dark-classless.scss +0 -3
  123. package/src/scss/utilities/_utility-global-dark-prefers-classless.scss +0 -3
  124. package/src/scss/utilities/_utility-global-dark-prefers.scss +0 -3
  125. package/src/scss/utilities/_utility-global-dark-scrollbars.scss +0 -34
  126. package/src/scss/utilities/_utility-global-dark.scss +0 -4
  127. package/src/scss/utilities/_utility-global-system-default-classless.scss +0 -3
  128. package/src/scss/utilities/_utility-global-system-default.scss +0 -3
  129. package/src/scss/utilities/_utility-grid-system.scss +0 -140
  130. package/src/scss/utilities/_utility-layout.scss +0 -187
  131. package/src/scss/utilities/_utility-lists.scss +0 -17
  132. package/src/scss/utilities/_utility-print.scss +0 -101
  133. package/src/scss/utilities/_utility-reduced-motion.scss +0 -29
  134. package/src/scss/utilities/_utility-spacing.scss +0 -148
  135. package/src/scss/utilities/_utility-tables.scss +0 -34
  136. package/src/scss/utilities/_utility-texts.scss +0 -225
  137. package/src/scss/utilities/_utility-z-index.scss +0 -83
  138. package/src/scss/variables/_variables-breakpoints.scss +0 -6
  139. package/src/scss/variables/_variables-colors.scss +0 -34
  140. package/src/scss/variables/_variables-spacing.scss +0 -24
  141. package/src/scss/variables/_variables-texts.scss +0 -8
  142. package/vite.config.js +0 -116
@@ -1,5 +1,82 @@
1
- /*! Bullframe CSS v5.0.0 | MIT License | https://github.com/marcop135/bullframe.css */
2
- @charset "UTF-8";
1
+ /* ! Bullframe CSS v6.0.0 | MIT License | https://github.com/marcop135/bullframe.css */
2
+
3
+ /* Classless + system dark via prefers-color-scheme. */
4
+
5
+ /* Classless build: semantic element styles only (no .bf-* utilities). */
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,1119 +486,1235 @@ hr {
222
486
  border-style: solid;
223
487
  border-width: 1px 0 0;
224
488
  color: inherit;
225
- margin: 2rem 0;
489
+ margin: var(--bf-spacing-xl) 0;
226
490
  padding: 0;
227
- overflow: visible;
491
+ overflow: visible; /* Edge: show overflow. */
228
492
  }
493
+ /* pre / code / kbd / samp. */
229
494
 
230
- a {
231
- color: #007bff;
232
- text-decoration: none;
233
- background-color: transparent;
234
- }
235
- a:hover, a:focus {
236
- text-decoration: underline;
237
- color: #0056b3;
238
- }
495
+ pre {
496
+ margin: 0 0 var(--bf-spacing-xl) 0;
239
497
 
240
- a:not([href], [tabindex]) {
241
- color: inherit;
242
- text-decoration: none;
243
- }
498
+ display: block;
499
+ overflow: auto;
500
+ word-break: break-all; /* WebKit */
501
+ word-wrap: break-word;
502
+ white-space: pre;
503
+ hyphens: none;
244
504
 
245
- a:not([href], [class]),
246
- a:not([href], [class]):hover {
247
- color: inherit;
248
- text-decoration: none;
505
+ /* Keep scrollbars visible in legacy Edge.
506
+ * https://github.com/twbs/bootstrap/pull/30685 */
507
+ -ms-overflow-style: auto;
249
508
  }
250
509
 
251
- a:not([href], [tabindex]):focus {
252
- outline: 0;
510
+ pre,
511
+ code,
512
+ kbd,
513
+ samp {
514
+ font-family:
515
+ /* macOS 10.10+ */
516
+ Menlo, Consolas, 'Roboto Mono', 'Ubuntu Monospace', 'Noto Mono', 'Oxygen Mono',
517
+ 'Liberation Mono', monospace, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
518
+ 'Noto Color Emoji';
519
+
520
+ /* Mono faces read large; use a slightly smaller size. */
521
+ font-size: 0.875em;
253
522
  }
254
523
 
255
- :focus:not(:focus-visible) {
256
- outline: none;
524
+ code {
525
+ word-wrap: break-word;
257
526
  }
258
527
 
259
- [tabindex="-1"]:focus:not(:focus-visible) {
260
- outline: 0 !important;
528
+ a > code {
529
+ color: inherit;
261
530
  }
262
531
 
263
- a:focus,
264
- input:focus {
265
- outline: 2px solid orange;
532
+ pre code {
533
+ font-size: inherit;
534
+ color: inherit;
535
+ word-break: normal;
266
536
  }
267
537
 
268
- :focus-visible {
269
- outline: 2px solid orange;
538
+ /* Forms */
539
+ /* Form control reset: inheritance, sizing, and UA quirks. */
540
+
541
+ :where(html input, button, select, optgroup, textarea) {
542
+ color: inherit;
543
+ font-family: inherit;
544
+ font-size: inherit;
545
+ line-height: inherit;
270
546
  }
271
547
 
272
- button:focus,
273
- [type=button]:focus,
274
- [type=reset]:focus,
275
- [type=submit]:focus,
276
- [type=email]:focus,
277
- [type=number]:focus,
278
- [type=password]:focus,
279
- [type=tel]:focus,
280
- [type=search]:focus,
281
- [type=text]:focus,
282
- [type=date]:focus,
283
- [type=datetime-local]:focus,
284
- [type=month]:focus,
285
- [type=time]:focus,
286
- [type=week]:focus,
287
- [type=url]:focus,
288
- [type=radio]:focus,
289
- [type=checkbox]:focus,
290
- input[list]:focus,
291
- select:focus,
292
- textarea:focus {
293
- outline: 0;
548
+ :where(html input, button, [type='radio'], [type='checkbox'], select, optgroup, textarea) {
549
+ margin: 0;
294
550
  }
295
551
 
296
- menu,
297
- ol,
298
- ul,
299
- dl {
300
- margin: 0 0 2rem 0;
301
- padding: 0;
552
+ :where(html input, select, textarea, legend) {
553
+ width: 100%;
302
554
  }
303
555
 
304
- menu ul,
305
- menu ol,
306
- ul ul,
307
- ul ol,
308
- ol ol,
309
- ol ul,
310
- dd {
311
- margin-bottom: 0;
556
+ /* Shrink-to-content controls stay auto-width. */
557
+ :where(
558
+ html label,
559
+ button,
560
+ [type='image'],
561
+ [type='submit'],
562
+ [type='reset'],
563
+ html [type='button'],
564
+ [type='radio'],
565
+ [type='checkbox']
566
+ ) {
567
+ width: auto;
312
568
  }
313
569
 
314
- ul,
315
- ol {
316
- margin-left: 2rem;
570
+ /* inline-block: consistent sizing and vertical-align across engines. */
571
+ :where(
572
+ html input,
573
+ label,
574
+ select,
575
+ textarea,
576
+ button,
577
+ html [type='button'],
578
+ [type='reset'],
579
+ [type='submit'],
580
+ output
581
+ ) {
582
+ display: inline-block;
317
583
  }
318
584
 
319
- nav ol,
320
- nav ul {
321
- list-style: none;
322
- list-style-image: none;
323
- margin-left: 0;
585
+ :where([type='file']) {
586
+ display: block;
587
+ background-color: transparent;
324
588
  }
325
589
 
326
- dt {
327
- font-weight: 700;
590
+ :where(button, html input, select, textarea) {
591
+ background-image: none;
328
592
  }
329
593
 
330
- dd {
331
- margin-left: 0;
594
+ :where(input, select, textarea) {
595
+ vertical-align: baseline;
332
596
  }
333
597
 
334
- nav li::before {
335
- content: "​";
336
- position: absolute;
598
+ :where(form) {
599
+ margin: 0;
337
600
  }
338
601
 
339
- audio,
340
- canvas,
341
- progress,
342
- video {
343
- display: inline-block;
602
+ /* Drop fieldset min-content width so nested grids can shrink. */
603
+ :where(fieldset) {
604
+ border: 0;
605
+ padding: 0;
606
+ margin: 0;
607
+ min-width: 0;
344
608
  }
345
609
 
346
- img,
347
- canvas,
348
- audio,
349
- video,
350
- iframe,
351
- object,
352
- embed {
610
+ :where(legend) {
611
+ display: table; /* Text wrapping in Edge / IE. */
353
612
  max-width: 100%;
613
+ white-space: normal;
614
+ border: 0;
615
+ padding: 0;
616
+ font-weight: 400;
617
+ margin-bottom: var(--bf-spacing-md);
618
+ font-size: inherit;
619
+ line-height: 1.375;
620
+ color: inherit;
354
621
  }
355
622
 
356
- audio,
357
- video,
358
- canvas,
359
- img,
360
- svg {
361
- vertical-align: middle;
623
+ :where(label) {
624
+ font-weight: 400;
625
+ font-size: 90%;
626
+ line-height: 1.375;
627
+ margin-bottom: var(--bf-spacing-md);
362
628
  }
363
629
 
364
- img {
365
- height: auto;
366
- border-style: none;
630
+ :where(label input, label select, label textarea) {
631
+ font-size: 110%;
367
632
  }
368
633
 
369
- figure {
370
- margin: 0;
634
+ ::-webkit-inner-spin-button {
635
+ height: auto;
371
636
  }
372
637
 
373
- figure,
374
- figcaption {
375
- display: block;
638
+ ::-webkit-datetime-edit-fields-wrapper,
639
+ ::-webkit-datetime-edit-text,
640
+ ::-webkit-datetime-edit-minute,
641
+ ::-webkit-datetime-edit-hour-field,
642
+ ::-webkit-datetime-edit-day-field,
643
+ ::-webkit-datetime-edit-month-field,
644
+ ::-webkit-datetime-edit-year-field {
645
+ padding: 0;
376
646
  }
377
647
 
378
- figcaption {
379
- line-height: 1.375;
380
- font-size: 90%;
648
+ ::-webkit-color-swatch-wrapper {
649
+ padding: 0;
381
650
  }
382
651
 
383
- video {
384
- height: auto;
652
+ :where([type='search']) {
653
+ outline-offset: calc(-1 * var(--bf-spacing-sm));
385
654
  }
386
655
 
387
- audio {
388
- width: 100%;
656
+ :where(output) {
657
+ vertical-align: middle;
389
658
  }
390
659
 
391
- audio:not([controls]) {
392
- display: none;
393
- height: 0;
660
+ :where(button, select) {
661
+ text-transform: none;
394
662
  }
395
663
 
396
- svg:not(:root) {
397
- overflow: hidden;
664
+ :where(select) {
665
+ word-wrap: normal;
398
666
  }
399
667
 
400
- svg:not([fill]) {
401
- fill: currentColor;
668
+ /* Hide WebKit datalist picker chrome (Bootstrap Reboot 5.2).
669
+ * https://unpkg.com/browse/bootstrap@5.2.0/dist/css/bootstrap-reboot.css */
670
+ :where([list]):not(
671
+ [type='date'],
672
+ [type='datetime-local'],
673
+ [type='month'],
674
+ [type='week'],
675
+ [type='time']
676
+ )::-webkit-calendar-picker-indicator {
677
+ display: none !important;
402
678
  }
403
679
 
404
- progress,
405
- meter {
406
- display: inline-block;
407
- vertical-align: baseline;
408
- width: 100%;
409
- max-width: 100%;
680
+ :where(optgroup) {
681
+ font-family: inherit;
682
+ font-size: inherit;
683
+ font-style: inherit; /* Families without a 600 face. */
684
+ font-weight: 600;
410
685
  }
411
686
 
412
- progress[value] {
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
+ ) {
413
710
  -webkit-appearance: none;
414
- -moz-appearance: none;
415
711
  appearance: none;
416
- border: none;
417
- height: 20px;
418
- height: 2rem;
419
- background: #ccc;
420
- color: #007bff;
421
712
  }
422
713
 
423
- progress[value]::-webkit-progress-bar {
424
- background: #ccc;
714
+ ::file-selector-button {
715
+ font: inherit;
716
+ -webkit-appearance: auto;
717
+ -moz-appearance: auto;
718
+ appearance: auto;
425
719
  }
426
720
 
427
- progress[value]::-webkit-progress-value {
428
- background: #007bff;
721
+ :where(button, input, select, textarea) {
722
+ border-radius: var(--bf-spacing-sm);
429
723
  }
430
724
 
431
- iframe {
725
+ :where([type='radio']) {
726
+ border-radius: 50%;
727
+ }
728
+
729
+ :where([type='checkbox']) {
730
+ border-radius: var(--bf-spacing-md);
731
+ }
732
+
733
+ :where([type='radio'], [type='checkbox']) {
734
+ padding: 0;
735
+ background-color: var(--bf-white);
736
+ }
737
+
738
+ :where([type='range' i]) {
739
+ background-color: transparent;
740
+ }
741
+
742
+ :where(select[size], select[multiple]) {
743
+ height: auto;
744
+ }
745
+
746
+ :where(select[multiple]) {
747
+ background-image: none;
748
+ }
749
+
750
+ :where(textarea) {
751
+ height: auto;
752
+ min-height: 60px;
753
+ min-height: 6rem;
754
+ overflow: auto;
755
+ vertical-align: top;
756
+ resize: vertical;
757
+ }
758
+
759
+ /* Firefox: strip inner focus padding/border. */
760
+ ::-moz-focus-inner {
761
+ padding: 0;
432
762
  border-style: none;
433
763
  }
434
764
 
435
- address {
436
- font-style: normal;
437
- margin-bottom: 10px;
438
- margin-bottom: 1rem;
439
- line-height: inherit;
765
+ :where(button, [type='button'], [type='reset'], [type='submit']) {
766
+ line-height: normal;
767
+ text-align: center;
768
+ margin: 0;
769
+ background-clip: padding-box;
770
+ vertical-align: baseline;
771
+ overflow: visible;
772
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
773
+ -webkit-user-select: none;
774
+ -moz-user-select: none;
775
+ user-select: none;
776
+ border: 0;
777
+ background-image: none; /* Firefox mobile */
440
778
  }
441
779
 
442
- details > summary:first-of-type {
443
- display: list-item;
780
+ :where(button, [type='button'], [type='reset'], [type='submit']):hover,
781
+ :where(button, [type='button'], [type='reset'], [type='submit']):active,
782
+ :where(button, [type='button'], [type='reset'], [type='submit']):focus {
783
+ text-decoration: none;
784
+ color: var(--bf-dark);
444
785
  }
445
786
 
446
- summary {
787
+ :where(
788
+ button:not(:disabled),
789
+ [type='button']:not(:disabled),
790
+ [type='reset']:not(:disabled),
791
+ [type='submit']:not(:disabled)
792
+ ) {
447
793
  cursor: pointer;
448
- font-weight: 700;
449
- word-break: break-all;
450
794
  }
451
795
 
452
- dialog {
453
- background-color: #fff;
454
- color: #222;
455
- border: none;
456
- border-radius: 0.25rem;
457
- padding: 20px;
458
- padding: 2rem;
459
- height: -moz-fit-content;
460
- height: fit-content;
461
- min-width: 25rem;
462
- max-width: calc(100vw - 3rem);
796
+ /* Firefox: input color must not override placeholder color.
797
+ * https://github.com/necolas/normalize.css/issues/150 */
798
+ :where(input::-moz-placeholder, textarea::-moz-placeholder) {
799
+ color: var(--bf-gray-dark);
463
800
  }
464
- @media (min-width: 768px) {
465
- dialog {
466
- max-width: 50rem;
467
- }
801
+ :where(input::placeholder, textarea::placeholder) {
802
+ color: var(--bf-gray-dark);
468
803
  }
469
804
 
470
- dialog[open] {
471
- display: block !important;
805
+ /* Firefox: modern focus ring on all focusable elements. */
806
+ :-moz-focusring {
807
+ outline: auto;
472
808
  }
473
809
 
474
- dialog::backdrop {
475
- background: rgba(0, 0, 0, 0.4);
810
+ /* Firefox: drop :-moz-ui-invalid glow; use .bf-invalid for JS validation.
811
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-ui-invalid */
812
+ :-moz-ui-invalid {
813
+ box-shadow: none;
814
+ }
815
+ /* Form field and button chrome (borders, focus, disabled). */
816
+
817
+ :where(
818
+ [type='email'],
819
+ [type='number'],
820
+ [type='password'],
821
+ [type='tel'],
822
+ [type='search'],
823
+ [type='text'],
824
+ [type='date'],
825
+ [type='datetime-local'],
826
+ [type='month'],
827
+ [type='week'],
828
+ [type='time'],
829
+ [type='url'],
830
+ input[list],
831
+ select,
832
+ textarea
833
+ ) {
834
+ background-color: var(--bf-white);
835
+ border: 1px solid var(--bf-gray);
836
+ padding: var(--bf-spacing-md) calc(var(--bf-spacing-lg) * 0.75);
837
+ }
838
+
839
+ :where(
840
+ [type='email'],
841
+ [type='number'],
842
+ [type='password'],
843
+ [type='tel'],
844
+ [type='search'],
845
+ [type='text'],
846
+ [type='date'],
847
+ [type='datetime-local'],
848
+ [type='month'],
849
+ [type='week'],
850
+ [type='time'],
851
+ [type='url'],
852
+ input[list],
853
+ select,
854
+ textarea,
855
+ [type='radio'],
856
+ [type='checkbox']
857
+ ):active,
858
+ :where(
859
+ [type='email'],
860
+ [type='number'],
861
+ [type='password'],
862
+ [type='tel'],
863
+ [type='search'],
864
+ [type='text'],
865
+ [type='date'],
866
+ [type='datetime-local'],
867
+ [type='month'],
868
+ [type='week'],
869
+ [type='time'],
870
+ [type='url'],
871
+ input[list],
872
+ select,
873
+ textarea,
874
+ [type='radio'],
875
+ [type='checkbox']
876
+ ):focus {
877
+ transition:
878
+ border 0.2s,
879
+ background-color 0.2s,
880
+ box-shadow 0.2s;
881
+ border-color: var(--bf-blue);
882
+ box-shadow: 0 0 0 3px rgb(0 86 179 / 25%);
883
+ }
884
+
885
+ :where(button, [type='button'], [type='reset'], [type='submit']) {
886
+ color: var(--bf-dark);
887
+ padding: calc(var(--bf-spacing-xl) / 3) calc(calc(var(--bf-spacing-xl) / 3) * 2);
888
+ background: var(--bf-gray-light);
889
+ transition:
890
+ color 0.2s,
891
+ background 0.2s,
892
+ box-shadow 0.2s;
893
+ }
894
+
895
+ :where(button, [type='button'], [type='reset'], [type='submit']):hover,
896
+ :where(button, [type='button'], [type='reset'], [type='submit']):active,
897
+ :where(button, [type='button'], [type='reset'], [type='submit']):focus:not(.bf-disabled):not(
898
+ [aria-disabled='true']
899
+ ) {
900
+ text-decoration: none;
901
+ color: var(--bf-dark);
902
+ background: rgb(184 184 184); /* --bf-gray-light, ~10% darker */
903
+ }
904
+
905
+ :where(button, [type='button'], [type='reset'], [type='submit']):active,
906
+ :where(button, [type='button'], [type='reset'], [type='submit']):focus:not(.bf-disabled):not(
907
+ [aria-disabled='true']
908
+ ) {
909
+ box-shadow: 0 0 0 3px rgb(0 0 0 / 15%);
910
+ }
911
+
912
+ /* Disabled / aria-disabled / fieldset[disabled]. */
913
+ :where(
914
+ fieldset[disabled] button,
915
+ fieldset[disabled] input,
916
+ fieldset[disabled] input::after,
917
+ fieldset[disabled] input::before,
918
+ fieldset[disabled] input:checked,
919
+ fieldset[disabled] select,
920
+ fieldset[disabled] textarea,
921
+ fieldset[disabled] label,
922
+ button[disabled],
923
+ input[disabled],
924
+ input[disabled]::after,
925
+ input[disabled]::before,
926
+ input[disabled]:checked,
927
+ select[disabled],
928
+ textarea[disabled],
929
+ label[disabled],
930
+ button:disabled,
931
+ input:disabled,
932
+ input:disabled::after,
933
+ input:disabled::before,
934
+ input:disabled:checked,
935
+ select:disabled,
936
+ textarea:disabled,
937
+ label:disabled,
938
+ button[aria-disabled='true'],
939
+ input[aria-disabled='true'],
940
+ input[aria-disabled='true']::after,
941
+ input[aria-disabled='true']::before,
942
+ input[aria-disabled='true']:checked,
943
+ select[aria-disabled='true'],
944
+ textarea[aria-disabled='true'],
945
+ label[aria-disabled='true']
946
+ ) {
947
+ cursor: default !important;
948
+ cursor: not-allowed !important;
949
+ pointer-events: none !important;
950
+ -webkit-user-select: none !important;
951
+ -moz-user-select: none !important;
952
+ user-select: none !important;
953
+ box-shadow: none !important;
954
+ outline: none !important;
955
+ opacity: 0.5 !important;
476
956
  }
957
+ /* Select: custom arrow for single-value controls.
958
+ * Skip [size] / [multiple] (native UI differs by engine). Inspired by water.css. */
477
959
 
478
- @media (prefers-reduced-motion: no-preference) {
479
- :root {
480
- scroll-behavior: smooth;
960
+ :where(select):not([size], select[multiple]) {
961
+ -webkit-appearance: none;
962
+ -moz-appearance: none;
963
+ appearance: none;
964
+ background: var(--bf-white)
965
+ url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e")
966
+ no-repeat right 0.85rem center/8px 10px;
967
+ padding-right: calc(var(--bf-spacing-lg) + var(--bf-spacing-lg));
968
+ }
969
+
970
+ /* RTL: mirror arrow after appearance:none removes the native control. */
971
+ :where(*[dir='rtl']) :where(select):not([size], select[multiple]),
972
+ :where(select[dir='rtl']):not([size], select[multiple]) {
973
+ background-position: left 0.85rem top 50%;
974
+ padding-right: calc(var(--bf-spacing-lg) * 0.75);
975
+ padding-left: calc(var(--bf-spacing-lg) + var(--bf-spacing-lg));
976
+ }
977
+ /* Range: custom thumb/track when appearance:none is supported.
978
+ * CodePen: https://codepen.io/marcop135/pen/JjGrNMx */
979
+
980
+ @supports ((-webkit-appearance: none) or (-moz-appearance: none) or (appearance: none)) {
981
+ :where([type='range']) {
982
+ -webkit-appearance: none;
983
+ -moz-appearance: none;
984
+ appearance: none;
985
+ width: 100%;
986
+ height: 1.4rem;
987
+ }
988
+
989
+ :where([type='range'])::-webkit-slider-thumb {
990
+ border: 0;
991
+ -webkit-appearance: none;
992
+ appearance: none;
993
+
994
+ width: 1.5rem;
995
+ height: 1.5rem;
996
+ margin-top: -0.25rem;
997
+ background-color: var(--bf-blue);
998
+ border-radius: 1.5rem;
999
+ -webkit-transition:
1000
+ background-color 0.15s ease-in-out,
1001
+ border-color 0.15s ease-in-out,
1002
+ box-shadow 0.15s ease-in-out;
1003
+ transition:
1004
+ background-color 0.15s ease-in-out,
1005
+ border-color 0.15s ease-in-out,
1006
+ box-shadow 0.15s ease-in-out;
1007
+ }
1008
+
1009
+ :where([type='range'])::-webkit-slider-thumb:active {
1010
+ background-color: var(--bf-blue);
1011
+ }
1012
+
1013
+ :where([type='range'])::-moz-range-thumb {
1014
+ border: 0;
1015
+ -moz-appearance: none;
1016
+ appearance: none;
1017
+
1018
+ width: 1.5rem;
1019
+ height: 1.5rem;
1020
+ background-color: var(--bf-blue);
1021
+ border-radius: 1.5rem;
1022
+ -moz-transition:
1023
+ background-color 0.15s ease-in-out,
1024
+ border-color 0.15s ease-in-out,
1025
+ box-shadow 0.15s ease-in-out;
1026
+ transition:
1027
+ background-color 0.15s ease-in-out,
1028
+ border-color 0.15s ease-in-out,
1029
+ box-shadow 0.15s ease-in-out;
1030
+ }
1031
+
1032
+ :where([type='range'])::-moz-range-thumb:active {
1033
+ background-color: var(--bf-blue);
1034
+ }
1035
+
1036
+ :where([type='range'])::-webkit-slider-runnable-track {
1037
+ color: transparent;
1038
+ border-color: transparent;
1039
+
1040
+ width: 100%;
1041
+ height: 0.65rem;
1042
+ cursor: pointer;
1043
+ background-color: var(--bf-gray-light-extra);
1044
+ }
1045
+
1046
+ :where([type='range'])::-moz-range-track {
1047
+ color: transparent;
1048
+ border-color: transparent;
1049
+
1050
+ width: 100%;
1051
+ height: 0.65rem;
1052
+ cursor: pointer;
1053
+ background-color: var(--bf-gray-light-extra);
1054
+ }
1055
+
1056
+ :where([type='range']):focus {
1057
+ outline: none;
1058
+ }
1059
+
1060
+ :where([type='range']):focus::-webkit-slider-thumb {
1061
+ box-shadow:
1062
+ 0 0 0 0.1rem var(--bf-white),
1063
+ 0 0 0 0.2rem rgb(0 123 255 / 25%);
1064
+ }
1065
+
1066
+ :where([type='range']):focus::-moz-range-thumb {
1067
+ box-shadow:
1068
+ 0 0 0 0.1rem var(--bf-white),
1069
+ 0 0 0 0.2rem rgb(0 123 255 / 25%);
1070
+ }
1071
+
1072
+ :where([type='range'])::-moz-focus-outer {
1073
+ border: 0;
1074
+ }
1075
+
1076
+ :where([type='range']):disabled {
1077
+ pointer-events: none;
1078
+ }
1079
+
1080
+ :where([type='range']):disabled::-webkit-slider-thumb {
1081
+ background-color: var(--bf-gray-light);
1082
+ }
1083
+
1084
+ :where([type='range']):disabled::-moz-range-thumb {
1085
+ background-color: var(--bf-gray-light);
481
1086
  }
482
1087
  }
483
- table {
484
- caption-side: bottom;
485
- max-width: 100%;
486
- border-collapse: collapse;
487
- border-color: currentcolor;
488
- text-indent: 0;
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. */
489
1096
  }
490
1097
 
491
- thead,
492
- tbody,
493
- tfoot,
494
- tr,
495
- td,
496
- th {
497
- border-color: inherit;
498
- border-style: solid;
499
- border-width: 0;
1098
+ a:hover,
1099
+ a:focus {
1100
+ text-decoration: underline;
1101
+ color: var(--bf-blue-light);
500
1102
  }
501
1103
 
502
- thead th {
503
- vertical-align: bottom;
1104
+ /* Non-href anchors inherit text (Bootstrap reboot pattern). */
1105
+ a:not([href], [tabindex]) {
1106
+ color: inherit;
1107
+ text-decoration: none;
504
1108
  }
505
1109
 
506
- th,
507
- td {
508
- vertical-align: top;
1110
+ a:not([href], [class]),
1111
+ a:not([href], [class]):hover {
1112
+ color: inherit;
1113
+ text-decoration: none;
509
1114
  }
510
1115
 
511
- th {
512
- text-align: inherit;
513
- text-align: -webkit-match-parent;
514
- font-weight: 700;
1116
+ a:not([href], [tabindex]):focus {
1117
+ outline: 0;
515
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. */
516
1121
 
517
- caption {
518
- padding-top: 0.5rem;
519
- padding-bottom: 0.5rem;
520
- color: #999;
521
- text-align: left;
522
- caption-side: bottom;
523
- line-height: 1.375;
524
- font-size: 90%;
1122
+ :where(:focus:not(:focus-visible)) {
1123
+ outline: none;
525
1124
  }
526
1125
 
527
- /* Accessibility
528
- * ========================================================================== */
529
- /**
530
- * Change the cursor on busy elements in all browsers (opinionated).
531
- */
532
- :where([aria-busy=true i]) {
533
- cursor: progress;
1126
+ /* tabindex="-1" targets should not show a ring on programmatic focus. */
1127
+ :where([tabindex='-1']:focus:not(:focus-visible)) {
1128
+ outline: 0 !important;
534
1129
  }
535
1130
 
536
- /*
537
- * Change the cursor on disabled, not-editable, or otherwise
538
- * inoperable elements in all browsers (opinionated).
539
- */
540
- :where([aria-disabled=true i], [disabled]) {
541
- cursor: not-allowed;
1131
+ :focus-visible {
1132
+ outline: 0.2rem solid var(--bf-orange);
1133
+ outline-offset: 0.3rem;
542
1134
  }
543
1135
 
544
- /*
545
- * Change the display on visually hidden accessible elements
546
- * in all browsers (opinionated).
547
- */
548
- :where([aria-hidden=false i][hidden]) {
549
- display: initial;
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;
550
1161
  }
1162
+ /* List spacing and nav list reset. */
551
1163
 
552
- :where([aria-hidden=false i][hidden]:not(:focus)) {
553
- clip: rect(0, 0, 0, 0);
554
- position: absolute;
1164
+ menu,
1165
+ ol,
1166
+ ul,
1167
+ dl {
1168
+ margin: 0 0 var(--bf-spacing-xl) 0;
1169
+ padding: 0;
555
1170
  }
556
1171
 
557
- html input,
558
- button,
559
- select,
560
- optgroup,
561
- textarea {
562
- color: inherit;
563
- font-family: inherit;
564
- font-size: inherit;
565
- line-height: inherit;
1172
+ menu ul,
1173
+ menu ol,
1174
+ ul ul,
1175
+ ul ol,
1176
+ ol ol,
1177
+ ol ul,
1178
+ dd {
1179
+ margin-bottom: 0;
566
1180
  }
567
1181
 
568
- html input,
569
- button,
570
- [type=radio],
571
- [type=checkbox],
572
- select,
573
- optgroup,
574
- textarea {
575
- margin: 0;
1182
+ ul,
1183
+ ol {
1184
+ margin-left: var(--bf-spacing-xl);
576
1185
  }
577
1186
 
578
- html input,
579
- select,
580
- textarea,
581
- legend {
582
- width: 100%;
1187
+ nav ol,
1188
+ nav ul {
1189
+ list-style: none;
1190
+ list-style-image: none;
1191
+ margin-left: 0;
583
1192
  }
584
1193
 
585
- html label,
586
- button,
587
- [type=image],
588
- [type=submit],
589
- [type=reset],
590
- html [type=button],
591
- [type=radio],
592
- [type=checkbox] {
593
- width: auto;
1194
+ dt {
1195
+ font-weight: 700;
594
1196
  }
595
1197
 
596
- html input,
597
- label,
598
- select,
599
- textarea,
600
- button,
601
- html [type=button],
602
- [type=reset],
603
- [type=submit],
604
- output {
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 {
605
1213
  display: inline-block;
606
1214
  }
607
1215
 
608
- [type=file] {
609
- display: block;
610
- background-color: transparent;
1216
+ img,
1217
+ canvas,
1218
+ audio,
1219
+ video,
1220
+ iframe,
1221
+ object,
1222
+ embed {
1223
+ max-width: 100%;
611
1224
  }
612
1225
 
613
- button,
614
- html input,
615
- select,
616
- textarea {
617
- background-image: none;
1226
+ audio,
1227
+ video,
1228
+ canvas,
1229
+ img,
1230
+ svg {
1231
+ vertical-align: middle;
618
1232
  }
619
1233
 
620
- input,
621
- select,
622
- textarea {
623
- vertical-align: baseline;
1234
+ img {
1235
+ height: auto;
1236
+ border-style: none;
624
1237
  }
625
1238
 
626
- form {
1239
+ figure {
627
1240
  margin: 0;
628
1241
  }
629
1242
 
630
- fieldset {
631
- border: 0;
632
- padding: 0;
633
- margin: 0;
634
- min-width: 0;
1243
+ figure,
1244
+ figcaption {
1245
+ display: block;
635
1246
  }
636
1247
 
637
- legend {
638
- display: table;
639
- max-width: 100%;
640
- white-space: normal;
641
- border: 0;
642
- padding: 0;
643
- font-weight: 400;
644
- margin-bottom: 5px;
645
- margin-bottom: 0.5rem;
646
- font-size: inherit;
1248
+ figcaption {
647
1249
  line-height: 1.375;
648
- color: inherit;
1250
+ font-size: 90%;
649
1251
  }
650
1252
 
651
- label {
652
- font-weight: 400;
653
- font-size: 90%;
654
- line-height: 1.375;
655
- margin-bottom: 5px;
656
- margin-bottom: 0.5rem;
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;
657
1318
  }
658
1319
 
659
- label input,
660
- label select,
661
- label textarea {
662
- font-size: 110%;
1320
+ summary {
1321
+ cursor: pointer;
1322
+ font-weight: 700;
1323
+ word-break: break-all;
663
1324
  }
664
1325
 
665
- ::-webkit-inner-spin-button {
666
- height: auto;
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));
667
1336
  }
668
1337
 
669
- ::-webkit-datetime-edit-fields-wrapper,
670
- ::-webkit-datetime-edit-text,
671
- ::-webkit-datetime-edit-minute,
672
- ::-webkit-datetime-edit-hour-field,
673
- ::-webkit-datetime-edit-day-field,
674
- ::-webkit-datetime-edit-month-field,
675
- ::-webkit-datetime-edit-year-field {
676
- padding: 0;
1338
+ @media (min-width: 768px) {
1339
+ dialog {
1340
+ max-width: 50rem;
1341
+ }
677
1342
  }
678
1343
 
679
- ::-webkit-color-swatch-wrapper {
680
- padding: 0;
1344
+ /* Open dialog wins over [hidden] (e.g. <dialog hidden open>). */
1345
+ dialog[open] {
1346
+ display: block !important;
681
1347
  }
682
1348
 
683
- [type=search] {
684
- outline-offset: -0.25rem;
1349
+ dialog::backdrop {
1350
+ background: rgb(0 0 0 / 40%);
685
1351
  }
1352
+ /* Smooth scrolling when motion is allowed. */
686
1353
 
687
- output {
688
- vertical-align: middle;
1354
+ @media (prefers-reduced-motion: no-preference) {
1355
+ :root {
1356
+ scroll-behavior: smooth;
1357
+ }
689
1358
  }
1359
+ /* Table border collapse and cell alignment. */
690
1360
 
691
- button,
692
- select {
693
- text-transform: none;
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. */
694
1367
  }
695
1368
 
696
- select {
697
- word-wrap: normal;
1369
+ thead,
1370
+ tbody,
1371
+ tfoot,
1372
+ tr,
1373
+ td,
1374
+ th {
1375
+ border-color: inherit;
1376
+ border-style: solid;
1377
+ border-width: 0;
698
1378
  }
699
1379
 
700
- [list]:not([type=date],
701
- [type=datetime-local],
702
- [type=month],
703
- [type=week],
704
- [type=time])::-webkit-calendar-picker-indicator {
705
- display: none !important;
1380
+ thead th {
1381
+ vertical-align: bottom;
706
1382
  }
707
1383
 
708
- optgroup {
709
- font-family: inherit;
710
- font-size: inherit;
711
- font-style: inherit;
712
- font-weight: 600;
1384
+ th,
1385
+ td {
1386
+ vertical-align: top;
713
1387
  }
714
1388
 
715
- button,
716
- html [type=button],
717
- [type=reset],
718
- [type=submit],
719
- [type=email],
720
- [type=number],
721
- [type=text],
722
- [type=tel],
723
- [type=date],
724
- [type=datetime-local],
725
- [type=month],
726
- [type=week],
727
- [type=url],
728
- [type=image],
729
- [type=password],
730
- [type=search],
731
- [type=search]::-webkit-search-decoration,
732
- [type=search]::-webkit-search-cancel-button,
733
- input[list],
734
- textarea {
735
- -webkit-appearance: none;
736
- appearance: none;
1389
+ th {
1390
+ text-align: inherit;
1391
+ text-align: -webkit-match-parent;
1392
+ font-weight: 700;
737
1393
  }
738
1394
 
739
- ::file-selector-button {
740
- font: inherit;
741
- -webkit-appearance: auto;
742
- -moz-appearance: auto;
743
- appearance: auto;
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%;
744
1403
  }
1404
+ /* Accessibility helpers (adapted from sanitize.css). */
745
1405
 
746
- button,
747
- input,
748
- select,
749
- textarea {
750
- border-radius: 0.25rem;
1406
+ /* Busy: progress cursor. */
1407
+ :where([aria-busy='true' i]) {
1408
+ cursor: progress;
751
1409
  }
752
1410
 
753
- [type=radio] {
754
- border-radius: 50%;
1411
+ /* Disabled / inoperable: not-allowed cursor. */
1412
+ :where([aria-disabled='true' i], [disabled]) {
1413
+ cursor: not-allowed;
755
1414
  }
756
1415
 
757
- [type=checkbox] {
758
- border-radius: 0.5rem;
1416
+ /* aria-hidden="false" on [hidden]: keep in a11y tree when not focused. */
1417
+ :where([aria-hidden='false' i][hidden]) {
1418
+ display: initial;
759
1419
  }
760
1420
 
761
- [type=radio],
762
- [type=checkbox] {
763
- padding: 0;
764
- background-color: #fff;
1421
+ :where([aria-hidden='false' i][hidden]:not(:focus)) {
1422
+ clip: rect(0, 0, 0, 0);
1423
+ position: absolute;
765
1424
  }
1425
+ /* Preference queries only (prefers-contrast, forced-colors). Additive. */
766
1426
 
767
- [type=range i] {
768
- background-color: transparent;
769
- }
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
+ }
770
1432
 
771
- select[size],
772
- select[multiple] {
773
- height: auto;
774
- }
1433
+ :focus-visible {
1434
+ outline-width: 0.3rem;
1435
+ outline-offset: 0.4rem;
1436
+ }
775
1437
 
776
- select[multiple] {
777
- background-image: none;
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
+ }
778
1455
  }
779
1456
 
780
- textarea {
781
- height: auto;
782
- min-height: 60px;
783
- min-height: 6rem;
784
- overflow: auto;
785
- vertical-align: top;
786
- resize: vertical;
787
- }
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
+ }
788
1462
 
789
- ::-moz-focus-inner {
790
- padding: 0;
791
- border-style: none;
792
- }
1463
+ a {
1464
+ text-decoration: underline;
1465
+ }
793
1466
 
794
- button,
795
- [type=button],
796
- [type=reset],
797
- [type=submit] {
798
- line-height: normal;
799
- text-align: center;
800
- margin: 0;
801
- background-clip: padding-box;
802
- vertical-align: baseline;
803
- overflow: visible;
804
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
805
- -webkit-user-select: none;
806
- -moz-user-select: none;
807
- user-select: none;
808
- border: 0;
809
- background-image: none;
810
- }
811
- button:hover, button:active, button:focus,
812
- [type=button]:hover,
813
- [type=button]:active,
814
- [type=button]:focus,
815
- [type=reset]:hover,
816
- [type=reset]:active,
817
- [type=reset]:focus,
818
- [type=submit]:hover,
819
- [type=submit]:active,
820
- [type=submit]:focus {
821
- text-decoration: none;
822
- color: #222;
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
+ }
823
1475
  }
1476
+ /* System-preference dark: shared dark rules + scrollbars under prefers-color-scheme.
1477
+ * postcss-import wraps each import in the media query at build time. */
1478
+ @media (prefers-color-scheme: dark) {
824
1479
 
825
- button:not(:disabled),
826
- [type=button]:not(:disabled),
827
- [type=reset]:not(:disabled),
828
- [type=submit]:not(:disabled) {
829
- cursor: pointer;
1480
+ /* Shared dark-mode rules for always-dark and prefers-color-scheme builds.
1481
+ * Variant-only extras: utility-global-dark.css. Scrollbars: global-dark-scrollbars.css.
1482
+ * Underscore prefix excludes this file from the buildAllCss glob. */
1483
+
1484
+ html {
1485
+ color: var(--bf-light);
830
1486
  }
831
1487
 
832
- input::-moz-placeholder, textarea::-moz-placeholder {
833
- color: #666;
1488
+ body {
1489
+ background-color: var(--bf-dark-bg);
834
1490
  }
835
1491
 
836
- input::placeholder,
837
- textarea::placeholder {
838
- color: #666;
1492
+ a {
1493
+ color: var(--bf-dark-link);
839
1494
  }
840
1495
 
841
- /*
842
- Use the modern Firefox focus style for all focusable elements.
843
- */
844
- :-moz-focusring {
845
- outline: auto;
1496
+ a:hover,
1497
+ a:focus {
1498
+ color: var(--bf-dark-link-hover);
846
1499
  }
847
1500
 
848
- :-moz-ui-invalid {
849
- box-shadow: none;
1501
+ mark {
1502
+ background-color: var(--bf-dark-mark-bg);
850
1503
  }
851
1504
 
852
- [type=email],
853
- [type=number],
854
- [type=password],
855
- [type=tel],
856
- [type=search],
857
- [type=text],
858
- [type=date],
859
- [type=datetime-local],
860
- [type=month],
861
- [type=week],
862
- [type=time],
863
- [type=url],
1505
+ ins {
1506
+ background-color: var(--bf-dark-ins-bg);
1507
+ }
1508
+
1509
+ [type='email'],
1510
+ [type='number'],
1511
+ [type='password'],
1512
+ [type='tel'],
1513
+ [type='search'],
1514
+ [type='text'],
1515
+ [type='date'],
1516
+ [type='datetime-local'],
1517
+ [type='month'],
1518
+ [type='week'],
1519
+ [type='time'],
1520
+ [type='url'],
1521
+ [type='range'],
864
1522
  input[list],
865
1523
  select,
1524
+ select:not([size], select[multiple]),
866
1525
  textarea {
867
- background-color: #fff;
868
- border: 1px solid/#999;
869
- padding: 5px 7.5px;
870
- padding: 0.5rem 0.75rem;
871
- }
872
-
873
- [type=email]:active, [type=email]:focus,
874
- [type=number]:active,
875
- [type=number]:focus,
876
- [type=password]:active,
877
- [type=password]:focus,
878
- [type=tel]:active,
879
- [type=tel]:focus,
880
- [type=search]:active,
881
- [type=search]:focus,
882
- [type=text]:active,
883
- [type=text]:focus,
884
- [type=date]:active,
885
- [type=date]:focus,
886
- [type=datetime-local]:active,
887
- [type=datetime-local]:focus,
888
- [type=month]:active,
889
- [type=month]:focus,
890
- [type=week]:active,
891
- [type=week]:focus,
892
- [type=time]:active,
893
- [type=time]:focus,
894
- [type=url]:active,
895
- [type=url]:focus,
1526
+ background-color: var(--bf-dark-extra);
1527
+ border-color: var(--bf-black);
1528
+ color: var(--bf-gray-light);
1529
+ }
1530
+
1531
+ [type='email']:active,
1532
+ [type='email']:focus,
1533
+ [type='number']:active,
1534
+ [type='number']:focus,
1535
+ [type='password']:active,
1536
+ [type='password']:focus,
1537
+ [type='tel']:active,
1538
+ [type='tel']:focus,
1539
+ [type='search']:active,
1540
+ [type='search']:focus,
1541
+ [type='text']:active,
1542
+ [type='text']:focus,
1543
+ [type='date']:active,
1544
+ [type='date']:focus,
1545
+ [type='datetime-local']:active,
1546
+ [type='datetime-local']:focus,
1547
+ [type='month']:active,
1548
+ [type='month']:focus,
1549
+ [type='week']:active,
1550
+ [type='week']:focus,
1551
+ [type='time']:active,
1552
+ [type='time']:focus,
1553
+ [type='url']:active,
1554
+ [type='url']:focus,
896
1555
  input[list]:active,
897
1556
  input[list]:focus,
898
1557
  select:active,
899
1558
  select:focus,
1559
+ select:not([size], select[multiple]):active,
1560
+ select:not([size], select[multiple]):focus,
900
1561
  textarea:active,
901
- textarea:focus,
902
- [type=radio]:active,
903
- [type=radio]:focus,
904
- [type=checkbox]:active,
905
- [type=checkbox]:focus {
906
- transition: border 0.2s, background-color 0.2s, box-shadow 0.2s;
907
- border-color: #007bff;
908
- box-shadow: 0 0 0 3px rgba(0, 86, 179, 0.25);
1562
+ textarea:focus {
1563
+ background-color: var(--bf-dark-extra);
1564
+ border-color: var(--bf-dark-border-focus);
1565
+ box-shadow: 0 0 0 3px var(--bf-dark-shadow-focus);
909
1566
  }
910
1567
 
911
- button,
912
- [type=button],
913
- [type=reset],
914
- [type=submit] {
915
- color: #222;
916
- padding: 6.6666666667px 13.3333333333px;
917
- padding: 0.6666666667rem 1.3333333333rem;
918
- background: #ccc;
919
- transition: color 0.2s, background 0.2s, box-shadow 0.2s;
920
- }
921
- button:hover, button:active, button:focus,
922
- [type=button]:hover,
923
- [type=button]:active,
924
- [type=button]:focus,
925
- [type=reset]:hover,
926
- [type=reset]:active,
927
- [type=reset]:focus,
928
- [type=submit]:hover,
929
- [type=submit]:active,
930
- [type=submit]:focus {
931
- text-decoration: none;
932
- color: #222;
933
- background: rgb(178.5, 178.5, 178.5);
934
- }
935
- button:active, button:focus,
936
- [type=button]:active,
937
- [type=button]:focus,
938
- [type=reset]:active,
939
- [type=reset]:focus,
940
- [type=submit]:active,
941
- [type=submit]:focus {
942
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
943
- }
944
-
945
- fieldset[disabled] button,
946
- fieldset[disabled] input,
947
- fieldset[disabled] input::after,
948
- fieldset[disabled] input::before,
949
- fieldset[disabled] input:checked,
950
- fieldset[disabled] select,
951
- fieldset[disabled] textarea,
952
- fieldset[disabled] label,
953
- button[disabled],
954
- input[disabled],
955
- input[disabled]::after,
956
- input[disabled]::before,
957
- input[disabled]:checked,
958
- select[disabled],
959
- textarea[disabled],
960
- label[disabled],
961
- button:disabled,
962
- input:disabled,
963
- input:disabled::after,
964
- input:disabled::before,
965
- input:disabled:checked,
966
- select:disabled,
967
- textarea:disabled,
968
- label:disabled,
969
- button[aria-disabled=true],
970
- input[aria-disabled=true],
971
- input[aria-disabled=true]::after,
972
- input[aria-disabled=true]::before,
973
- input[aria-disabled=true]:checked,
974
- select[aria-disabled=true],
975
- textarea[aria-disabled=true],
976
- label[aria-disabled=true] {
977
- cursor: default !important;
978
- cursor: not-allowed !important;
979
- pointer-events: none !important;
980
- -webkit-user-select: none !important;
981
- -moz-user-select: none !important;
982
- user-select: none !important;
983
- box-shadow: none !important;
984
- opacity: 0.5 !important;
1568
+ .bf-focused {
1569
+ border-color: var(--bf-dark-border-focus) !important;
1570
+ box-shadow: 0 0 0 3px var(--bf-dark-shadow-focus) !important;
985
1571
  }
986
1572
 
987
- select:not([size], [multiple]) {
988
- -webkit-appearance: none;
989
- -moz-appearance: none;
990
- appearance: none;
991
- background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.85rem center/8px 10px;
992
- padding-right: 20px;
993
- padding-right: 2rem;
1573
+ .bf-invalid,
1574
+ .bf-invalid:focus {
1575
+ color: var(--bf-dark-invalid) !important;
1576
+ border-color: var(--bf-dark-invalid) !important;
994
1577
  }
995
1578
 
996
- select::-ms-expand {
997
- display: none;
1579
+ select:not([size], select[multiple]) {
1580
+ 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");
998
1581
  }
999
1582
 
1000
- *[dir=rtl] select:not([size], [multiple]),
1001
- select[dir=rtl]:not([size], [multiple]) {
1002
- background-position: left 0.85rem top 50%;
1003
- padding-right: 7.5px;
1004
- padding-right: 0.75rem;
1005
- padding-left: 20px;
1006
- padding-left: 2rem;
1583
+ [type='range'] {
1584
+ background-color: transparent;
1007
1585
  }
1008
1586
 
1009
- [type=checkbox],
1010
- [type=radio] {
1011
- -webkit-appearance: none;
1012
- -moz-appearance: none;
1013
- appearance: none;
1014
- height: 1.8rem;
1015
- width: 1.8rem;
1016
- vertical-align: top;
1017
- position: relative;
1018
- border: 1px solid/#999;
1019
- }
1020
- [type=checkbox] + label,
1021
- [type=radio] + label {
1022
- line-height: 1.8rem;
1023
- vertical-align: top;
1024
- margin-left: 5px;
1025
- margin-left: 0.5rem;
1587
+ [type='range']:focus {
1588
+ background-color: transparent;
1026
1589
  }
1027
- *[dir=rtl] [type=checkbox] + label, [type=checkbox][dir=rtl] + label,
1028
- *[dir=rtl] [type=radio] + label,
1029
- [type=radio][dir=rtl] + label {
1030
- margin-left: 0;
1031
- margin-right: 5px;
1032
- margin-right: 0.5rem;
1590
+
1591
+ [type='range']::-webkit-slider-runnable-track {
1592
+ background-color: var(--bf-dark-extra);
1033
1593
  }
1034
- [type=checkbox]::after,
1035
- [type=radio]::after {
1036
- content: "";
1037
- display: block;
1038
- position: absolute;
1594
+
1595
+ [type='range']::-moz-range-track {
1596
+ background-color: var(--bf-dark-extra);
1039
1597
  }
1040
- [type=checkbox]:checked,
1041
- [type=radio]:checked {
1042
- background-color: #007bff;
1043
- border-color: #000;
1598
+
1599
+ input::-moz-placeholder, textarea::-moz-placeholder {
1600
+ color: var(--bf-gray);
1044
1601
  }
1045
1602
 
1046
- [type=radio]::after {
1047
- width: 1.8rem;
1048
- height: 1.8rem;
1049
- left: -0.05rem;
1050
- top: -0.05rem;
1051
- border-radius: 50%;
1052
- background: #fff;
1053
- transform: scale(0.35);
1603
+ input::placeholder,
1604
+ textarea::placeholder {
1605
+ color: var(--bf-gray);
1054
1606
  }
1055
1607
 
1056
- [type=checkbox]::after {
1057
- width: 0.6rem;
1058
- height: 0.8rem;
1059
- border: 2px solid/#fff;
1060
- border-top: 0;
1061
- border-left: 0;
1062
- left: 35%;
1063
- top: 20%;
1064
- transform: rotate(43deg);
1608
+ button,
1609
+ [type='button'],
1610
+ [type='reset'],
1611
+ [type='submit'],
1612
+ .bf-btn {
1613
+ background: var(--bf-gray-light);
1065
1614
  }
1066
1615
 
1067
- [type=range] {
1068
- -webkit-appearance: none;
1069
- -moz-appearance: none;
1070
- appearance: none;
1071
- width: 100%;
1072
- height: 1.4rem;
1616
+ button:hover,
1617
+ button:active,
1618
+ button:focus,
1619
+ [type='button']:hover,
1620
+ [type='button']:active,
1621
+ [type='button']:focus,
1622
+ [type='reset']:hover,
1623
+ [type='reset']:active,
1624
+ [type='reset']:focus,
1625
+ [type='submit']:hover,
1626
+ [type='submit']:active,
1627
+ [type='submit']:focus,
1628
+ .bf-btn:hover,
1629
+ .bf-btn:active,
1630
+ .bf-btn:focus {
1631
+ background: var(--bf-dark-button-hover);
1632
+ }
1633
+
1634
+ button:active,
1635
+ button:focus,
1636
+ [type='button']:active,
1637
+ [type='button']:focus,
1638
+ [type='reset']:active,
1639
+ [type='reset']:focus,
1640
+ [type='submit']:active,
1641
+ [type='submit']:focus,
1642
+ .bf-btn:active,
1643
+ .bf-btn:focus {
1644
+ box-shadow: 0 0 0 3px var(--bf-dark-button-shadow);
1073
1645
  }
1074
1646
 
1075
- [type=range]::-webkit-slider-thumb {
1076
- border: 0;
1077
- -webkit-appearance: none;
1078
- appearance: none;
1079
- width: 1.5rem;
1080
- height: 1.5rem;
1081
- margin-top: -0.25rem;
1082
- background-color: #007bff;
1083
- border-radius: 1.5rem;
1084
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1085
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1647
+ .bf-btn.bf-btn--primary {
1648
+ background: var(--bf-blue);
1086
1649
  }
1087
- [type=range]::-webkit-slider-thumb:active {
1088
- background-color: #007bff;
1650
+
1651
+ .bf-btn.bf-btn--primary:hover,
1652
+ .bf-btn.bf-btn--primary:active,
1653
+ .bf-btn.bf-btn--primary:focus {
1654
+ background: var(--bf-blue-light);
1089
1655
  }
1090
1656
 
1091
- [type=range]::-moz-range-thumb {
1092
- border: 0;
1093
- -moz-appearance: none;
1094
- appearance: none;
1095
- width: 1.5rem;
1096
- height: 1.5rem;
1097
- background-color: #007bff;
1098
- border-radius: 1.5rem;
1099
- -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1100
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1657
+ .bf-btn.bf-btn--primary:active,
1658
+ .bf-btn.bf-btn--primary:focus {
1659
+ box-shadow: 0 0 0 3px rgb(190 216 254 / 75%);
1101
1660
  }
1102
- [type=range]::-moz-range-thumb:active {
1103
- background-color: #007bff;
1661
+
1662
+ .bf-table th,
1663
+ .bf-table td {
1664
+ border-color: var(--bf-gray-dark);
1104
1665
  }
1105
1666
 
1106
- [type=range]::-webkit-slider-runnable-track {
1107
- color: transparent;
1108
- border-color: transparent;
1109
- width: 100%;
1110
- height: 0.65rem;
1111
- cursor: pointer;
1112
- background-color: #e9e9e9;
1667
+ .bf-table--zebra tbody tr:nth-child(odd),
1668
+ .bf-table-responsive--zebra tbody tr:nth-child(odd) {
1669
+ background-color: var(--bf-gray-dark-extra);
1113
1670
  }
1114
1671
 
1115
- [type=range]::-moz-range-track {
1116
- color: transparent;
1117
- border-color: transparent;
1118
- width: 100%;
1119
- height: 0.65rem;
1120
- cursor: pointer;
1121
- background-color: #e9e9e9;
1672
+ dialog {
1673
+ color: var(--bf-light);
1674
+ background-color: var(--bf-dark-bg);
1122
1675
  }
1123
1676
 
1124
- [type=range]:focus {
1125
- outline: none;
1677
+ caption {
1678
+ color: var(--bf-gray-light);
1126
1679
  }
1127
- [type=range]:focus::-webkit-slider-thumb {
1128
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1680
+
1681
+ progress[value] {
1682
+ background: var(--bf-gray-dark-extra);
1683
+ color: var(--bf-blue);
1129
1684
  }
1130
- [type=range]:focus::-moz-slider-thumb {
1131
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1685
+
1686
+ progress[value]::-webkit-progress-bar {
1687
+ background: var(--bf-gray-dark-extra);
1132
1688
  }
1133
1689
 
1134
- [type=range]::-moz-focus-outer {
1135
- border: 0;
1690
+ progress[value]::-webkit-progress-value {
1691
+ background: var(--bf-blue);
1692
+ }
1136
1693
  }
1694
+ @media (prefers-color-scheme: dark) {
1695
+
1696
+ /* Dark scrollbar colors (Firefox + WebKit). */
1137
1697
 
1138
- [type=range]:focus::-moz-range-thumb {
1139
- box-shadow: 0 0 0 0.1rem/#fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1698
+ html {
1699
+ scrollbar-color: rgb(97 97 97) var(--bf-dark-extra); /* gray-dark -5% lightness */
1140
1700
  }
1141
1701
 
1142
- [type=range]:disabled {
1143
- pointer-events: none;
1702
+ /* WebKit thumb / track. */
1703
+
1704
+ ::-webkit-scrollbar {
1705
+ width: 1.5rem;
1706
+ height: 1.5rem;
1144
1707
  }
1145
- [type=range]:disabled::-webkit-slider-thumb {
1146
- background-color: #ccc;
1708
+
1709
+ ::-webkit-scrollbar-track {
1710
+ background-color: var(--bf-dark-extra);
1147
1711
  }
1148
- [type=range]:disabled::-moz-slider-thumb {
1149
- background-color: #ccc;
1712
+
1713
+ ::-webkit-scrollbar-thumb {
1714
+ background-color: rgb(97 97 97); /* gray-dark -5% lightness */
1150
1715
  }
1151
1716
 
1152
- @media (prefers-color-scheme: dark) {
1153
- html {
1154
- color: #f0f0f0;
1155
- }
1156
- body {
1157
- background-color: rgb(36.125, 36.125, 36.125);
1158
- }
1159
- a {
1160
- color: rgb(102, 175.8, 255);
1161
- }
1162
- a:hover, a:focus {
1163
- color: rgb(26, 136.0223463687, 255);
1164
- }
1165
- mark {
1166
- background-color: #cccc00;
1167
- }
1168
- ins {
1169
- background-color: hsl(60, 100%, 125%);
1170
- }
1171
- [type=email],
1172
- [type=number],
1173
- [type=password],
1174
- [type=tel],
1175
- [type=search],
1176
- [type=text],
1177
- [type=date],
1178
- [type=datetime-local],
1179
- [type=month],
1180
- [type=week],
1181
- [type=time],
1182
- [type=url],
1183
- [type=range],
1184
- input[list],
1185
- select,
1186
- select:not([size], [multiple]),
1187
- textarea {
1188
- background-color: #111;
1189
- border-color: #000;
1190
- color: #ccc;
1191
- }
1192
- [type=email]:active, [type=email]:focus,
1193
- [type=number]:active,
1194
- [type=number]:focus,
1195
- [type=password]:active,
1196
- [type=password]:focus,
1197
- [type=tel]:active,
1198
- [type=tel]:focus,
1199
- [type=search]:active,
1200
- [type=search]:focus,
1201
- [type=text]:active,
1202
- [type=text]:focus,
1203
- [type=date]:active,
1204
- [type=date]:focus,
1205
- [type=datetime-local]:active,
1206
- [type=datetime-local]:focus,
1207
- [type=month]:active,
1208
- [type=month]:focus,
1209
- [type=week]:active,
1210
- [type=week]:focus,
1211
- [type=time]:active,
1212
- [type=time]:focus,
1213
- [type=url]:active,
1214
- [type=url]:focus,
1215
- [type=range]:active,
1216
- [type=range]:focus,
1217
- input[list]:active,
1218
- input[list]:focus,
1219
- select:active,
1220
- select:focus,
1221
- select:not([size], [multiple]):active,
1222
- select:not([size], [multiple]):focus,
1223
- textarea:active,
1224
- textarea:focus {
1225
- background-color: #111;
1226
- border-color: rgb(51, 149.4, 255);
1227
- }
1228
- [type=email]:active, [type=email]:focus,
1229
- [type=number]:active,
1230
- [type=number]:focus,
1231
- [type=password]:active,
1232
- [type=password]:focus,
1233
- [type=tel]:active,
1234
- [type=tel]:focus,
1235
- [type=search]:active,
1236
- [type=search]:focus,
1237
- [type=text]:active,
1238
- [type=text]:focus,
1239
- [type=date]:active,
1240
- [type=date]:focus,
1241
- [type=datetime-local]:active,
1242
- [type=datetime-local]:focus,
1243
- [type=month]:active,
1244
- [type=month]:focus,
1245
- [type=week]:active,
1246
- [type=week]:focus,
1247
- [type=time]:active,
1248
- [type=time]:focus,
1249
- [type=url]:active,
1250
- [type=url]:focus,
1251
- input[list]:active,
1252
- input[list]:focus,
1253
- select:active,
1254
- select:focus,
1255
- select:not([size], [multiple]):active,
1256
- select:not([size], [multiple]):focus,
1257
- textarea:active,
1258
- textarea:focus {
1259
- box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.5);
1260
- }
1261
- select:not([size], [multiple]) {
1262
- 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");
1263
- }
1264
- /* stylelint-disable-next-line */
1717
+ ::-webkit-scrollbar-thumb:hover {
1718
+ background-color: rgb(115 115 115); /* gray-dark +10% lightness */
1265
1719
  }
1266
- @media screen and (prefers-color-scheme: dark) and (min-width: 0\0 ) and (min-resolution: 0.001dpcm) {
1267
- select:not([size], [multiple]),
1268
- *[dir=rtl] select:not([size], [multiple]),
1269
- select[dir=rtl]:not([size], [multiple]) {
1270
- background-image: none;
1271
- }
1272
1720
  }
1273
- @media (prefers-color-scheme: dark) {
1274
- [type=range] {
1275
- background-color: transparent;
1276
- }
1277
- [type=range]:focus {
1278
- background-color: transparent;
1279
- }
1280
- [type=range]::-webkit-slider-runnable-track {
1281
- background-color: #111;
1282
- }
1283
- [type=range]::-moz-range-track {
1284
- background-color: #111;
1285
- }
1286
- input::-moz-placeholder, textarea::-moz-placeholder {
1287
- color: #999;
1288
- }
1289
- input::placeholder,
1290
- textarea::placeholder {
1291
- color: #999;
1292
- }
1293
- button,
1294
- [type=button],
1295
- [type=reset],
1296
- [type=submit] {
1297
- background: #ccc;
1298
- }
1299
- button:hover, button:active, button:focus,
1300
- [type=button]:hover,
1301
- [type=button]:active,
1302
- [type=button]:focus,
1303
- [type=reset]:hover,
1304
- [type=reset]:active,
1305
- [type=reset]:focus,
1306
- [type=submit]:hover,
1307
- [type=submit]:active,
1308
- [type=submit]:focus {
1309
- background: rgb(178.5, 178.5, 178.5);
1310
- }
1311
- button:active, button:focus,
1312
- [type=button]:active,
1313
- [type=button]:focus,
1314
- [type=reset]:active,
1315
- [type=reset]:focus,
1316
- [type=submit]:active,
1317
- [type=submit]:focus {
1318
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.45);
1319
- }
1320
- button:active, button:focus,
1321
- [type=button]:active,
1322
- [type=button]:focus,
1323
- [type=reset]:active,
1324
- [type=reset]:focus,
1325
- [type=submit]:active,
1326
- [type=submit]:focus {
1327
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.45);
1328
- }
1329
- a:focus,
1330
- input:focus {
1331
- outline-color: rgb(178.5, 115.5, 0);
1332
- }
1333
- :focus-visible {
1334
- outline-color: rgb(178.5, 115.5, 0);
1335
- }
1336
- dialog {
1337
- color: #f0f0f0;
1338
- background-color: rgb(36.125, 36.125, 36.125);
1339
- }
1340
- }