blue-web 1.11.0 → 1.12.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.
package/dist/merged.scss CHANGED
@@ -1,8 +1,25 @@
1
1
  /*!
2
- * Blue Web v1.11.0 (https://bruegmann.github.io/blue-web)
2
+ * Blue Web v1.12.0 (https://bruegmann.github.io/blue-web)
3
3
  * Licensed under GNU General Public License v3.0 (https://github.com/bruegmann/blue-web/blob/master/LICENSE).
4
4
  */
5
5
 
6
+ // Main color theme. E.g. used for background for body and sidebar.
7
+ $theme: hsl(217deg 10% 94%) !default;
8
+ $primary: hsl(217deg 91% 50%) !default;
9
+ $white: #fff !default;
10
+ $gray-100: hsl(217deg 17% 98%) !default;
11
+ $gray-200: hsl(217deg 16% 93%) !default;
12
+ $gray-300: hsl(217deg 14% 89%) !default;
13
+ $gray-400: hsl(217deg 14% 83%) !default;
14
+ $gray-500: hsl(217deg 11% 71%) !default;
15
+ $gray-600: hsl(217deg 7% 46%) !default;
16
+ $gray-700: hsl(217deg 9% 31%) !default;
17
+ $gray-800: hsl(217deg 10% 23%) !default;
18
+ $gray-900: hsl(217deg 11% 15%) !default;
19
+ $black: #000 !default;
20
+ $header-color: $gray-900 !default;
21
+ $sidebar-color: $gray-900 !default;
22
+
6
23
  $light: #ecedf0 !default;
7
24
 
8
25
  // Components
@@ -26,9 +43,6 @@ $custom-checkbox-indicator-border-radius: $border-radius-sm !default;
26
43
  $link-decoration: none !default;
27
44
  $link-hover-decoration: underline !default;
28
45
 
29
- $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Roboto, Oxygen-Sans,
30
- Ubuntu, Cantarell, "Helvetica Neue", sans-serif !default;
31
-
32
46
  // Tint focus border and shadow in primary color.
33
47
  // In a future Bootstrap release, this might not be necessary anymore.
34
48
  $focus-ring-color: #{rgba(var(--bs-primary-rgb), 25%)} !default;
@@ -214,7 +228,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
214
228
  @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05));
215
229
  }
216
230
 
217
- // Return WCAG2.1 relative luminance
231
+ // Return WCAG2.2 relative luminance
218
232
  // See https://www.w3.org/TR/WCAG/#dfn-relative-luminance
219
233
  // See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio
