blue-web 1.11.1 → 1.13.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,24 @@
1
1
  /*!
2
- * Blue Web v1.11.1 (https://bruegmann.github.io/blue-web)
2
+ * Blue Web v1.13.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
+ $theme-dark: hsl(217deg 10% 8%) !default;
9
+ $primary: hsl(217deg 91% 50%) !default;
10
+ $white: #fff !default;
11
+ $gray-100: hsl(217deg 17% 98%) !default;
12
+ $gray-200: hsl(217deg 16% 93%) !default;
13
+ $gray-300: hsl(217deg 14% 89%) !default;
14
+ $gray-400: hsl(217deg 14% 83%) !default;
15
+ $gray-500: hsl(217deg 11% 71%) !default;
16
+ $gray-600: hsl(217deg 7% 46%) !default;
17
+ $gray-700: hsl(217deg 9% 31%) !default;
18
+ $gray-800: hsl(217deg 10% 23%) !default;
19
+ $gray-900: hsl(217deg 11% 15%) !default;
20
+ $black: #000 !default;
21
+
6
22
  $light: #ecedf0 !default;
7
23
 
8
24
  // Components
@@ -26,9 +42,6 @@ $custom-checkbox-indicator-border-radius: $border-radius-sm !default;
26
42
  $link-decoration: none !default;
27
43
  $link-hover-decoration: underline !default;
28
44
 
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
45
  // Tint focus border and shadow in primary color.
33
46
  // In a future Bootstrap release, this might not be necessary anymore.
34
47
  $focus-ring-color: #{rgba(var(--bs-primary-rgb), 25%)} !default;
@@ -2194,731 +2207,6 @@ $carousel-control-icon-filter-dark: $carousel-dark-control-icon-filter !defaul
2194
2207
  $btn-close-filter-dark: $btn-close-white-filter !default;
2195
2208
  // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3
2196
2209
 
2197
- // Main color theme. E.g. used for background for body and sidebar.
2198
- $theme: $primary !default;
2199
-
2200
- $theme-colors: () !default;
2201
- // stylelint-disable-next-line scss/dollar-variable-default
2202
- $theme-colors: map-merge(
2203
- (
2204
- "theme": $theme,
2205
- "white": white,
2206
- "black": #212529
2207
- ),
2208
- $theme-colors
2209
- );
2210
-
2211
- // For Bootstrap 5.1 this needs to be set. Otherwise we couldn't use .bg-* and .text-* utils with our custom $theme
2212
- // Since Bootstrap 5.2 it's no longer required, so it's commented out. If everything works fine, this can be removed for
2213
- // future releases.
2214
- // $theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value");
2215
- // $utilities-colors: map-merge($utilities-colors, $theme-colors-rgb);
2216
- // $utilities-text-colors: map-merge($utilities-text-colors, map-loop($utilities-colors, rgba-css-var, "$key", "text"));
2217
- // $utilities-bg-colors: map-merge($utilities-bg-colors, map-loop($utilities-colors, rgba-css-var, "$key", "bg"));
2218
-
2219
- // Alpha value (RGBA) e.g. for header background.
2220
- $shimmering: 0.8 !default;
2221
-
2222
- // Thumb color of scrollbar.
2223
- $scrollbar-thumb-color: white !default;
2224
-
2225
- // Thumb color of scrollbar as RGB (like `255, 255, 255`).
2226
- $scrollbar-thumb-color-rgb: red($scrollbar-thumb-color), green($scrollbar-thumb-color), blue($scrollbar-thumb-color) !default;
2227
-
2228
- // Default size for many components, like sidebar menu items.
2229
- $normal-size: calc(
2230
- var(--bs-btn-border-width, 1px) + var(--bs-btn-padding-y, 0.375rem) +
2231
- (var(--bs-btn-font-size, 1rem) * var(--bs-btn-line-height, 1.5)) + var(--bs-btn-padding-y, 0.375rem) +
2232
- var(--bs-btn-border-width, 1px)
2233
- ) !default;
2234
-
2235
- // Height of actions menu when it is expanded, like on mobile devices.
2236
- $actions-height: 7.5rem !default;
2237
-
2238
- // Background color of menu toggle button.
2239
- $bla-button-bg-normal: rgba(0, 0, 0, 0.1) !default;
2240
-
2241
- // Background color of menu toggle button on hover state.
2242
- $bla-button-bg-hover: rgba(white, 0.25) !default;
2243
-
2244
- // Font size for sidebar menu items.
2245
- $bla-btn-font-size: 1em !default;
2246
-
2247
- // Padding for action menu items.
2248
- $bla-header-nav-padding: 0.75rem !default;
2249
-
2250
- // Width of the sidebar.
2251
- $bla-sidebar-width: 16.563rem !default;
2252
-
2253
- // Background of sidebar.
2254
- $sidebar-bg: $theme !default;
2255
-
2256
- // Background of sidebar when it's opened (on mobile devices).
2257
- $sidebar-open-bg: darken($sidebar-bg, 30%) !default;
2258
-
2259
- // Background of sidebar menu dropdown menus
2260
- $sidebar-deep-bg: darken($sidebar-bg, 4%) !default;
2261
-
2262
- // Text color of sidebar.
2263
- $sidebar-color: #fff !default;
2264
-
2265
- // Color of indicator for active sidebar item.
2266
- $sidebar-indicator-color: $sidebar-color !default;
2267
-
2268
- // Background of search control in sidebar.
2269
- $sidebar-search-bg: $input-bg !default;
2270
-
2271
- // Background of the body element
2272
- $app-bg: $sidebar-bg !default;
2273
-
2274
- // Text color of header elements
2275
- $header-color: #fff !default;
2276
-
2277
- // Background color of Header
2278
- $header-bg: $theme !default;
2279
-
2280
- // Background color of Header as RGB (like `255, 255, 255`).
2281
- $header-bg-rgb: red($header-bg), green($header-bg), blue($header-bg) !default;
2282
-
2283
- // Background of header action menu dropdown menus
2284
- $header-deep-bg: darken($header-bg, 4%) !default;
2285
-
2286
- // Background color, when hovering action menu item.
2287
- $actions-control-bg-hover: $bla-button-bg-hover !default;
2288
-
2289
- // Width and height of the scrollbar indicators
2290
- $scrollbar-size: 10px;
2291
-
2292
- // Shrink sidebar on smaller screens
2293
- $sidebar-shrink: true !default;
2294
-
2295
- // Breakpoint for sidebar shrink
2296
- $sidebar-shrink-breakpoint: 600px !default;
2297
-
2298
- // Breakpoint for sidebar fully expanded
2299
- $sidebar-expanded-breakpoint: 1400px !default;
2300
-
2301
- :root {
2302
- --blue-scrollbar-thumb-color-rgb: #{$scrollbar-thumb-color-rgb};
2303
- --blue-scrollbar-size: #{$scrollbar-size};
2304
-
2305
- --blue-sidebar-width: #{$bla-sidebar-width};
2306
- --blue-sidebar-color: #{$sidebar-color};
2307
- --blue-theme: var(--theme, #{$theme});
2308
- --blue-shimmering: 0.9;
2309
-
2310
- --blue-app-bg: #{$app-bg};
2311
-
2312
- --blue-sidebar-bg: #{$sidebar-bg};
2313
- --blue-sidebar-depth-1-bg: #{darken($sidebar-bg, 4%)};
2314
- --blue-sidebar-depth-2-bg: #{darken(darken($sidebar-bg, 4%), 4%)};
2315
- --blue-sidebar-depth-3-bg: #{darken(darken($sidebar-bg, 4%), 8%)};
2316
- --blue-sidebar-depth-4-bg: #{darken(darken($sidebar-bg, 4%), 12%)};
2317
- --blue-sidebar-depth-5-bg: #{darken(darken($sidebar-bg, 4%), 16%)};
2318
- --blue-sidebar-depth-6-bg: #{darken(darken($sidebar-bg, 4%), 20%)};
2319
-
2320
- --blue-header-bg: #{$header-bg};
2321
- --blue-header-bg-rgb: #{$header-bg-rgb};
2322
- --blue-header-depth-1-bg: #{darken($header-bg, 4%)};
2323
- --blue-header-depth-2-bg: #{darken(darken($header-bg, 4%), 4%)};
2324
- --blue-header-depth-3-bg: #{darken(darken($header-bg, 4%), 8%)};
2325
- --blue-header-depth-4-bg: #{darken(darken($header-bg, 4%), 12%)};
2326
- --blue-header-depth-5-bg: #{darken(darken($header-bg, 4%), 16%)};
2327
- --blue-header-depth-6-bg: #{darken(darken($header-bg, 4%), 20%)};
2328
-
2329
- --blue-header-color: #{$header-color};
2330
- --blue-action-link-bg-color: var(--blue-theme);
2331
- --blue-menu-item-indicator-bg: #{$sidebar-indicator-color};
2332
- --blue-menu-item-height: #{$normal-size};
2333
- }
2334
-
2335
-
2336
- @mixin slide-transition() {
2337
- $slide-transition: width 0.5s;
2338
- transition: $slide-transition;
2339
-
2340
- @media (prefers-reduced-motion) {
2341
- transition: none;
2342
- }
2343
-
2344
- @media (prefers-reduced-motion) {
2345
- transition: none;
2346
- }
2347
- }
2348
-
2349
- @mixin header-bg() {
2350
- background-image: linear-gradient(
2351
- var(--blue-header-bg, $header-bg),
2352
- rgba(var(--blue-header-bg-rgb, var(--bs-theme-rgb)), var(--blue-shimmering, $shimmering))
2353
- );
2354
- backdrop-filter: blur(3px) saturate(125%);
2355
- }
2356
-
2357
- @mixin blue-menu-item-indicator() {
2358
- content: "";
2359
- position: absolute;
2360
- top: 0.625rem;
2361
- bottom: 0.625rem;
2362
- left: 0.125rem;
2363
- right: initial;
2364
- width: 0.25rem;
2365
- height: auto;
2366
- background-color: var(--blue-menu-item-indicator-bg);
2367
- border-radius: 1rem;
2368
- animation: blue-menu-item-indicator-in-from-side 0.2s ease-in-out;
2369
-
2370
- @media (prefers-reduced-motion) {
2371
- animation-duration: 0s;
2372
- }
2373
- }
2374
-
2375
- @mixin blue-menu-item-indicator-horizontal() {
2376
- top: initial;
2377
- bottom: 0.125rem;
2378
- left: 0.625rem;
2379
- right: 0.625rem;
2380
- width: auto;
2381
- height: 0.25rem;
2382
- animation: blue-menu-item-indicator-in-from-below 0.2s ease-in-out;
2383
-
2384
- @media (prefers-reduced-motion) {
2385
- animation-duration: 0s;
2386
- }
2387
- }
2388
-
2389
- @mixin blue-menu-item-dropdown-for-shrunk-sidebar() {
2390
- & > .blue-menu-item-wrapper {
2391
- display: block;
2392
- position: relative;
2393
-
2394
- &:not(:has(.blue-menu-item-dropdown)) > .blue-menu-item:hover {
2395
- .blue-menu-item-label {
2396
- &::before,
2397
- & {
2398
- animation: tips-horz 150ms cubic-bezier(0.5, 0, 0.6, 1.3) 1ms forwards;
2399
-
2400
- @media (prefers-reduced-motion) {
2401
- animation-duration: 0s;
2402
- }
2403
- }
2404
-
2405
- &::before {
2406
- content: "";
2407
- display: block;
2408
- position: absolute;
2409
- border: 5px solid transparent;
2410
- z-index: 1001;
2411
-
2412
- top: 50%;
2413
- border-left-width: 0;
2414
- border-right-color: var(--bs-tooltip-bg, #353539);
2415
- left: calc(0em - 5px);
2416
- transform: translate(0.5em, -50%);
2417
- opacity: 0;
2418
- }
2419
-
2420
- display: block;
2421
- text-transform: none;
2422
- line-height: 1;
2423
- font-size: 0.9em;
2424
- -webkit-user-select: none;
2425
- user-select: none;
2426
- pointer-events: none;
2427
- position: absolute;
2428
- font-family: var(--bs-font-sans-serif);
2429
- text-align: center;
2430
- min-width: 3em;
2431
- max-width: var(--bs-tooltip-max-width, 21em);
2432
- padding: var(--bs-tooltip-padding-y, 1ch) var(--bs-tooltip-padding-x, 1.5ch);
2433
- border-radius: var(--bs-tooltip-border-radius, 0.3em);
2434
- box-shadow: 0 1em 2em -0.5em rgba(0, 0, 0, 0.35);
2435
- background: var(--bs-tooltip-bg, #353539);
2436
- color: var(--bs-tooltip-color, #fff);
2437
- z-index: 1000;
2438
- width: auto;
2439
- top: 50%;
2440
- left: calc(100% + 5px);
2441
- transform: translate(-0.5em, -50%);
2442
- overflow: visible;
2443
- opacity: 0;
2444
- }
2445
- }
2446
-
2447
- & > .blue-menu-item-dropdown,
2448
- & > .blue-outside > .blue-menu-item-dropdown {
2449
- @extend .ms-1;
2450
- @extend .rounded;
2451
- @extend .shadow;
2452
- @extend .blue-menu-item-dropdown-from-start;
2453
- @extend .blue-sidebar-state;
2454
- @extend .open;
2455
-
2456
- position: absolute;
2457
- top: 0;
2458
- width: $bla-sidebar-width;
2459
- left: $normal-size;
2460
- max-height: calc(100vh - (var(--offset-top, 0px) + 1rem));
2461
- overflow-y: auto;
2462
- overflow-x: hidden;
2463
- background-color: var(--blue-sidebar-bg);
2464
-
2465
- &::before {
2466
- content: none;
2467
- }
2468
- }
2469
-
2470
- &:has(.blue-menu-item-dropdown) {
2471
- & > .blue-menu-item {
2472
- @extend .highlighted;
2473
- }
2474
- }
2475
- }
2476
- }
2477
-
2478
- @mixin show-action-menu-again() {
2479
- max-height: initial;
2480
- overflow: initial;
2481
-
2482
- .blue-actions-menu {
2483
- max-width: initial;
2484
- }
2485
- }
2486
-
2487
- @mixin actions($breakpoint) {
2488
- @media (max-width: #{$breakpoint + 1px}) {
2489
- &.open {
2490
- display: block;
2491
- width: auto;
2492
- position: absolute;
2493
- z-index: 1;
2494
- left: unset;
2495
- top: 0.25rem;
2496
- box-shadow: 0.6rem 6rem 6rem rgba(0, 0, 0, 0.3);
2497
- animation: fadeInDown 0.5s;
2498
-
2499
- @media (prefers-reduced-motion) {
2500
- animation-duration: 0s;
2501
- }
2502
-
2503
- border-radius: $border-radius;
2504
-
2505
- @include show-action-menu-again();
2506
-
2507
- .blue-actions-menu-item:not(.blue-actions-menu-toggle) {
2508
- display: flex;
2509
- }
2510
-
2511
- .blue-actions-menu {
2512
- flex-direction: column;
2513
- .blue-menu-item-dropdown {
2514
- --blue-sidebar-bg: #{darken($theme, 34%)};
2515
- }
2516
- }
2517
- }
2518
-
2519
- .blue-actions-menu-item:not(.blue-actions-menu-toggle) {
2520
- display: none;
2521
- }
2522
- }
2523
-
2524
- @media (min-width: $breakpoint) {
2525
- @include show-action-menu-again();
2526
-
2527
- .blue-actions-menu .blue-actions-label {
2528
- display: inline;
2529
- }
2530
-
2531
- .blue-actions-menu-toggle {
2532
- display: none;
2533
- }
2534
-
2535
- .blue-actions-menu > .blue-menu-item-wrapper > .blue-menu-item-dropdown,
2536
- .blue-actions-menu > .blue-menu-item-wrapper > * > .blue-menu-item-dropdown {
2537
- position: absolute;
2538
- right: 0;
2539
- }
2540
- }
2541
- }
2542
-
2543
- @mixin switch($width: 35px, $height: 20px, $padding: 3px, $color: $body-color, $color-active: $success) {
2544
- $slider-size: $height - ($padding * 2);
2545
-
2546
- & {
2547
- position: relative;
2548
- display: inline-block;
2549
- width: $width;
2550
- height: $height;
2551
-
2552
- input {
2553
- display: none;
2554
- }
2555
-
2556
- &.disabled {
2557
- opacity: 0.8;
2558
- }
2559
-
2560
- &:not(.disabled) {
2561
- .slider {
2562
- cursor: pointer;
2563
- }
2564
- }
2565
-
2566
- .slider {
2567
- position: absolute;
2568
- top: 0;
2569
- left: 0;
2570
- right: 0;
2571
- bottom: 0;
2572
- background-color: $input-group-addon-bg;
2573
- transition: 0.4s;
2574
-
2575
- @media (prefers-reduced-motion) {
2576
- transition: none;
2577
- }
2578
-
2579
- box-shadow: inset 0 0 0 1px rgba($color, 0.5);
2580
-
2581
- &::before {
2582
- content: "";
2583
- position: absolute;
2584
- height: $slider-size;
2585
- width: $slider-size;
2586
- left: $padding;
2587
- bottom: $padding;
2588
- background-color: $color;
2589
- transition: 0.4s;
2590
-
2591
- @media (prefers-reduced-motion) {
2592
- transition: none;
2593
- }
2594
- }
2595
-
2596
- &::after {
2597
- content: attr(data-label);
2598
- position: absolute;
2599
- top: 50%;
2600
- left: 50%;
2601
- transform: translate(-50%, -50%);
2602
- margin-left: ($slider-size * 0.5);
2603
- transition: margin-left 0.4s;
2604
-
2605
- @media (prefers-reduced-motion) {
2606
- transition: none;
2607
- }
2608
-
2609
- color: $color;
2610
- }
2611
- }
2612
-
2613
- input:checked {
2614
- & + .slider {
2615
- background-color: $color-active;
2616
- box-shadow: inset 0 0 12px rgba(255, 255, 255, 0.3);
2617
-
2618
- &::before {
2619
- transform: translateX($width - $slider-size - ($padding * 2));
2620
- background-color: white;
2621
- }
2622
-
2623
- &::after {
2624
- color: white;
2625
- margin-left: ($slider-size * 0.5) * -1;
2626
- }
2627
- }
2628
- }
2629
- input:focus + .slider {
2630
- box-shadow: 0 0 1px $color-active;
2631
- }
2632
- }
2633
- }
2634
-
2635
- @mixin customProperty($name, $value) {
2636
- // fallback for older browser who do not support custom properties / css variables
2637
- #{$name}: #{$value};
2638
-
2639
- // create a css variable (this might override the variable on any of the ancestor elements)
2640
- --#{$name}: #{$value};
2641
-
2642
- // use the css variable on the property
2643
- #{$name}: var(--#{$name}, #{$value});
2644
- }
2645
-
2646
- @mixin scroll-shadow($bg, $light-base: white) {
2647
- background: linear-gradient($bg 30%, rgba($light-base, 0)),
2648
- linear-gradient(rgba($light-base, 0) 10px, $bg 70%) bottom,
2649
- radial-gradient(at top, rgba(0, 0, 0, 0.2), transparent 70%),
2650
- radial-gradient(at bottom, rgba(0, 0, 0, 0.2), transparent 70%) bottom;
2651
- background-repeat: no-repeat;
2652
- background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;
2653
- background-attachment: local, local, scroll, scroll;
2654
- }
2655
-
2656
-
2657
- @keyframes fade-in {
2658
- from {
2659
- opacity: 0;
2660
- }
2661
- to {
2662
- opacity: 1;
2663
- }
2664
- }
2665
-
2666
- @keyframes blAppearUp {
2667
- from {
2668
- margin-top: 2.5rem;
2669
- }
2670
- to {
2671
- margin-top: 0;
2672
- }
2673
- }
2674
-
2675
- @keyframes blue-menu-item-dropdown {
2676
- from {
2677
- transform: translateY(-50%);
2678
- opacity: 0;
2679
- }
2680
- }
2681
-
2682
- @keyframes enabledBlueAppPage {
2683
- from {
2684
- transform: scale(0.98);
2685
- opacity: 0;
2686
- }
2687
- to {
2688
- opacity: 1;
2689
- }
2690
- }
2691
-
2692
- @keyframes fadeInDown {
2693
- from {
2694
- opacity: 0;
2695
- transform: translate3d(0, -100%, 0);
2696
- }
2697
-
2698
- to {
2699
- opacity: 1;
2700
- transform: none;
2701
- }
2702
- }
2703
-
2704
- @keyframes alert-in {
2705
- from {
2706
- transform: scale(0, 0);
2707
- opacity: 0.2;
2708
- transition: 0s;
2709
- }
2710
- }
2711
-
2712
- @keyframes circlebounce {
2713
- 0%,
2714
- 100% {
2715
- transform: scale(0);
2716
- }
2717
- 50% {
2718
- transform: scale(1);
2719
- }
2720
- }
2721
-
2722
- @keyframes scrolling {
2723
- from {
2724
- transform: translateX(-100%);
2725
- }
2726
- to {
2727
- transform: translateX(100%);
2728
- }
2729
- }
2730
-
2731
-
2732
- @mixin bsBanner($file) {
2733
- /*!
2734
- * Bootstrap #{$file} v5.3.5 (https://getbootstrap.com/)
2735
- * Copyright 2011-2025 The Bootstrap Authors
2736
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2737
- */
2738
- }
2739
-
2740
- @include bsBanner("");
2741
-
2742
- // scss-docs-start import-stack
2743
- // Configuration
2744
-
2745
-
2746
-
2747
- // Re-assigned maps
2748
- //
2749
- // Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.
2750
-
2751
- // scss-docs-start theme-colors-rgb
2752
- $theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
2753
- // scss-docs-end theme-colors-rgb
2754
-
2755
- // scss-docs-start theme-text-map
2756
- $theme-colors-text: (
2757
- "primary": $primary-text-emphasis,
2758
- "secondary": $secondary-text-emphasis,
2759
- "success": $success-text-emphasis,
2760
- "info": $info-text-emphasis,
2761
- "warning": $warning-text-emphasis,
2762
- "danger": $danger-text-emphasis,
2763
- "light": $light-text-emphasis,
2764
- "dark": $dark-text-emphasis,
2765
- ) !default;
2766
- // scss-docs-end theme-text-map
2767
-
2768
- // scss-docs-start theme-bg-subtle-map
2769
- $theme-colors-bg-subtle: (
2770
- "primary": $primary-bg-subtle,
2771
- "secondary": $secondary-bg-subtle,
2772
- "success": $success-bg-subtle,
2773
- "info": $info-bg-subtle,
2774
- "warning": $warning-bg-subtle,
2775
- "danger": $danger-bg-subtle,
2776
- "light": $light-bg-subtle,
2777
- "dark": $dark-bg-subtle,
2778
- ) !default;
2779
- // scss-docs-end theme-bg-subtle-map
2780
-
2781
- // scss-docs-start theme-border-subtle-map
2782
- $theme-colors-border-subtle: (
2783
- "primary": $primary-border-subtle,
2784
- "secondary": $secondary-border-subtle,
2785
- "success": $success-border-subtle,
2786
- "info": $info-border-subtle,
2787
- "warning": $warning-border-subtle,
2788
- "danger": $danger-border-subtle,
2789
- "light": $light-border-subtle,
2790
- "dark": $dark-border-subtle,
2791
- ) !default;
2792
- // scss-docs-end theme-border-subtle-map
2793
-
2794
- $theme-colors-text-dark: null !default;
2795
- $theme-colors-bg-subtle-dark: null !default;
2796
- $theme-colors-border-subtle-dark: null !default;
2797
-
2798
- @if $enable-dark-mode {
2799
- // scss-docs-start theme-text-dark-map
2800
- $theme-colors-text-dark: (
2801
- "primary": $primary-text-emphasis-dark,
2802
- "secondary": $secondary-text-emphasis-dark,
2803
- "success": $success-text-emphasis-dark,
2804
- "info": $info-text-emphasis-dark,
2805
- "warning": $warning-text-emphasis-dark,
2806
- "danger": $danger-text-emphasis-dark,
2807
- "light": $light-text-emphasis-dark,
2808
- "dark": $dark-text-emphasis-dark,
2809
- ) !default;
2810
- // scss-docs-end theme-text-dark-map
2811
-
2812
- // scss-docs-start theme-bg-subtle-dark-map
2813
- $theme-colors-bg-subtle-dark: (
2814
- "primary": $primary-bg-subtle-dark,
2815
- "secondary": $secondary-bg-subtle-dark,
2816
- "success": $success-bg-subtle-dark,
2817
- "info": $info-bg-subtle-dark,
2818
- "warning": $warning-bg-subtle-dark,
2819
- "danger": $danger-bg-subtle-dark,
2820
- "light": $light-bg-subtle-dark,
2821
- "dark": $dark-bg-subtle-dark,
2822
- ) !default;
2823
- // scss-docs-end theme-bg-subtle-dark-map
2824
-
2825
- // scss-docs-start theme-border-subtle-dark-map
2826
- $theme-colors-border-subtle-dark: (
2827
- "primary": $primary-border-subtle-dark,
2828
- "secondary": $secondary-border-subtle-dark,
2829
- "success": $success-border-subtle-dark,
2830
- "info": $info-border-subtle-dark,
2831
- "warning": $warning-border-subtle-dark,
2832
- "danger": $danger-border-subtle-dark,
2833
- "light": $light-border-subtle-dark,
2834
- "dark": $dark-border-subtle-dark,
2835
- ) !default;
2836
- // scss-docs-end theme-border-subtle-dark-map
2837
- }
2838
-
2839
- // Utilities maps
2840
- //
2841
- // Extends the default `$theme-colors` maps to help create our utilities.
2842
-
2843
- // Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
2844
- // scss-docs-start utilities-colors
2845
- $utilities-colors: $theme-colors-rgb !default;
2846
- // scss-docs-end utilities-colors
2847
-
2848
- // scss-docs-start utilities-text-colors
2849
- $utilities-text: map-merge(
2850
- $utilities-colors,
2851
- (
2852
- "black": to-rgb($black),
2853
- "white": to-rgb($white),
2854
- "body": to-rgb($body-color)
2855
- )
2856
- ) !default;
2857
- $utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
2858
-
2859
- $utilities-text-emphasis-colors: (
2860
- "primary-emphasis": var(--#{$prefix}primary-text-emphasis),
2861
- "secondary-emphasis": var(--#{$prefix}secondary-text-emphasis),
2862
- "success-emphasis": var(--#{$prefix}success-text-emphasis),
2863
- "info-emphasis": var(--#{$prefix}info-text-emphasis),
2864
- "warning-emphasis": var(--#{$prefix}warning-text-emphasis),
2865
- "danger-emphasis": var(--#{$prefix}danger-text-emphasis),
2866
- "light-emphasis": var(--#{$prefix}light-text-emphasis),
2867
- "dark-emphasis": var(--#{$prefix}dark-text-emphasis)
2868
- ) !default;
2869
- // scss-docs-end utilities-text-colors
2870
-
2871
- // scss-docs-start utilities-bg-colors
2872
- $utilities-bg: map-merge(
2873
- $utilities-colors,
2874
- (
2875
- "black": to-rgb($black),
2876
- "white": to-rgb($white),
2877
- "body": to-rgb($body-bg)
2878
- )
2879
- ) !default;
2880
- $utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
2881
-
2882
- $utilities-bg-subtle: (
2883
- "primary-subtle": var(--#{$prefix}primary-bg-subtle),
2884
- "secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
2885
- "success-subtle": var(--#{$prefix}success-bg-subtle),
2886
- "info-subtle": var(--#{$prefix}info-bg-subtle),
2887
- "warning-subtle": var(--#{$prefix}warning-bg-subtle),
2888
- "danger-subtle": var(--#{$prefix}danger-bg-subtle),
2889
- "light-subtle": var(--#{$prefix}light-bg-subtle),
2890
- "dark-subtle": var(--#{$prefix}dark-bg-subtle)
2891
- ) !default;
2892
- // scss-docs-end utilities-bg-colors
2893
-
2894
- // scss-docs-start utilities-border-colors
2895
- $utilities-border: map-merge(
2896
- $utilities-colors,
2897
- (
2898
- "black": to-rgb($black),
2899
- "white": to-rgb($white)
2900
- )
2901
- ) !default;
2902
- $utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
2903
-
2904
- $utilities-border-subtle: (
2905
- "primary-subtle": var(--#{$prefix}primary-border-subtle),
2906
- "secondary-subtle": var(--#{$prefix}secondary-border-subtle),
2907
- "success-subtle": var(--#{$prefix}success-border-subtle),
2908
- "info-subtle": var(--#{$prefix}info-border-subtle),
2909
- "warning-subtle": var(--#{$prefix}warning-border-subtle),
2910
- "danger-subtle": var(--#{$prefix}danger-border-subtle),
2911
- "light-subtle": var(--#{$prefix}light-border-subtle),
2912
- "dark-subtle": var(--#{$prefix}dark-border-subtle)
2913
- ) !default;
2914
- // scss-docs-end utilities-border-colors
2915
-
2916
- $utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default;
2917
-
2918
- $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
2919
-
2920
- $gutters: $spacers !default;
2921
-
2922
2210
  // Toggles
2923
2211
  //
2924
2212
  // Used in conjunction with global variables to enable certain theme features.
@@ -4107,247 +3395,963 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height
4107
3395
  background-image: var(--#{$prefix}gradient);
4108
3396
  }
4109
3397
  }
4110
- // scss-docs-end gradient-bg-mixin
3398
+ // scss-docs-end gradient-bg-mixin
3399
+
3400
+ // scss-docs-start gradient-mixins
3401
+ // Horizontal gradient, from left to right
3402
+ //
3403
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
3404
+ @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
3405
+ background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
3406
+ }
3407
+
3408
+ // Vertical gradient, from top to bottom
3409
+ //
3410
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
3411
+ @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {
3412
+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
3413
+ }
3414
+
3415
+ @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
3416
+ background-image: linear-gradient($deg, $start-color, $end-color);
3417
+ }
3418
+
3419
+ @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
3420
+ background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
3421
+ }
3422
+
3423
+ @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
3424
+ background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
3425
+ }
3426
+
3427
+ @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
3428
+ background-image: radial-gradient(circle, $inner-color, $outer-color);
3429
+ }
3430
+
3431
+ @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
3432
+ background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
3433
+ }
3434
+ // scss-docs-end gradient-mixins
3435
+
3436
+ // stylelint-disable property-disallowed-list
3437
+ @mixin transition($transition...) {
3438
+ @if length($transition) == 0 {
3439
+ $transition: $transition-base;
3440
+ }
3441
+
3442
+ @if length($transition) > 1 {
3443
+ @each $value in $transition {
3444
+ @if $value == null or $value == none {
3445
+ @warn "The keyword 'none' or 'null' must be used as a single argument.";
3446
+ }
3447
+ }
3448
+ }
3449
+
3450
+ @if $enable-transitions {
3451
+ @if nth($transition, 1) != null {
3452
+ transition: $transition;
3453
+ }
3454
+
3455
+ @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {
3456
+ @media (prefers-reduced-motion: reduce) {
3457
+ transition: none;
3458
+ }
3459
+ }
3460
+ }
3461
+ }
3462
+
3463
+
3464
+ // Layout
3465
+ // scss-docs-start clearfix
3466
+ @mixin clearfix() {
3467
+ &::after {
3468
+ display: block;
3469
+ clear: both;
3470
+ content: "";
3471
+ }
3472
+ }
3473
+ // scss-docs-end clearfix
3474
+
3475
+ // Container mixins
3476
+
3477
+ @mixin make-container($gutter: $container-padding-x) {
3478
+ --#{$prefix}gutter-x: #{$gutter};
3479
+ --#{$prefix}gutter-y: 0;
3480
+ width: 100%;
3481
+ padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
3482
+ padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
3483
+ margin-right: auto;
3484
+ margin-left: auto;
3485
+ }
3486
+
3487
+ // Grid system
3488
+ //
3489
+ // Generate semantic grid columns with these mixins.
3490
+
3491
+ @mixin make-row($gutter: $grid-gutter-width) {
3492
+ --#{$prefix}gutter-x: #{$gutter};
3493
+ --#{$prefix}gutter-y: 0;
3494
+ display: flex;
3495
+ flex-wrap: wrap;
3496
+ // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed
3497
+ margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list
3498
+ margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list
3499
+ margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list
3500
+ }
3501
+
3502
+ @mixin make-col-ready() {
3503
+ // Add box sizing if only the grid is loaded
3504
+ box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);
3505
+ // Prevent columns from becoming too narrow when at smaller grid tiers by
3506
+ // always setting `width: 100%;`. This works because we set the width
3507
+ // later on to override this initial width.
3508
+ flex-shrink: 0;
3509
+ width: 100%;
3510
+ max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid
3511
+ padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
3512
+ padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
3513
+ margin-top: var(--#{$prefix}gutter-y);
3514
+ }
3515
+
3516
+ @mixin make-col($size: false, $columns: $grid-columns) {
3517
+ @if $size {
3518
+ flex: 0 0 auto;
3519
+ width: percentage(divide($size, $columns));
3520
+
3521
+ } @else {
3522
+ flex: 1 1 0;
3523
+ max-width: 100%;
3524
+ }
3525
+ }
3526
+
3527
+ @mixin make-col-auto() {
3528
+ flex: 0 0 auto;
3529
+ width: auto;
3530
+ }
4111
3531
 
4112
- // scss-docs-start gradient-mixins
4113
- // Horizontal gradient, from left to right
4114
- //
4115
- // Creates two color stops, start and end, by specifying a color and position for each color stop.
4116
- @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
4117
- background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
3532
+ @mixin make-col-offset($size, $columns: $grid-columns) {
3533
+ $num: divide($size, $columns);
3534
+ margin-left: if($num == 0, 0, percentage($num));
4118
3535
  }
4119
3536
 
4120
- // Vertical gradient, from top to bottom
3537
+ // Row columns
4121
3538
  //
4122
- // Creates two color stops, start and end, by specifying a color and position for each color stop.
4123
- @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {
4124
- background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
3539
+ // Specify on a parent element(e.g., .row) to force immediate children into NN
3540
+ // number of columns. Supports wrapping to new lines, but does not do a Masonry
3541
+ // style grid.
3542
+ @mixin row-cols($count) {
3543
+ > * {
3544
+ flex: 0 0 auto;
3545
+ width: percentage(divide(1, $count));
3546
+ }
4125
3547
  }
4126
3548
 
4127
- @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
4128
- background-image: linear-gradient($deg, $start-color, $end-color);
4129
- }
3549
+ // Framework grid generation
3550
+ //
3551
+ // Used only by Bootstrap to generate the correct number of grid classes given
3552
+ // any value of `$grid-columns`.
4130
3553
 
4131
- @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
4132
- background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
4133
- }
3554
+ @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {
3555
+ @each $breakpoint in map-keys($breakpoints) {
3556
+ $infix: breakpoint-infix($breakpoint, $breakpoints);
4134
3557
 
4135
- @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
4136
- background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
4137
- }
3558
+ @include media-breakpoint-up($breakpoint, $breakpoints) {
3559
+ // Provide basic `.col-{bp}` classes for equal-width flexbox columns
3560
+ .col#{$infix} {
3561
+ flex: 1 0 0;
3562
+ }
4138
3563
 
4139
- @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
4140
- background-image: radial-gradient(circle, $inner-color, $outer-color);
4141
- }
3564
+ .row-cols#{$infix}-auto > * {
3565
+ @include make-col-auto();
3566
+ }
4142
3567
 
4143
- @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
4144
- background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
4145
- }
4146
- // scss-docs-end gradient-mixins
3568
+ @if $grid-row-columns > 0 {
3569
+ @for $i from 1 through $grid-row-columns {
3570
+ .row-cols#{$infix}-#{$i} {
3571
+ @include row-cols($i);
3572
+ }
3573
+ }
3574
+ }
4147
3575
 
4148
- // stylelint-disable property-disallowed-list
4149
- @mixin transition($transition...) {
4150
- @if length($transition) == 0 {
4151
- $transition: $transition-base;
4152
- }
3576
+ .col#{$infix}-auto {
3577
+ @include make-col-auto();
3578
+ }
4153
3579
 
4154
- @if length($transition) > 1 {
4155
- @each $value in $transition {
4156
- @if $value == null or $value == none {
4157
- @warn "The keyword 'none' or 'null' must be used as a single argument.";
3580
+ @if $columns > 0 {
3581
+ @for $i from 1 through $columns {
3582
+ .col#{$infix}-#{$i} {
3583
+ @include make-col($i, $columns);
3584
+ }
3585
+ }
3586
+
3587
+ // `$columns - 1` because offsetting by the width of an entire row isn't possible
3588
+ @for $i from 0 through ($columns - 1) {
3589
+ @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0
3590
+ .offset#{$infix}-#{$i} {
3591
+ @include make-col-offset($i, $columns);
3592
+ }
3593
+ }
3594
+ }
4158
3595
  }
4159
- }
4160
- }
4161
3596
 
4162
- @if $enable-transitions {
4163
- @if nth($transition, 1) != null {
4164
- transition: $transition;
4165
- }
3597
+ // Gutters
3598
+ //
3599
+ // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.
3600
+ @each $key, $value in $gutters {
3601
+ .g#{$infix}-#{$key},
3602
+ .gx#{$infix}-#{$key} {
3603
+ --#{$prefix}gutter-x: #{$value};
3604
+ }
4166
3605
 
4167
- @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {
4168
- @media (prefers-reduced-motion: reduce) {
4169
- transition: none;
3606
+ .g#{$infix}-#{$key},
3607
+ .gy#{$infix}-#{$key} {
3608
+ --#{$prefix}gutter-y: #{$value};
3609
+ }
4170
3610
  }
4171
3611
  }
4172
3612
  }
4173
3613
  }
4174
3614
 
3615
+ @mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {
3616
+ @each $breakpoint in map-keys($breakpoints) {
3617
+ $infix: breakpoint-infix($breakpoint, $breakpoints);
3618
+
3619
+ @include media-breakpoint-up($breakpoint, $breakpoints) {
3620
+ @if $columns > 0 {
3621
+ @for $i from 1 through $columns {
3622
+ .g-col#{$infix}-#{$i} {
3623
+ grid-column: auto / span $i;
3624
+ }
3625
+ }
4175
3626
 
4176
- // Layout
4177
- // scss-docs-start clearfix
4178
- @mixin clearfix() {
4179
- &::after {
4180
- display: block;
4181
- clear: both;
4182
- content: "";
3627
+ // Start with `1` because `0` is an invalid value.
3628
+ // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.
3629
+ @for $i from 1 through ($columns - 1) {
3630
+ .g-start#{$infix}-#{$i} {
3631
+ grid-column-start: $i;
3632
+ }
3633
+ }
3634
+ }
3635
+ }
4183
3636
  }
4184
3637
  }
4185
- // scss-docs-end clearfix
4186
-
4187
- // Container mixins
4188
3638
 
4189
- @mixin make-container($gutter: $container-padding-x) {
4190
- --#{$prefix}gutter-x: #{$gutter};
4191
- --#{$prefix}gutter-y: 0;
4192
- width: 100%;
4193
- padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
4194
- padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
4195
- margin-right: auto;
4196
- margin-left: auto;
3639
+
3640
+ $theme-colors: () !default;
3641
+ // stylelint-disable-next-line scss/dollar-variable-default
3642
+ $theme-colors: map-merge(
3643
+ (
3644
+ "theme": $theme
3645
+ ),
3646
+ $theme-colors
3647
+ );
3648
+
3649
+ // Alpha value (RGBA) e.g. for header background.
3650
+ $shimmering: 0.8 !default;
3651
+
3652
+ // Thumb color of scrollbar.
3653
+ $scrollbar-thumb-color: white !default;
3654
+
3655
+ // Thumb color of scrollbar as RGB (like `255, 255, 255`).
3656
+ $scrollbar-thumb-color-rgb:
3657
+ red($scrollbar-thumb-color), green($scrollbar-thumb-color), blue($scrollbar-thumb-color) !default;
3658
+
3659
+ // Default size for many components, like sidebar menu items.
3660
+ $normal-size: calc(
3661
+ var(--bs-btn-border-width, 1px) + var(--bs-btn-padding-y, 0.375rem) +
3662
+ (var(--bs-btn-font-size, 1rem) * var(--bs-btn-line-height, 1.5)) + var(--bs-btn-padding-y, 0.375rem) +
3663
+ var(--bs-btn-border-width, 1px)
3664
+ ) !default;
3665
+
3666
+ // Height of actions menu when it is expanded, like on mobile devices.
3667
+ $actions-height: 7.5rem !default;
3668
+
3669
+ // Background color of menu toggle button.
3670
+ $bla-button-bg-normal: rgba(0, 0, 0, 0.1) !default;
3671
+
3672
+ // Background color of menu toggle button on hover state.
3673
+ $bla-button-bg-hover: rgba(white, 0.25) !default;
3674
+
3675
+ // Font size for sidebar menu items.
3676
+ $bla-btn-font-size: 1em !default;
3677
+
3678
+ // Padding for action menu items.
3679
+ $bla-header-nav-padding: 0.75rem !default;
3680
+
3681
+ // Width of the sidebar.
3682
+ $bla-sidebar-width: 16.563rem !default;
3683
+
3684
+ // Background of sidebar.
3685
+ $sidebar-bg: $theme !default;
3686
+ $sidebar-bg-dark: $theme-dark !default;
3687
+
3688
+ // Background of sidebar when it's opened (on mobile devices).
3689
+ $sidebar-open-bg: darken($sidebar-bg, 30%) !default;
3690
+
3691
+ // Background of sidebar menu dropdown menus
3692
+ $sidebar-deep-bg: darken($sidebar-bg, 4%) !default;
3693
+
3694
+ // Text color of sidebar.
3695
+ $sidebar-color: color-contrast($sidebar-bg, $gray-900) !default;
3696
+ $sidebar-color-dark: color-contrast($sidebar-bg-dark, $gray-900) !default;
3697
+
3698
+ // Color of indicator for active sidebar item.
3699
+ $sidebar-indicator-color: $sidebar-color !default;
3700
+ $sidebar-indicator-color-dark: $sidebar-color-dark !default;
3701
+
3702
+ // Background of search control in sidebar.
3703
+ $sidebar-search-bg: $input-bg !default;
3704
+
3705
+ // Background of the body element
3706
+ $app-bg: $theme !default;
3707
+ $app-bg-dark: $theme-dark !default;
3708
+
3709
+ // Background color of Header
3710
+ $header-bg: $theme !default;
3711
+ $header-bg-dark: $theme-dark !default;
3712
+
3713
+ // Text color of header elements
3714
+ $header-color: color-contrast($header-bg, $gray-900) !default;
3715
+ $header-color-dark: color-contrast($header-bg-dark, $gray-900) !default;
3716
+
3717
+ // Background of header action menu dropdown menus
3718
+ $header-deep-bg: darken($header-bg, 4%) !default;
3719
+
3720
+ // Background color, when hovering action menu item.
3721
+ $actions-control-bg-hover: $bla-button-bg-hover !default;
3722
+
3723
+ // Width and height of the scrollbar indicators
3724
+ $scrollbar-size: 10px;
3725
+
3726
+ // Shrink sidebar on smaller screens
3727
+ $sidebar-shrink: true !default;
3728
+
3729
+ // Breakpoint for sidebar shrink
3730
+ $sidebar-shrink-breakpoint: 600px !default;
3731
+
3732
+ // Breakpoint for sidebar fully expanded
3733
+ $sidebar-expanded-breakpoint: 1400px !default;
3734
+
3735
+ :root {
3736
+ --blue-app-bg: #{$app-bg};
3737
+
3738
+ --blue-scrollbar-thumb-color-rgb: #{$scrollbar-thumb-color-rgb};
3739
+ --blue-scrollbar-size: #{$scrollbar-size};
3740
+
3741
+ --blue-sidebar-width: #{$bla-sidebar-width};
3742
+ --blue-sidebar-color: #{$sidebar-color};
3743
+ --blue-theme: var(--theme, #{$theme});
3744
+ --blue-shimmering: 0.9;
3745
+
3746
+ --blue-sidebar-bg: #{$sidebar-bg};
3747
+ --blue-header-bg: #{$header-bg};
3748
+
3749
+ --blue-header-color: #{$header-color};
3750
+ --blue-action-link-bg-color: var(--blue-theme);
3751
+ --blue-menu-item-indicator-bg: #{$sidebar-indicator-color};
3752
+ --blue-menu-item-height: #{$normal-size};
3753
+ }
3754
+
3755
+ @include color-mode(dark, true) {
3756
+ --blue-app-bg: #{$app-bg-dark};
3757
+
3758
+ --blue-sidebar-color: #{$sidebar-color-dark};
3759
+
3760
+ --blue-sidebar-bg: #{$sidebar-bg-dark};
3761
+ --blue-header-bg: #{$header-bg-dark};
3762
+
3763
+ --blue-header-color: #{$header-color-dark};
3764
+
3765
+ --blue-menu-item-indicator-bg: #{$sidebar-indicator-color-dark};
3766
+ }
3767
+
3768
+
3769
+ @mixin slide-transition() {
3770
+ $slide-transition: width 0.5s;
3771
+ transition: $slide-transition;
3772
+
3773
+ @media (prefers-reduced-motion) {
3774
+ transition: none;
3775
+ }
3776
+
3777
+ @media (prefers-reduced-motion) {
3778
+ transition: none;
3779
+ }
3780
+ }
3781
+
3782
+ @mixin header-bg() {
3783
+ background-image: linear-gradient(
3784
+ var(--blue-header-bg, $header-bg),
3785
+ rgba(var(--blue-header-bg-rgb, var(--bs-theme-rgb)), var(--blue-shimmering, $shimmering))
3786
+ );
3787
+ backdrop-filter: blur(3px) saturate(125%);
3788
+ }
3789
+
3790
+ @mixin blue-menu-item-indicator() {
3791
+ content: "";
3792
+ position: absolute;
3793
+ top: 0.625rem;
3794
+ bottom: 0.625rem;
3795
+ left: 0.125rem;
3796
+ right: initial;
3797
+ width: 0.25rem;
3798
+ height: auto;
3799
+ background-color: var(--blue-menu-item-indicator-bg);
3800
+ border-radius: 1rem;
3801
+ animation: blue-menu-item-indicator-in-from-side 0.2s ease-in-out;
3802
+
3803
+ @media (prefers-reduced-motion) {
3804
+ animation-duration: 0s;
3805
+ }
3806
+ }
3807
+
3808
+ @mixin blue-menu-item-indicator-horizontal() {
3809
+ top: initial;
3810
+ bottom: 0.125rem;
3811
+ left: 0.625rem;
3812
+ right: 0.625rem;
3813
+ width: auto;
3814
+ height: 0.25rem;
3815
+ animation: blue-menu-item-indicator-in-from-below 0.2s ease-in-out;
3816
+
3817
+ @media (prefers-reduced-motion) {
3818
+ animation-duration: 0s;
3819
+ }
3820
+ }
3821
+
3822
+ @mixin blue-menu-item-dropdown-for-shrunk-sidebar() {
3823
+ & > .blue-menu-item-wrapper {
3824
+ display: block;
3825
+ position: relative;
3826
+
3827
+ &:not(:has(.blue-menu-item-dropdown)) > .blue-menu-item:hover {
3828
+ .blue-menu-item-label {
3829
+ &::before,
3830
+ & {
3831
+ animation: tips-horz 150ms cubic-bezier(0.5, 0, 0.6, 1.3) 1ms forwards;
3832
+
3833
+ @media (prefers-reduced-motion) {
3834
+ animation-duration: 0s;
3835
+ }
3836
+ }
3837
+
3838
+ &::before {
3839
+ content: "";
3840
+ display: block;
3841
+ position: absolute;
3842
+ border: 5px solid transparent;
3843
+ z-index: 1001;
3844
+
3845
+ top: 50%;
3846
+ border-left-width: 0;
3847
+ border-right-color: var(--bs-tooltip-bg, #353539);
3848
+ left: calc(0em - 5px);
3849
+ transform: translate(0.5em, -50%);
3850
+ opacity: 0;
3851
+ }
3852
+
3853
+ display: block;
3854
+ text-transform: none;
3855
+ line-height: 1;
3856
+ font-size: 0.9em;
3857
+ -webkit-user-select: none;
3858
+ user-select: none;
3859
+ pointer-events: none;
3860
+ position: absolute;
3861
+ font-family: var(--bs-font-sans-serif);
3862
+ text-align: center;
3863
+ min-width: 3em;
3864
+ max-width: var(--bs-tooltip-max-width, 21em);
3865
+ padding: var(--bs-tooltip-padding-y, 1ch) var(--bs-tooltip-padding-x, 1.5ch);
3866
+ border-radius: var(--bs-tooltip-border-radius, 0.3em);
3867
+ box-shadow: 0 1em 2em -0.5em rgba(0, 0, 0, 0.35);
3868
+ background: var(--bs-tooltip-bg, #353539);
3869
+ color: var(--bs-tooltip-color, #fff);
3870
+ z-index: 1000;
3871
+ width: auto;
3872
+ top: 50%;
3873
+ left: calc(100% + 5px);
3874
+ transform: translate(-0.5em, -50%);
3875
+ overflow: visible;
3876
+ opacity: 0;
3877
+ }
3878
+ }
3879
+
3880
+ & > .blue-menu-item-dropdown,
3881
+ & > .blue-outside > .blue-menu-item-dropdown {
3882
+ @extend .ms-1;
3883
+ @extend .rounded;
3884
+ @extend .shadow;
3885
+ @extend .blue-menu-item-dropdown-from-start;
3886
+ @extend .blue-sidebar-state;
3887
+ @extend .open;
3888
+
3889
+ position: absolute;
3890
+ top: 0;
3891
+ width: $bla-sidebar-width;
3892
+ left: $normal-size;
3893
+ max-height: calc(100vh - (var(--offset-top, 0px) + 1rem));
3894
+ overflow-y: auto;
3895
+ overflow-x: hidden;
3896
+ background-color: var(--blue-sidebar-bg);
3897
+
3898
+ &::before {
3899
+ content: none;
3900
+ }
3901
+ }
3902
+
3903
+ &:has(.blue-menu-item-dropdown) {
3904
+ & > .blue-menu-item {
3905
+ @extend .highlighted;
3906
+ }
3907
+ }
3908
+ }
3909
+ }
3910
+
3911
+ @mixin show-action-menu-again() {
3912
+ max-height: initial;
3913
+ overflow: initial;
3914
+
3915
+ .blue-actions-menu {
3916
+ max-width: initial;
3917
+ }
3918
+ }
3919
+
3920
+ @mixin actions($breakpoint) {
3921
+ @media (max-width: #{$breakpoint + 1px}) {
3922
+ &.open {
3923
+ display: block;
3924
+ width: auto;
3925
+ position: absolute;
3926
+ z-index: 1;
3927
+ left: unset;
3928
+ top: 0.25rem;
3929
+ box-shadow: 0.6rem 6rem 6rem rgba(0, 0, 0, 0.3);
3930
+ animation: fadeInDown 0.5s;
3931
+
3932
+ @media (prefers-reduced-motion) {
3933
+ animation-duration: 0s;
3934
+ }
3935
+
3936
+ border-radius: $border-radius;
3937
+
3938
+ @include show-action-menu-again();
3939
+
3940
+ .blue-actions-menu-item:not(.blue-actions-menu-toggle) {
3941
+ display: flex;
3942
+ }
3943
+
3944
+ .blue-actions-menu {
3945
+ flex-direction: column;
3946
+ .blue-menu-item-dropdown {
3947
+ --blue-sidebar-bg: #{darken($theme, 34%)};
3948
+ }
3949
+ }
3950
+ }
3951
+
3952
+ .blue-actions-menu-item:not(.blue-actions-menu-toggle) {
3953
+ display: none;
3954
+ }
3955
+ }
3956
+
3957
+ @media (min-width: $breakpoint) {
3958
+ @include show-action-menu-again();
3959
+
3960
+ .blue-actions-menu .blue-actions-label {
3961
+ display: inline;
3962
+ }
3963
+
3964
+ .blue-actions-menu-toggle {
3965
+ display: none;
3966
+ }
3967
+
3968
+ .blue-actions-menu > .blue-menu-item-wrapper > .blue-menu-item-dropdown,
3969
+ .blue-actions-menu > .blue-menu-item-wrapper > * > .blue-menu-item-dropdown {
3970
+ position: absolute;
3971
+ right: 0;
3972
+ }
3973
+ }
3974
+ }
3975
+
3976
+ @mixin switch($width: 35px, $height: 20px, $padding: 3px, $color: $body-color, $color-active: $success) {
3977
+ $slider-size: $height - ($padding * 2);
3978
+
3979
+ & {
3980
+ position: relative;
3981
+ display: inline-block;
3982
+ width: $width;
3983
+ height: $height;
3984
+
3985
+ input {
3986
+ display: none;
3987
+ }
3988
+
3989
+ &.disabled {
3990
+ opacity: 0.8;
3991
+ }
3992
+
3993
+ &:not(.disabled) {
3994
+ .slider {
3995
+ cursor: pointer;
3996
+ }
3997
+ }
3998
+
3999
+ .slider {
4000
+ position: absolute;
4001
+ top: 0;
4002
+ left: 0;
4003
+ right: 0;
4004
+ bottom: 0;
4005
+ background-color: $input-group-addon-bg;
4006
+ transition: 0.4s;
4007
+
4008
+ @media (prefers-reduced-motion) {
4009
+ transition: none;
4010
+ }
4011
+
4012
+ box-shadow: inset 0 0 0 1px rgba($color, 0.5);
4013
+
4014
+ &::before {
4015
+ content: "";
4016
+ position: absolute;
4017
+ height: $slider-size;
4018
+ width: $slider-size;
4019
+ left: $padding;
4020
+ bottom: $padding;
4021
+ background-color: $color;
4022
+ transition: 0.4s;
4023
+
4024
+ @media (prefers-reduced-motion) {
4025
+ transition: none;
4026
+ }
4027
+ }
4028
+
4029
+ &::after {
4030
+ content: attr(data-label);
4031
+ position: absolute;
4032
+ top: 50%;
4033
+ left: 50%;
4034
+ transform: translate(-50%, -50%);
4035
+ margin-left: ($slider-size * 0.5);
4036
+ transition: margin-left 0.4s;
4037
+
4038
+ @media (prefers-reduced-motion) {
4039
+ transition: none;
4040
+ }
4041
+
4042
+ color: $color;
4043
+ }
4044
+ }
4045
+
4046
+ input:checked {
4047
+ & + .slider {
4048
+ background-color: $color-active;
4049
+ box-shadow: inset 0 0 12px rgba(255, 255, 255, 0.3);
4050
+
4051
+ &::before {
4052
+ transform: translateX($width - $slider-size - ($padding * 2));
4053
+ background-color: white;
4054
+ }
4055
+
4056
+ &::after {
4057
+ color: white;
4058
+ margin-left: ($slider-size * 0.5) * -1;
4059
+ }
4060
+ }
4061
+ }
4062
+ input:focus + .slider {
4063
+ box-shadow: 0 0 1px $color-active;
4064
+ }
4065
+ }
4066
+ }
4067
+
4068
+ @mixin customProperty($name, $value) {
4069
+ // fallback for older browser who do not support custom properties / css variables
4070
+ #{$name}: #{$value};
4071
+
4072
+ // create a css variable (this might override the variable on any of the ancestor elements)
4073
+ --#{$name}: #{$value};
4074
+
4075
+ // use the css variable on the property
4076
+ #{$name}: var(--#{$name}, #{$value});
4077
+ }
4078
+
4079
+ @mixin scroll-shadow($bg, $light-base: white) {
4080
+ background: linear-gradient($bg 30%, rgba($light-base, 0)),
4081
+ linear-gradient(rgba($light-base, 0) 10px, $bg 70%) bottom,
4082
+ radial-gradient(at top, rgba(0, 0, 0, 0.2), transparent 70%),
4083
+ radial-gradient(at bottom, rgba(0, 0, 0, 0.2), transparent 70%) bottom;
4084
+ background-repeat: no-repeat;
4085
+ background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;
4086
+ background-attachment: local, local, scroll, scroll;
4087
+ }
4088
+
4089
+
4090
+ @keyframes fade-in {
4091
+ from {
4092
+ opacity: 0;
4093
+ }
4094
+ to {
4095
+ opacity: 1;
4096
+ }
4097
+ }
4098
+
4099
+ @keyframes blAppearUp {
4100
+ from {
4101
+ margin-top: 2.5rem;
4102
+ }
4103
+ to {
4104
+ margin-top: 0;
4105
+ }
4106
+ }
4107
+
4108
+ @keyframes blue-menu-item-dropdown {
4109
+ from {
4110
+ transform: translateY(-50%);
4111
+ opacity: 0;
4112
+ }
4113
+ }
4114
+
4115
+ @keyframes enabledBlueAppPage {
4116
+ from {
4117
+ transform: scale(0.98);
4118
+ opacity: 0;
4119
+ }
4120
+ to {
4121
+ opacity: 1;
4122
+ }
4123
+ }
4124
+
4125
+ @keyframes fadeInDown {
4126
+ from {
4127
+ opacity: 0;
4128
+ transform: translate3d(0, -100%, 0);
4129
+ }
4130
+
4131
+ to {
4132
+ opacity: 1;
4133
+ transform: none;
4134
+ }
4135
+ }
4136
+
4137
+ @keyframes alert-in {
4138
+ from {
4139
+ transform: scale(0, 0);
4140
+ opacity: 0.2;
4141
+ transition: 0s;
4142
+ }
4143
+ }
4144
+
4145
+ @keyframes circlebounce {
4146
+ 0%,
4147
+ 100% {
4148
+ transform: scale(0);
4149
+ }
4150
+ 50% {
4151
+ transform: scale(1);
4152
+ }
4153
+ }
4154
+
4155
+ @keyframes scrolling {
4156
+ from {
4157
+ transform: translateX(-100%);
4158
+ }
4159
+ to {
4160
+ transform: translateX(100%);
4161
+ }
4162
+ }
4163
+
4164
+
4165
+ @mixin bsBanner($file) {
4166
+ /*!
4167
+ * Bootstrap #{$file} v5.3.5 (https://getbootstrap.com/)
4168
+ * Copyright 2011-2025 The Bootstrap Authors
4169
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4170
+ */
4197
4171
  }
4198
-
4199
- // Grid system
4172
+
4173
+ @include bsBanner("");
4174
+
4175
+ // scss-docs-start import-stack
4176
+ // Configuration
4177
+
4178
+
4179
+
4180
+ // Re-assigned maps
4200
4181
  //
4201
- // Generate semantic grid columns with these mixins.
4182
+ // Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.
4202
4183
 
4203
- @mixin make-row($gutter: $grid-gutter-width) {
4204
- --#{$prefix}gutter-x: #{$gutter};
4205
- --#{$prefix}gutter-y: 0;
4206
- display: flex;
4207
- flex-wrap: wrap;
4208
- // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed
4209
- margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list
4210
- margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list
4211
- margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list
4212
- }
4184
+ // scss-docs-start theme-colors-rgb
4185
+ $theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
4186
+ // scss-docs-end theme-colors-rgb
4213
4187
 
4214
- @mixin make-col-ready() {
4215
- // Add box sizing if only the grid is loaded
4216
- box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);
4217
- // Prevent columns from becoming too narrow when at smaller grid tiers by
4218
- // always setting `width: 100%;`. This works because we set the width
4219
- // later on to override this initial width.
4220
- flex-shrink: 0;
4221
- width: 100%;
4222
- max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid
4223
- padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
4224
- padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
4225
- margin-top: var(--#{$prefix}gutter-y);
4226
- }
4188
+ // scss-docs-start theme-text-map
4189
+ $theme-colors-text: (
4190
+ "primary": $primary-text-emphasis,
4191
+ "secondary": $secondary-text-emphasis,
4192
+ "success": $success-text-emphasis,
4193
+ "info": $info-text-emphasis,
4194
+ "warning": $warning-text-emphasis,
4195
+ "danger": $danger-text-emphasis,
4196
+ "light": $light-text-emphasis,
4197
+ "dark": $dark-text-emphasis,
4198
+ ) !default;
4199
+ // scss-docs-end theme-text-map
4227
4200
 
4228
- @mixin make-col($size: false, $columns: $grid-columns) {
4229
- @if $size {
4230
- flex: 0 0 auto;
4231
- width: percentage(divide($size, $columns));
4201
+ // scss-docs-start theme-bg-subtle-map
4202
+ $theme-colors-bg-subtle: (
4203
+ "primary": $primary-bg-subtle,
4204
+ "secondary": $secondary-bg-subtle,
4205
+ "success": $success-bg-subtle,
4206
+ "info": $info-bg-subtle,
4207
+ "warning": $warning-bg-subtle,
4208
+ "danger": $danger-bg-subtle,
4209
+ "light": $light-bg-subtle,
4210
+ "dark": $dark-bg-subtle,
4211
+ ) !default;
4212
+ // scss-docs-end theme-bg-subtle-map
4232
4213
 
4233
- } @else {
4234
- flex: 1 1 0;
4235
- max-width: 100%;
4236
- }
4237
- }
4214
+ // scss-docs-start theme-border-subtle-map
4215
+ $theme-colors-border-subtle: (
4216
+ "primary": $primary-border-subtle,
4217
+ "secondary": $secondary-border-subtle,
4218
+ "success": $success-border-subtle,
4219
+ "info": $info-border-subtle,
4220
+ "warning": $warning-border-subtle,
4221
+ "danger": $danger-border-subtle,
4222
+ "light": $light-border-subtle,
4223
+ "dark": $dark-border-subtle,
4224
+ ) !default;
4225
+ // scss-docs-end theme-border-subtle-map
4238
4226
 
4239
- @mixin make-col-auto() {
4240
- flex: 0 0 auto;
4241
- width: auto;
4242
- }
4227
+ $theme-colors-text-dark: null !default;
4228
+ $theme-colors-bg-subtle-dark: null !default;
4229
+ $theme-colors-border-subtle-dark: null !default;
4243
4230
 
4244
- @mixin make-col-offset($size, $columns: $grid-columns) {
4245
- $num: divide($size, $columns);
4246
- margin-left: if($num == 0, 0, percentage($num));
4247
- }
4231
+ @if $enable-dark-mode {
4232
+ // scss-docs-start theme-text-dark-map
4233
+ $theme-colors-text-dark: (
4234
+ "primary": $primary-text-emphasis-dark,
4235
+ "secondary": $secondary-text-emphasis-dark,
4236
+ "success": $success-text-emphasis-dark,
4237
+ "info": $info-text-emphasis-dark,
4238
+ "warning": $warning-text-emphasis-dark,
4239
+ "danger": $danger-text-emphasis-dark,
4240
+ "light": $light-text-emphasis-dark,
4241
+ "dark": $dark-text-emphasis-dark,
4242
+ ) !default;
4243
+ // scss-docs-end theme-text-dark-map
4248
4244
 
4249
- // Row columns
4250
- //
4251
- // Specify on a parent element(e.g., .row) to force immediate children into NN
4252
- // number of columns. Supports wrapping to new lines, but does not do a Masonry
4253
- // style grid.
4254
- @mixin row-cols($count) {
4255
- > * {
4256
- flex: 0 0 auto;
4257
- width: percentage(divide(1, $count));
4258
- }
4245
+ // scss-docs-start theme-bg-subtle-dark-map
4246
+ $theme-colors-bg-subtle-dark: (
4247
+ "primary": $primary-bg-subtle-dark,
4248
+ "secondary": $secondary-bg-subtle-dark,
4249
+ "success": $success-bg-subtle-dark,
4250
+ "info": $info-bg-subtle-dark,
4251
+ "warning": $warning-bg-subtle-dark,
4252
+ "danger": $danger-bg-subtle-dark,
4253
+ "light": $light-bg-subtle-dark,
4254
+ "dark": $dark-bg-subtle-dark,
4255
+ ) !default;
4256
+ // scss-docs-end theme-bg-subtle-dark-map
4257
+
4258
+ // scss-docs-start theme-border-subtle-dark-map
4259
+ $theme-colors-border-subtle-dark: (
4260
+ "primary": $primary-border-subtle-dark,
4261
+ "secondary": $secondary-border-subtle-dark,
4262
+ "success": $success-border-subtle-dark,
4263
+ "info": $info-border-subtle-dark,
4264
+ "warning": $warning-border-subtle-dark,
4265
+ "danger": $danger-border-subtle-dark,
4266
+ "light": $light-border-subtle-dark,
4267
+ "dark": $dark-border-subtle-dark,
4268
+ ) !default;
4269
+ // scss-docs-end theme-border-subtle-dark-map
4259
4270
  }
4260
4271
 
4261
- // Framework grid generation
4272
+ // Utilities maps
4262
4273
  //
4263
- // Used only by Bootstrap to generate the correct number of grid classes given
4264
- // any value of `$grid-columns`.
4265
-
4266
- @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {
4267
- @each $breakpoint in map-keys($breakpoints) {
4268
- $infix: breakpoint-infix($breakpoint, $breakpoints);
4269
-
4270
- @include media-breakpoint-up($breakpoint, $breakpoints) {
4271
- // Provide basic `.col-{bp}` classes for equal-width flexbox columns
4272
- .col#{$infix} {
4273
- flex: 1 0 0;
4274
- }
4275
-
4276
- .row-cols#{$infix}-auto > * {
4277
- @include make-col-auto();
4278
- }
4274
+ // Extends the default `$theme-colors` maps to help create our utilities.
4279
4275
 
4280
- @if $grid-row-columns > 0 {
4281
- @for $i from 1 through $grid-row-columns {
4282
- .row-cols#{$infix}-#{$i} {
4283
- @include row-cols($i);
4284
- }
4285
- }
4286
- }
4276
+ // Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
4277
+ // scss-docs-start utilities-colors
4278
+ $utilities-colors: $theme-colors-rgb !default;
4279
+ // scss-docs-end utilities-colors
4287
4280
 
4288
- .col#{$infix}-auto {
4289
- @include make-col-auto();
4290
- }
4281
+ // scss-docs-start utilities-text-colors
4282
+ $utilities-text: map-merge(
4283
+ $utilities-colors,
4284
+ (
4285
+ "black": to-rgb($black),
4286
+ "white": to-rgb($white),
4287
+ "body": to-rgb($body-color)
4288
+ )
4289
+ ) !default;
4290
+ $utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
4291
4291
 
4292
- @if $columns > 0 {
4293
- @for $i from 1 through $columns {
4294
- .col#{$infix}-#{$i} {
4295
- @include make-col($i, $columns);
4296
- }
4297
- }
4292
+ $utilities-text-emphasis-colors: (
4293
+ "primary-emphasis": var(--#{$prefix}primary-text-emphasis),
4294
+ "secondary-emphasis": var(--#{$prefix}secondary-text-emphasis),
4295
+ "success-emphasis": var(--#{$prefix}success-text-emphasis),
4296
+ "info-emphasis": var(--#{$prefix}info-text-emphasis),
4297
+ "warning-emphasis": var(--#{$prefix}warning-text-emphasis),
4298
+ "danger-emphasis": var(--#{$prefix}danger-text-emphasis),
4299
+ "light-emphasis": var(--#{$prefix}light-text-emphasis),
4300
+ "dark-emphasis": var(--#{$prefix}dark-text-emphasis)
4301
+ ) !default;
4302
+ // scss-docs-end utilities-text-colors
4298
4303
 
4299
- // `$columns - 1` because offsetting by the width of an entire row isn't possible
4300
- @for $i from 0 through ($columns - 1) {
4301
- @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0
4302
- .offset#{$infix}-#{$i} {
4303
- @include make-col-offset($i, $columns);
4304
- }
4305
- }
4306
- }
4307
- }
4304
+ // scss-docs-start utilities-bg-colors
4305
+ $utilities-bg: map-merge(
4306
+ $utilities-colors,
4307
+ (
4308
+ "black": to-rgb($black),
4309
+ "white": to-rgb($white),
4310
+ "body": to-rgb($body-bg)
4311
+ )
4312
+ ) !default;
4313
+ $utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
4308
4314
 
4309
- // Gutters
4310
- //
4311
- // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.
4312
- @each $key, $value in $gutters {
4313
- .g#{$infix}-#{$key},
4314
- .gx#{$infix}-#{$key} {
4315
- --#{$prefix}gutter-x: #{$value};
4316
- }
4315
+ $utilities-bg-subtle: (
4316
+ "primary-subtle": var(--#{$prefix}primary-bg-subtle),
4317
+ "secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
4318
+ "success-subtle": var(--#{$prefix}success-bg-subtle),
4319
+ "info-subtle": var(--#{$prefix}info-bg-subtle),
4320
+ "warning-subtle": var(--#{$prefix}warning-bg-subtle),
4321
+ "danger-subtle": var(--#{$prefix}danger-bg-subtle),
4322
+ "light-subtle": var(--#{$prefix}light-bg-subtle),
4323
+ "dark-subtle": var(--#{$prefix}dark-bg-subtle)
4324
+ ) !default;
4325
+ // scss-docs-end utilities-bg-colors
4317
4326
 
4318
- .g#{$infix}-#{$key},
4319
- .gy#{$infix}-#{$key} {
4320
- --#{$prefix}gutter-y: #{$value};
4321
- }
4322
- }
4323
- }
4324
- }
4325
- }
4327
+ // scss-docs-start utilities-border-colors
4328
+ $utilities-border: map-merge(
4329
+ $utilities-colors,
4330
+ (
4331
+ "black": to-rgb($black),
4332
+ "white": to-rgb($white)
4333
+ )
4334
+ ) !default;
4335
+ $utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
4326
4336
 
4327
- @mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {
4328
- @each $breakpoint in map-keys($breakpoints) {
4329
- $infix: breakpoint-infix($breakpoint, $breakpoints);
4337
+ $utilities-border-subtle: (
4338
+ "primary-subtle": var(--#{$prefix}primary-border-subtle),
4339
+ "secondary-subtle": var(--#{$prefix}secondary-border-subtle),
4340
+ "success-subtle": var(--#{$prefix}success-border-subtle),
4341
+ "info-subtle": var(--#{$prefix}info-border-subtle),
4342
+ "warning-subtle": var(--#{$prefix}warning-border-subtle),
4343
+ "danger-subtle": var(--#{$prefix}danger-border-subtle),
4344
+ "light-subtle": var(--#{$prefix}light-border-subtle),
4345
+ "dark-subtle": var(--#{$prefix}dark-border-subtle)
4346
+ ) !default;
4347
+ // scss-docs-end utilities-border-colors
4330
4348
 
4331
- @include media-breakpoint-up($breakpoint, $breakpoints) {
4332
- @if $columns > 0 {
4333
- @for $i from 1 through $columns {
4334
- .g-col#{$infix}-#{$i} {
4335
- grid-column: auto / span $i;
4336
- }
4337
- }
4349
+ $utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default;
4338
4350
 
4339
- // Start with `1` because `0` is an invalid value.
4340
- // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.
4341
- @for $i from 1 through ($columns - 1) {
4342
- .g-start#{$infix}-#{$i} {
4343
- grid-column-start: $i;
4344
- }
4345
- }
4346
- }
4347
- }
4348
- }
4349
- }
4351
+ $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
4350
4352
 
4353
+ $gutters: $spacers !default;
4354
+
4351
4355
 
4352
4356
  // Utilities
4353
4357
 
@@ -11077,7 +11081,12 @@ body {
11077
11081
  }
11078
11082
 
11079
11083
  .blue-menu-item {
11080
- transition: width 0.5s, background-color 0.3s, color 0.15s, box-shadow 0.3s, opacity 0.3s !important;
11084
+ transition:
11085
+ width 0.5s,
11086
+ background-color 0.3s,
11087
+ color 0.15s,
11088
+ box-shadow 0.3s,
11089
+ opacity 0.3s !important;
11081
11090
 
11082
11091
  @media (prefers-reduced-motion) {
11083
11092
  transition: none !important;
@@ -11143,65 +11152,6 @@ body {
11143
11152
  }
11144
11153
  }
11145
11154
 
11146
- .blue-sidebar .blue-menu-item-dropdown {
11147
- --blue-sidebar-bg: var(--blue-sidebar-depth-1-bg, #{$sidebar-deep-bg});
11148
-
11149
- &::before {
11150
- background-color: var(--blue-sidebar-bg);
11151
- box-shadow: 0 0.5rem 1rem $black;
11152
- opacity: 0.15;
11153
- border-color: currentColor;
11154
- }
11155
-
11156
- .blue-menu-item-dropdown {
11157
- --blue-sidebar-bg: var(--blue-sidebar-depth-2-bg, #{darken($sidebar-deep-bg, 4%)});
11158
-
11159
- .blue-menu-item-dropdown {
11160
- --blue-sidebar-bg: var(--blue-sidebar-depth-3-bg, #{darken($sidebar-deep-bg, 8%)});
11161
-
11162
- .blue-menu-item-dropdown {
11163
- --blue-sidebar-bg: var(--blue-sidebar-depth-4-bg, #{darken($sidebar-deep-bg, 12%)});
11164
-
11165
- .blue-menu-item-dropdown {
11166
- --blue-sidebar-bg: var(--blue-sidebar-depth-5-bg, #{darken($sidebar-deep-bg, 16%)});
11167
-
11168
- .blue-menu-item-dropdown {
11169
- --blue-sidebar-bg: var(--blue-sidebar-depth-6-bg, #{darken($sidebar-deep-bg, 20%)});
11170
- }
11171
- }
11172
- }
11173
- }
11174
- }
11175
- }
11176
-
11177
- .blue-header .blue-menu-item-dropdown {
11178
- --blue-sidebar-bg: #{$header-deep-bg};
11179
-
11180
- &::before {
11181
- background-color: var(--blue-header-bg);
11182
- }
11183
-
11184
- .blue-menu-item-dropdown {
11185
- --blue-sidebar-bg: #{darken($header-deep-bg, 4%)};
11186
-
11187
- .blue-menu-item-dropdown {
11188
- --blue-sidebar-bg: #{darken($header-deep-bg, 8%)};
11189
-
11190
- .blue-menu-item-dropdown {
11191
- --blue-sidebar-bg: #{darken($header-deep-bg, 12%)};
11192
-
11193
- .blue-menu-item-dropdown {
11194
- --blue-sidebar-bg: #{darken($header-deep-bg, 16%)};
11195
-
11196
- .blue-menu-item-dropdown {
11197
- --blue-sidebar-bg: #{darken($header-deep-bg, 20%)};
11198
- }
11199
- }
11200
- }
11201
- }
11202
- }
11203
- }
11204
-
11205
11155
  .blue-menu-item-dropdown-caret.blue-caret {
11206
11156
  display: none;
11207
11157
  position: absolute;
@@ -11699,13 +11649,6 @@ body {
11699
11649
  }
11700
11650
  }
11701
11651
 
11702
- .blue-btn-silent {
11703
- &:not(:hover):not(:focus):not(:active) {
11704
- border-color: transparent;
11705
- color: inherit;
11706
- }
11707
- }
11708
-
11709
11652
  @media (hover: hover) {
11710
11653
  .blue-d-hover {
11711
11654
  &:not(:hover):not(:focus):not(:active):not(.active):not(:focus-within) {
@@ -12034,13 +11977,20 @@ input.blue-tab:checked + .blue-tab-content {
12034
11977
  }
12035
11978
 
12036
11979
  dialog.blue-modal {
11980
+ --ani-scale-from: 95%;
11981
+ --ani-scale-to: 100%;
11982
+ --ani-translate-from: 0 0;
11983
+ --ani-translate-to: 0 0;
11984
+
12037
11985
  border: none;
12038
11986
  background: none;
12039
11987
  padding: 0;
12040
11988
  margin: 0;
12041
11989
  max-width: none;
12042
11990
  max-height: none;
12043
- transition: display 0.2s allow-discrete, overlay 0.2s allow-discrete;
11991
+ transition:
11992
+ display 0.2s allow-discrete,
11993
+ overlay 0.2s allow-discrete;
12044
11994
  animation: blue-modal-close 0.2s forwards;
12045
11995
 
12046
11996
  .offcanvas-backdrop {
@@ -12120,8 +12070,9 @@ dialog.blue-modal:has(.offcanvas-start) {
12120
12070
 
12121
12071
  .blue-layout {
12122
12072
  --spacing: 0.25rem;
12123
- --drawer-side-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px,
12124
- 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;
12073
+ --drawer-side-shadow:
12074
+ 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,
12075
+ rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
12125
12076
  --toggler-size: calc(
12126
12077
  var(--bs-btn-border-width, 1px) + var(--bs-btn-padding-y, 0.375rem) +
12127
12078
  (var(--bs-btn-font-size, 1rem) * var(--bs-btn-line-height, 1.5)) + var(--bs-btn-padding-y, 0.375rem) +
@@ -12134,7 +12085,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12134
12085
  --side-width: var(--blue-sidebar-width);
12135
12086
  --toggler-size: var(--blue-menu-item-height);
12136
12087
 
12137
- min-height: 100dvh;
12088
+ height: 100dvh;
12138
12089
  position: relative;
12139
12090
  display: grid;
12140
12091
  grid-template-columns: 0 var(--toggler-size) calc(var(--side-width) - var(--toggler-size)) auto;
@@ -12234,3 +12185,82 @@ dialog.blue-modal:has(.offcanvas-start) {
12234
12185
  }
12235
12186
  }
12236
12187
 
12188
+ // Collapse with details and animated
12189
+ // Right now not part of Blue Web, but could become one
12190
+
12191
+ .blue-collapse {
12192
+ interpolate-size: allow-keywords;
12193
+
12194
+ summary {
12195
+ list-style: none;
12196
+ }
12197
+
12198
+ summary::-webkit-details-marker {
12199
+ display: none;
12200
+ }
12201
+
12202
+ .blue-collapse-chevron {
12203
+ transition: transform 0.2s;
12204
+ }
12205
+
12206
+ &[open] > summary > .blue-collapse-header > .blue-collapse-chevron,
12207
+ &[open] > summary > .blue-collapse-chevron {
12208
+ --blue-collapse-chevron-rotate: 90deg;
12209
+
12210
+ // If chevron is on the end, rotate has to be -90deg
12211
+ &:is(:last-child) {
12212
+ --blue-collapse-chevron-rotate: -90deg;
12213
+ }
12214
+
12215
+ &:is(:first-child) {
12216
+ --blue-collapse-chevron-rotate: 90deg;
12217
+ }
12218
+
12219
+ transform: rotate(var(--blue-collapse-chevron-rotate));
12220
+ }
12221
+
12222
+ &::details-content {
12223
+ block-size: 0;
12224
+ transition:
12225
+ block-size 0.2s,
12226
+ content-visibility 0.2s;
12227
+ transition-behavior: allow-discrete;
12228
+ }
12229
+
12230
+ &[open]::details-content {
12231
+ block-size: auto;
12232
+ }
12233
+ }
12234
+
12235
+ @media (prefers-reduced-motion) {
12236
+ .blue-collapse .blue-collapse-chevron,
12237
+ .blue-collapse::details-content {
12238
+ transition: none;
12239
+ }
12240
+ }
12241
+
12242
+
12243
+ :root {
12244
+ --bs-font-sans-serif: Inter, #{$font-family-sans-serif};
12245
+ font-feature-settings:
12246
+ "liga" 1,
12247
+ "calt" 1,
12248
+ "cv05" 1,
12249
+ "cv07" 1,
12250
+ "tnum" 1,
12251
+ "zero" 1;
12252
+ }
12253
+ @supports (font-variation-settings: normal) {
12254
+ :root {
12255
+ --bs-font-sans-serif: InterVariable, #{$font-family-sans-serif};
12256
+ }
12257
+ }
12258
+
12259
+ input,
12260
+ button,
12261
+ select,
12262
+ optgroup,
12263
+ textarea {
12264
+ font-feature-settings: inherit;
12265
+ }
12266
+