220
234
  @function luminance($color) {
@@ -407,8 +421,8 @@ $colors: (
407
421
  ) !default;
408
422
  // scss-docs-end colors-map
409
423
 
410
- // The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.
411
- // See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast
424
+ // The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.2 are 3, 4.5 and 7.
425
+ // See https://www.w3.org/TR/WCAG/#contrast-minimum
412
426
  $min-contrast-ratio: 4.5 !default;
413
427
 
414
428
  // Customize the light and dark text colors for use in our color contrast function.
@@ -1431,7 +1445,7 @@ $form-feedback-valid-color: $success !default;
1431
1445
  $form-feedback-invalid-color: $danger !default;
1432
1446
 
1433
1447
  $form-feedback-icon-valid-color: $form-feedback-valid-color !default;
1434
- $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>") !default;
1448
+ $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/></svg>") !default;
1435
1449
  $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
1436
1450
  $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
1437
1451
  // scss-docs-end form-feedback-variables
@@ -1642,7 +1656,7 @@ $pagination-color: var(--#{$prefix}link-color) !default;
1642
1656
  $pagination-bg: var(--#{$prefix}body-bg) !default;
1643
1657
  $pagination-border-radius: var(--#{$prefix}border-radius) !default;
1644
1658
  $pagination-border-width: var(--#{$prefix}border-width) !default;
1645
- $pagination-margin-start: calc(#{$pagination-border-width} * -1) !default; // stylelint-disable-line function-disallowed-list
1659
+ $pagination-margin-start: calc(-1 * #{$pagination-border-width}) !default; // stylelint-disable-line function-disallowed-list
1646
1660
  $pagination-border-color: var(--#{$prefix}border-color) !default;
1647
1661
 
1648
1662
  $pagination-focus-color: var(--#{$prefix}link-hover-color) !default;
@@ -1734,8 +1748,8 @@ $accordion-icon-active-color: $primary-text-emphasis !default;
1734
1748
  $accordion-icon-transition: transform .2s ease-in-out !default;
1735
1749
  $accordion-icon-transform: rotate(-180deg) !default;
1736
1750
 
1737
- $accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
1738
- $accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
1751
+ $accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='m2 5 6 6 6-6'/></svg>") !default;
1752
+ $accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='m2 5 6 6 6-6'/></svg>") !default;
1739
1753
  // scss-docs-end accordion-variables
1740
1754
 
1741
1755
  // Tooltips
@@ -1847,7 +1861,7 @@ $modal-dialog-margin-y-sm-up: 1.75rem !default;
1847
1861
 
1848
1862
  $modal-title-line-height: $line-height-base !default;
1849
1863
 
1850
- $modal-content-color: null !default;
1864
+ $modal-content-color: var(--#{$prefix}body-color) !default;
1851
1865
  $modal-content-bg: var(--#{$prefix}body-bg) !default;
1852
1866
  $modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;
1853
1867
  $modal-content-border-width: var(--#{$prefix}border-width) !default;
@@ -1992,6 +2006,7 @@ $carousel-control-width: 15% !default;
1992
2006
  $carousel-control-opacity: .5 !default;
1993
2007
  $carousel-control-hover-opacity: .9 !default;
1994
2008
  $carousel-control-transition: opacity .15s ease !default;
2009
+ $carousel-control-icon-filter: null !default;
1995
2010
 
1996
2011
  $carousel-indicator-width: 30px !default;
1997
2012
  $carousel-indicator-height: 3px !default;
@@ -2009,17 +2024,17 @@ $carousel-caption-spacer: 1.25rem !default;
2009
2024
 
2010
2025
  $carousel-control-icon-width: 2rem !default;
2011
2026
 
2012
- $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>") !default;
2013
- $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>") !default;
2027
+ $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/></svg>") !default;
2028
+ $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/></svg>") !default;
2014
2029
 
2015
2030
  $carousel-transition-duration: .6s !default;
2016
2031
  $carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
2017
2032
  // scss-docs-end carousel-variables
2018
2033
 
2019
2034
  // scss-docs-start carousel-dark-variables
2020
- $carousel-dark-indicator-active-bg: $black !default;
2021
- $carousel-dark-caption-color: $black !default;
2022
- $carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;
2035
+ $carousel-dark-indicator-active-bg: $black !default; // Deprecated in v5.3.4
2036
+ $carousel-dark-caption-color: $black !default; // Deprecated in v5.3.4
2037
+ $carousel-dark-control-icon-filter: invert(1) grayscale(100) !default; // Deprecated in v5.3.4
2023
2038
  // scss-docs-end carousel-dark-variables
2024
2039
 
2025
2040
 
@@ -2046,13 +2061,14 @@ $btn-close-height: $btn-close-width !default;
2046
2061
  $btn-close-padding-x: .25em !default;
2047
2062
  $btn-close-padding-y: $btn-close-padding-x !default;
2048
2063
  $btn-close-color: $black !default;
2049
- $btn-close-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>") !default;
2064
+ $btn-close-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/></svg>") !default;
2050
2065
  $btn-close-focus-shadow: $focus-ring-box-shadow !default;
2051
2066
  $btn-close-opacity: .5 !default;
2052
2067
  $btn-close-hover-opacity: .75 !default;
2053
2068
  $btn-close-focus-opacity: 1 !default;
2054
2069
  $btn-close-disabled-opacity: .25 !default;
2055
- $btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;
2070
+ $btn-close-filter: null !default;
2071
+ $btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default; // Deprecated in v5.3.4
2056
2072
  // scss-docs-end close-variables
2057
2073
 
2058
2074
 
@@ -2172,14 +2188,26 @@ $form-invalid-border-color-dark: $red-300 !default;
2172
2188
  $accordion-icon-color-dark: $primary-text-emphasis-dark !default;
2173
2189
  $accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;
2174
2190
 
2175
- $accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
2176
- $accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
2191
+ $accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
2192
+ $accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
2177
2193
  // scss-docs-end sass-dark-mode-vars
2194
+
2195
+
2196
+ //
2197
+ // Carousel
2198
+ //
2199
+
2200
+ $carousel-indicator-active-bg-dark: $carousel-dark-indicator-active-bg !default;
2201
+ $carousel-caption-color-dark: $carousel-dark-caption-color !default;
2202
+ $carousel-control-icon-filter-dark: $carousel-dark-control-icon-filter !default;
2203
+
2204
+ //
2205
+ // Close button
2206
+ //
2207
+
2208
+ $btn-close-filter-dark: $btn-close-white-filter !default;
2178
2209
  // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3
2179
2210
 
2180
- // Main color theme. E.g. used for background for body and sidebar.
2181
- $theme: $primary !default;
2182
-
2183
2211
  $theme-colors: () !default;
2184
2212
  // stylelint-disable-next-line scss/dollar-variable-default
2185
2213
  $theme-colors: map-merge(
@@ -2206,7 +2234,8 @@ $shimmering: 0.8 !default;
2206
2234
  $scrollbar-thumb-color: white !default;
2207
2235
 
2208
2236
  // Thumb color of scrollbar as RGB (like `255, 255, 255`).
2209
- $scrollbar-thumb-color-rgb: red($scrollbar-thumb-color), green($scrollbar-thumb-color), blue($scrollbar-thumb-color) !default;
2237
+ $scrollbar-thumb-color-rgb:
2238
+ red($scrollbar-thumb-color), green($scrollbar-thumb-color), blue($scrollbar-thumb-color) !default;
2210
2239
 
2211
2240
  // Default size for many components, like sidebar menu items.
2212
2241
  $normal-size: calc(
@@ -2714,8 +2743,8 @@ $sidebar-expanded-breakpoint: 1400px !default;
2714
2743
 
2715
2744
  @mixin bsBanner($file) {
2716
2745
  /*!
2717
- * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)
2718
- * Copyright 2011-2024 The Bootstrap Authors
2746
+ * Bootstrap #{$file} v5.3.5 (https://getbootstrap.com/)
2747
+ * Copyright 2011-2025 The Bootstrap Authors
2719
2748
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2720
2749
  */
2721
2750
  }
@@ -3479,7 +3508,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height
3479
3508
  // Use to only display content when it's focused, or one of its child elements is focused
3480
3509
  // (i.e. when focus is within the element/container that the class was applied to)
3481
3510
  //
3482
- // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
3511
+ // Useful for "Skip to main content" links; see https://www.w3.org/WAI/WCAG22/Techniques/general/G1.html
3483
3512
 
3484
3513
  @mixin visually-hidden-focusable() {
3485
3514
  &:not(:focus):not(:focus-within) {
@@ -4253,7 +4282,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height
4253
4282
  @include media-breakpoint-up($breakpoint, $breakpoints) {
4254
4283
  // Provide basic `.col-{bp}` classes for equal-width flexbox columns
4255
4284
  .col#{$infix} {
4256
- flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
4285
+ flex: 1 0 0;
4257
4286
  }
4258
4287
 
4259
4288
  .row-cols#{$infix}-auto > * {
@@ -5830,9 +5859,9 @@ legend {
5830
5859
  width: 100%;
5831
5860
  padding: 0;
5832
5861
  margin-bottom: $legend-margin-bottom;
5833
- @include font-size($legend-font-size);
5834
5862
  font-weight: $legend-font-weight;
5835
5863
  line-height: inherit;
5864
+ @include font-size($legend-font-size);
5836
5865
 
5837
5866
  + * {
5838
5867
  clear: left; // 2
@@ -5977,11 +6006,11 @@ progress {
5977
6006
  // Type display classes
5978
6007
  @each $display, $font-size in $display-font-sizes {
5979
6008
  .display-#{$display} {
5980
- @include font-size($font-size);
5981
6009
  font-family: $display-font-family;
5982
6010
  font-style: $display-font-style;
5983
6011
  font-weight: $display-font-weight;
5984
6012
  line-height: $display-line-height;
6013
+ @include font-size($font-size);
5985
6014
  }
5986
6015
  }
5987
6016
 
@@ -6988,9 +7017,11 @@ textarea {
6988
7017
  top: 0;
6989
7018
  left: 0;
6990
7019
  z-index: 2;
7020
+ max-width: 100%;
6991
7021
  height: 100%; // allow textareas
6992
7022
  padding: $form-floating-padding-y $form-floating-padding-x;
6993
7023
  overflow: hidden;
7024
+ color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});
6994
7025
  text-align: start;
6995
7026
  text-overflow: ellipsis;
6996
7027
  white-space: nowrap;
@@ -7023,6 +7054,7 @@ textarea {
7023
7054
  > .form-select {
7024
7055
  padding-top: $form-floating-input-padding-t;
7025
7056
  padding-bottom: $form-floating-input-padding-b;
7057
+ padding-left: $form-floating-padding-x;
7026
7058
  }
7027
7059
 
7028
7060
  > .form-control:focus,
@@ -7030,27 +7062,30 @@ textarea {
7030
7062
  > .form-control-plaintext,
7031
7063
  > .form-select {
7032
7064
  ~ label {
7033
- color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});
7034
7065
  transform: $form-floating-label-transform;
7035
-
7036
- &::after {
7037
- position: absolute;
7038
- inset: $form-floating-padding-y ($form-floating-padding-x * .5);
7039
- z-index: -1;
7040
- height: $form-floating-label-height;
7041
- content: "";
7042
- background-color: $input-bg;
7043
- @include border-radius($input-border-radius);
7044
- }
7045
7066
  }
7046
7067
  }
7047
7068
  // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
7048
7069
  > .form-control:-webkit-autofill {
7049
7070
  ~ label {
7050
- color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});
7051
7071
  transform: $form-floating-label-transform;
7052
7072
  }
7053
7073
  }
7074
+ > textarea:focus,
7075
+ > textarea:not(:placeholder-shown) {
7076
+ ~ label::after {
7077
+ position: absolute;
7078
+ inset: $form-floating-padding-y ($form-floating-padding-x * .5);
7079
+ z-index: -1;
7080
+ height: $form-floating-label-height;
7081
+ content: "";
7082
+ background-color: $input-bg;
7083
+ @include border-radius($input-border-radius);
7084
+ }
7085
+ }
7086
+ > textarea:disabled ~ label::after {
7087
+ background-color: $input-disabled-bg;
7088
+ }
7054
7089
 
7055
7090
  > .form-control-plaintext {
7056
7091
  ~ label {
@@ -7061,10 +7096,6 @@ textarea {
7061
7096
  > :disabled ~ label,
7062
7097
  > .form-control:disabled ~ label { // Required for `.form-control`s because of specificity
7063
7098
  color: $form-floating-label-disabled-color;
7064
-
7065
- &::after {
7066
- background-color: $input-disabled-bg;
7067
- }
7068
7099
  }
7069
7100
  }
7070
7101
 
@@ -7191,7 +7222,7 @@ textarea {
7191
7222
  }
7192
7223
 
7193
7224
  > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {
7194
- margin-left: calc(#{$input-border-width} * -1); // stylelint-disable-line function-disallowed-list
7225
+ margin-left: calc(-1 * #{$input-border-width}); // stylelint-disable-line function-disallowed-list
7195
7226
  @include border-start-radius(0);
7196
7227
  }
7197
7228
 
@@ -7752,7 +7783,7 @@ textarea {
7752
7783
  // Prevent double borders when buttons are next to each other
7753
7784
  > :not(.btn-check:first-child) + .btn,
7754
7785
  > .btn-group:not(:first-child) {
7755
- margin-left: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list
7786
+ margin-left: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list
7756
7787
  }
7757
7788
 
7758
7789
  // Reset rounded corners
@@ -7839,7 +7870,7 @@ textarea {
7839
7870
 
7840
7871
  > .btn:not(:first-child),
7841
7872
  > .btn-group:not(:first-child) {
7842
- margin-top: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list
7873
+ margin-top: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list
7843
7874
  }
7844
7875
 
7845
7876
  // Reset rounded corners
@@ -7848,7 +7879,12 @@ textarea {
7848
7879
  @include border-bottom-radius(0);
7849
7880
  }
7850
7881
 
7851
- > .btn ~ .btn,
7882
+ // The top radius should be 0 if the button is:
7883
+ // - the "third or more" child
7884
+ // - the second child and the previous element isn't `.btn-check` (making it the first child visually)
7885
+ // - part of a btn-group which isn't the first child
7886
+ > .btn:nth-child(n + 3),
7887
+ > :not(.btn-check) + .btn,
7852
7888
  > .btn-group:not(:first-child) > .btn {
7853
7889
  @include border-top-radius(0);
7854
7890
  }
@@ -8025,8 +8061,8 @@ textarea {
8025
8061
  .nav-justified {
8026
8062
  > .nav-link,
8027
8063
  .nav-item {
8028
- flex-basis: 0;
8029
8064
  flex-grow: 1;
8065
+ flex-basis: 0;
8030
8066
  text-align: center;
8031
8067
  }
8032
8068
  }
@@ -8193,8 +8229,8 @@ textarea {
8193
8229
  // the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
8194
8230
  // on the `.navbar` parent.
8195
8231
  .navbar-collapse {
8196
- flex-basis: 100%;
8197
8232
  flex-grow: 1;
8233
+ flex-basis: 100%;
8198
8234
  // For always expanded or extra full navbars, ensure content aligns itself
8199
8235
  // properly vertically. Can be easily overridden with flex utilities.
8200
8236
  align-items: center;
@@ -8537,8 +8573,7 @@ textarea {
8537
8573
  // The child selector allows nested `.card` within `.card-group`
8538
8574
  // to display properly.
8539
8575
  > .card {
8540
- // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
8541
- flex: 1 0 0%;
8576
+ flex: 1 0 0;
8542
8577
  margin-bottom: 0;
8543
8578
 
8544
8579
  + .card {
@@ -8718,17 +8753,12 @@ textarea {
8718
8753
  &:last-child { border-bottom: 0; }
8719
8754
 
8720
8755
  // stylelint-disable selector-max-class
8721
- > .accordion-header .accordion-button {
8722
- &,
8723
- &.collapsed {
8724
- @include border-radius(0);
8725
- }
8726
- }
8727
- // stylelint-enable selector-max-class
8728
-
8729
- > .accordion-collapse {
8756
+ > .accordion-collapse,
8757
+ > .accordion-header .accordion-button,
8758
+ > .accordion-header .accordion-button.collapsed {
8730
8759
  @include border-radius(0);
8731
8760
  }
8761
+ // stylelint-enable selector-max-class
8732
8762
  }
8733
8763
  }
8734
8764
 
@@ -8859,7 +8889,7 @@ textarea {
8859
8889
  margin-left: $pagination-margin-start;
8860
8890
  }
8861
8891
 
8862
- @if $pagination-margin-start == calc(#{$pagination-border-width} * -1) {
8892
+ @if $pagination-margin-start == calc(-1 * #{$pagination-border-width}) {
8863
8893
  &:first-child {
8864
8894
  .page-link {
8865
8895
  @include border-start-radius(var(--#{$prefix}pagination-border-radius));
@@ -9005,7 +9035,7 @@ textarea {
9005
9035
  // scss-docs-start progress-keyframes
9006
9036
  @if $enable-transitions {
9007
9037
  @keyframes progress-bar-stripes {
9008
- 0% { background-position-x: $progress-height; }
9038
+ 0% { background-position-x: var(--#{$prefix}progress-height); }
9009
9039
  }
9010
9040
  }
9011
9041
  // scss-docs-end progress-keyframes
@@ -9114,31 +9144,6 @@ textarea {
9114
9144
  }
9115
9145
  }
9116
9146
 
9117
- // Interactive list items
9118
- //
9119
- // Use anchor or button elements instead of `li`s or `div`s to create interactive
9120
- // list items. Includes an extra `.active` modifier class for selected items.
9121
-
9122
- .list-group-item-action {
9123
- width: 100%; // For `<button>`s (anchors become 100% by default though)
9124
- color: var(--#{$prefix}list-group-action-color);
9125
- text-align: inherit; // For `<button>`s (anchors inherit)
9126
-
9127
- // Hover state
9128
- &:hover,
9129
- &:focus {
9130
- z-index: 1; // Place hover/focus items above their siblings for proper border styling
9131
- color: var(--#{$prefix}list-group-action-hover-color);
9132
- text-decoration: none;
9133
- background-color: var(--#{$prefix}list-group-action-hover-bg);
9134
- }
9135
-
9136
- &:active {
9137
- color: var(--#{$prefix}list-group-action-active-color);
9138
- background-color: var(--#{$prefix}list-group-action-active-bg);
9139
- }
9140
- }
9141
-
9142
9147
  // Individual list items
9143
9148
  //
9144
9149
  // Use on `li`s or `div`s within the `.list-group` parent.
@@ -9186,6 +9191,33 @@ textarea {
9186
9191
  }
9187
9192
  }
9188
9193
 
9194
+ // Interactive list items
9195
+ //
9196
+ // Use anchor or button elements instead of `li`s or `div`s to create interactive
9197
+ // list items. Includes an extra `.active` modifier class for selected items.
9198
+
9199
+ .list-group-item-action {
9200
+ width: 100%; // For `<button>`s (anchors become 100% by default though)
9201
+ color: var(--#{$prefix}list-group-action-color);
9202
+ text-align: inherit; // For `<button>`s (anchors inherit)
9203
+
9204
+ &:not(.active) {
9205
+ // Hover state
9206
+ &:hover,
9207
+ &:focus {
9208
+ z-index: 1; // Place hover/focus items above their siblings for proper border styling
9209
+ color: var(--#{$prefix}list-group-action-hover-color);
9210
+ text-decoration: none;
9211
+ background-color: var(--#{$prefix}list-group-action-hover-bg);
9212
+ }
9213
+
9214
+ &:active {
9215
+ color: var(--#{$prefix}list-group-action-active-color);
9216
+ background-color: var(--#{$prefix}list-group-action-active-bg);
9217
+ }
9218
+ }
9219
+ }
9220
+
9189
9221
  // Horizontal
9190
9222
  //
9191
9223
  // Change the layout of list group items from vertical (default) to horizontal.
@@ -9281,7 +9313,6 @@ textarea {
9281
9313
  --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};
9282
9314
  --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};
9283
9315
  --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};
9284
- --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};
9285
9316
  // scss-docs-end close-css-vars
9286
9317
 
9287
9318
  box-sizing: content-box;
@@ -9290,6 +9321,7 @@ textarea {
9290
9321
  padding: $btn-close-padding-y $btn-close-padding-x;
9291
9322
  color: var(--#{$prefix}btn-close-color);
9292
9323
  background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
9324
+ filter: var(--#{$prefix}btn-close-filter);
9293
9325
  border: 0; // for button elements
9294
9326
  @include border-radius();
9295
9327
  opacity: var(--#{$prefix}btn-close-opacity);
@@ -9316,18 +9348,21 @@ textarea {
9316
9348
  }
9317
9349
 
9318
9350
  @mixin btn-close-white() {
9319
- filter: var(--#{$prefix}btn-close-white-filter);
9351
+ --#{$prefix}btn-close-filter: #{$btn-close-filter-dark};
9320
9352
  }
9321
9353
 
9322
9354
  .btn-close-white {
9323
9355
  @include btn-close-white();
9324
9356
  }
9325
9357
 
9358
+ :root,
9359
+ [data-bs-theme="light"] {
9360
+ --#{$prefix}btn-close-filter: #{$btn-close-filter};
9361
+ }
9362
+
9326
9363
  @if $enable-dark-mode {
9327
- @include color-mode(dark) {
9328
- .btn-close {
9329
- @include btn-close-white();
9330
- }
9364
+ @include color-mode(dark, true) {
9365
+ @include btn-close-white();
9331
9366
  }
9332
9367
  }
9333
9368
 
@@ -9466,8 +9501,8 @@ textarea {
9466
9501
 
9467
9502
  // When fading in the modal, animate it to slide down
9468
9503
  .modal.fade & {
9469
- @include transition($modal-transition);
9470
9504
  transform: $modal-fade-transform;
9505
+ @include transition($modal-transition);
9471
9506
  }
9472
9507
  .modal.show & {
9473
9508
  transform: $modal-show-transform;
@@ -9539,7 +9574,11 @@ textarea {
9539
9574
 
9540
9575
  .btn-close {
9541
9576
  padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);
9542
- margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;
9577
+ // Split properties to avoid invalid calc() function if value is 0
9578
+ margin-top: calc(-.5 * var(--#{$prefix}modal-header-padding-y));
9579
+ margin-right: calc(-.5 * var(--#{$prefix}modal-header-padding-x));
9580
+ margin-bottom: calc(-.5 * var(--#{$prefix}modal-header-padding-y));
9581
+ margin-left: auto;
9543
9582
  }
9544
9583
  }
9545
9584
 
@@ -10060,6 +10099,7 @@ textarea {
10060
10099
  color: $carousel-control-color;
10061
10100
  text-align: center;
10062
10101
  background: none;
10102
+ filter: var(--#{$prefix}carousel-control-icon-filter);
10063
10103
  border: 0;
10064
10104
  opacity: $carousel-control-opacity;
10065
10105
  @include transition($carousel-control-transition);
@@ -10129,7 +10169,7 @@ textarea {
10129
10169
  margin-left: $carousel-indicator-spacer;
10130
10170
  text-indent: -999px;
10131
10171
  cursor: pointer;
10132
- background-color: $carousel-indicator-active-bg;
10172
+ background-color: var(--#{$prefix}carousel-indicator-active-bg);
10133
10173
  background-clip: padding-box;
10134
10174
  border: 0;
10135
10175
  // Use transparent borders to increase the hit area by 10px on top and bottom.
@@ -10156,43 +10196,32 @@ textarea {
10156
10196
  left: (100% - $carousel-caption-width) * .5;
10157
10197
  padding-top: $carousel-caption-padding-y;
10158
10198
  padding-bottom: $carousel-caption-padding-y;
10159
- color: $carousel-caption-color;
10199
+ color: var(--#{$prefix}carousel-caption-color);
10160
10200
  text-align: center;
10161
10201
  }
10162
10202
 
10163
10203
  // Dark mode carousel
10164
10204
 
10165
10205
  @mixin carousel-dark() {
10166
- .carousel-control-prev-icon,
10167
- .carousel-control-next-icon {
10168
- filter: $carousel-dark-control-icon-filter;
10169
- }
10170
-
10171
- .carousel-indicators [data-bs-target] {
10172
- background-color: $carousel-dark-indicator-active-bg;
10173
- }
10174
-
10175
- .carousel-caption {
10176
- color: $carousel-dark-caption-color;
10177
- }
10206
+ --#{$prefix}carousel-indicator-active-bg: #{$carousel-indicator-active-bg-dark};
10207
+ --#{$prefix}carousel-caption-color: #{$carousel-caption-color-dark};
10208
+ --#{$prefix}carousel-control-icon-filter: #{$carousel-control-icon-filter-dark};
10178
10209
  }
10179
10210
 
10180
10211
  .carousel-dark {
10181
10212
  @include carousel-dark();
10182
10213
  }
10183
10214
 
10215
+ :root,
10216
+ [data-bs-theme="light"] {
10217
+ --#{$prefix}carousel-indicator-active-bg: #{$carousel-indicator-active-bg};
10218
+ --#{$prefix}carousel-caption-color: #{$carousel-caption-color};
10219
+ --#{$prefix}carousel-control-icon-filter: #{$carousel-control-icon-filter};
10220
+ }
10221
+
10184
10222
  @if $enable-dark-mode {
10185
- @include color-mode(dark) {
10186
- @if $color-mode-type == "media-query" {
10187
- .carousel {
10188
- @include carousel-dark();
10189
- }
10190
- } @else {
10191
- .carousel,
10192
- &.carousel {
10193
- @include carousel-dark();
10194
- }
10195
- }
10223
+ @include color-mode(dark, true) {
10224
+ @include carousel-dark();
10196
10225
  }
10197
10226
  }
10198
10227
 
@@ -10411,7 +10440,11 @@ textarea {
10411
10440
 
10412
10441
  .btn-close {
10413
10442
  padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);
10414
- margin: calc(-.5 * var(--#{$prefix}offcanvas-padding-y)) calc(-.5 * var(--#{$prefix}offcanvas-padding-x)) calc(-.5 * var(--#{$prefix}offcanvas-padding-y)) auto;
10443
+ // Split properties to avoid invalid calc() function if value is 0
10444
+ margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));
10445
+ margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));
10446
+ margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));
10447
+ margin-left: auto;
10415
10448
  }
10416
10449
  }
10417
10450
 
@@ -12013,13 +12046,20 @@ input.blue-tab:checked + .blue-tab-content {
12013
12046
  }
12014
12047
 
12015
12048
  dialog.blue-modal {
12049
+ --ani-scale-from: 95%;
12050
+ --ani-scale-to: 100%;
12051
+ --ani-translate-from: 0 0;
12052
+ --ani-translate-to: 0 0;
12053
+
12016
12054
  border: none;
12017
12055
  background: none;
12018
12056
  padding: 0;
12019
12057
  margin: 0;
12020
12058
  max-width: none;
12021
12059
  max-height: none;
12022
- transition: display 0.2s allow-discrete, overlay 0.2s allow-discrete;
12060
+ transition:
12061
+ display 0.2s allow-discrete,
12062
+ overlay 0.2s allow-discrete;
12023
12063
  animation: blue-modal-close 0.2s forwards;
12024
12064
 
12025
12065
  .offcanvas-backdrop {
@@ -12099,8 +12139,9 @@ dialog.blue-modal:has(.offcanvas-start) {
12099
12139
 
12100
12140
  .blue-layout {
12101
12141
  --spacing: 0.25rem;
12102
- --drawer-side-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px,
12103
- rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
12142
+ --drawer-side-shadow:
12143
+ rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px,
12144
+ rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
12104
12145
  --toggler-size: calc(
12105
12146
  var(--bs-btn-border-width, 1px) + var(--bs-btn-padding-y, 0.375rem) +
12106
12147
  (var(--bs-btn-font-size, 1rem) * var(--bs-btn-line-height, 1.5)) + var(--bs-btn-padding-y, 0.375rem) +
@@ -12113,7 +12154,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12113
12154
  --side-width: var(--blue-sidebar-width);
12114
12155
  --toggler-size: var(--blue-menu-item-height);
12115
12156
 
12116
- min-height: 100dvh;
12157
+ height: 100dvh;
12117
12158
  position: relative;
12118
12159
  display: grid;
12119
12160
  grid-template-columns: 0 var(--toggler-size) calc(var(--side-width) - var(--toggler-size)) auto;
@@ -12213,3 +12254,86 @@ dialog.blue-modal:has(.offcanvas-start) {
12213
12254
  }
12214
12255
  }
12215
12256
 
12257
+ // Collapse with details and animated
12258
+ // Right now not part of Blue Web, but could become one
12259
+
12260
+ .blue-collapse {
12261
+ interpolate-size: allow-keywords;
12262
+
12263
+ &:has(summary:focus) {
12264
+ overflow: hidden;
12265
+ }
12266
+
12267
+ summary {
12268
+ list-style: none;
12269
+ }
12270
+
12271
+ summary::-webkit-details-marker {
12272
+ display: none;
12273
+ }
12274
+
12275
+ .blue-collapse-chevron {
12276
+ transition: transform 0.2s;
12277
+ }
12278
+
12279
+ &[open] > summary > .blue-collapse-header > .blue-collapse-chevron,
12280
+ &[open] > summary > .blue-collapse-chevron {
12281
+ --blue-collapse-chevron-rotate: 90deg;
12282
+
12283
+ // If chevron is on the end, rotate has to be -90deg
12284
+ &:is(:last-child) {
12285
+ --blue-collapse-chevron-rotate: -90deg;
12286
+ }
12287
+
12288
+ &:is(:first-child) {
12289
+ --blue-collapse-chevron-rotate: 90deg;
12290
+ }
12291
+
12292
+ transform: rotate(var(--blue-collapse-chevron-rotate));
12293
+ }
12294
+
12295
+ &::details-content {
12296
+ block-size: 0;
12297
+ transition:
12298
+ block-size 0.2s,
12299
+ content-visibility 0.2s;
12300
+ transition-behavior: allow-discrete;
12301
+ }
12302
+
12303
+ &[open]::details-content {
12304
+ block-size: auto;
12305
+ }
12306
+ }
12307
+
12308
+ @media (prefers-reduced-motion) {
12309
+ .blue-collapse .blue-collapse-chevron,
12310
+ .blue-collapse::details-content {
12311
+ transition: none;
12312
+ }
12313
+ }
12314
+
12315
+
12316
+ :root {
12317
+ --bs-font-sans-serif: Inter, #{$font-family-sans-serif};
12318
+ font-feature-settings:
12319
+ "liga" 1,
12320
+ "calt" 1,
12321
+ "cv05" 1,
12322
+ "cv07" 1,
12323
+ "tnum" 1,
12324
+ "zero" 1;
12325
+ }
12326
+ @supports (font-variation-settings: normal) {
12327
+ :root {
12328
+ --bs-font-sans-serif: InterVariable, #{$font-family-sans-serif};
12329
+ }
12330
+ }
12331
+
12332
+ input,
12333
+ button,
12334
+ select,
12335
+ optgroup,
12336
+ textarea {
12337
+ font-feature-settings: inherit;
12338
+ }
12339
+