[
  {
    "path": ".gitignore",
    "content": "node_modules\n"
  },
  {
    "path": "License.txt",
    "content": "MIT license for MDB Free\r\n\r\nFree packages are available under the MIT License.\r\n\r\n-- Highlights\r\n\r\n● Free for personal use\r\n● Free for commercial use\r\n● No attribution required\r\n\r\n-- Copyright notice\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions.\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nThe software is provided \"As is\", without warranty of any kind, express or implied, including but not limited To the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall The authors or copyright holders be liable for any claim, damages or other liability, whether in an action of Contract, tort or otherwise, arising from, out of or in connection with the software or the use or other Dealings in the software."
  },
  {
    "path": "README.md",
    "content": "Bootstrap 5 UI KIT - 700+ components, plain JavaScript, MIT license, simple installation.\n\nMDB is a collection of free Bootstrap templates, themes, design tools & resources.\n\n---\n\n# Get started\n\n### [>> Get Started in 1 minute](https://mdbootstrap.com/docs/standard/getting-started/installation/)\nSimple installation via .zip, npm or cdnjs.\n\n\n### [>> Install with Webpack](https://mdbootstrap.com/docs/standard/getting-started/installation/#section-webpack)\nThis option is useful for experienced developers it enables bundling, unit testing code formatting, linting, saas support & more.\n \n### [>> Install with MDBGO](https://mdbgo.com/) \n Free Hosting, WordPress support, custom domains, SSL support, free database, frontend & backend templates, webpack starter included, git repostiory, FTP & jenkins support.\n \n### [>> Install with MDBGO + e-commerce shop integration](https://mdbgo.com/wordpress-shop/)\nOne click setup! MDB GO allows you to create a WordPress page with a single click.\nRegardless whether you want to create a Travel Blog or an e-commerce shop to sell your product you can easily do that. You can even combine both into single page.\n\n\n## About Material Design for Bootstrap 5 & Vanilla JavaScript\n\n<p>Created by <a href=\"https://mdbootstrap.com\"><img height=\"30\" src=\"https://mdbootstrap.com/img/Marketing/general/logo/medium/mdb-r.png\"></a>  \n<a href=\"https://npmcharts.com/compare/mdbootstrap?minimal=true\"> <img src=\"https://img.shields.io/npm/dm/mdbootstrap.svg?label=NPM%20Downloads\" alt=\"Downloads\"></a>\n<a href=\"https://github.com/mdbootstrap/bootstrap-material-design/blob/master/License.pdf\"><img src=\"https://img.shields.io/badge/license-MIT-green.svg\" alt=\"License\"></a>\n<a href=\"https://x.com/intent/post?text=Thanks+%40mdbootstrap+for+creating+amazing+and+free+Material+Design+for+Bootstrap+5+UI+KIT+https%3A%2F%2Fmdbootstrap.com%2Fdocs%2Fjquery%2F&hashtags=javascript%2Ccode%2Cwebdesign%2Cbootstrap\"><img src=\"https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Let%20us%20know%20you%20were%20here%21&\"></a>\n<a href=\"https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/\">\n  <img src=\"https://img.shields.io/static/v1?label=MDBootstrap&message=Tutorial&labelColor=007bff&color=ffffff&logoColor=007bff&textColor=000000\" alt=\"MDBootstrap tutorial\">\n</a></p>\n\n\nTrusted by <b>3 000 000+</b> developers & designers. Used by companies & institutions like\n<table>\n  <tbody>\n    <tr>\n      <td><img width=\"300\" src=\"https://mdbootstrap.com/img/logo/brands/nasa.png\"></td>\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/nike.png\"></td>\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/amazon.png\"></td>\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/sony.png\"></td>\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/samsung.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/airbus.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/yahoo.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/deloitte.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/ge.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/kpmg.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/unity.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/ikea.png\">\n      <td><img src=\"https://mdbootstrap.com/img/logo/brands/aegon.png\">\n    </tr>\n   </tbody>\n</table>\n\n<table>\n  <tbody>\n    <tr>\n      <td>\n          <a href=\"https://mdbootstrap.com/docs/standard/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          \t\t<img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/about/assets/mdb5-about.jpg\">\n          </a>\n      </td>\n      <td>\n        <ul>\n        <li><b><a href=\"https://mdbootstrap.com/docs/standard/\">700+ UI components</a></b></li>          \n         <li><b><a href=\"https://mdbootstrap.com/freebies/\">Free templates</a></b></li>\n         <li>Super simple, 1 minute installation</li>\n         <li>Detailed docs & practical examples</li>\n         <li>Lots of tutorials</li>\n         <li><b>Plain JavaScript (but works also with jQuery)</b></li>\n         <li>Huge and active community</li>\n         <li><b>MIT license - free for personal & commercial use</b></li>\n        </ul>\n      </td>\n    </tr>\n   </tbody>\n</table>\n\n___\n\n# Bootstrap 5 tutorial\n\n**[>> Learn more about Bootstrap 5](https://mdbootstrap.com/docs/standard/)**\n\n\n**[>> Bootstrap 5 Tutorial](https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/)**\n\n**[>> Subscribe to our YouTube channel with dozens of Bootstrap tutorials](https://www.youtube.com/c/Mdbootstrap)**\n\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\">\n         <a href=\"https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/\" alt=\"Bootstrap Tutorials\" rel=\"dofollow\">\n          \t\t<img src=\"https://mdbootstrap.com/wp-content/uploads/2020/12/learnmore-1.png\">\n          </a>\n      </td>\n      <td>\n          <a href=\"https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/#section-beginner\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          \t\t<img src=\"https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/assets/featured-image.png\">\n          </a>\n      </td>\n    </tr>\n     <tr>\n        <td align=\"center\">\n          <p align=\"center\"><b>Start learning from Basics</b></p>\n          <a href=\"https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          \t\t<img src=\"https://mdbootstrap.com/wp-content/uploads/2020/12/Screenshot_26.png\">\n          </a>\n         </td>\n        <td align=\"center\">\n          <p align=\"center\"><b>Learn Bootstrap 5 | Crash Course for Beginners in 1.5H</b></p>\n          <a href=\"https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/#section-beginner\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          \t\t<img src=\"https://mdbootstrap.com/wp-content/uploads/2020/12/Screenshot_26.png\">\n          </a>\n         </td>\n      </tr>\n   </tbody>\n</table>\n\n___\n\n# Demo\n#### Simplicity and ease of use are key features of MDB 5 UI Kit. You need only one minute to install and run it.\n\n### Carousel\n\n<p>A slideshow component for cycling through elements—images or slides of text—like a carousel.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/carousel/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-carousel.gif\">\n  </p>\n</a>\n\n### Buttons\n\n<p>Use MDB custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/buttons/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-buttons.gif\">\n  </p>\n</a>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/buttons/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-social-buttons.png\">\n  </p>\n</a>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/buttons/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-buttons2.png\">\n  </p>\n</a>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/buttons/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-buttons-outline.gif\">\n  </p>\n</a>\n\n\n### Spinners\n\n<p>Indicate the loading state of a component or page with MDB spinners, built entirely with HTML, CSS, and no JavaScript.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/spinners/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-loader.gif\">\n  </p>\n</a>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/spinners/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-color-spinners.gif\">\n  </p>\n</a>\n\n### Cards\n\n<p>A card is a flexible and extensible content container. It includes options for headers and footers, a wide variety of content, contextual background colors, and powerful display options.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/cards/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-cards.png\">\n  </p>\n</a>\n\n### Validation\n\n<p>Provide valuable, actionable feedback to your users with HTML5 form validation, via browser default behaviors or custom styles and JavaScript.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/forms/validation/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-validation.gif\">\n  </p>\n </a>\n <a href=\"https://mdbootstrap.com/docs/standard/forms/validation/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n   <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-validation2.gif\">\n  </p>\n </a>\n <a href=\"https://mdbootstrap.com/docs/standard/forms/validation/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n   <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-validation3.gif\">\n  </p>\n</a>\n\n### Forms\n\n<p>Examples and usage guidelines for form control styles, layout options, and custom components for creating a wide variety of forms.</p>\n\n <a href=\"https://mdbootstrap.com/docs/standard/forms/overview/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n   <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-forms2.gif\">\n  </p>\n </a>\n <a href=\"https://mdbootstrap.com/docs/standard/forms/overview/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n   <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-forms3.gif\">\n  </p>\n</a>\n\n\n### Footer\n\n<p>A footer is an additional navigation component. It can hold links, buttons, company info, copyrights, forms, and many other elements.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/navigation/footer/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-footer.png\">\n  </p>\n</a>\n\n### Modal\n\n<p>Use MDB modal plugin to add dialogs to your site for lightboxes, user notifications, or completely custom content.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/components/modal/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-modal.gif\">\n  </p>\n</a>\n\n### Hover\n\n<p>MDB hover effect appears when the user positions the computer cursor over an element without activating it. Hover effects make a website more interactive.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/content-styles/hover-effects/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-hover.gif\">\n  </p>\n</a>\n\n<a href=\"https://mdbootstrap.com/docs/standard/content-styles/hover-effects/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-hover2.png\">\n  </p>\n</a>\n\n### Tabs \n\n<p>Tabs are quasi-navigation components which can highly improve website clarity and increase user experience.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/navigation/tabs/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-tabs.gif\">\n  </p>\n</a>\n\n<a href=\"https://mdbootstrap.com/docs/standard/navigation/tabs/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-tabs2.gif\">\n  </p>\n</a>\n\n### Notes\n\n<p>Notes are small components very helpful in inserting an additional piece of information.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/content-styles/typography/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-alerts.png\">\n  </p>\n</a>\n\n### ScrollSpy\n\n<p>Automatically update Bootstrap navigation or list group components based on scroll position to indicate which link is currently active in the viewport.</p>\n\n<a href=\"https://mdbootstrap.com/docs/standard/navigation/scrollspy/\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n  <p align=\"center\">\n    <img src=\"https://mdbootstrap.com/img/Marketing/campaigns/demo-scrollspy.gif\">\n  </p>\n</a>\n\n<p>Also check out our standalone project <a href=\"https://perfectscrollbar.com/\">Perfect Scrollbar</a> which is included in MDB.</p>\n\n-----------------------------\n\n# Free Bootstrap 5 templates\n\n<p>All of the templates were created with MDB 5 UI KIT (Material Design for Bootstrap 5).</p>\n\n<p>MDB is a free (MIT license) library, that provides extra features and significantly extends Bootstrap's capabilities.</p>\n\n<table>\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/ecommerce.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/ecommerce.jpg\">\n        </a>\n        <p align=\"center\"><b>Ecommerce</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/full-carousel-cover.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/full-carousel-cover.jpg\">\n        </a>\n        <p align=\"center\"><b>Carousel Full Cover</b></p>\n    </tr>\n   </tbody>\n\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/full-image-cover.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/full-image-cover.jpg\">\n        </a>\n        <p align=\"center\"><b>Image Full Cover</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/portfolio.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/portfolio.jpg\">\n        </a>\n        <p align=\"center\"><b>Portfolio</b></p>\n    </tr>\n   </tbody>\n\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/post.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/post.jpg\">\n        </a>\n        <p align=\"center\"><b>Post</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/pricing.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/pricing.jpg\">\n        </a>\n        <p align=\"center\"><b>Pricing</b></p>\n    </tr>\n   </tbody>\n\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/full-video-cover.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/full-video-cover.jpg\">\n        </a>\n        <p align=\"center\"><b>Video Full Cover</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/half-carousel-cover.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/half-carousel-cover.jpg\">\n        </a>\n        <p align=\"center\"><b>Carousel Half Cover</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/half-video-cover.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/half-video-cover.jpg\">\n        </a>\n        <p align=\"center\"><b>Video Half Cover</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/login.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/login.jpg\">\n        </a>\n        <p align=\"center\"><b>Login</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/magazine.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/magazine.jpg\">\n        </a>\n        <p align=\"center\"><b>Magazine</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/checkout.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/checkout.jpg\">\n        </a>\n        <p align=\"center\"><b>Checkout</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/blog.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/blog.jpg\">          \n        </a>\n          <p align=\"center\"><b>Blog</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/product.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/product.jpg\">\n        </a>\n        <p align=\"center\"><b>Product</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/category.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/category.jpg\">          \n        </a>\n          <p align=\"center\"><b>Category</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/landing-page.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/landing-page.jpg\">\n        </a>\n        <p align=\"center\"><b>Landing Page</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/admin.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/admin.jpg\">\n        </a>\n        <p align=\"center\"><b>Admin</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/coming-soon.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/coming-soon.jpg\">\n        </a>\n        <p align=\"center\"><b>Coming Soon</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/classic-jumbotron.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/classic-jumbotron.jpg\">\n        </a>\n        <p align=\"center\"><b>Classic Jumbotron</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/one-column.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/one-column.jpg\">\n        </a>\n        <p align=\"center\"><b>One Column</b></p>\n    </tr>\n   </tbody>\n\n  <tbody>\n    <tr>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/two-columns.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/two-columns.jpg\">\n        </a>\n        <p align=\"center\"><b>Two Columns</b></p>\n      <td>\n        <a href=\"https://mdbgo.io/ascensus/MDB5-templates/three-columns.html\" alt=\"Bootstrap 5\" rel=\"dofollow\">\n          <img src=\"https://mdbootstrap.com/wp-content/themes/mdbootstrap4/content/en/_mdb5/standard/general/templates/assets/three-columns.jpg\">\n        </a>\n        <p align=\"center\"><b>Three Columns</b></p>\n  </tr>\n   </tbody>\n</table>\n\n___\n\n# Extended documentation\n\n<ul>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/bootstrap-address-form/\">Bootstrap Address Form</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/avatar/\">Bootstrap Avatar</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/back-to-top/\">Bootstrap Back To Top Button</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/carousel-with-thumbnails/\">Bootstrap Carousel Slider with Thumbnails</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/chat/\">Bootstrap Chat</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/code/\">Bootstrap Code Blocks</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/comments/\">Bootstrap Comments</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/bootstrap-comparison-table/\">Bootstrap Comparison Table</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/credit-card/\">Bootstrap Credit Card Form</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/drawer/\">Bootstrap Drawer</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/dropdown-multilevel/\">Bootstrap Nested Dropdown</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/faq/\">Bootstrap FAQ component / section</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/gallery/\">Bootstrap Gallery</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/hamburger-menu/\">Bootstrap Hamburger Menu</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/bootstrap-invoice/\">Bootstrap Invoice</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/jumbotron/\">Bootstrap Jumbotron</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/login/\">Bootstrap Login Form</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/maps/\">Bootstrap Maps</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/media-object/\">Bootstrap Media Object</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/mega-menu/\">Bootstrap Mega Menu</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/multiselect/\">Bootstrap Multiselect</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/news-feed/\">Bootstrap News Feed</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/offcanvas/\">Bootstrap Offcanvas</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/order-details/\">Bootstrap Order Details</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/page-transitions/\">Bootstrap Page Transitions</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/payment-forms/\">Bootstrap Payment Forms</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/product-cards/\">Bootstrap Product Cards</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/profiles/\">Bootstrap Profiles</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/quotes/\">Bootstrap Quotes</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/registration/\">Bootstrap Registration Form</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/search-expanding/\">Bootstrap Expanding Search Bar</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/shopping-carts/\">Bootstrap Shopping Carts</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/side-navbar/\">Bootstrap Side Navbar</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/sidebar/\">Bootstrap Sidebar</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/social-media/\">Bootstrap Social Media Icons & Buttons</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/square-buttons/\">Bootstrap Square Buttons</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/bootstrap-survey-form/\">Bootstrap Survey Form</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/testimonial-slider/\">Bootstrap Testimonial Slider</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/testimonials/\">Bootstrap Testimonials</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/textarea/\">Bootstrap Textarea</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/timeline/\">Bootstrap Timeline</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/to-do-list/\">Bootstrap To Do List</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/video-carousel/\">Bootstrap Video Carousel / Gallery</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/weather/\">Bootstrap Weather</a></li>  \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/dark-mode/\">Bootstrap Dark Mode</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/padding/\">Bootstrap Padding</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/modal-size/\">Bootstrap Modal Size</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/modal-methods/\">Bootstrap Modal Show, Close, Hide & Toggle</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/modal-backdrop/\">Bootstrap Backdrop</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/card-deck/\">Bootstrap Card Deck</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/table-filter/\">Bootstrap Table Filter</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/slider/\">Bootstrap Slider</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/logo/\">Bootstrap Logo</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/popup/\">Bootstrap Popup</a></li> \n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/max-width/\">Bootstrap Max Width</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/hero/\">Bootstrap Hero</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/select-dropdown/\">Bootstrap Select Dropdown</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/labels/\">Bootstrap Labels</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/dialog/\">Bootstrap Dialog</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/screen-sizes/\">Bootstrap Screen Sizes</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/dropdown-button/\">Bootstrap Dropdown Button</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/side-menu/\">Bootstrap Side Menu</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/table-fixed-header/\">Bootstrap Table Fixed Header</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/border-radius/\">Bootstrap Border Radius</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/popover-on-hover/\">Bootstrap Popover On Hover</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/overlay/\">Bootstrap Overlay</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/height/\">Bootstrap Height</a></li>\n<li><a href=\"https://mdbootstrap.com/docs/standard/extended/widgets/\">Bootstrap Widgets</a></li>\n\n</ul>\n"
  },
  {
    "path": "README.txt",
    "content": "MDB5\nVersion: FREE 9.3.0\n\nDocumentation:\nhttps://mdbootstrap.com/docs/standard/\n\nContact:\ncontact@mdbootstrap.com"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" />\n    <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\" />\n    <title>Material Design for Bootstrap</title>\n    <!-- MDB icon -->\n    <link rel=\"icon\" href=\"img/mdb-favicon.ico\" type=\"image/x-icon\" />\n    <!-- Font Awesome -->\n    <link\n      rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css\"\n    />\n    <!-- Google Fonts Roboto -->\n    <link\n      rel=\"stylesheet\"\n      href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700;900&display=swap\"\n    />\n    <!-- MDB -->\n    <link rel=\"stylesheet\" href=\"css/mdb.min.css\" />\n  </head>\n  <body>\n    <!-- Start your project here-->\n    <div class=\"container\">\n      <div class=\"d-flex justify-content-center align-items-center\" style=\"height: 100vh\">\n        <div class=\"text-center\">\n          <img\n            class=\"mb-4\"\n            src=\"https://mdbootstrap.com/img/logo/mdb-transparent-250px.png\"\n            style=\"width: 250px; height: 90px\"\n          />\n          <h5 class=\"mb-3\">Thank you for using our product. We're glad you're with us.</h5>\n          <p class=\"mb-3\">MDB Team</p>\n          <a\n            class=\"btn btn-primary btn-lg\"\n            data-mdb-ripple-init\n            href=\"https://mdbootstrap.com/docs/standard/getting-started/\"\n            target=\"_blank\"\n            role=\"button\"\n            >Start MDB tutorial</a\n          >\n        </div>\n      </div>\n    </div>\n    <!-- End your project here-->\n\n    <!-- MDB -->\n    <script type=\"text/javascript\" src=\"js/mdb.umd.min.js\"></script>\n    <!-- Custom scripts -->\n    <script type=\"text/javascript\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"mdb-ui-kit\",\n  \"version\": \"9.3.0\",\n  \"type\": \"module\",\n  \"main\": \"./js/mdb.umd.min.js\",\n  \"module\": \"./js/mdb.es.min.js\",\n  \"homepage\": \"https://mdbootstrap.com/docs/standard/\",\n  \"repository\": \"https://github.com/mdbootstrap/mdb-ui-kit.git\",\n  \"author\": \"MDBootstrap\",\n  \"license\": \"SEE LICENSE IN <License.txt>\"\n}"
  },
  {
    "path": "src/js/autoinit/callbacks/free.js",
    "content": "import EventHandler from '../../mdb/dom/event-handler';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport {\n  isDisabled,\n  getElementFromSelector,\n  isVisible,\n  getSelectorFromElement,\n} from '../../mdb/util';\nimport { enableDismissTrigger } from '../../bootstrap/mdb-prefix/util/component-functions';\n\nconst callbackInitState = new Map();\n\nconst alertCallback = (component, initSelector) => {\n  const Alert = component;\n\n  if (!callbackInitState.has(component.name)) {\n    enableDismissTrigger(Alert);\n    callbackInitState.set(component.name, true);\n  }\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Alert.getOrCreateInstance(element);\n  });\n};\n\nconst buttonCallback = (component, initSelector) => {\n  const Button = component;\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n\n  if (!callbackInitState.has(component.name)) {\n    // BS init\n    EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, (event) => {\n      event.preventDefault();\n\n      const button = event.target.closest(initSelector);\n      const data = Button.getOrCreateInstance(button);\n\n      data.toggle();\n    });\n    callbackInitState.set(component.name, true);\n  }\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Button.getOrCreateInstance(element);\n  });\n};\n\nconst carouselCallback = (component, initSelector) => {\n  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const Carousel = component;\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const SELECTOR_DATA_RIDE = initSelector;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    event.preventDefault();\n\n    const carousel = Carousel.getOrCreateInstance(target);\n    const slideIndex = this.getAttribute('data-mdb-slide-to');\n\n    if (slideIndex) {\n      carousel.to(slideIndex);\n      carousel._maybeEnableCycle();\n      return;\n    }\n\n    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n      carousel.next();\n      carousel._maybeEnableCycle();\n      return;\n    }\n\n    carousel.prev();\n    carousel._maybeEnableCycle();\n  });\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    carousels.forEach((carousel) => {\n      Carousel.getOrCreateInstance(carousel);\n    });\n  });\n\n  callbackInitState.set(component.name, true);\n};\n\nconst collapseCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const SELECTOR_DATA_TOGGLE = initSelector;\n  const Collapse = component;\n\n  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n      // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n      if (\n        event.target.tagName === 'A' ||\n        (event.delegateTarget && event.delegateTarget.tagName === 'A')\n      ) {\n        event.preventDefault();\n      }\n\n      const selector = getSelectorFromElement(this);\n      const selectorElements = SelectorEngine.find(selector);\n\n      selectorElements.forEach((element) => {\n        Collapse.getOrCreateInstance(element, { toggle: false }).toggle();\n      });\n    });\n\n    callbackInitState.set(component.name, true);\n  }\n\n  SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {\n    const selector = getSelectorFromElement(el);\n    const selectorElements = SelectorEngine.find(selector);\n\n    selectorElements.forEach((element) => {\n      Collapse.getOrCreateInstance(element, { toggle: false });\n    });\n  });\n};\n\nconst dropdownCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const EVENT_KEYDOWN_DATA_API = `keydown.bs.${component.name}.data-api`;\n  const EVENT_KEYUP_DATA_API = `keyup.bs.${component.name}.data-api`;\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_DATA_TOGGLE = `[data-mdb-${component.NAME}-initialized]`;\n  const Dropdown = component;\n\n  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(\n      document,\n      EVENT_KEYDOWN_DATA_API,\n      SELECTOR_DATA_TOGGLE,\n      Dropdown.dataApiKeydownHandler\n    );\n    EventHandler.on(\n      document,\n      EVENT_KEYDOWN_DATA_API,\n      SELECTOR_MENU,\n      Dropdown.dataApiKeydownHandler\n    );\n    EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\n    EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n    EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n      event.preventDefault();\n      Dropdown.getOrCreateInstance(this).toggle();\n    });\n  }\n\n  callbackInitState.set(component.name, true);\n\n  SelectorEngine.find(initSelector).forEach((el) => {\n    Dropdown.getOrCreateInstance(el);\n  });\n};\n\nconst inputCallback = (component, initSelector) => {\n  const SELECTOR_DATA_INIT = initSelector;\n  const SELECTOR_OUTLINE_INPUT = `${SELECTOR_DATA_INIT} input`;\n  const SELECTOR_OUTLINE_TEXTAREA = `${SELECTOR_DATA_INIT} textarea`;\n  const Input = component;\n\n  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(document, 'focus', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));\n    EventHandler.on(document, 'input', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));\n    EventHandler.on(document, 'blur', SELECTOR_OUTLINE_INPUT, Input.deactivate(new Input()));\n\n    EventHandler.on(document, 'focus', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));\n    EventHandler.on(document, 'input', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));\n    EventHandler.on(document, 'blur', SELECTOR_OUTLINE_TEXTAREA, Input.deactivate(new Input()));\n\n    EventHandler.on(window, 'shown.bs.modal', (e) => {\n      SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.update();\n      });\n      SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.update();\n      });\n    });\n\n    EventHandler.on(window, 'shown.bs.dropdown', (e) => {\n      const target = e.target.parentNode.querySelector('.dropdown-menu');\n      if (target) {\n        SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {\n          const instance = Input.getInstance(element.parentNode);\n          if (!instance) {\n            return;\n          }\n          instance.update();\n        });\n        SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {\n          const instance = Input.getInstance(element.parentNode);\n          if (!instance) {\n            return;\n          }\n          instance.update();\n        });\n      }\n    });\n\n    EventHandler.on(window, 'shown.bs.tab', (e) => {\n      let targetId;\n\n      if (e.target.href) {\n        targetId = e.target.href.split('#')[1];\n      } else {\n        targetId = Manipulator.getDataAttribute(e.target, 'target').split('#')[1];\n      }\n\n      const target = SelectorEngine.findOne(`#${targetId}`);\n      SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.update();\n      });\n      SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.update();\n      });\n    });\n\n    // form reset handler\n    EventHandler.on(window, 'reset', (e) => {\n      SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.forceInactive();\n      });\n      SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.forceInactive();\n      });\n    });\n\n    // auto-fill\n    EventHandler.on(window, 'onautocomplete', (e) => {\n      const instance = Input.getInstance(e.target.parentNode);\n      if (!instance || !e.cancelable) {\n        return;\n      }\n      instance.forceActive();\n    });\n\n    callbackInitState.set(component.name, true);\n  }\n\n  // auto-init\n  SelectorEngine.find(SELECTOR_DATA_INIT).map((element) => Input.getOrCreateInstance(element));\n};\n\nconst modalCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const OPEN_SELECTOR = '.modal.show';\n  const Modal = component;\n  const EVENT_SHOW = `show.bs.${component.name}`;\n  const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n\n  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n      const target = getElementFromSelector(this);\n\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n\n      EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n        if (showEvent.defaultPrevented) {\n          // only register focus restorer if modal will actually get shown\n          return;\n        }\n\n        EventHandler.one(target, EVENT_HIDDEN, () => {\n          if (isVisible(this)) {\n            this.focus();\n          }\n        });\n      });\n\n      // avoid conflict when clicking modal toggler while another one is open\n      const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n      alreadyOpenedModals.forEach((modal) => {\n        if (!modal.classList.contains('modal-non-invasive-show')) {\n          Modal.getInstance(modal).hide();\n        }\n      });\n\n      const data = Modal.getOrCreateInstance(target);\n\n      data.toggle(this);\n    });\n\n    enableDismissTrigger(Modal);\n    callbackInitState.set(component.name, true);\n  }\n\n  SelectorEngine.find(initSelector).forEach((el) => {\n    const selector = getSelectorFromElement(el);\n    const selectorElement = SelectorEngine.findOne(selector);\n\n    Modal.getOrCreateInstance(selectorElement);\n  });\n};\n\nconst popoverCallback = (component, initSelector) => {\n  const Popover = component;\n  const SELECTOR_DATA_TOGGLE = initSelector;\n\n  SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {\n    Popover.getOrCreateInstance(el);\n  });\n};\n\nconst offcanvasCallback = (component, initSelector) => {\n  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const Offcanvas = component;\n  const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const EVENT_RESIZE = `resize.bs.${component.name}`;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n\n    // avoid conflict when clicking a toggler of an offcanvas, while another is open\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n    if (alreadyOpen && alreadyOpen !== target) {\n      Offcanvas.getInstance(alreadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(OPEN_SELECTOR).forEach((selector) => {\n      Offcanvas.getOrCreateInstance(selector).show();\n    });\n  });\n\n  EventHandler.on(window, EVENT_RESIZE, () => {\n    SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]').forEach((element) => {\n      if (getComputedStyle(element).position !== 'fixed') {\n        Offcanvas.getOrCreateInstance(element).hide();\n      }\n    });\n  });\n\n  enableDismissTrigger(Offcanvas);\n  callbackInitState.set(component.name, true);\n};\n\nconst scrollspyCallback = (component, initSelector) => {\n  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const ScrollSpy = component;\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(initSelector).forEach((el) => {\n      ScrollSpy.getOrCreateInstance(el);\n    });\n  });\n\n  callbackInitState.set(component.name, true);\n};\n\nconst tabCallback = (component, initSelector) => {\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const CLASS_NAME_ACTIVE = 'active';\n  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-tab-init], .${CLASS_NAME_ACTIVE}[data-mdb-pill-init], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"list\"]`;\n  const Tab = component;\n\n  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      Tab.getOrCreateInstance(this).show();\n    });\n\n    EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n      SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE).forEach((element) => {\n        Tab.getOrCreateInstance(element);\n      });\n    });\n\n    callbackInitState.set(component.name, true);\n  }\n};\n\nconst toastCallback = (component, initSelector) => {\n  const Toast = component;\n\n  if (!callbackInitState.has(component.name)) {\n    enableDismissTrigger(Toast);\n    callbackInitState.set(component.name, true);\n  }\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Toast.getOrCreateInstance(element);\n  });\n};\n\nconst rippleCallback = (component, initSelector) => {\n  const Ripple = component;\n\n  if (!callbackInitState.has(component.name)) {\n    EventHandler.one(document, 'mousedown', initSelector, Ripple.autoInitial(new Ripple()));\n    callbackInitState.set(component.name, true);\n  }\n};\n\nexport {\n  alertCallback,\n  buttonCallback,\n  carouselCallback,\n  collapseCallback,\n  dropdownCallback,\n  inputCallback,\n  modalCallback,\n  offcanvasCallback,\n  tabCallback,\n  toastCallback,\n  popoverCallback,\n  rippleCallback,\n  scrollspyCallback,\n};\n"
  },
  {
    "path": "src/js/autoinit/index.free.js",
    "content": "import defaultInitSelectors from './initSelectors/free';\nimport { InitMDB } from './init';\n\nconst initMDBInstance = new InitMDB(defaultInitSelectors);\nconst initMDB = initMDBInstance.initMDB;\n\nexport default initMDB;\n"
  },
  {
    "path": "src/js/autoinit/init.js",
    "content": "import SelectorEngine from '../mdb/dom/selector-engine';\nimport { defineJQueryPlugin } from '../mdb/util/index';\n\nconst mapComponentsData = (() => {\n  const componentsData = [];\n  return {\n    set(componentName) {\n      componentsData.push(componentName);\n    },\n    get(componentName) {\n      return componentsData.includes(componentName);\n    },\n  };\n})();\n\nexport const InitializedComponents = {\n  set(componentName) {\n    mapComponentsData.set(componentName);\n  },\n  get(componentName) {\n    return mapComponentsData.get(componentName);\n  },\n};\n\nconst isInitialized = (componentName) => {\n  return InitializedComponents.get(componentName);\n};\n\nexport const bindCallbackEventsIfNeeded = (component) => {\n  if (!isInitialized(component.NAME)) {\n    const manualInit = true;\n    initComponent(component, manualInit);\n  }\n};\n\nconst initComponent = (component, manualInit = false) => {\n  if (!component || InitializedComponents.get(component.NAME)) {\n    return;\n  }\n\n  if (!manualInit) {\n    InitializedComponents.set(component.NAME);\n  }\n\n  const thisComponent = _defaultInitSelectors[component.NAME] || null;\n  const isToggler = thisComponent?.isToggler || false;\n\n  defineJQueryPlugin(component);\n  if (thisComponent?.advanced) {\n    thisComponent.advanced(component, thisComponent?.selector);\n    return;\n  }\n\n  if (isToggler) {\n    thisComponent.callback(component, thisComponent?.selector);\n\n    return;\n  }\n\n  if (manualInit) {\n    return;\n  }\n\n  SelectorEngine.find(thisComponent?.selector).forEach((element) => {\n    let instance = component.getInstance(element);\n    if (!instance) {\n      instance = new component(element); // eslint-disable-line\n      if (thisComponent?.onInit) {\n        instance[thisComponent.onInit]();\n      }\n    }\n  });\n};\n\nlet _defaultInitSelectors;\nexport class InitMDB {\n  constructor(defaultInitSelectors) {\n    _defaultInitSelectors = defaultInitSelectors;\n  }\n\n  init = (components) => {\n    components.forEach((component) => initComponent(component));\n  };\n\n  initMDB = (components, checkOtherImports = false) => {\n    const componentList = Object.keys(_defaultInitSelectors).map((element) => {\n      const requireAutoInit = Boolean(\n        document.querySelector(_defaultInitSelectors[element].selector)\n      );\n\n      if (requireAutoInit) {\n        const component = components[_defaultInitSelectors[element].name];\n        if (!component && !InitializedComponents.get(element) && checkOtherImports) {\n          // eslint-disable-next-line no-console\n          console.warn(\n            `Please import ${_defaultInitSelectors[element].name} from \"MDB\" package and add it to a object parameter inside \"initMDB\" function`\n          );\n        }\n        return component;\n      }\n\n      return null;\n    });\n\n    this.init(componentList);\n  };\n}\n"
  },
  {
    "path": "src/js/autoinit/initSelectors/free.js",
    "content": "import {\n  alertCallback,\n  dropdownCallback,\n  offcanvasCallback,\n  tabCallback,\n  buttonCallback,\n  modalCallback,\n  rippleCallback,\n  collapseCallback,\n  carouselCallback,\n  scrollspyCallback,\n  toastCallback,\n  inputCallback,\n} from '../callbacks/free';\n\nconst defaultInitSelectors = {\n  // Bootstrap Components\n  alert: {\n    name: 'Alert',\n    selector: '[data-mdb-alert-init]',\n    isToggler: true,\n    callback: alertCallback,\n  },\n  button: {\n    name: 'Button',\n    selector: '[data-mdb-button-init]',\n    isToggler: true,\n    callback: buttonCallback,\n  },\n  carousel: {\n    name: 'Carousel',\n    selector: '[data-mdb-carousel-init]',\n    isToggler: true,\n    callback: carouselCallback,\n  },\n  collapse: {\n    name: 'Collapse',\n    selector: '[data-mdb-collapse-init]',\n    isToggler: true,\n    callback: collapseCallback,\n  },\n  dropdown: {\n    name: 'Dropdown',\n    selector: '[data-mdb-dropdown-init]',\n    isToggler: true,\n    callback: dropdownCallback,\n  },\n  modal: {\n    name: 'Modal',\n    selector: '[data-mdb-modal-init]',\n    isToggler: true,\n    callback: modalCallback,\n  },\n  offcanvas: {\n    name: 'Offcanvas',\n    selector: '[data-mdb-offcanvas-init]',\n    isToggler: true,\n    callback: offcanvasCallback,\n  },\n  scrollspy: {\n    name: 'ScrollSpy',\n    selector: '[data-mdb-scrollspy-init]',\n    isToggler: true,\n    callback: scrollspyCallback,\n  },\n  tab: {\n    name: 'Tab',\n    selector: '[data-mdb-tab-init], [data-mdb-pill-init], [data-mdb-list-init]',\n    isToggler: true,\n    callback: tabCallback,\n  },\n  toast: {\n    name: 'Toast',\n    selector: '[data-mdb-toast-init]',\n    isToggler: true,\n    callback: toastCallback,\n  },\n  tooltip: {\n    name: 'Tooltip',\n    selector: '[data-mdb-tooltip-init]',\n    isToggler: false,\n  },\n  input: {\n    name: 'Input',\n    selector: '[data-mdb-input-init]',\n    isToggler: true,\n    callback: inputCallback,\n  },\n  range: {\n    name: 'Range',\n    selector: '[data-mdb-range-init]',\n    isToggler: false,\n  },\n  ripple: {\n    name: 'Ripple',\n    selector: '[data-mdb-ripple-init]',\n    isToggler: true,\n    callback: rippleCallback,\n  },\n  popover: {\n    name: 'Popover',\n    selector: '[data-mdb-popover-init]',\n    isToggler: false,\n    callback: rippleCallback,\n  },\n};\n\nexport default defaultInitSelectors;\n"
  },
  {
    "path": "src/js/bootstrap/dist/alert.js",
    "content": "/*!\n * Bootstrap alert.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./util/component-functions.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        ['./base-component', './dom/event-handler', './util/component-functions', './util/index'],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Alert = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.ComponentFunctions,\n        global.Index\n      )));\n})(this, function (BaseComponent, EventHandler, componentFunctions_js, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'alert';\n  const DATA_KEY = 'bs.alert';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLOSE = `close${EVENT_KEY}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_SHOW = 'show';\n\n  /**\n   * Class definition\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    close() {\n      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n      if (closeEvent.defaultPrevented) {\n        return;\n      }\n      this._element.classList.remove(CLASS_NAME_SHOW);\n      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);\n      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n    }\n\n    // Private\n    _destroyElement() {\n      this._element.remove();\n      EventHandler.trigger(this._element, EVENT_CLOSED);\n      this.dispose();\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  componentFunctions_js.enableDismissTrigger(Alert, 'close');\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Alert);\n\n  return Alert;\n});\n//# sourceMappingURL=alert.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/base-component.js",
    "content": "/*!\n * Bootstrap base-component.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./dom/data.js'),\n        require('./dom/event-handler.js'),\n        require('./util/config.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['./dom/data', './dom/event-handler', './util/config', './util/index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.BaseComponent = factory(\n        global.Data,\n        global.EventHandler,\n        global.Config,\n        global.Index\n      )));\n})(this, function (Data, EventHandler, Config, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const VERSION = '5.3.3';\n\n  /**\n   * Class definition\n   */\n\n  class BaseComponent extends Config {\n    constructor(element, config) {\n      super();\n      element = index_js.getElement(element);\n      if (!element) {\n        return;\n      }\n      this._element = element;\n      this._config = this._getConfig(config);\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    // Public\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      for (const propertyName of Object.getOwnPropertyNames(this)) {\n        this[propertyName] = null;\n      }\n    }\n    _queueCallback(callback, element, isAnimated = true) {\n      index_js.executeAfterTransition(callback, element, isAnimated);\n    }\n    _getConfig(config) {\n      config = this._mergeConfigObj(config, this._element);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n\n    // Static\n    static getInstance(element) {\n      return Data.get(index_js.getElement(element), this.DATA_KEY);\n    }\n    static getOrCreateInstance(element, config = {}) {\n      return (\n        this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n      );\n    }\n    static get VERSION() {\n      return VERSION;\n    }\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n    static eventName(name) {\n      return `${name}${this.EVENT_KEY}`;\n    }\n  }\n\n  return BaseComponent;\n});\n//# sourceMappingURL=base-component.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/button.js",
    "content": "/*!\n * Bootstrap button.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['./base-component', './dom/event-handler', './util/index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Button = factory(global.BaseComponent, global.EventHandler, global.Index)));\n})(this, function (BaseComponent, EventHandler, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'button';\n  const DATA_KEY = 'bs.button';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const DATA_API_KEY = '.data-api';\n  const CLASS_NAME_ACTIVE = 'active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\n  /**\n   * Class definition\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Button);\n\n  return Button;\n});\n//# sourceMappingURL=button.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/carousel.js",
    "content": "/*!\n * Bootstrap carousel.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/manipulator.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/index.js'),\n        require('./util/swipe.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        [\n          './base-component',\n          './dom/event-handler',\n          './dom/manipulator',\n          './dom/selector-engine',\n          './util/index',\n          './util/swipe',\n        ],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Carousel = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.Manipulator,\n        global.SelectorEngine,\n        global.Index,\n        global.Swipe\n      )));\n})(this, function (BaseComponent, EventHandler, Manipulator, SelectorEngine, index_js, Swipe) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'carousel';\n  const DATA_KEY = 'bs.carousel';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const DATA_API_KEY = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const EVENT_SLIDE = `slide${EVENT_KEY}`;\n  const EVENT_SLID = `slid${EVENT_KEY}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT,\n  };\n  const Default = {\n    interval: 5000,\n    keyboard: true,\n    pause: 'hover',\n    ride: false,\n    touch: true,\n    wrap: true,\n  };\n  const DefaultType = {\n    interval: '(number|boolean)',\n    // TODO:v6 remove boolean support\n    keyboard: 'boolean',\n    pause: '(string|boolean)',\n    ride: '(boolean|string)',\n    touch: 'boolean',\n    wrap: 'boolean',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._interval = null;\n      this._activeElement = null;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this._swipeHelper = null;\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._addEventListeners();\n      if (this._config.ride === CLASS_NAME_CAROUSEL) {\n        this.cycle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n    nextWhenVisible() {\n      // FIXME TODO use `document.visibilityState`\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && index_js.isVisible(this._element)) {\n        this.next();\n      }\n    }\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n    pause() {\n      if (this._isSliding) {\n        index_js.triggerTransitionEnd(this._element);\n      }\n      this._clearInterval();\n    }\n    cycle() {\n      this._clearInterval();\n      this._updateInterval();\n      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n    }\n    _maybeEnableCycle() {\n      if (!this._config.ride) {\n        return;\n      }\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n        return;\n      }\n      this.cycle();\n    }\n    to(index) {\n      const items = this._getItems();\n      if (index > items.length - 1 || index < 0) {\n        return;\n      }\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n      const activeIndex = this._getItemIndex(this._getActive());\n      if (activeIndex === index) {\n        return;\n      }\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n      this._slide(order, items[index]);\n    }\n    dispose() {\n      if (this._swipeHelper) {\n        this._swipeHelper.dispose();\n      }\n      super.dispose();\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      config.defaultInterval = config.interval;\n      return config;\n    }\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n      }\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());\n      }\n      if (this._config.touch && Swipe.isSupported()) {\n        this._addTouchEventListeners();\n      }\n    }\n    _addTouchEventListeners() {\n      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n        EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault());\n      }\n      const endCallBack = () => {\n        if (this._config.pause !== 'hover') {\n          return;\n        }\n\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause();\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n        this.touchTimeout = setTimeout(\n          () => this._maybeEnableCycle(),\n          TOUCHEVENT_COMPAT_WAIT + this._config.interval\n        );\n      };\n      const swipeConfig = {\n        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n        endCallback: endCallBack,\n      };\n      this._swipeHelper = new Swipe(this._element, swipeConfig);\n    }\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n      const direction = KEY_TO_DIRECTION[event.key];\n      if (direction) {\n        event.preventDefault();\n        this._slide(this._directionToOrder(direction));\n      }\n    }\n    _getItemIndex(element) {\n      return this._getItems().indexOf(element);\n    }\n    _setActiveIndicatorElement(index) {\n      if (!this._indicatorsElement) {\n        return;\n      }\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE);\n      activeIndicator.removeAttribute('aria-current');\n      const newActiveIndicator = SelectorEngine.findOne(\n        `[data-bs-slide-to=\"${index}\"]`,\n        this._indicatorsElement\n      );\n      if (newActiveIndicator) {\n        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);\n        newActiveIndicator.setAttribute('aria-current', 'true');\n      }\n    }\n    _updateInterval() {\n      const element = this._activeElement || this._getActive();\n      if (!element) {\n        return;\n      }\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n      this._config.interval = elementInterval || this._config.defaultInterval;\n    }\n    _slide(order, element = null) {\n      if (this._isSliding) {\n        return;\n      }\n      const activeElement = this._getActive();\n      const isNext = order === ORDER_NEXT;\n      const nextElement =\n        element ||\n        index_js.getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n      if (nextElement === activeElement) {\n        return;\n      }\n      const nextElementIndex = this._getItemIndex(nextElement);\n      const triggerEvent = (eventName) => {\n        return EventHandler.trigger(this._element, eventName, {\n          relatedTarget: nextElement,\n          direction: this._orderToDirection(order),\n          from: this._getItemIndex(activeElement),\n          to: nextElementIndex,\n        });\n      };\n      const slideEvent = triggerEvent(EVENT_SLIDE);\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        // TODO: change tests that use empty divs to avoid this check\n        return;\n      }\n      const isCycling = Boolean(this._interval);\n      this.pause();\n      this._isSliding = true;\n      this._setActiveIndicatorElement(nextElementIndex);\n      this._activeElement = nextElement;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n      nextElement.classList.add(orderClassName);\n      index_js.reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);\n        this._isSliding = false;\n        triggerEvent(EVENT_SLID);\n      };\n      this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_SLIDE);\n    }\n    _getActive() {\n      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n    }\n    _getItems() {\n      return SelectorEngine.find(SELECTOR_ITEM, this._element);\n    }\n    _clearInterval() {\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n    }\n    _directionToOrder(direction) {\n      if (index_js.isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n    _orderToDirection(order) {\n      if (index_js.isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Carousel.getOrCreateInstance(this, config);\n        if (typeof config === 'number') {\n          data.to(config);\n          return;\n        }\n        if (typeof config === 'string') {\n          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n    event.preventDefault();\n    const carousel = Carousel.getOrCreateInstance(target);\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n    if (slideIndex) {\n      carousel.to(slideIndex);\n      carousel._maybeEnableCycle();\n      return;\n    }\n    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n      carousel.next();\n      carousel._maybeEnableCycle();\n      return;\n    }\n    carousel.prev();\n    carousel._maybeEnableCycle();\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n    for (const carousel of carousels) {\n      Carousel.getOrCreateInstance(carousel);\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Carousel);\n\n  return Carousel;\n});\n//# sourceMappingURL=carousel.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/collapse.js",
    "content": "/*!\n * Bootstrap collapse.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        ['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Collapse = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.SelectorEngine,\n        global.Index\n      )));\n})(this, function (BaseComponent, EventHandler, SelectorEngine, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'collapse';\n  const DATA_KEY = 'bs.collapse';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\n  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]';\n  const Default = {\n    parent: null,\n    toggle: true,\n  };\n  const DefaultType = {\n    parent: '(null|element)',\n    toggle: 'boolean',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._isTransitioning = false;\n      this._triggerArray = [];\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);\n      for (const elem of toggleList) {\n        const selector = SelectorEngine.getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(\n          (foundElement) => foundElement === this._element\n        );\n        if (selector !== null && filterElement.length) {\n          this._triggerArray.push(elem);\n        }\n      }\n      this._initializeChildren();\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n      }\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    toggle() {\n      if (this._isShown()) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n    show() {\n      if (this._isTransitioning || this._isShown()) {\n        return;\n      }\n      let activeChildren = [];\n\n      // find active children\n      if (this._config.parent) {\n        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n          .filter((element) => element !== this._element)\n          .map((element) =>\n            Collapse.getOrCreateInstance(element, {\n              toggle: false,\n            })\n          );\n      }\n      if (activeChildren.length && activeChildren[0]._isTransitioning) {\n        return;\n      }\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n      for (const activeInstance of activeChildren) {\n        activeInstance.hide();\n      }\n      const dimension = this._getDimension();\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n      this._addAriaAndCollapsedClass(this._triggerArray, true);\n      this._isTransitioning = true;\n      const complete = () => {\n        this._isTransitioning = false;\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n        this._element.style[dimension] = '';\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n      };\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n      this._queueCallback(complete, this._element, true);\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n    hide() {\n      if (this._isTransitioning || !this._isShown()) {\n        return;\n      }\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n      const dimension = this._getDimension();\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      index_js.reflow(this._element);\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n      for (const trigger of this._triggerArray) {\n        const element = SelectorEngine.getElementFromSelector(trigger);\n        if (element && !this._isShown(element)) {\n          this._addAriaAndCollapsedClass([trigger], false);\n        }\n      }\n      this._isTransitioning = true;\n      const complete = () => {\n        this._isTransitioning = false;\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n      this._element.style[dimension] = '';\n      this._queueCallback(complete, this._element, true);\n    }\n    _isShown(element = this._element) {\n      return element.classList.contains(CLASS_NAME_SHOW);\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      config.toggle = Boolean(config.toggle); // Coerce string values\n      config.parent = index_js.getElement(config.parent);\n      return config;\n    }\n    _getDimension() {\n      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n    }\n    _initializeChildren() {\n      if (!this._config.parent) {\n        return;\n      }\n      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);\n      for (const element of children) {\n        const selected = SelectorEngine.getElementFromSelector(element);\n        if (selected) {\n          this._addAriaAndCollapsedClass([element], this._isShown(selected));\n        }\n      }\n    }\n    _getFirstLevelChildren(selector) {\n      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n      // remove children if greater depth\n      return SelectorEngine.find(selector, this._config.parent).filter(\n        (element) => !children.includes(element)\n      );\n    }\n    _addAriaAndCollapsedClass(triggerArray, isOpen) {\n      if (!triggerArray.length) {\n        return;\n      }\n      for (const element of triggerArray) {\n        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n        element.setAttribute('aria-expanded', isOpen);\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      const _config = {};\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n      return this.each(function () {\n        const data = Collapse.getOrCreateInstance(this, _config);\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (\n      event.target.tagName === 'A' ||\n      (event.delegateTarget && event.delegateTarget.tagName === 'A')\n    ) {\n      event.preventDefault();\n    }\n    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n      Collapse.getOrCreateInstance(element, {\n        toggle: false,\n      }).toggle();\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Collapse);\n\n  return Collapse;\n});\n//# sourceMappingURL=collapse.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/dom/data.js",
    "content": "/*!\n * Bootstrap data.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory())\n    : typeof define === 'function' && define.amd\n    ? define(factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Data = factory()));\n})(this, function () {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const elementMap = new Map();\n  const data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n      const instanceMap = elementMap.get(element);\n\n      // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(\n          `Bootstrap doesn't allow more than one instance per element. Bound instance: ${\n            Array.from(instanceMap.keys())[0]\n          }.`\n        );\n        return;\n      }\n      instanceMap.set(key, instance);\n    },\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n      return null;\n    },\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key);\n\n      // free up element references if there are no instances left for an element\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    },\n  };\n\n  return data;\n});\n//# sourceMappingURL=data.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/dom/event-handler.js",
    "content": "/*!\n * Bootstrap event-handler.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(require('../util/index.js')))\n    : typeof define === 'function' && define.amd\n    ? define(['../util/index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.EventHandler = factory(global.Index)));\n})(this, function (index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout',\n  };\n  const nativeEvents = new Set([\n    'click',\n    'dblclick',\n    'mouseup',\n    'mousedown',\n    'contextmenu',\n    'mousewheel',\n    'DOMMouseScroll',\n    'mouseover',\n    'mouseout',\n    'mousemove',\n    'selectstart',\n    'selectend',\n    'keydown',\n    'keypress',\n    'keyup',\n    'orientationchange',\n    'touchstart',\n    'touchmove',\n    'touchend',\n    'touchcancel',\n    'pointerdown',\n    'pointermove',\n    'pointerup',\n    'pointerleave',\n    'pointercancel',\n    'gesturestart',\n    'gesturechange',\n    'gestureend',\n    'focus',\n    'blur',\n    'change',\n    'reset',\n    'select',\n    'submit',\n    'focusin',\n    'focusout',\n    'load',\n    'unload',\n    'beforeunload',\n    'resize',\n    'move',\n    'DOMContentLoaded',\n    'readystatechange',\n    'error',\n    'abort',\n    'scroll',\n  ]);\n\n  /**\n   * Private methods\n   */\n\n  function makeEventUid(element, uid) {\n    return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n  }\n  function getElementEvents(element) {\n    const uid = makeEventUid(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      hydrateObj(event, {\n        delegateTarget: element,\n      });\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n      return fn.apply(element, [event]);\n    };\n  }\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n      for (let { target } = event; target && target !== this; target = target.parentNode) {\n        for (const domElement of domElements) {\n          if (domElement !== target) {\n            continue;\n          }\n          hydrateObj(event, {\n            delegateTarget: target,\n          });\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn);\n          }\n          return fn.apply(target, [event]);\n        }\n      }\n    };\n  }\n  function findHandler(events, callable, delegationSelector = null) {\n    return Object.values(events).find(\n      (event) => event.callable === callable && event.delegationSelector === delegationSelector\n    );\n  }\n  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n    const isDelegated = typeof handler === 'string';\n    // TODO: tooltip passes `false` instead of selector, so we need to check\n    const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    if (!nativeEvents.has(typeEvent)) {\n      typeEvent = originalTypeEvent;\n    }\n    return [isDelegated, callable, typeEvent];\n  }\n  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n    let [isDelegated, callable, typeEvent] = normalizeParameters(\n      originalTypeEvent,\n      handler,\n      delegationFunction\n    );\n\n    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n    if (originalTypeEvent in customEvents) {\n      const wrapFunction = (fn) => {\n        return function (event) {\n          if (\n            !event.relatedTarget ||\n            (event.relatedTarget !== event.delegateTarget &&\n              !event.delegateTarget.contains(event.relatedTarget))\n          ) {\n            return fn.call(this, event);\n          }\n        };\n      };\n      callable = wrapFunction(callable);\n    }\n    const events = getElementEvents(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n    if (previousFunction) {\n      previousFunction.oneOff = previousFunction.oneOff && oneOff;\n      return;\n    }\n    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = isDelegated\n      ? bootstrapDelegationHandler(element, handler, callable)\n      : bootstrapHandler(element, callable);\n    fn.delegationSelector = isDelegated ? handler : null;\n    fn.callable = callable;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, isDelegated);\n  }\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n    if (!fn) {\n      return;\n    }\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n      if (handlerKey.includes(namespace)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  }\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n  const EventHandler = {\n    on(element, event, handler, delegationFunction) {\n      addHandler(element, event, handler, delegationFunction, false);\n    },\n    one(element, event, handler, delegationFunction) {\n      addHandler(element, event, handler, delegationFunction, true);\n    },\n    off(element, originalTypeEvent, handler, delegationFunction) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n      const [isDelegated, callable, typeEvent] = normalizeParameters(\n        originalTypeEvent,\n        handler,\n        delegationFunction\n      );\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getElementEvents(element);\n      const storeElementEvent = events[typeEvent] || {};\n      const isNamespace = originalTypeEvent.startsWith('.');\n      if (typeof callable !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!Object.keys(storeElementEvent).length) {\n          return;\n        }\n        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n        return;\n      }\n      if (isNamespace) {\n        for (const elementEvent of Object.keys(events)) {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        }\n      }\n      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n        }\n      }\n    },\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n      const $ = index_js.getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      let jQueryEvent = null;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n      const evt = hydrateObj(\n        new Event(event, {\n          bubbles,\n          cancelable: true,\n        }),\n        args\n      );\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n      if (evt.defaultPrevented && jQueryEvent) {\n        jQueryEvent.preventDefault();\n      }\n      return evt;\n    },\n  };\n  function hydrateObj(obj, meta = {}) {\n    for (const [key, value] of Object.entries(meta)) {\n      try {\n        obj[key] = value;\n      } catch (_unused) {\n        Object.defineProperty(obj, key, {\n          configurable: true,\n          get() {\n            return value;\n          },\n        });\n      }\n    }\n    return obj;\n  }\n\n  return EventHandler;\n});\n//# sourceMappingURL=event-handler.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/dom/manipulator.js",
    "content": "/*!\n * Bootstrap manipulator.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory())\n    : typeof define === 'function' && define.amd\n    ? define(factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Manipulator = factory()));\n})(this, function () {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  function normalizeData(value) {\n    if (value === 'true') {\n      return true;\n    }\n    if (value === 'false') {\n      return false;\n    }\n    if (value === Number(value).toString()) {\n      return Number(value);\n    }\n    if (value === '' || value === 'null') {\n      return null;\n    }\n    if (typeof value !== 'string') {\n      return value;\n    }\n    try {\n      return JSON.parse(decodeURIComponent(value));\n    } catch (_unused) {\n      return value;\n    }\n  }\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n  }\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n      const attributes = {};\n      const bsKeys = Object.keys(element.dataset).filter(\n        (key) => key.startsWith('bs') && !key.startsWith('bsConfig')\n      );\n      for (const key of bsKeys) {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      }\n      return attributes;\n    },\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n  };\n\n  return Manipulator;\n});\n//# sourceMappingURL=manipulator.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/dom/selector-engine.js",
    "content": "/*!\n * Bootstrap selector-engine.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(require('../util/index.js')))\n    : typeof define === 'function' && define.amd\n    ? define(['../util/index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.SelectorEngine = factory(global.Index)));\n})(this, function (index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const getSelector = (element) => {\n    let selector = element.getAttribute('data-bs-target');\n    if (!selector || selector === '#') {\n      let hrefAttribute = element.getAttribute('href');\n\n      // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n      if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n        return null;\n      }\n\n      // Just in case some CMS puts out a full URL with the anchor appended\n      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n      }\n      selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n    }\n    return selector\n      ? selector\n          .split(',')\n          .map((sel) => index_js.parseSelector(sel))\n          .join(',')\n      : null;\n  };\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n    children(element, selector) {\n      return [].concat(...element.children).filter((child) => child.matches(selector));\n    },\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode.closest(selector);\n      while (ancestor) {\n        parents.push(ancestor);\n        ancestor = ancestor.parentNode.closest(selector);\n      }\n      return parents;\n    },\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n        previous = previous.previousElementSibling;\n      }\n      return [];\n    },\n    // TODO: this is now unused; remove later along with prev()\n    next(element, selector) {\n      let next = element.nextElementSibling;\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n        next = next.nextElementSibling;\n      }\n      return [];\n    },\n    focusableChildren(element) {\n      const focusables = [\n        'a',\n        'button',\n        'input',\n        'textarea',\n        'select',\n        'details',\n        '[tabindex]',\n        '[contenteditable=\"true\"]',\n      ]\n        .map((selector) => `${selector}:not([tabindex^=\"-\"])`)\n        .join(',');\n      return this.find(focusables, element).filter(\n        (el) => !index_js.isDisabled(el) && index_js.isVisible(el)\n      );\n    },\n    getSelectorFromElement(element) {\n      const selector = getSelector(element);\n      if (selector) {\n        return SelectorEngine.findOne(selector) ? selector : null;\n      }\n      return null;\n    },\n    getElementFromSelector(element) {\n      const selector = getSelector(element);\n      return selector ? SelectorEngine.findOne(selector) : null;\n    },\n    getMultipleElementsFromSelector(element) {\n      const selector = getSelector(element);\n      return selector ? SelectorEngine.find(selector) : [];\n    },\n  };\n\n  return SelectorEngine;\n});\n//# sourceMappingURL=selector-engine.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/dropdown.js",
    "content": "/*!\n * Bootstrap dropdown.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('@popperjs/core'),\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/manipulator.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        [\n          '@popperjs/core',\n          './base-component',\n          './dom/event-handler',\n          './dom/manipulator',\n          './dom/selector-engine',\n          './util/index',\n        ],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Dropdown = factory(\n        global['@popperjs/core'],\n        global.BaseComponent,\n        global.EventHandler,\n        global.Manipulator,\n        global.SelectorEngine,\n        global.Index\n      )));\n})(this, function (Popper, BaseComponent, EventHandler, Manipulator, SelectorEngine, index_js) {\n  'use strict';\n\n  function _interopNamespaceDefault(e) {\n    const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });\n    if (e) {\n      for (const k in e) {\n        if (k !== 'default') {\n          const d = Object.getOwnPropertyDescriptor(e, k);\n          Object.defineProperty(\n            n,\n            k,\n            d.get\n              ? d\n              : {\n                  enumerable: true,\n                  get: () => e[k],\n                }\n          );\n        }\n      }\n    }\n    n.default = e;\n    return Object.freeze(n);\n  }\n\n  const Popper__namespace = /*#__PURE__*/ _interopNamespaceDefault(Popper);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'dropdown';\n  const DATA_KEY = 'bs.dropdown';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const DATA_API_KEY = '.data-api';\n  const ESCAPE_KEY = 'Escape';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';\n  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\n  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`;\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR = '.navbar';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = index_js.isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = index_js.isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = index_js.isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = index_js.isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = index_js.isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = index_js.isRTL() ? 'right-start' : 'left-start';\n  const PLACEMENT_TOPCENTER = 'top';\n  const PLACEMENT_BOTTOMCENTER = 'bottom';\n  const Default = {\n    autoClose: true,\n    boundary: 'clippingParents',\n    display: 'dynamic',\n    offset: [0, 2],\n    popperConfig: null,\n    reference: 'toggle',\n  };\n  const DefaultType = {\n    autoClose: '(boolean|string)',\n    boundary: '(string|element)',\n    display: 'string',\n    offset: '(array|string|function)',\n    popperConfig: '(null|object|function)',\n    reference: '(string|element|object)',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._popper = null;\n      this._parent = this._element.parentNode; // dropdown wrapper\n      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n      this._menu =\n        SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n        SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n        SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n      this._inNavbar = this._detectNavbar();\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    toggle() {\n      return this._isShown() ? this.hide() : this.show();\n    }\n    show() {\n      if (index_js.isDisabled(this._element) || this._isShown()) {\n        return;\n      }\n      const relatedTarget = {\n        relatedTarget: this._element,\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._createPopper();\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if (\n        'ontouchstart' in document.documentElement &&\n        !this._parent.closest(SELECTOR_NAVBAR_NAV)\n      ) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.on(element, 'mouseover', index_js.noop);\n        }\n      }\n      this._element.focus();\n      this._element.setAttribute('aria-expanded', true);\n      this._menu.classList.add(CLASS_NAME_SHOW);\n      this._element.classList.add(CLASS_NAME_SHOW);\n      EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);\n    }\n    hide() {\n      if (index_js.isDisabled(this._element) || !this._isShown()) {\n        return;\n      }\n      const relatedTarget = {\n        relatedTarget: this._element,\n      };\n      this._completeHide(relatedTarget);\n    }\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n      super.dispose();\n    }\n    update() {\n      this._inNavbar = this._detectNavbar();\n      if (this._popper) {\n        this._popper.update();\n      }\n    }\n\n    // Private\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.off(element, 'mouseover', index_js.noop);\n        }\n      }\n      if (this._popper) {\n        this._popper.destroy();\n      }\n      this._menu.classList.remove(CLASS_NAME_SHOW);\n      this._element.classList.remove(CLASS_NAME_SHOW);\n      this._element.setAttribute('aria-expanded', 'false');\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);\n    }\n    _getConfig(config) {\n      config = super._getConfig(config);\n      if (\n        typeof config.reference === 'object' &&\n        !index_js.isElement(config.reference) &&\n        typeof config.reference.getBoundingClientRect !== 'function'\n      ) {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(\n          `${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`\n        );\n      }\n      return config;\n    }\n    _createPopper() {\n      if (typeof Popper__namespace === 'undefined') {\n        throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");\n      }\n      let referenceElement = this._element;\n      if (this._config.reference === 'parent') {\n        referenceElement = this._parent;\n      } else if (index_js.isElement(this._config.reference)) {\n        referenceElement = index_js.getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n      const popperConfig = this._getPopperConfig();\n      this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);\n    }\n    _isShown() {\n      return this._menu.classList.contains(CLASS_NAME_SHOW);\n    }\n    _getPlacement() {\n      const parentDropdown = this._parent;\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n        return PLACEMENT_TOPCENTER;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n        return PLACEMENT_BOTTOMCENTER;\n      }\n\n      // We need to trim the value because custom properties can also include spaces\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n    _detectNavbar() {\n      return this._element.closest(SELECTOR_NAVBAR) !== null;\n    }\n    _getOffset() {\n      const { offset } = this._config;\n      if (typeof offset === 'string') {\n        return offset.split(',').map((value) => Number.parseInt(value, 10));\n      }\n      if (typeof offset === 'function') {\n        return (popperData) => offset(popperData, this._element);\n      }\n      return offset;\n    }\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [\n          {\n            name: 'preventOverflow',\n            options: {\n              boundary: this._config.boundary,\n            },\n          },\n          {\n            name: 'offset',\n            options: {\n              offset: this._getOffset(),\n            },\n          },\n        ],\n      };\n\n      // Disable Popper if we have a static display or Dropdown is in Navbar\n      if (this._inNavbar || this._config.display === 'static') {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n        defaultBsPopperConfig.modifiers = [\n          {\n            name: 'applyStyles',\n            enabled: false,\n          },\n        ];\n      }\n      return {\n        ...defaultBsPopperConfig,\n        ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig]),\n      };\n    }\n    _selectMenuItem({ key, target }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) =>\n        index_js.isVisible(element)\n      );\n      if (!items.length) {\n        return;\n      }\n\n      // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n      index_js\n        .getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target))\n        .focus();\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Dropdown.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n    static clearMenus(event) {\n      if (\n        event.button === RIGHT_MOUSE_BUTTON ||\n        (event.type === 'keyup' && event.key !== TAB_KEY)\n      ) {\n        return;\n      }\n      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n      for (const toggle of openToggles) {\n        const context = Dropdown.getInstance(toggle);\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n        if (\n          composedPath.includes(context._element) ||\n          (context._config.autoClose === 'inside' && !isMenuTarget) ||\n          (context._config.autoClose === 'outside' && isMenuTarget)\n        ) {\n          continue;\n        }\n\n        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n        if (\n          context._menu.contains(event.target) &&\n          ((event.type === 'keyup' && event.key === TAB_KEY) ||\n            /input|select|option|textarea|form/i.test(event.target.tagName))\n        ) {\n          continue;\n        }\n        const relatedTarget = {\n          relatedTarget: context._element,\n        };\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n        context._completeHide(relatedTarget);\n      }\n    }\n    static dataApiKeydownHandler(event) {\n      // If not an UP | DOWN | ESCAPE key => not a dropdown command\n      // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n      const isInput = /input|textarea/i.test(event.target.tagName);\n      const isEscapeEvent = event.key === ESCAPE_KEY;\n      const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);\n      if (!isUpOrDownEvent && !isEscapeEvent) {\n        return;\n      }\n      if (isInput && !isEscapeEvent) {\n        return;\n      }\n      event.preventDefault();\n\n      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE)\n        ? this\n        : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n          SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n          SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);\n      const instance = Dropdown.getOrCreateInstance(getToggleButton);\n      if (isUpOrDownEvent) {\n        event.stopPropagation();\n        instance.show();\n        instance._selectMenuItem(event);\n        return;\n      }\n      if (instance._isShown()) {\n        // else is escape and we check if it is shown\n        event.stopPropagation();\n        instance.hide();\n        getToggleButton.focus();\n      }\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(\n    document,\n    EVENT_KEYDOWN_DATA_API,\n    SELECTOR_DATA_TOGGLE,\n    Dropdown.dataApiKeydownHandler\n  );\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    Dropdown.getOrCreateInstance(this).toggle();\n  });\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Dropdown);\n\n  return Dropdown;\n});\n//# sourceMappingURL=dropdown.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/modal.js",
    "content": "/*!\n * Bootstrap modal.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/backdrop.js'),\n        require('./util/component-functions.js'),\n        require('./util/focustrap.js'),\n        require('./util/index.js'),\n        require('./util/scrollbar.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        [\n          './base-component',\n          './dom/event-handler',\n          './dom/selector-engine',\n          './util/backdrop',\n          './util/component-functions',\n          './util/focustrap',\n          './util/index',\n          './util/scrollbar',\n        ],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Modal = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.SelectorEngine,\n        global.Backdrop,\n        global.ComponentFunctions,\n        global.Focustrap,\n        global.Index,\n        global.Scrollbar\n      )));\n})(\n  this,\n  function (\n    BaseComponent,\n    EventHandler,\n    SelectorEngine,\n    Backdrop,\n    componentFunctions_js,\n    FocusTrap,\n    index_js,\n    ScrollBarHelper\n  ) {\n    'use strict';\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap modal.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    /**\n     * Constants\n     */\n\n    const NAME = 'modal';\n    const DATA_KEY = 'bs.modal';\n    const EVENT_KEY = `.${DATA_KEY}`;\n    const DATA_API_KEY = '.data-api';\n    const ESCAPE_KEY = 'Escape';\n    const EVENT_HIDE = `hide${EVENT_KEY}`;\n    const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\n    const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n    const EVENT_SHOW = `show${EVENT_KEY}`;\n    const EVENT_SHOWN = `shown${EVENT_KEY}`;\n    const EVENT_RESIZE = `resize${EVENT_KEY}`;\n    const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n    const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;\n    const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\n    const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n    const CLASS_NAME_OPEN = 'modal-open';\n    const CLASS_NAME_FADE = 'fade';\n    const CLASS_NAME_SHOW = 'show';\n    const CLASS_NAME_STATIC = 'modal-static';\n    const OPEN_SELECTOR = '.modal.show';\n    const SELECTOR_DIALOG = '.modal-dialog';\n    const SELECTOR_MODAL_BODY = '.modal-body';\n    const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]';\n    const Default = {\n      backdrop: true,\n      focus: true,\n      keyboard: true,\n    };\n    const DefaultType = {\n      backdrop: '(boolean|string)',\n      focus: 'boolean',\n      keyboard: 'boolean',\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Modal extends BaseComponent {\n      constructor(element, config) {\n        super(element, config);\n        this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n        this._backdrop = this._initializeBackDrop();\n        this._focustrap = this._initializeFocusTrap();\n        this._isShown = false;\n        this._isTransitioning = false;\n        this._scrollBar = new ScrollBarHelper();\n        this._addEventListeners();\n      }\n\n      // Getters\n      static get Default() {\n        return Default;\n      }\n      static get DefaultType() {\n        return DefaultType;\n      }\n      static get NAME() {\n        return NAME;\n      }\n\n      // Public\n      toggle(relatedTarget) {\n        return this._isShown ? this.hide() : this.show(relatedTarget);\n      }\n      show(relatedTarget) {\n        if (this._isShown || this._isTransitioning) {\n          return;\n        }\n        const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n          relatedTarget,\n        });\n        if (showEvent.defaultPrevented) {\n          return;\n        }\n        this._isShown = true;\n        this._isTransitioning = true;\n        this._scrollBar.hide();\n        document.body.classList.add(CLASS_NAME_OPEN);\n        this._adjustDialog();\n        this._backdrop.show(() => this._showElement(relatedTarget));\n      }\n      hide() {\n        if (!this._isShown || this._isTransitioning) {\n          return;\n        }\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n        if (hideEvent.defaultPrevented) {\n          return;\n        }\n        this._isShown = false;\n        this._isTransitioning = true;\n        this._focustrap.deactivate();\n        this._element.classList.remove(CLASS_NAME_SHOW);\n        this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n      }\n      dispose() {\n        EventHandler.off(window, EVENT_KEY);\n        EventHandler.off(this._dialog, EVENT_KEY);\n        this._backdrop.dispose();\n        this._focustrap.deactivate();\n        super.dispose();\n      }\n      handleUpdate() {\n        this._adjustDialog();\n      }\n\n      // Private\n      _initializeBackDrop() {\n        return new Backdrop({\n          isVisible: Boolean(this._config.backdrop),\n          // 'static' option will be translated to true, and booleans will keep their value,\n          isAnimated: this._isAnimated(),\n        });\n      }\n      _initializeFocusTrap() {\n        return new FocusTrap({\n          trapElement: this._element,\n        });\n      }\n      _showElement(relatedTarget) {\n        // try to append dynamic modal\n        if (!document.body.contains(this._element)) {\n          document.body.append(this._element);\n        }\n        this._element.style.display = 'block';\n        this._element.removeAttribute('aria-hidden');\n        this._element.setAttribute('aria-modal', true);\n        this._element.setAttribute('role', 'dialog');\n        this._element.scrollTop = 0;\n        const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n        if (modalBody) {\n          modalBody.scrollTop = 0;\n        }\n        index_js.reflow(this._element);\n        this._element.classList.add(CLASS_NAME_SHOW);\n        const transitionComplete = () => {\n          if (this._config.focus) {\n            this._focustrap.activate();\n          }\n          this._isTransitioning = false;\n          EventHandler.trigger(this._element, EVENT_SHOWN, {\n            relatedTarget,\n          });\n        };\n        this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n      }\n      _addEventListeners() {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n          if (event.key !== ESCAPE_KEY) {\n            return;\n          }\n          if (this._config.keyboard) {\n            this.hide();\n            return;\n          }\n          this._triggerBackdropTransition();\n        });\n        EventHandler.on(window, EVENT_RESIZE, () => {\n          if (this._isShown && !this._isTransitioning) {\n            this._adjustDialog();\n          }\n        });\n        EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {\n          // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n          EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => {\n            if (this._element !== event.target || this._element !== event2.target) {\n              return;\n            }\n            if (this._config.backdrop === 'static') {\n              this._triggerBackdropTransition();\n              return;\n            }\n            if (this._config.backdrop) {\n              this.hide();\n            }\n          });\n        });\n      }\n      _hideModal() {\n        this._element.style.display = 'none';\n        this._element.setAttribute('aria-hidden', true);\n        this._element.removeAttribute('aria-modal');\n        this._element.removeAttribute('role');\n        this._isTransitioning = false;\n        this._backdrop.hide(() => {\n          document.body.classList.remove(CLASS_NAME_OPEN);\n          this._resetAdjustments();\n          this._scrollBar.reset();\n          EventHandler.trigger(this._element, EVENT_HIDDEN);\n        });\n      }\n      _isAnimated() {\n        return this._element.classList.contains(CLASS_NAME_FADE);\n      }\n      _triggerBackdropTransition() {\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        if (hideEvent.defaultPrevented) {\n          return;\n        }\n        const isModalOverflowing =\n          this._element.scrollHeight > document.documentElement.clientHeight;\n        const initialOverflowY = this._element.style.overflowY;\n        // return if the following background transition hasn't yet completed\n        if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n          return;\n        }\n        if (!isModalOverflowing) {\n          this._element.style.overflowY = 'hidden';\n        }\n        this._element.classList.add(CLASS_NAME_STATIC);\n        this._queueCallback(() => {\n          this._element.classList.remove(CLASS_NAME_STATIC);\n          this._queueCallback(() => {\n            this._element.style.overflowY = initialOverflowY;\n          }, this._dialog);\n        }, this._dialog);\n        this._element.focus();\n      }\n\n      /**\n       * The following methods are used to handle overflowing modals\n       */\n\n      _adjustDialog() {\n        const isModalOverflowing =\n          this._element.scrollHeight > document.documentElement.clientHeight;\n        const scrollbarWidth = this._scrollBar.getWidth();\n        const isBodyOverflowing = scrollbarWidth > 0;\n        if (isBodyOverflowing && !isModalOverflowing) {\n          const property = index_js.isRTL() ? 'paddingLeft' : 'paddingRight';\n          this._element.style[property] = `${scrollbarWidth}px`;\n        }\n        if (!isBodyOverflowing && isModalOverflowing) {\n          const property = index_js.isRTL() ? 'paddingRight' : 'paddingLeft';\n          this._element.style[property] = `${scrollbarWidth}px`;\n        }\n      }\n      _resetAdjustments() {\n        this._element.style.paddingLeft = '';\n        this._element.style.paddingRight = '';\n      }\n\n      // Static\n      static jQueryInterface(config, relatedTarget) {\n        return this.each(function () {\n          const data = Modal.getOrCreateInstance(this, config);\n          if (typeof config !== 'string') {\n            return;\n          }\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config](relatedTarget);\n        });\n      }\n    }\n\n    /**\n     * Data API implementation\n     */\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n      const target = SelectorEngine.getElementFromSelector(this);\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n      EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n        if (showEvent.defaultPrevented) {\n          // only register focus restorer if modal will actually get shown\n          return;\n        }\n        EventHandler.one(target, EVENT_HIDDEN, () => {\n          if (index_js.isVisible(this)) {\n            this.focus();\n          }\n        });\n      });\n\n      // avoid conflict when clicking modal toggler while another one is open\n      const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n      if (alreadyOpen) {\n        Modal.getInstance(alreadyOpen).hide();\n      }\n      const data = Modal.getOrCreateInstance(target);\n      data.toggle(this);\n    });\n    componentFunctions_js.enableDismissTrigger(Modal);\n\n    /**\n     * jQuery\n     */\n\n    index_js.defineJQueryPlugin(Modal);\n\n    return Modal;\n  }\n);\n//# sourceMappingURL=modal.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/offcanvas.js",
    "content": "/*!\n * Bootstrap offcanvas.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/backdrop.js'),\n        require('./util/component-functions.js'),\n        require('./util/focustrap.js'),\n        require('./util/index.js'),\n        require('./util/scrollbar.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        [\n          './base-component',\n          './dom/event-handler',\n          './dom/selector-engine',\n          './util/backdrop',\n          './util/component-functions',\n          './util/focustrap',\n          './util/index',\n          './util/scrollbar',\n        ],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Offcanvas = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.SelectorEngine,\n        global.Backdrop,\n        global.ComponentFunctions,\n        global.Focustrap,\n        global.Index,\n        global.Scrollbar\n      )));\n})(\n  this,\n  function (\n    BaseComponent,\n    EventHandler,\n    SelectorEngine,\n    Backdrop,\n    componentFunctions_js,\n    FocusTrap,\n    index_js,\n    ScrollBarHelper\n  ) {\n    'use strict';\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap offcanvas.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    /**\n     * Constants\n     */\n\n    const NAME = 'offcanvas';\n    const DATA_KEY = 'bs.offcanvas';\n    const EVENT_KEY = `.${DATA_KEY}`;\n    const DATA_API_KEY = '.data-api';\n    const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n    const ESCAPE_KEY = 'Escape';\n    const CLASS_NAME_SHOW = 'show';\n    const CLASS_NAME_SHOWING = 'showing';\n    const CLASS_NAME_HIDING = 'hiding';\n    const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\n    const OPEN_SELECTOR = '.offcanvas.show';\n    const EVENT_SHOW = `show${EVENT_KEY}`;\n    const EVENT_SHOWN = `shown${EVENT_KEY}`;\n    const EVENT_HIDE = `hide${EVENT_KEY}`;\n    const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\n    const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n    const EVENT_RESIZE = `resize${EVENT_KEY}`;\n    const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n    const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\n    const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]';\n    const Default = {\n      backdrop: true,\n      keyboard: true,\n      scroll: false,\n    };\n    const DefaultType = {\n      backdrop: '(boolean|string)',\n      keyboard: 'boolean',\n      scroll: 'boolean',\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Offcanvas extends BaseComponent {\n      constructor(element, config) {\n        super(element, config);\n        this._isShown = false;\n        this._backdrop = this._initializeBackDrop();\n        this._focustrap = this._initializeFocusTrap();\n        this._addEventListeners();\n      }\n\n      // Getters\n      static get Default() {\n        return Default;\n      }\n      static get DefaultType() {\n        return DefaultType;\n      }\n      static get NAME() {\n        return NAME;\n      }\n\n      // Public\n      toggle(relatedTarget) {\n        return this._isShown ? this.hide() : this.show(relatedTarget);\n      }\n      show(relatedTarget) {\n        if (this._isShown) {\n          return;\n        }\n        const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n          relatedTarget,\n        });\n        if (showEvent.defaultPrevented) {\n          return;\n        }\n        this._isShown = true;\n        this._backdrop.show();\n        if (!this._config.scroll) {\n          new ScrollBarHelper().hide();\n        }\n        this._element.setAttribute('aria-modal', true);\n        this._element.setAttribute('role', 'dialog');\n        this._element.classList.add(CLASS_NAME_SHOWING);\n        const completeCallBack = () => {\n          if (!this._config.scroll || this._config.backdrop) {\n            this._focustrap.activate();\n          }\n          this._element.classList.add(CLASS_NAME_SHOW);\n          this._element.classList.remove(CLASS_NAME_SHOWING);\n          EventHandler.trigger(this._element, EVENT_SHOWN, {\n            relatedTarget,\n          });\n        };\n        this._queueCallback(completeCallBack, this._element, true);\n      }\n      hide() {\n        if (!this._isShown) {\n          return;\n        }\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n        if (hideEvent.defaultPrevented) {\n          return;\n        }\n        this._focustrap.deactivate();\n        this._element.blur();\n        this._isShown = false;\n        this._element.classList.add(CLASS_NAME_HIDING);\n        this._backdrop.hide();\n        const completeCallback = () => {\n          this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);\n          this._element.removeAttribute('aria-modal');\n          this._element.removeAttribute('role');\n          if (!this._config.scroll) {\n            new ScrollBarHelper().reset();\n          }\n          EventHandler.trigger(this._element, EVENT_HIDDEN);\n        };\n        this._queueCallback(completeCallback, this._element, true);\n      }\n      dispose() {\n        this._backdrop.dispose();\n        this._focustrap.deactivate();\n        super.dispose();\n      }\n\n      // Private\n      _initializeBackDrop() {\n        const clickCallback = () => {\n          if (this._config.backdrop === 'static') {\n            EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n            return;\n          }\n          this.hide();\n        };\n\n        // 'static' option will be translated to true, and booleans will keep their value\n        const isVisible = Boolean(this._config.backdrop);\n        return new Backdrop({\n          className: CLASS_NAME_BACKDROP,\n          isVisible,\n          isAnimated: true,\n          rootElement: this._element.parentNode,\n          clickCallback: isVisible ? clickCallback : null,\n        });\n      }\n      _initializeFocusTrap() {\n        return new FocusTrap({\n          trapElement: this._element,\n        });\n      }\n      _addEventListeners() {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n          if (event.key !== ESCAPE_KEY) {\n            return;\n          }\n          if (this._config.keyboard) {\n            this.hide();\n            return;\n          }\n          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        });\n      }\n\n      // Static\n      static jQueryInterface(config) {\n        return this.each(function () {\n          const data = Offcanvas.getOrCreateInstance(this, config);\n          if (typeof config !== 'string') {\n            return;\n          }\n          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config](this);\n        });\n      }\n    }\n\n    /**\n     * Data API implementation\n     */\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n      const target = SelectorEngine.getElementFromSelector(this);\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n      if (index_js.isDisabled(this)) {\n        return;\n      }\n      EventHandler.one(target, EVENT_HIDDEN, () => {\n        // focus on trigger when it is closed\n        if (index_js.isVisible(this)) {\n          this.focus();\n        }\n      });\n\n      // avoid conflict when clicking a toggler of an offcanvas, while another is open\n      const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n      if (alreadyOpen && alreadyOpen !== target) {\n        Offcanvas.getInstance(alreadyOpen).hide();\n      }\n      const data = Offcanvas.getOrCreateInstance(target);\n      data.toggle(this);\n    });\n    EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n      for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n        Offcanvas.getOrCreateInstance(selector).show();\n      }\n    });\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n        if (getComputedStyle(element).position !== 'fixed') {\n          Offcanvas.getOrCreateInstance(element).hide();\n        }\n      }\n    });\n    componentFunctions_js.enableDismissTrigger(Offcanvas);\n\n    /**\n     * jQuery\n     */\n\n    index_js.defineJQueryPlugin(Offcanvas);\n\n    return Offcanvas;\n  }\n);\n//# sourceMappingURL=offcanvas.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/popover.js",
    "content": "/*!\n * Bootstrap popover.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(require('./tooltip.js'), require('./util/index.js')))\n    : typeof define === 'function' && define.amd\n    ? define(['./tooltip', './util/index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Popover = factory(global.Tooltip, global.Index)));\n})(this, function (Tooltip, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'popover';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  const Default = {\n    ...Tooltip.Default,\n    content: '',\n    offset: [0, 8],\n    placement: 'right',\n    template:\n      '<div class=\"popover\" role=\"tooltip\">' +\n      '<div class=\"popover-arrow\"></div>' +\n      '<h3 class=\"popover-header\"></h3>' +\n      '<div class=\"popover-body\"></div>' +\n      '</div>',\n    trigger: 'click',\n  };\n  const DefaultType = {\n    ...Tooltip.DefaultType,\n    content: '(null|string|element|function)',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Overrides\n    _isWithContent() {\n      return this._getTitle() || this._getContent();\n    }\n\n    // Private\n    _getContentForTemplate() {\n      return {\n        [SELECTOR_TITLE]: this._getTitle(),\n        [SELECTOR_CONTENT]: this._getContent(),\n      };\n    }\n    _getContent() {\n      return this._resolvePossibleFunction(this._config.content);\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Popover);\n\n  return Popover;\n});\n//# sourceMappingURL=popover.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/scrollspy.js",
    "content": "/*!\n * Bootstrap scrollspy.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        ['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Scrollspy = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.SelectorEngine,\n        global.Index\n      )));\n})(this, function (BaseComponent, EventHandler, SelectorEngine, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'scrollspy';\n  const DATA_KEY = 'bs.scrollspy';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_ACTIVATE = `activate${EVENT_KEY}`;\n  const EVENT_CLICK = `click${EVENT_KEY}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_TARGET_LINKS = '[href]';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const Default = {\n    offset: null,\n    // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: '0px 0px -25%',\n    smoothScroll: false,\n    target: null,\n    threshold: [0.1, 0.5, 1],\n  };\n  const DefaultType = {\n    offset: '(number|null)',\n    // TODO v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: 'string',\n    smoothScroll: 'boolean',\n    target: 'element',\n    threshold: 'array',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n\n      // this._element is the observablesContainer and config.target the menu links wrapper\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      this._rootElement =\n        getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n      this._activeTarget = null;\n      this._observer = null;\n      this._previousScrollData = {\n        visibleEntryTop: 0,\n        parentScrollTop: 0,\n      };\n      this.refresh(); // initialize\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    refresh() {\n      this._initializeTargetsAndObservables();\n      this._maybeEnableSmoothScroll();\n      if (this._observer) {\n        this._observer.disconnect();\n      } else {\n        this._observer = this._getNewObserver();\n      }\n      for (const section of this._observableSections.values()) {\n        this._observer.observe(section);\n      }\n    }\n    dispose() {\n      this._observer.disconnect();\n      super.dispose();\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n      config.target = index_js.getElement(config.target) || document.body;\n\n      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n      if (typeof config.threshold === 'string') {\n        config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value));\n      }\n      return config;\n    }\n    _maybeEnableSmoothScroll() {\n      if (!this._config.smoothScroll) {\n        return;\n      }\n\n      // unregister any previous listeners\n      EventHandler.off(this._config.target, EVENT_CLICK);\n      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {\n        const observableSection = this._observableSections.get(event.target.hash);\n        if (observableSection) {\n          event.preventDefault();\n          const root = this._rootElement || window;\n          const height = observableSection.offsetTop - this._element.offsetTop;\n          if (root.scrollTo) {\n            root.scrollTo({\n              top: height,\n              behavior: 'smooth',\n            });\n            return;\n          }\n\n          // Chrome 60 doesn't support `scrollTo`\n          root.scrollTop = height;\n        }\n      });\n    }\n    _getNewObserver() {\n      const options = {\n        root: this._rootElement,\n        threshold: this._config.threshold,\n        rootMargin: this._config.rootMargin,\n      };\n      return new IntersectionObserver((entries) => this._observerCallback(entries), options);\n    }\n\n    // The logic of selection\n    _observerCallback(entries) {\n      const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);\n      const activate = (entry) => {\n        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n        this._process(targetElement(entry));\n      };\n      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n      this._previousScrollData.parentScrollTop = parentScrollTop;\n      for (const entry of entries) {\n        if (!entry.isIntersecting) {\n          this._activeTarget = null;\n          this._clearActiveClass(targetElement(entry));\n          continue;\n        }\n        const entryIsLowerThanPrevious =\n          entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n        // if we are scrolling down, pick the bigger offsetTop\n        if (userScrollsDown && entryIsLowerThanPrevious) {\n          activate(entry);\n          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n          if (!parentScrollTop) {\n            return;\n          }\n          continue;\n        }\n\n        // if we are scrolling up, pick the smallest offsetTop\n        if (!userScrollsDown && !entryIsLowerThanPrevious) {\n          activate(entry);\n        }\n      }\n    }\n    _initializeTargetsAndObservables() {\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n      for (const anchor of targetLinks) {\n        // ensure that the anchor has an id and is not disabled\n        if (!anchor.hash || index_js.isDisabled(anchor)) {\n          continue;\n        }\n        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n        // ensure that the observableSection exists & is visible\n        if (index_js.isVisible(observableSection)) {\n          this._targetLinks.set(decodeURI(anchor.hash), anchor);\n          this._observableSections.set(anchor.hash, observableSection);\n        }\n      }\n    }\n    _process(target) {\n      if (this._activeTarget === target) {\n        return;\n      }\n      this._clearActiveClass(this._config.target);\n      this._activeTarget = target;\n      target.classList.add(CLASS_NAME_ACTIVE);\n      this._activateParents(target);\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n        relatedTarget: target,\n      });\n    }\n    _activateParents(target) {\n      // Activate dropdown parents\n      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(\n          SELECTOR_DROPDOWN_TOGGLE,\n          target.closest(SELECTOR_DROPDOWN)\n        ).classList.add(CLASS_NAME_ACTIVE);\n        return;\n      }\n      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n          item.classList.add(CLASS_NAME_ACTIVE);\n        }\n      }\n    }\n    _clearActiveClass(parent) {\n      parent.classList.remove(CLASS_NAME_ACTIVE);\n      const activeNodes = SelectorEngine.find(\n        `${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`,\n        parent\n      );\n      for (const node of activeNodes) {\n        node.classList.remove(CLASS_NAME_ACTIVE);\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n      ScrollSpy.getOrCreateInstance(spy);\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(ScrollSpy);\n\n  return ScrollSpy;\n});\n//# sourceMappingURL=scrollspy.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/tab.js",
    "content": "/*!\n * Bootstrap tab.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/selector-engine.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        ['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Tab = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.SelectorEngine,\n        global.Index\n      )));\n})(this, function (BaseComponent, EventHandler, SelectorEngine, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'tab';\n  const DATA_KEY = 'bs.tab';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const HOME_KEY = 'Home';\n  const END_KEY = 'End';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_DROPDOWN = 'dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\n  const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\n  const SELECTOR_OUTER = '.nav-item, .list-group-item';\n  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\n  const SELECTOR_DATA_TOGGLE =\n    '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\n  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n  /**\n   * Class definition\n   */\n\n  class Tab extends BaseComponent {\n    constructor(element) {\n      super(element);\n      this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n      if (!this._parent) {\n        return;\n        // TODO: should throw exception in v6\n        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n      }\n\n      // Set up initial aria attributes\n      this._setInitialAttributes(this._parent, this._getChildren());\n      EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n    }\n\n    // Getters\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    show() {\n      // Shows this elem and deactivate the active sibling if exists\n      const innerElem = this._element;\n      if (this._elemIsActive(innerElem)) {\n        return;\n      }\n\n      // Search for active tab on same parent to deactivate it\n      const active = this._getActiveElem();\n      const hideEvent = active\n        ? EventHandler.trigger(active, EVENT_HIDE, {\n            relatedTarget: innerElem,\n          })\n        : null;\n      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, {\n        relatedTarget: active,\n      });\n      if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n        return;\n      }\n      this._deactivate(active, innerElem);\n      this._activate(innerElem, active);\n    }\n\n    // Private\n    _activate(element, relatedElem) {\n      if (!element) {\n        return;\n      }\n      element.classList.add(CLASS_NAME_ACTIVE);\n      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n      const complete = () => {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.add(CLASS_NAME_SHOW);\n          return;\n        }\n        element.removeAttribute('tabindex');\n        element.setAttribute('aria-selected', true);\n        this._toggleDropDown(element, true);\n        EventHandler.trigger(element, EVENT_SHOWN, {\n          relatedTarget: relatedElem,\n        });\n      };\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n    }\n    _deactivate(element, relatedElem) {\n      if (!element) {\n        return;\n      }\n      element.classList.remove(CLASS_NAME_ACTIVE);\n      element.blur();\n      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n      const complete = () => {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.remove(CLASS_NAME_SHOW);\n          return;\n        }\n        element.setAttribute('aria-selected', false);\n        element.setAttribute('tabindex', '-1');\n        this._toggleDropDown(element, false);\n        EventHandler.trigger(element, EVENT_HIDDEN, {\n          relatedTarget: relatedElem,\n        });\n      };\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n    }\n    _keydown(event) {\n      if (\n        ![\n          ARROW_LEFT_KEY,\n          ARROW_RIGHT_KEY,\n          ARROW_UP_KEY,\n          ARROW_DOWN_KEY,\n          HOME_KEY,\n          END_KEY,\n        ].includes(event.key)\n      ) {\n        return;\n      }\n      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n      event.preventDefault();\n      const children = this._getChildren().filter((element) => !index_js.isDisabled(element));\n      let nextActiveElement;\n      if ([HOME_KEY, END_KEY].includes(event.key)) {\n        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n      } else {\n        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n        nextActiveElement = index_js.getNextActiveElement(children, event.target, isNext, true);\n      }\n      if (nextActiveElement) {\n        nextActiveElement.focus({\n          preventScroll: true,\n        });\n        Tab.getOrCreateInstance(nextActiveElement).show();\n      }\n    }\n    _getChildren() {\n      // collection of inner elements\n      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n    }\n    _getActiveElem() {\n      return this._getChildren().find((child) => this._elemIsActive(child)) || null;\n    }\n    _setInitialAttributes(parent, children) {\n      this._setAttributeIfNotExists(parent, 'role', 'tablist');\n      for (const child of children) {\n        this._setInitialAttributesOnChild(child);\n      }\n    }\n    _setInitialAttributesOnChild(child) {\n      child = this._getInnerElement(child);\n      const isActive = this._elemIsActive(child);\n      const outerElem = this._getOuterElement(child);\n      child.setAttribute('aria-selected', isActive);\n      if (outerElem !== child) {\n        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n      }\n      if (!isActive) {\n        child.setAttribute('tabindex', '-1');\n      }\n      this._setAttributeIfNotExists(child, 'role', 'tab');\n\n      // set attributes to the related panel too\n      this._setInitialAttributesOnTargetPanel(child);\n    }\n    _setInitialAttributesOnTargetPanel(child) {\n      const target = SelectorEngine.getElementFromSelector(child);\n      if (!target) {\n        return;\n      }\n      this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n      if (child.id) {\n        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n      }\n    }\n    _toggleDropDown(element, open) {\n      const outerElem = this._getOuterElement(element);\n      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n        return;\n      }\n      const toggle = (selector, className) => {\n        const element = SelectorEngine.findOne(selector, outerElem);\n        if (element) {\n          element.classList.toggle(className, open);\n        }\n      };\n      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);\n      outerElem.setAttribute('aria-expanded', open);\n    }\n    _setAttributeIfNotExists(element, attribute, value) {\n      if (!element.hasAttribute(attribute)) {\n        element.setAttribute(attribute, value);\n      }\n    }\n    _elemIsActive(elem) {\n      return elem.classList.contains(CLASS_NAME_ACTIVE);\n    }\n\n    // Try to get the inner element (usually the .nav-link)\n    _getInnerElement(elem) {\n      return elem.matches(SELECTOR_INNER_ELEM)\n        ? elem\n        : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n    }\n\n    // Try to get the outer element (usually the .nav-item)\n    _getOuterElement(elem) {\n      return elem.closest(SELECTOR_OUTER) || elem;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (index_js.isDisabled(this)) {\n      return;\n    }\n    Tab.getOrCreateInstance(this).show();\n  });\n\n  /**\n   * Initialize on focus\n   */\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n      Tab.getOrCreateInstance(element);\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Tab);\n\n  return Tab;\n});\n//# sourceMappingURL=tab.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/toast.js",
    "content": "/*!\n * Bootstrap toast.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./util/component-functions.js'),\n        require('./util/index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        ['./base-component', './dom/event-handler', './util/component-functions', './util/index'],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Toast = factory(\n        global.BaseComponent,\n        global.EventHandler,\n        global.ComponentFunctions,\n        global.Index\n      )));\n})(this, function (BaseComponent, EventHandler, componentFunctions_js, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number',\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000,\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n      this._setListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._clearTimeout();\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n        this._maybeScheduleHide();\n      };\n      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n      index_js.reflow(this._element);\n      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n    hide() {\n      if (!this.isShown()) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n      this._element.classList.add(CLASS_NAME_SHOWING);\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n    dispose() {\n      this._clearTimeout();\n      if (this.isShown()) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n      super.dispose();\n    }\n    isShown() {\n      return this._element.classList.contains(CLASS_NAME_SHOW);\n    }\n\n    // Private\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout': {\n          this._hasMouseInteraction = isInteracting;\n          break;\n        }\n        case 'focusin':\n        case 'focusout': {\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n        }\n      }\n      if (isInteracting) {\n        this._clearTimeout();\n        return;\n      }\n      const nextElement = event.relatedTarget;\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n      this._maybeScheduleHide();\n    }\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false));\n    }\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config](this);\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  componentFunctions_js.enableDismissTrigger(Toast);\n\n  /**\n   * jQuery\n   */\n\n  index_js.defineJQueryPlugin(Toast);\n\n  return Toast;\n});\n//# sourceMappingURL=toast.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/tooltip.js",
    "content": "/*!\n * Bootstrap tooltip.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('@popperjs/core'),\n        require('./base-component.js'),\n        require('./dom/event-handler.js'),\n        require('./dom/manipulator.js'),\n        require('./util/index.js'),\n        require('./util/sanitizer.js'),\n        require('./util/template-factory.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(\n        [\n          '@popperjs/core',\n          './base-component',\n          './dom/event-handler',\n          './dom/manipulator',\n          './util/index',\n          './util/sanitizer',\n          './util/template-factory',\n        ],\n        factory\n      )\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Tooltip = factory(\n        global['@popperjs/core'],\n        global.BaseComponent,\n        global.EventHandler,\n        global.Manipulator,\n        global.Index,\n        global.Sanitizer,\n        global.TemplateFactory\n      )));\n})(\n  this,\n  function (\n    Popper,\n    BaseComponent,\n    EventHandler,\n    Manipulator,\n    index_js,\n    sanitizer_js,\n    TemplateFactory\n  ) {\n    'use strict';\n\n    function _interopNamespaceDefault(e) {\n      const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });\n      if (e) {\n        for (const k in e) {\n          if (k !== 'default') {\n            const d = Object.getOwnPropertyDescriptor(e, k);\n            Object.defineProperty(\n              n,\n              k,\n              d.get\n                ? d\n                : {\n                    enumerable: true,\n                    get: () => e[k],\n                  }\n            );\n          }\n        }\n      }\n      n.default = e;\n      return Object.freeze(n);\n    }\n\n    const Popper__namespace = /*#__PURE__*/ _interopNamespaceDefault(Popper);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap tooltip.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    /**\n     * Constants\n     */\n\n    const NAME = 'tooltip';\n    const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n    const CLASS_NAME_FADE = 'fade';\n    const CLASS_NAME_MODAL = 'modal';\n    const CLASS_NAME_SHOW = 'show';\n    const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n    const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n    const EVENT_MODAL_HIDE = 'hide.bs.modal';\n    const TRIGGER_HOVER = 'hover';\n    const TRIGGER_FOCUS = 'focus';\n    const TRIGGER_CLICK = 'click';\n    const TRIGGER_MANUAL = 'manual';\n    const EVENT_HIDE = 'hide';\n    const EVENT_HIDDEN = 'hidden';\n    const EVENT_SHOW = 'show';\n    const EVENT_SHOWN = 'shown';\n    const EVENT_INSERTED = 'inserted';\n    const EVENT_CLICK = 'click';\n    const EVENT_FOCUSIN = 'focusin';\n    const EVENT_FOCUSOUT = 'focusout';\n    const EVENT_MOUSEENTER = 'mouseenter';\n    const EVENT_MOUSELEAVE = 'mouseleave';\n    const AttachmentMap = {\n      AUTO: 'auto',\n      TOP: 'top',\n      RIGHT: index_js.isRTL() ? 'left' : 'right',\n      BOTTOM: 'bottom',\n      LEFT: index_js.isRTL() ? 'right' : 'left',\n    };\n    const Default = {\n      allowList: sanitizer_js.DefaultAllowlist,\n      animation: true,\n      boundary: 'clippingParents',\n      container: false,\n      customClass: '',\n      delay: 0,\n      fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n      html: false,\n      offset: [0, 6],\n      placement: 'top',\n      popperConfig: null,\n      sanitize: true,\n      sanitizeFn: null,\n      selector: false,\n      template:\n        '<div class=\"tooltip\" role=\"tooltip\">' +\n        '<div class=\"tooltip-arrow\"></div>' +\n        '<div class=\"tooltip-inner\"></div>' +\n        '</div>',\n      title: '',\n      trigger: 'hover focus',\n    };\n    const DefaultType = {\n      allowList: 'object',\n      animation: 'boolean',\n      boundary: '(string|element)',\n      container: '(string|element|boolean)',\n      customClass: '(string|function)',\n      delay: '(number|object)',\n      fallbackPlacements: 'array',\n      html: 'boolean',\n      offset: '(array|string|function)',\n      placement: '(string|function)',\n      popperConfig: '(null|object|function)',\n      sanitize: 'boolean',\n      sanitizeFn: '(null|function)',\n      selector: '(string|boolean)',\n      template: 'string',\n      title: '(string|element|function)',\n      trigger: 'string',\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Tooltip extends BaseComponent {\n      constructor(element, config) {\n        if (typeof Popper__namespace === 'undefined') {\n          throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");\n        }\n        super(element, config);\n\n        // Private\n        this._isEnabled = true;\n        this._timeout = 0;\n        this._isHovered = null;\n        this._activeTrigger = {};\n        this._popper = null;\n        this._templateFactory = null;\n        this._newContent = null;\n\n        // Protected\n        this.tip = null;\n        this._setListeners();\n        if (!this._config.selector) {\n          this._fixTitle();\n        }\n      }\n\n      // Getters\n      static get Default() {\n        return Default;\n      }\n      static get DefaultType() {\n        return DefaultType;\n      }\n      static get NAME() {\n        return NAME;\n      }\n\n      // Public\n      enable() {\n        this._isEnabled = true;\n      }\n      disable() {\n        this._isEnabled = false;\n      }\n      toggleEnabled() {\n        this._isEnabled = !this._isEnabled;\n      }\n      toggle() {\n        if (!this._isEnabled) {\n          return;\n        }\n        this._activeTrigger.click = !this._activeTrigger.click;\n        if (this._isShown()) {\n          this._leave();\n          return;\n        }\n        this._enter();\n      }\n      dispose() {\n        clearTimeout(this._timeout);\n        EventHandler.off(\n          this._element.closest(SELECTOR_MODAL),\n          EVENT_MODAL_HIDE,\n          this._hideModalHandler\n        );\n        if (this._element.getAttribute('data-bs-original-title')) {\n          this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n        }\n        this._disposePopper();\n        super.dispose();\n      }\n      show() {\n        if (this._element.style.display === 'none') {\n          throw new Error('Please use show on visible elements');\n        }\n        if (!(this._isWithContent() && this._isEnabled)) {\n          return;\n        }\n        const showEvent = EventHandler.trigger(\n          this._element,\n          this.constructor.eventName(EVENT_SHOW)\n        );\n        const shadowRoot = index_js.findShadowRoot(this._element);\n        const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(\n          this._element\n        );\n        if (showEvent.defaultPrevented || !isInTheDom) {\n          return;\n        }\n\n        // TODO: v6 remove this or make it optional\n        this._disposePopper();\n        const tip = this._getTipElement();\n        this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n        const { container } = this._config;\n        if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n          container.append(tip);\n          EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n        }\n        this._popper = this._createPopper(tip);\n        tip.classList.add(CLASS_NAME_SHOW);\n\n        // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n        if ('ontouchstart' in document.documentElement) {\n          for (const element of [].concat(...document.body.children)) {\n            EventHandler.on(element, 'mouseover', index_js.noop);\n          }\n        }\n        const complete = () => {\n          EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));\n          if (this._isHovered === false) {\n            this._leave();\n          }\n          this._isHovered = false;\n        };\n        this._queueCallback(complete, this.tip, this._isAnimated());\n      }\n      hide() {\n        if (!this._isShown()) {\n          return;\n        }\n        const hideEvent = EventHandler.trigger(\n          this._element,\n          this.constructor.eventName(EVENT_HIDE)\n        );\n        if (hideEvent.defaultPrevented) {\n          return;\n        }\n        const tip = this._getTipElement();\n        tip.classList.remove(CLASS_NAME_SHOW);\n\n        // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n        if ('ontouchstart' in document.documentElement) {\n          for (const element of [].concat(...document.body.children)) {\n            EventHandler.off(element, 'mouseover', index_js.noop);\n          }\n        }\n        this._activeTrigger[TRIGGER_CLICK] = false;\n        this._activeTrigger[TRIGGER_FOCUS] = false;\n        this._activeTrigger[TRIGGER_HOVER] = false;\n        this._isHovered = null; // it is a trick to support manual triggering\n\n        const complete = () => {\n          if (this._isWithActiveTrigger()) {\n            return;\n          }\n          if (!this._isHovered) {\n            this._disposePopper();\n          }\n          this._element.removeAttribute('aria-describedby');\n          EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));\n        };\n        this._queueCallback(complete, this.tip, this._isAnimated());\n      }\n      update() {\n        if (this._popper) {\n          this._popper.update();\n        }\n      }\n\n      // Protected\n      _isWithContent() {\n        return Boolean(this._getTitle());\n      }\n      _getTipElement() {\n        if (!this.tip) {\n          this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n        }\n        return this.tip;\n      }\n      _createTipElement(content) {\n        const tip = this._getTemplateFactory(content).toHtml();\n\n        // TODO: remove this check in v6\n        if (!tip) {\n          return null;\n        }\n        tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);\n        // TODO: v6 the following can be achieved with CSS only\n        tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n        const tipId = index_js.getUID(this.constructor.NAME).toString();\n        tip.setAttribute('id', tipId);\n        if (this._isAnimated()) {\n          tip.classList.add(CLASS_NAME_FADE);\n        }\n        return tip;\n      }\n      setContent(content) {\n        this._newContent = content;\n        if (this._isShown()) {\n          this._disposePopper();\n          this.show();\n        }\n      }\n      _getTemplateFactory(content) {\n        if (this._templateFactory) {\n          this._templateFactory.changeContent(content);\n        } else {\n          this._templateFactory = new TemplateFactory({\n            ...this._config,\n            // the `content` var has to be after `this._config`\n            // to override config.content in case of popover\n            content,\n            extraClass: this._resolvePossibleFunction(this._config.customClass),\n          });\n        }\n        return this._templateFactory;\n      }\n      _getContentForTemplate() {\n        return {\n          [SELECTOR_TOOLTIP_INNER]: this._getTitle(),\n        };\n      }\n      _getTitle() {\n        return (\n          this._resolvePossibleFunction(this._config.title) ||\n          this._element.getAttribute('data-bs-original-title')\n        );\n      }\n\n      // Private\n      _initializeOnDelegatedTarget(event) {\n        return this.constructor.getOrCreateInstance(\n          event.delegateTarget,\n          this._getDelegateConfig()\n        );\n      }\n      _isAnimated() {\n        return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE));\n      }\n      _isShown() {\n        return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);\n      }\n      _createPopper(tip) {\n        const placement = index_js.execute(this._config.placement, [this, tip, this._element]);\n        const attachment = AttachmentMap[placement.toUpperCase()];\n        return Popper__namespace.createPopper(\n          this._element,\n          tip,\n          this._getPopperConfig(attachment)\n        );\n      }\n      _getOffset() {\n        const { offset } = this._config;\n        if (typeof offset === 'string') {\n          return offset.split(',').map((value) => Number.parseInt(value, 10));\n        }\n        if (typeof offset === 'function') {\n          return (popperData) => offset(popperData, this._element);\n        }\n        return offset;\n      }\n      _resolvePossibleFunction(arg) {\n        return index_js.execute(arg, [this._element]);\n      }\n      _getPopperConfig(attachment) {\n        const defaultBsPopperConfig = {\n          placement: attachment,\n          modifiers: [\n            {\n              name: 'flip',\n              options: {\n                fallbackPlacements: this._config.fallbackPlacements,\n              },\n            },\n            {\n              name: 'offset',\n              options: {\n                offset: this._getOffset(),\n              },\n            },\n            {\n              name: 'preventOverflow',\n              options: {\n                boundary: this._config.boundary,\n              },\n            },\n            {\n              name: 'arrow',\n              options: {\n                element: `.${this.constructor.NAME}-arrow`,\n              },\n            },\n            {\n              name: 'preSetPlacement',\n              enabled: true,\n              phase: 'beforeMain',\n              fn: (data) => {\n                // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n                // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n                this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n              },\n            },\n          ],\n        };\n        return {\n          ...defaultBsPopperConfig,\n          ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig]),\n        };\n      }\n      _setListeners() {\n        const triggers = this._config.trigger.split(' ');\n        for (const trigger of triggers) {\n          if (trigger === 'click') {\n            EventHandler.on(\n              this._element,\n              this.constructor.eventName(EVENT_CLICK),\n              this._config.selector,\n              (event) => {\n                const context = this._initializeOnDelegatedTarget(event);\n                context.toggle();\n              }\n            );\n          } else if (trigger !== TRIGGER_MANUAL) {\n            const eventIn =\n              trigger === TRIGGER_HOVER\n                ? this.constructor.eventName(EVENT_MOUSEENTER)\n                : this.constructor.eventName(EVENT_FOCUSIN);\n            const eventOut =\n              trigger === TRIGGER_HOVER\n                ? this.constructor.eventName(EVENT_MOUSELEAVE)\n                : this.constructor.eventName(EVENT_FOCUSOUT);\n            EventHandler.on(this._element, eventIn, this._config.selector, (event) => {\n              const context = this._initializeOnDelegatedTarget(event);\n              context._activeTrigger[\n                event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n              ] = true;\n              context._enter();\n            });\n            EventHandler.on(this._element, eventOut, this._config.selector, (event) => {\n              const context = this._initializeOnDelegatedTarget(event);\n              context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n                context._element.contains(event.relatedTarget);\n              context._leave();\n            });\n          }\n        }\n        this._hideModalHandler = () => {\n          if (this._element) {\n            this.hide();\n          }\n        };\n        EventHandler.on(\n          this._element.closest(SELECTOR_MODAL),\n          EVENT_MODAL_HIDE,\n          this._hideModalHandler\n        );\n      }\n      _fixTitle() {\n        const title = this._element.getAttribute('title');\n        if (!title) {\n          return;\n        }\n        if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n          this._element.setAttribute('aria-label', title);\n        }\n        this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n        this._element.removeAttribute('title');\n      }\n      _enter() {\n        if (this._isShown() || this._isHovered) {\n          this._isHovered = true;\n          return;\n        }\n        this._isHovered = true;\n        this._setTimeout(() => {\n          if (this._isHovered) {\n            this.show();\n          }\n        }, this._config.delay.show);\n      }\n      _leave() {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n        this._isHovered = false;\n        this._setTimeout(() => {\n          if (!this._isHovered) {\n            this.hide();\n          }\n        }, this._config.delay.hide);\n      }\n      _setTimeout(handler, timeout) {\n        clearTimeout(this._timeout);\n        this._timeout = setTimeout(handler, timeout);\n      }\n      _isWithActiveTrigger() {\n        return Object.values(this._activeTrigger).includes(true);\n      }\n      _getConfig(config) {\n        const dataAttributes = Manipulator.getDataAttributes(this._element);\n        for (const dataAttribute of Object.keys(dataAttributes)) {\n          if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n            delete dataAttributes[dataAttribute];\n          }\n        }\n        config = {\n          ...dataAttributes,\n          ...(typeof config === 'object' && config ? config : {}),\n        };\n        config = this._mergeConfigObj(config);\n        config = this._configAfterMerge(config);\n        this._typeCheckConfig(config);\n        return config;\n      }\n      _configAfterMerge(config) {\n        config.container =\n          config.container === false ? document.body : index_js.getElement(config.container);\n        if (typeof config.delay === 'number') {\n          config.delay = {\n            show: config.delay,\n            hide: config.delay,\n          };\n        }\n        if (typeof config.title === 'number') {\n          config.title = config.title.toString();\n        }\n        if (typeof config.content === 'number') {\n          config.content = config.content.toString();\n        }\n        return config;\n      }\n      _getDelegateConfig() {\n        const config = {};\n        for (const [key, value] of Object.entries(this._config)) {\n          if (this.constructor.Default[key] !== value) {\n            config[key] = value;\n          }\n        }\n        config.selector = false;\n        config.trigger = 'manual';\n\n        // In the future can be replaced with:\n        // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n        // `Object.fromEntries(keysWithDifferentValues)`\n        return config;\n      }\n      _disposePopper() {\n        if (this._popper) {\n          this._popper.destroy();\n          this._popper = null;\n        }\n        if (this.tip) {\n          this.tip.remove();\n          this.tip = null;\n        }\n      }\n\n      // Static\n      static jQueryInterface(config) {\n        return this.each(function () {\n          const data = Tooltip.getOrCreateInstance(this, config);\n          if (typeof config !== 'string') {\n            return;\n          }\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        });\n      }\n    }\n\n    /**\n     * jQuery\n     */\n\n    index_js.defineJQueryPlugin(Tooltip);\n\n    return Tooltip;\n  }\n);\n//# sourceMappingURL=tooltip.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/backdrop.js",
    "content": "/*!\n * Bootstrap backdrop.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('../dom/event-handler.js'),\n        require('./config.js'),\n        require('./index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['../dom/event-handler', './config', './index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Backdrop = factory(global.EventHandler, global.Config, global.Index)));\n})(this, function (EventHandler, Config, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'backdrop';\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_SHOW = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`;\n  const Default = {\n    className: 'modal-backdrop',\n    clickCallback: null,\n    isAnimated: false,\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    rootElement: 'body', // give the choice to place backdrop under different elements\n  };\n  const DefaultType = {\n    className: 'string',\n    clickCallback: '(function|null)',\n    isAnimated: 'boolean',\n    isVisible: 'boolean',\n    rootElement: '(element|string)',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Backdrop extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    show(callback) {\n      if (!this._config.isVisible) {\n        index_js.execute(callback);\n        return;\n      }\n      this._append();\n      const element = this._getElement();\n      if (this._config.isAnimated) {\n        index_js.reflow(element);\n      }\n      element.classList.add(CLASS_NAME_SHOW);\n      this._emulateAnimation(() => {\n        index_js.execute(callback);\n      });\n    }\n    hide(callback) {\n      if (!this._config.isVisible) {\n        index_js.execute(callback);\n        return;\n      }\n      this._getElement().classList.remove(CLASS_NAME_SHOW);\n      this._emulateAnimation(() => {\n        this.dispose();\n        index_js.execute(callback);\n      });\n    }\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n      this._element.remove();\n      this._isAppended = false;\n    }\n\n    // Private\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = this._config.className;\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE);\n        }\n        this._element = backdrop;\n      }\n      return this._element;\n    }\n    _configAfterMerge(config) {\n      // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n      config.rootElement = index_js.getElement(config.rootElement);\n      return config;\n    }\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n      const element = this._getElement();\n      this._config.rootElement.append(element);\n      EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n        index_js.execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n    _emulateAnimation(callback) {\n      index_js.executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n  }\n\n  return Backdrop;\n});\n//# sourceMappingURL=backdrop.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/component-functions.js",
    "content": "/*!\n * Bootstrap component-functions.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? factory(\n        exports,\n        require('../dom/event-handler.js'),\n        require('../dom/selector-engine.js'),\n        require('./index.js')\n      )\n    : typeof define === 'function' && define.amd\n    ? define(['exports', '../dom/event-handler', '../dom/selector-engine', './index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      factory(\n        (global.ComponentFunctions = {}),\n        global.EventHandler,\n        global.SelectorEngine,\n        global.Index\n      ));\n})(this, function (exports, EventHandler, SelectorEngine, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/component-functions.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const enableDismissTrigger = (component, method = 'hide') => {\n    const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n    const name = component.NAME;\n    EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n      if (index_js.isDisabled(this)) {\n        return;\n      }\n      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n      const instance = component.getOrCreateInstance(target);\n\n      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n      instance[method]();\n    });\n  };\n\n  exports.enableDismissTrigger = enableDismissTrigger;\n\n  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n});\n//# sourceMappingURL=component-functions.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/config.js",
    "content": "/*!\n * Bootstrap config.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(require('../dom/manipulator.js'), require('./index.js')))\n    : typeof define === 'function' && define.amd\n    ? define(['../dom/manipulator', './index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Config = factory(global.Manipulator, global.Index)));\n})(this, function (Manipulator, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/config.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Class definition\n   */\n\n  class Config {\n    // Getters\n    static get Default() {\n      return {};\n    }\n    static get DefaultType() {\n      return {};\n    }\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n    _getConfig(config) {\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n    _configAfterMerge(config) {\n      return config;\n    }\n    _mergeConfigObj(config, element) {\n      const jsonConfig = index_js.isElement(element)\n        ? Manipulator.getDataAttribute(element, 'config')\n        : {}; // try to parse\n\n      return {\n        ...this.constructor.Default,\n        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n        ...(index_js.isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n        ...(typeof config === 'object' ? config : {}),\n      };\n    }\n    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n      for (const [property, expectedTypes] of Object.entries(configTypes)) {\n        const value = config[property];\n        const valueType = index_js.isElement(value) ? 'element' : index_js.toType(value);\n        if (!new RegExp(expectedTypes).test(valueType)) {\n          throw new TypeError(\n            `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n          );\n        }\n      }\n    }\n  }\n\n  return Config;\n});\n//# sourceMappingURL=config.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/focustrap.js",
    "content": "/*!\n * Bootstrap focustrap.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('../dom/event-handler.js'),\n        require('../dom/selector-engine.js'),\n        require('./config.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['../dom/event-handler', '../dom/selector-engine', './config'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Focustrap = factory(global.EventHandler, global.SelectorEngine, global.Config)));\n})(this, function (EventHandler, SelectorEngine, Config) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/focustrap.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'focustrap';\n  const DATA_KEY = 'bs.focustrap';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`;\n  const TAB_KEY = 'Tab';\n  const TAB_NAV_FORWARD = 'forward';\n  const TAB_NAV_BACKWARD = 'backward';\n  const Default = {\n    autofocus: true,\n    trapElement: null, // The element to trap focus inside of\n  };\n  const DefaultType = {\n    autofocus: 'boolean',\n    trapElement: 'element',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class FocusTrap extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n      this._isActive = false;\n      this._lastTabNavDirection = null;\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    activate() {\n      if (this._isActive) {\n        return;\n      }\n      if (this._config.autofocus) {\n        this._config.trapElement.focus();\n      }\n      EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop\n      EventHandler.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));\n      EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));\n      this._isActive = true;\n    }\n    deactivate() {\n      if (!this._isActive) {\n        return;\n      }\n      this._isActive = false;\n      EventHandler.off(document, EVENT_KEY);\n    }\n\n    // Private\n    _handleFocusin(event) {\n      const { trapElement } = this._config;\n      if (\n        event.target === document ||\n        event.target === trapElement ||\n        trapElement.contains(event.target)\n      ) {\n        return;\n      }\n      const elements = SelectorEngine.focusableChildren(trapElement);\n      if (elements.length === 0) {\n        trapElement.focus();\n      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n        elements[elements.length - 1].focus();\n      } else {\n        elements[0].focus();\n      }\n    }\n    _handleKeydown(event) {\n      if (event.key !== TAB_KEY) {\n        return;\n      }\n      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n    }\n  }\n\n  return FocusTrap;\n});\n//# sourceMappingURL=focustrap.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/index.js",
    "content": "/*!\n * Bootstrap index.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? factory(exports)\n    : typeof define === 'function' && define.amd\n    ? define(['exports'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      factory((global.Index = {})));\n})(this, function (exports) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend';\n\n  /**\n   * Properly escape IDs selectors to handle weird IDs\n   * @param {string} selector\n   * @returns {string}\n   */\n  const parseSelector = (selector) => {\n    if (selector && window.CSS && window.CSS.escape) {\n      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n      selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n    }\n    return selector;\n  };\n\n  // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n  const toType = (object) => {\n    if (object === null || object === undefined) {\n      return `${object}`;\n    }\n    return Object.prototype.toString\n      .call(object)\n      .match(/\\s([a-z]+)/i)[1]\n      .toLowerCase();\n  };\n\n  /**\n   * Public Util API\n   */\n\n  const getUID = (prefix) => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n    return prefix;\n  };\n  const getTransitionDurationFromElement = (element) => {\n    if (!element) {\n      return 0;\n    }\n\n    // Get transition-duration of the element\n    let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (\n      (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n      MILLISECONDS_MULTIPLIER\n    );\n  };\n  const triggerTransitionEnd = (element) => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n  const isElement = (object) => {\n    if (!object || typeof object !== 'object') {\n      return false;\n    }\n    if (typeof object.jquery !== 'undefined') {\n      object = object[0];\n    }\n    return typeof object.nodeType !== 'undefined';\n  };\n  const getElement = (object) => {\n    // it's a jQuery object or a node element\n    if (isElement(object)) {\n      return object.jquery ? object[0] : object;\n    }\n    if (typeof object === 'string' && object.length > 0) {\n      return document.querySelector(parseSelector(object));\n    }\n    return null;\n  };\n  const isVisible = (element) => {\n    if (!isElement(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n    // Handle `details` element as its content may falsie appear visible when it is closed\n    const closedDetails = element.closest('details:not([open])');\n    if (!closedDetails) {\n      return elementIsVisible;\n    }\n    if (closedDetails !== element) {\n      const summary = element.closest('summary');\n      if (summary && summary.parentNode !== closedDetails) {\n        return false;\n      }\n      if (summary === null) {\n        return false;\n      }\n    }\n    return elementIsVisible;\n  };\n  const isDisabled = (element) => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n  const findShadowRoot = (element) => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    }\n\n    // Can find the shadow root otherwise it'll return the document\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n    if (element instanceof ShadowRoot) {\n      return element;\n    }\n\n    // when we don't find a shadow root\n    if (!element.parentNode) {\n      return null;\n    }\n    return findShadowRoot(element.parentNode);\n  };\n  const noop = () => {};\n\n  /**\n   * Trick to restart an element's animation\n   *\n   * @param {HTMLElement} element\n   * @return void\n   *\n   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n   */\n  const reflow = (element) => {\n    element.offsetHeight; // eslint-disable-line no-unused-expressions\n  };\n  const getjQuery = () => {\n    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return window.jQuery;\n    }\n    return null;\n  };\n  const DOMContentLoadedCallbacks = [];\n  const onDOMContentLoaded = (callback) => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          for (const callback of DOMContentLoadedCallbacks) {\n            callback();\n          }\n        });\n      }\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n  const isRTL = () => document.documentElement.dir === 'rtl';\n  const defineJQueryPlugin = (plugin) => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n  };\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n    const handler = ({ target }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    const listLength = list.length;\n    let index = list.indexOf(activeElement);\n\n    // if the element does not exist in the list return an element\n    // depending on the direction and if cycle is allowed\n    if (index === -1) {\n      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n    }\n    index += shouldGetNext ? 1 : -1;\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  exports.defineJQueryPlugin = defineJQueryPlugin;\n  exports.execute = execute;\n  exports.executeAfterTransition = executeAfterTransition;\n  exports.findShadowRoot = findShadowRoot;\n  exports.getElement = getElement;\n  exports.getNextActiveElement = getNextActiveElement;\n  exports.getTransitionDurationFromElement = getTransitionDurationFromElement;\n  exports.getUID = getUID;\n  exports.getjQuery = getjQuery;\n  exports.isDisabled = isDisabled;\n  exports.isElement = isElement;\n  exports.isRTL = isRTL;\n  exports.isVisible = isVisible;\n  exports.noop = noop;\n  exports.onDOMContentLoaded = onDOMContentLoaded;\n  exports.parseSelector = parseSelector;\n  exports.reflow = reflow;\n  exports.toType = toType;\n  exports.triggerTransitionEnd = triggerTransitionEnd;\n\n  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n});\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/sanitizer.js",
    "content": "/*!\n * Bootstrap sanitizer.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? factory(exports)\n    : typeof define === 'function' && define.amd\n    ? define(['exports'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      factory((global.Sanitizer = {})));\n})(this, function (exports) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  // js-docs-start allow-list\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    dd: [],\n    div: [],\n    dl: [],\n    dt: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: [],\n  };\n  // js-docs-end allow-list\n\n  const uriAttributes = new Set([\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href',\n  ]);\n\n  /**\n   * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n   * contexts.\n   *\n   * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n   */\n  // eslint-disable-next-line unicorn/better-regex\n  const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n  const allowedAttribute = (attribute, allowedAttributeList) => {\n    const attributeName = attribute.nodeName.toLowerCase();\n    if (allowedAttributeList.includes(attributeName)) {\n      if (uriAttributes.has(attributeName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n      }\n      return true;\n    }\n\n    // Check if a regular expression validates the attribute.\n    return allowedAttributeList\n      .filter((attributeRegex) => attributeRegex instanceof RegExp)\n      .some((regex) => regex.test(attributeName));\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n    if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n      return sanitizeFunction(unsafeHtml);\n    }\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n    for (const element of elements) {\n      const elementName = element.nodeName.toLowerCase();\n      if (!Object.keys(allowList).includes(elementName)) {\n        element.remove();\n        continue;\n      }\n      const attributeList = [].concat(...element.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n      for (const attribute of attributeList) {\n        if (!allowedAttribute(attribute, allowedAttributes)) {\n          element.removeAttribute(attribute.nodeName);\n        }\n      }\n    }\n    return createdDocument.body.innerHTML;\n  }\n\n  exports.DefaultAllowlist = DefaultAllowlist;\n  exports.sanitizeHtml = sanitizeHtml;\n\n  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n});\n//# sourceMappingURL=sanitizer.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/scrollbar.js",
    "content": "/*!\n * Bootstrap scrollbar.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('../dom/manipulator.js'),\n        require('../dom/selector-engine.js'),\n        require('./index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['../dom/manipulator', '../dom/selector-engine', './index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Scrollbar = factory(global.Manipulator, global.SelectorEngine, global.Index)));\n})(this, function (Manipulator, SelectorEngine, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n  const PROPERTY_PADDING = 'padding-right';\n  const PROPERTY_MARGIN = 'margin-right';\n\n  /**\n   * Class definition\n   */\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    // Public\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n    hide() {\n      const width = this.getWidth();\n      this._disableOverFlow();\n      // give padding to element to balance the hidden scrollbar width\n      this._setElementAttributes(\n        this._element,\n        PROPERTY_PADDING,\n        (calculatedValue) => calculatedValue + width\n      );\n      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n      this._setElementAttributes(\n        SELECTOR_FIXED_CONTENT,\n        PROPERTY_PADDING,\n        (calculatedValue) => calculatedValue + width\n      );\n      this._setElementAttributes(\n        SELECTOR_STICKY_CONTENT,\n        PROPERTY_MARGIN,\n        (calculatedValue) => calculatedValue - width\n      );\n    }\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n      this._resetElementAttributes(this._element, PROPERTY_PADDING);\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n    }\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n    // Private\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n      this._element.style.overflow = 'hidden';\n    }\n    _setElementAttributes(selector, styleProperty, callback) {\n      const scrollbarWidth = this.getWidth();\n      const manipulationCallBack = (element) => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n        this._saveInitialAttribute(element, styleProperty);\n        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n        element.style.setProperty(\n          styleProperty,\n          `${callback(Number.parseFloat(calculatedValue))}px`\n        );\n      };\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n    _saveInitialAttribute(element, styleProperty) {\n      const actualValue = element.style.getPropertyValue(styleProperty);\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProperty, actualValue);\n      }\n    }\n    _resetElementAttributes(selector, styleProperty) {\n      const manipulationCallBack = (element) => {\n        const value = Manipulator.getDataAttribute(element, styleProperty);\n        // We only want to remove the property if the value is `null`; the value can also be zero\n        if (value === null) {\n          element.style.removeProperty(styleProperty);\n          return;\n        }\n        Manipulator.removeDataAttribute(element, styleProperty);\n        element.style.setProperty(styleProperty, value);\n      };\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n    _applyManipulationCallback(selector, callBack) {\n      if (index_js.isElement(selector)) {\n        callBack(selector);\n        return;\n      }\n      for (const sel of SelectorEngine.find(selector, this._element)) {\n        callBack(sel);\n      }\n    }\n  }\n\n  return ScrollBarHelper;\n});\n//# sourceMappingURL=scrollbar.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/swipe.js",
    "content": "/*!\n * Bootstrap swipe.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('../dom/event-handler.js'),\n        require('./config.js'),\n        require('./index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['../dom/event-handler', './config', './index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.Swipe = factory(global.EventHandler, global.Config, global.Index)));\n})(this, function (EventHandler, Config, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/swipe.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'swipe';\n  const EVENT_KEY = '.bs.swipe';\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY}`;\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SWIPE_THRESHOLD = 40;\n  const Default = {\n    endCallback: null,\n    leftCallback: null,\n    rightCallback: null,\n  };\n  const DefaultType = {\n    endCallback: '(function|null)',\n    leftCallback: '(function|null)',\n    rightCallback: '(function|null)',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Swipe extends Config {\n    constructor(element, config) {\n      super();\n      this._element = element;\n      if (!element || !Swipe.isSupported()) {\n        return;\n      }\n      this._config = this._getConfig(config);\n      this._deltaX = 0;\n      this._supportPointerEvents = Boolean(window.PointerEvent);\n      this._initEvents();\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    dispose() {\n      EventHandler.off(this._element, EVENT_KEY);\n    }\n\n    // Private\n    _start(event) {\n      if (!this._supportPointerEvents) {\n        this._deltaX = event.touches[0].clientX;\n        return;\n      }\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX;\n      }\n    }\n    _end(event) {\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX - this._deltaX;\n      }\n      this._handleSwipe();\n      index_js.execute(this._config.endCallback);\n    }\n    _move(event) {\n      this._deltaX =\n        event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n    }\n    _handleSwipe() {\n      const absDeltaX = Math.abs(this._deltaX);\n      if (absDeltaX <= SWIPE_THRESHOLD) {\n        return;\n      }\n      const direction = absDeltaX / this._deltaX;\n      this._deltaX = 0;\n      if (!direction) {\n        return;\n      }\n      index_js.execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n    }\n    _initEvents() {\n      if (this._supportPointerEvents) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event));\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event));\n      }\n    }\n    _eventIsPointerPenTouch(event) {\n      return (\n        this._supportPointerEvents &&\n        (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n      );\n    }\n\n    // Static\n    static isSupported() {\n      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    }\n  }\n\n  return Swipe;\n});\n//# sourceMappingURL=swipe.js.map\n"
  },
  {
    "path": "src/js/bootstrap/dist/util/template-factory.js",
    "content": "/*!\n * Bootstrap template-factory.js v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory(\n        require('../dom/selector-engine.js'),\n        require('./config.js'),\n        require('./sanitizer.js'),\n        require('./index.js')\n      ))\n    : typeof define === 'function' && define.amd\n    ? define(['../dom/selector-engine', './config', './sanitizer', './index'], factory)\n    : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n      (global.TemplateFactory = factory(\n        global.SelectorEngine,\n        global.Config,\n        global.Sanitizer,\n        global.Index\n      )));\n})(this, function (SelectorEngine, Config, sanitizer_js, index_js) {\n  'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/template-factory.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'TemplateFactory';\n  const Default = {\n    allowList: sanitizer_js.DefaultAllowlist,\n    content: {},\n    // { selector : text ,  selector2 : text2 , }\n    extraClass: '',\n    html: false,\n    sanitize: true,\n    sanitizeFn: null,\n    template: '<div></div>',\n  };\n  const DefaultType = {\n    allowList: 'object',\n    content: 'object',\n    extraClass: '(string|function)',\n    html: 'boolean',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    template: 'string',\n  };\n  const DefaultContentType = {\n    entry: '(string|element|function|null)',\n    selector: '(string|element)',\n  };\n\n  /**\n   * Class definition\n   */\n\n  class TemplateFactory extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    getContent() {\n      return Object.values(this._config.content)\n        .map((config) => this._resolvePossibleFunction(config))\n        .filter(Boolean);\n    }\n    hasContent() {\n      return this.getContent().length > 0;\n    }\n    changeContent(content) {\n      this._checkContent(content);\n      this._config.content = {\n        ...this._config.content,\n        ...content,\n      };\n      return this;\n    }\n    toHtml() {\n      const templateWrapper = document.createElement('div');\n      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n      for (const [selector, text] of Object.entries(this._config.content)) {\n        this._setContent(templateWrapper, text, selector);\n      }\n      const template = templateWrapper.children[0];\n      const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n      if (extraClass) {\n        template.classList.add(...extraClass.split(' '));\n      }\n      return template;\n    }\n\n    // Private\n    _typeCheckConfig(config) {\n      super._typeCheckConfig(config);\n      this._checkContent(config.content);\n    }\n    _checkContent(arg) {\n      for (const [selector, content] of Object.entries(arg)) {\n        super._typeCheckConfig(\n          {\n            selector,\n            entry: content,\n          },\n          DefaultContentType\n        );\n      }\n    }\n    _setContent(template, content, selector) {\n      const templateElement = SelectorEngine.findOne(selector, template);\n      if (!templateElement) {\n        return;\n      }\n      content = this._resolvePossibleFunction(content);\n      if (!content) {\n        templateElement.remove();\n        return;\n      }\n      if (index_js.isElement(content)) {\n        this._putElementInTemplate(index_js.getElement(content), templateElement);\n        return;\n      }\n      if (this._config.html) {\n        templateElement.innerHTML = this._maybeSanitize(content);\n        return;\n      }\n      templateElement.textContent = content;\n    }\n    _maybeSanitize(arg) {\n      return this._config.sanitize\n        ? sanitizer_js.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn)\n        : arg;\n    }\n    _resolvePossibleFunction(arg) {\n      return index_js.execute(arg, [this]);\n    }\n    _putElementInTemplate(element, templateElement) {\n      if (this._config.html) {\n        templateElement.innerHTML = '';\n        templateElement.append(element);\n        return;\n      }\n      templateElement.textContent = element.textContent;\n    }\n  }\n\n  return TemplateFactory;\n});\n//# sourceMappingURL=template-factory.js.map\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/alert.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'alert';\nconst DATA_KEY = 'bs.alert';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove();\n    EventHandler.trigger(this._element, EVENT_CLOSED);\n    this.dispose();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// enableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Alert)\n\nexport default Alert;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/base-component.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js';\nimport EventHandler from './dom/event-handler.js';\nimport Config from './util/config.js';\nimport { executeAfterTransition, getElement } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super();\n\n    element = getElement(element);\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    this._config = this._getConfig(config);\n\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null;\n    }\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return (\n      this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n    );\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`;\n  }\n}\n\nexport default BaseComponent;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/button.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'button';\nconst DATA_KEY = 'bs.button';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n//   event.preventDefault()\n\n//   const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n//   const data = Button.getOrCreateInstance(button)\n\n//   data.toggle()\n// })\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Button)\n\nexport default Button;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/carousel.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd,\n} from './util/index.js';\nimport Swipe from './util/swipe.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel';\nconst DATA_KEY = 'bs.carousel';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`;\nconst EVENT_SLID = `slid${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\n\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-mdb-ride=\"carousel\"]';\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT,\n};\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true,\n};\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._interval = null;\n    this._activeElement = null;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this._swipeHelper = null;\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._addEventListeners();\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element);\n    }\n\n    this._clearInterval();\n  }\n\n  cycle() {\n    this._clearInterval();\n    this._updateInterval();\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n      return;\n    }\n\n    this.cycle();\n  }\n\n  to(index) {\n    const items = this._getItems();\n    if (index > items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive());\n    if (activeIndex === index) {\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, items[index]);\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose();\n    }\n\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval;\n    return config;\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault());\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return;\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause();\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout);\n      }\n\n      this.touchTimeout = setTimeout(\n        () => this._maybeEnableCycle(),\n        TOUCHEVENT_COMPAT_WAIT + this._config.interval\n      );\n    };\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack,\n    };\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig);\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n    if (direction) {\n      event.preventDefault();\n      this._slide(this._directionToOrder(direction));\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element);\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return;\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE);\n    activeIndicator.removeAttribute('aria-current');\n\n    const newActiveIndicator = SelectorEngine.findOne(\n      `[data-mdb-slide-to=\"${index}\"]`,\n      this._indicatorsElement\n    );\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);\n      newActiveIndicator.setAttribute('aria-current', 'true');\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive();\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-mdb-interval'), 10);\n\n    this._config.interval = elementInterval || this._config.defaultInterval;\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return;\n    }\n\n    const activeElement = this._getActive();\n    const isNext = order === ORDER_NEXT;\n    const nextElement =\n      element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n    if (nextElement === activeElement) {\n      return;\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const triggerEvent = (eventName) => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex,\n      });\n    };\n\n    const slideEvent = triggerEvent(EVENT_SLIDE);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return;\n    }\n\n    const isCycling = Boolean(this._interval);\n    this.pause();\n\n    this._isSliding = true;\n\n    this._setActiveIndicatorElement(nextElementIndex);\n    this._activeElement = nextElement;\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    nextElement.classList.add(orderClassName);\n\n    reflow(nextElement);\n\n    activeElement.classList.add(directionalClassName);\n    nextElement.classList.add(directionalClassName);\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName);\n      nextElement.classList.add(CLASS_NAME_ACTIVE);\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);\n\n      this._isSliding = false;\n\n      triggerEvent(EVENT_SLID);\n    };\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE);\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element);\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config);\n\n      if (typeof config === 'number') {\n        data.to(config);\n        return;\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n//   const target = SelectorEngine.getElementFromSelector(this)\n\n//   if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n//     return\n//   }\n\n//   event.preventDefault()\n\n//   const carousel = Carousel.getOrCreateInstance(target)\n//   const slideIndex = this.getAttribute('data-mdb-slide-to')\n\n//   if (slideIndex) {\n//     carousel.to(slideIndex)\n//     carousel._maybeEnableCycle()\n//     return\n//   }\n\n//   if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n//     carousel.next()\n//     carousel._maybeEnableCycle()\n//     return\n//   }\n\n//   carousel.prev()\n//   carousel._maybeEnableCycle()\n// })\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n//   for (const carousel of carousels) {\n//     Carousel.getOrCreateInstance(carousel)\n//   }\n// })\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Carousel)\n\nexport default Carousel;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/collapse.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse';\nconst DATA_KEY = 'bs.collapse';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-collapse-init]';\n\nconst Default = {\n  parent: null,\n  toggle: true,\n};\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._isTransitioning = false;\n    this._triggerArray = [];\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(\n        (foundElement) => foundElement === this._element\n      );\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._initializeChildren();\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return;\n    }\n\n    let activeChildren = [];\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter((element) => element !== this._element)\n        .map((element) => Collapse.getOrCreateInstance(element, { toggle: false }));\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide();\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true);\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n      this._element.style[dimension] = '';\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger);\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false);\n      }\n    }\n\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle); // Coerce string values\n    config.parent = getElement(config.parent);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return;\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element);\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected));\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(\n      (element) => !children.includes(element)\n    );\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return;\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n      element.setAttribute('aria-expanded', isOpen);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {};\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n//   if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n//     event.preventDefault()\n//   }\n\n//   for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n//     Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n//   }\n// })\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Collapse)\n\nexport default Collapse;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/dom/data.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element);\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(\n        `Bootstrap doesn't allow more than one instance per element. Bound instance: ${\n          Array.from(instanceMap.keys())[0]\n        }.`\n      );\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n\n    instanceMap.delete(key);\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  },\n};\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/dom/event-handler.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js';\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout',\n};\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll',\n]);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element);\n\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element });\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue;\n        }\n\n        hydrateObj(event, { delegateTarget: target });\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn);\n        }\n\n        return fn.apply(target, [event]);\n      }\n    }\n  };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events).find(\n    (event) => event.callable === callable && event.delegationSelector === delegationSelector\n  );\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string';\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(\n    originalTypeEvent,\n    handler,\n    delegationFunction\n  );\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = (fn) => {\n      return function (event) {\n        if (\n          !event.relatedTarget ||\n          (event.relatedTarget !== event.delegateTarget &&\n            !event.delegateTarget.contains(event.relatedTarget))\n        ) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    callable = wrapFunction(callable);\n  }\n\n  const events = getElementEvents(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\n\n    return;\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = isDelegated\n    ? bootstrapDelegationHandler(element, handler, callable)\n    : bootstrapHandler(element, callable);\n\n  fn.delegationSelector = isDelegated ? handler : null;\n  fn.callable = callable;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n\n  element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false);\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(\n      originalTypeEvent,\n      handler,\n      delegationFunction\n    );\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getElementEvents(element);\n    const storeElementEvent = events[typeEvent] || {};\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n\n    let jQueryEvent = null;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args);\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  },\n};\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value;\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value;\n        },\n      });\n    }\n  }\n\n  return obj;\n}\n\nexport default EventHandler;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/dom/manipulator.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twmdb/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true;\n  }\n\n  if (value === 'false') {\n    return false;\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value);\n  }\n\n  if (value === '' || value === 'null') {\n    return null;\n  }\n\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value));\n  } catch {\n    return value;\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    const mdbKeys = Object.keys(element.dataset).filter(\n      (key) => key.startsWith('mdb') && !key.startsWith('mdbConfig')\n    );\n\n    for (const key of mdbKeys) {\n      let pureKey = key.replace(/^mdb/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    }\n\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));\n  },\n};\n\nexport default Manipulator;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/dom/selector-engine.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js';\n\nconst getSelector = (element) => {\n  let selector = element.getAttribute('data-mdb-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href');\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null;\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n  }\n\n  return selector\n    ? selector\n        .split(',')\n        .map((sel) => parseSelector(sel))\n        .join(',')\n    : null;\n};\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter((child) => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode.closest(selector);\n\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]',\n    ]\n      .map((selector) => `${selector}:not([tabindex^=\"-\"])`)\n      .join(',');\n\n    return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null;\n    }\n\n    return null;\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element);\n\n    return selector ? SelectorEngine.findOne(selector) : null;\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element);\n\n    return selector ? SelectorEngine.find(selector) : [];\n  },\n};\n\nexport default SelectorEngine;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/dropdown.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n} from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = 'bs.dropdown';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ESCAPE_KEY = 'Escape';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-dropdown-initialized]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle',\n};\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)',\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._popper = null;\n    this._parent = this._element.parentNode; // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu =\n      SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n    this._inNavbar = this._detectNavbar();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element,\n    };\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._createPopper();\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n\n    this._element.focus();\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.add(CLASS_NAME_SHOW);\n    this._element.classList.add(CLASS_NAME_SHOW);\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element,\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW);\n    this._element.classList.remove(CLASS_NAME_SHOW);\n    this._element.setAttribute('aria-expanded', 'false');\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config);\n\n    if (\n      typeof config.reference === 'object' &&\n      !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(\n        `${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`\n      );\n    }\n\n    return config;\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");\n    }\n\n    let referenceElement = this._element;\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent;\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference);\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference;\n    }\n\n    const popperConfig = this._getPopperConfig();\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER;\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--mdb-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null;\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((value) => Number.parseInt(value, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n      ],\n    };\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [\n        {\n          name: 'applyStyles',\n          enabled: false,\n        },\n      ];\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n    };\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) =>\n      isVisible(element)\n    );\n\n    if (!items.length) {\n      return;\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle);\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      const composedPath = event.composedPath();\n      const isMenuTarget = composedPath.includes(context._menu);\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue;\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (\n        context._menu.contains(event.target) &&\n        ((event.type === 'keyup' && event.key === TAB_KEY) ||\n          /input|select|option|textarea|form/i.test(event.target.tagName))\n      ) {\n        continue;\n      }\n\n      const relatedTarget = { relatedTarget: context._element };\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event;\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName);\n    const isEscapeEvent = event.key === ESCAPE_KEY;\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return;\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return;\n    }\n\n    event.preventDefault();\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE)\n      ? this\n      : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation();\n      instance.show();\n      instance._selectMenuItem(event);\n      return;\n    }\n\n    if (instance._isShown()) {\n      // else is escape and we check if it is shown\n      event.stopPropagation();\n      instance.hide();\n      getToggleButton.focus();\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\n// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\n// EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\n// EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   event.preventDefault()\n//   Dropdown.getOrCreateInstance(this).toggle()\n// })\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Dropdown)\n\nexport default Dropdown;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/modal.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'modal';\nconst DATA_KEY = 'bs.modal';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst ESCAPE_KEY = 'Escape';\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\n\nconst OPEN_SELECTOR = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"modal\"]';\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._isShown = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget,\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._isTransitioning = true;\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._backdrop.show(() => this._showElement(relatedTarget));\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n    this._isTransitioning = true;\n    this._focustrap.deactivate();\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY);\n    EventHandler.off(this._dialog, EVENT_KEY);\n\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n\n    super.dispose();\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop) && Boolean(!this._config.modalNonInvasive), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated(),\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element,\n    });\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element);\n    }\n\n    this._element.style.display = 'block';\n    this._element.removeAttribute('aria-hidden');\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.scrollTop = 0;\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOW);\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget,\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n\n      this._triggerBackdropTransition();\n    });\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog();\n      }\n    });\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return;\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n          return;\n        }\n\n        if (this._config.backdrop) {\n          this.hide();\n        }\n      });\n    });\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n    this._element.setAttribute('aria-hidden', true);\n    this._element.removeAttribute('aria-modal');\n    this._element.removeAttribute('role');\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n      this._resetAdjustments();\n      this._scrollBar.reset();\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    });\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const initialOverflowY = this._element.style.overflowY;\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden';\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC);\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY;\n      }, this._dialog);\n    }, this._dialog);\n\n    this._element.focus();\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const scrollbarWidth = this._scrollBar.getWidth();\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   const target = SelectorEngine.getElementFromSelector(this)\n\n//   if (['A', 'AREA'].includes(this.tagName)) {\n//     event.preventDefault()\n//   }\n\n//   EventHandler.one(target, EVENT_SHOW, showEvent => {\n//     if (showEvent.defaultPrevented) {\n//       // only register focus restorer if modal will actually get shown\n//       return\n//     }\n\n//     EventHandler.one(target, EVENT_HIDDEN, () => {\n//       if (isVisible(this)) {\n//         this.focus()\n//       }\n//     })\n//   })\n\n//   // avoid conflict when clicking moddal toggler while another one is open\n//   const allreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n//   allreadyOpenedModals.forEach((modal) => {\n//     if (!modal.classList.contains('modal-non-invasive-show')) {\n//       Modal.getInstance(modal).hide();\n//     }\n//   });\n\n//   const data = Modal.getOrCreateInstance(target)\n\n//   data.toggle(this)\n// })\n\n// enableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Modal)\n\nexport default Modal;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/offcanvas.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isDisabled, isVisible } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas';\nconst DATA_KEY = 'bs.offcanvas';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst ESCAPE_KEY = 'Escape';\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"offcanvas\"]';\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n    }\n\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate();\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._focustrap.deactivate();\n    this._element.blur();\n    this._isShown = false;\n    this._element.classList.add(CLASS_NAME_HIDING);\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        return;\n      }\n\n      this.hide();\n    };\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop);\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null,\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element,\n    });\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    });\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   const target = SelectorEngine.getElementFromSelector(this)\n\n//   if (['A', 'AREA'].includes(this.tagName)) {\n//     event.preventDefault()\n//   }\n\n//   if (isDisabled(this)) {\n//     return\n//   }\n\n//   EventHandler.one(target, EVENT_HIDDEN, () => {\n//     // focus on trigger when it is closed\n//     if (isVisible(this)) {\n//       this.focus()\n//     }\n//   })\n\n//   // avoid conflict when clicking a toggler of an offcanvas, while another is open\n//   const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n//   if (alreadyOpen && alreadyOpen !== target) {\n//     Offcanvas.getInstance(alreadyOpen).hide()\n//   }\n\n//   const data = Offcanvas.getOrCreateInstance(target)\n//   data.toggle(this)\n// })\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n//     Offcanvas.getOrCreateInstance(selector).show()\n//   }\n// })\n\n// EventHandler.on(window, EVENT_RESIZE, () => {\n//   for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n//     if (getComputedStyle(element).position !== 'fixed') {\n//       Offcanvas.getOrCreateInstance(element).hide()\n//     }\n//   }\n// })\n\n// enableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/popover.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'popover';\n\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template:\n    '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click',\n};\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)',\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent();\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent(),\n    };\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content);\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Popover)\n\nexport default Popover;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/scrollspy.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = 'bs.scrollspy';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE = 'active';\n\nconst SELECTOR_DATA_SPY = '[data-mdb-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1],\n};\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array',\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    if (!this._config.target) {\n      return;\n    }\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    this._rootElement =\n      getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n    this._activeTarget = null;\n    this._observer = null;\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0,\n    };\n    this.refresh(); // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables();\n    this._maybeEnableSmoothScroll();\n\n    if (this._observer) {\n      this._observer.disconnect();\n    } else {\n      this._observer = this._getNewObserver();\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section);\n    }\n  }\n\n  dispose() {\n    if (this._observer) {\n      this._observer.disconnect();\n    }\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body;\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value));\n    }\n\n    return config;\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return;\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK);\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {\n      const observableSection = this._observableSections.get(event.target.hash);\n      if (observableSection) {\n        event.preventDefault();\n        const root = this._rootElement || window;\n        const height = observableSection.offsetTop - this._element.offsetTop;\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' });\n          return;\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height;\n      }\n    });\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin,\n    };\n\n    return new IntersectionObserver((entries) => this._observerCallback(entries), options);\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);\n    const activate = (entry) => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n      this._process(targetElement(entry));\n    };\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n    this._previousScrollData.parentScrollTop = parentScrollTop;\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null;\n        this._clearActiveClass(targetElement(entry));\n\n        continue;\n      }\n\n      const entryIsLowerThanPrevious =\n        entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry);\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return;\n        }\n\n        continue;\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry);\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue;\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor);\n        this._observableSections.set(anchor.hash, observableSection);\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return;\n    }\n\n    this._clearActiveClass(this._config.target);\n    this._activeTarget = target;\n    target.classList.add(CLASS_NAME_ACTIVE);\n    this._activateParents(target);\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target });\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(\n        SELECTOR_DROPDOWN_TOGGLE,\n        target.closest(SELECTOR_DROPDOWN)\n      ).classList.add(CLASS_NAME_ACTIVE);\n      return;\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE);\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE);\n\n    const activeNodes = SelectorEngine.find(\n      `${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`,\n      parent\n    );\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n//     ScrollSpy.getOrCreateInstance(spy)\n//   }\n// })\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/tab.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = 'bs.tab';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-tab-initialized]'; // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element);\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n    if (!this._parent) {\n      return;\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren());\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n\n    const hideEvent = active\n      ? EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem })\n      : null;\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return;\n    }\n\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem,\n      });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _keydown(event) {\n    if (\n      ![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(\n        event.key\n      )\n    ) {\n      return;\n    }\n\n    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault();\n\n    const children = this._getChildren().filter((element) => !isDisabled(element));\n    let nextActiveElement;\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true });\n      Tab.getOrCreateInstance(nextActiveElement).show();\n    }\n  }\n\n  _getChildren() {\n    // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find((child) => this._elemIsActive(child)) || null;\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child);\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child);\n    const isActive = this._elemIsActive(child);\n    const outerElem = this._getOuterElement(child);\n    child.setAttribute('aria-selected', isActive);\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1');\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab');\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child);\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child);\n\n    if (!target) {\n      return;\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element);\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return;\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem);\n      if (element) {\n        element.classList.toggle(className, open);\n      }\n    };\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);\n    outerElem.setAttribute('aria-expanded', open);\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value);\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE);\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM)\n      ? elem\n      : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   if (['A', 'AREA'].includes(this.tagName)) {\n//     event.preventDefault()\n//   }\n\n//   if (isDisabled(this)) {\n//     return\n//   }\n\n//   Tab.getOrCreateInstance(this).show()\n// })\n\n/**\n * Initialize on focus\n */\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n//     Tab.getOrCreateInstance(element)\n//   }\n// })\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Tab)\n\nexport default Tab;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/toast.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number',\n};\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000,\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n    this._setListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting;\n        break;\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n      }\n\n      default: {\n        break;\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// enableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Toast)\n\nexport default Toast;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/tooltip.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport {\n  defineJQueryPlugin,\n  execute,\n  findShadowRoot,\n  getElement,\n  getUID,\n  isRTL,\n  noop,\n} from './util/index.js';\nimport { DefaultAllowlist } from './util/sanitizer.js';\nimport TemplateFactory from './util/template-factory.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW = 'show';\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\n\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n\nconst EVENT_HIDE = 'hide';\nconst EVENT_HIDDEN = 'hidden';\nconst EVENT_SHOW = 'show';\nconst EVENT_SHOWN = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK = 'click';\nconst EVENT_FOCUSIN = 'focusin';\nconst EVENT_FOCUSOUT = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left',\n};\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template:\n    '<div class=\"tooltip\" role=\"tooltip\">' +\n    '<div class=\"tooltip-arrow\"></div>' +\n    '<div class=\"tooltip-inner\"></div>' +\n    '</div>',\n  title: '',\n  trigger: 'hover focus',\n};\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");\n    }\n\n    super(element, config);\n\n    // Private\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._isHovered = null;\n    this._activeTrigger = {};\n    this._popper = null;\n    this._templateFactory = null;\n    this._newContent = null;\n\n    // Protected\n    this.tip = null;\n\n    this._setListeners();\n\n    if (!this._config.selector) {\n      this._fixTitle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this._activeTrigger.click = !this._activeTrigger.click;\n    if (this._isShown()) {\n      this._leave();\n      return;\n    }\n\n    this._enter();\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n\n    EventHandler.off(\n      this._element.closest(SELECTOR_MODAL),\n      EVENT_MODAL_HIDE,\n      this._hideModalHandler\n    );\n\n    if (this._element.getAttribute('data-mdb-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-mdb-original-title'));\n    }\n\n    this._disposePopper();\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(\n      this._element\n    );\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper();\n\n    const tip = this._getTipElement();\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n    const { container } = this._config;\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip);\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n    }\n\n    this._popper = this._createPopper(tip);\n\n    tip.classList.add(CLASS_NAME_SHOW);\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));\n\n      if (this._isHovered === false) {\n        this._leave();\n      }\n\n      this._isHovered = false;\n    };\n\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const tip = this._getTipElement();\n    tip.classList.remove(CLASS_NAME_SHOW);\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    this._isHovered = null; // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper();\n      }\n\n      this._element.removeAttribute('aria-describedby');\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));\n    };\n\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle());\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n    }\n\n    return this.tip;\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml();\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null;\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n\n    const tipId = getUID(this.constructor.NAME).toString();\n\n    tip.setAttribute('id', tipId);\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE);\n    }\n\n    return tip;\n  }\n\n  setContent(content) {\n    this._newContent = content;\n    if (this._isShown()) {\n      this._disposePopper();\n      this.show();\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content);\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass),\n      });\n    }\n\n    return this._templateFactory;\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle(),\n    };\n  }\n\n  _getTitle() {\n    return (\n      this._resolvePossibleFunction(this._config.title) ||\n      this._element.getAttribute('data-mdb-original-title')\n    );\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element]);\n    const attachment = AttachmentMap[placement.toUpperCase()];\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((value) => Number.parseInt(value, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element]);\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`,\n          },\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: (data) => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n          },\n        },\n      ],\n    };\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n    };\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(\n          this._element,\n          this.constructor.eventName(EVENT_CLICK),\n          this._config.selector,\n          (event) => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context.toggle();\n          }\n        );\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn =\n          trigger === TRIGGER_HOVER\n            ? this.constructor.eventName(EVENT_MOUSEENTER)\n            : this.constructor.eventName(EVENT_FOCUSIN);\n        const eventOut =\n          trigger === TRIGGER_HOVER\n            ? this.constructor.eventName(EVENT_MOUSELEAVE)\n            : this.constructor.eventName(EVENT_FOCUSOUT);\n\n        EventHandler.on(this._element, eventIn, this._config.selector, (event) => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n          context._enter();\n        });\n        EventHandler.on(this._element, eventOut, this._config.selector, (event) => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget);\n\n          context._leave();\n        });\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(\n      this._element.closest(SELECTOR_MODAL),\n      EVENT_MODAL_HIDE,\n      this._hideModalHandler\n    );\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    if (!title) {\n      return;\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title);\n    }\n\n    this._element.setAttribute('data-mdb-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title');\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true;\n      return;\n    }\n\n    this._isHovered = true;\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show();\n      }\n    }, this._config.delay.show);\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return;\n    }\n\n    this._isHovered = false;\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide();\n      }\n    }, this._config.delay.hide);\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout);\n    this._timeout = setTimeout(handler, timeout);\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true);\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute];\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {}),\n    };\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay,\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value;\n      }\n    }\n\n    config.selector = false;\n    config.trigger = 'manual';\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config;\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy();\n      this._popper = null;\n    }\n\n    if (this.tip) {\n      this.tip.remove();\n      this.tip = null;\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Tooltip)\n\nexport default Tooltip;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/backdrop.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`;\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body', // give the choice to place backdrop under different elements\n};\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)',\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    const element = this._getElement();\n    if (this._config.isAnimated) {\n      reflow(element);\n    }\n\n    element.classList.add(CLASS_NAME_SHOW);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n    this._isAppended = false;\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = this._config.className;\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    const element = this._getElement();\n    this._config.rootElement.append(element);\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n\n    this._isAppended = true;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n}\n\nexport default Backdrop;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/component-functions.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isDisabled } from './index.js';\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n  const name = component.NAME;\n\n  EventHandler.on(document, clickEvent, `[data-mdb-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n    const instance = component.getOrCreateInstance(target);\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]();\n  });\n};\n\nexport { enableDismissTrigger };\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/config.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport { isElement, toType } from './index.js';\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {};\n  }\n\n  static get DefaultType() {\n    return {};\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  _configAfterMerge(config) {\n    return config;\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {}),\n    };\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property];\n      const valueType = isElement(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        );\n      }\n    }\n  }\n}\n\nexport default Config;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/focustrap.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap';\nconst DATA_KEY = 'bs.focustrap';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`;\n\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\n\nconst Default = {\n  autofocus: true,\n  trapElement: null, // The element to trap focus inside of\n};\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element',\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isActive = false;\n    this._lastTabNavDirection = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return;\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus();\n    }\n\n    EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));\n\n    this._isActive = true;\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return;\n    }\n\n    this._isActive = false;\n    EventHandler.off(document, EVENT_KEY);\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config;\n\n    if (\n      event.target === document ||\n      event.target === trapElement ||\n      trapElement.contains(event.target)\n    ) {\n      return;\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement);\n\n    if (elements.length === 0) {\n      trapElement.focus();\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus();\n    } else {\n      elements[0].focus();\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return;\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n  }\n}\n\nexport default FocusTrap;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/index.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = (selector) => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n  }\n\n  return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = (object) => {\n  if (object === null || object === undefined) {\n    return `${object}`;\n  }\n\n  return Object.prototype.toString\n    .call(object)\n    .match(/\\s([a-z]+)/i)[1]\n    .toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = (prefix) => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n\n  return (\n    (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n    MILLISECONDS_MULTIPLIER\n  );\n};\n\nconst triggerTransitionEnd = (element) => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (object) => {\n  if (!object || typeof object !== 'object') {\n    return false;\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0];\n  }\n\n  return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = (object) => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object;\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object));\n  }\n\n  return null;\n};\n\nconst isVisible = (element) => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])');\n\n  if (!closedDetails) {\n    return elementIsVisible;\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary');\n    if (summary && summary.parentNode !== closedDetails) {\n      return false;\n    }\n\n    if (summary === null) {\n      return false;\n    }\n  }\n\n  return elementIsVisible;\n};\n\nconst isDisabled = (element) => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = (element) => {\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-mdb-no-jquery')) {\n    return window.jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = (callback) => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback();\n        }\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = (plugin) => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n\n  let called = false;\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length;\n  let index = list.indexOf(activeElement);\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n  }\n\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType,\n};\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/sanitizer.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: [],\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n]);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n    }\n\n    return true;\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList\n    .filter((attributeRegex) => attributeRegex instanceof RegExp)\n    .some((regex) => regex.test(attributeName));\n};\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase();\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...element.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName);\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML;\n}\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/scrollbar.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n    this._disableOverFlow();\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(\n      this._element,\n      PROPERTY_PADDING,\n      (calculatedValue) => calculatedValue + width\n    );\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(\n      SELECTOR_FIXED_CONTENT,\n      PROPERTY_PADDING,\n      (calculatedValue) => calculatedValue + width\n    );\n    this._setElementAttributes(\n      SELECTOR_STICKY_CONTENT,\n      PROPERTY_MARGIN,\n      (calculatedValue) => calculatedValue - width\n    );\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n    this._resetElementAttributes(this._element, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth();\n    const manipulationCallBack = (element) => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProperty);\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty);\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = (element) => {\n      const value = Manipulator.getDataAttribute(element, styleProperty);\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty);\n        return;\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty);\n      element.style.setProperty(styleProperty, value);\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n      return;\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel);\n    }\n  }\n}\n\nexport default ScrollBarHelper;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/swipe.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe';\nconst EVENT_KEY = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null,\n};\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)',\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super();\n    this._element = element;\n\n    if (!element || !Swipe.isSupported()) {\n      return;\n    }\n\n    this._config = this._getConfig(config);\n    this._deltaX = 0;\n    this._supportPointerEvents = Boolean(window.PointerEvent);\n    this._initEvents();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY);\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX;\n\n      return;\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX;\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX;\n    }\n\n    this._handleSwipe();\n    execute(this._config.endCallback);\n  }\n\n  _move(event) {\n    this._deltaX =\n      event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX);\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltaX / this._deltaX;\n\n    this._deltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event));\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return (\n      this._supportPointerEvents &&\n      (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n    );\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n  }\n}\n\nexport default Swipe;\n"
  },
  {
    "path": "src/js/bootstrap/mdb-prefix/util/template-factory.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js';\nimport { execute, getElement, isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory';\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>',\n};\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string',\n};\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)',\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map((config) => this._resolvePossibleFunction(config))\n      .filter(Boolean);\n  }\n\n  hasContent() {\n    return this.getContent().length > 0;\n  }\n\n  changeContent(content) {\n    this._checkContent(content);\n    this._config.content = { ...this._config.content, ...content };\n    return this;\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div');\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector);\n    }\n\n    const template = templateWrapper.children[0];\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '));\n    }\n\n    return template;\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config);\n    this._checkContent(config.content);\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType);\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template);\n\n    if (!templateElement) {\n      return;\n    }\n\n    content = this._resolvePossibleFunction(content);\n\n    if (!content) {\n      templateElement.remove();\n      return;\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement);\n      return;\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content);\n      return;\n    }\n\n    templateElement.textContent = content;\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize\n      ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn)\n      : arg;\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this]);\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = '';\n      templateElement.append(element);\n      return;\n    }\n\n    templateElement.textContent = element.textContent;\n  }\n}\n\nexport default TemplateFactory;\n"
  },
  {
    "path": "src/js/bootstrap/src/alert.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'alert';\nconst DATA_KEY = 'bs.alert';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove();\n    EventHandler.trigger(this._element, EVENT_CLOSED);\n    this.dispose();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\nexport default Alert;\n"
  },
  {
    "path": "src/js/bootstrap/src/base-component.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js';\nimport EventHandler from './dom/event-handler.js';\nimport Config from './util/config.js';\nimport { executeAfterTransition, getElement } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super();\n\n    element = getElement(element);\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    this._config = this._getConfig(config);\n\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null;\n    }\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return (\n      this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n    );\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`;\n  }\n}\n\nexport default BaseComponent;\n"
  },
  {
    "path": "src/js/bootstrap/src/button.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'button';\nconst DATA_KEY = 'bs.button';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {\n  event.preventDefault();\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE);\n  const data = Button.getOrCreateInstance(button);\n\n  data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\nexport default Button;\n"
  },
  {
    "path": "src/js/bootstrap/src/carousel.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd,\n} from './util/index.js';\nimport Swipe from './util/swipe.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel';\nconst DATA_KEY = 'bs.carousel';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`;\nconst EVENT_SLID = `slid${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\n\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT,\n};\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true,\n};\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._interval = null;\n    this._activeElement = null;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this._swipeHelper = null;\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._addEventListeners();\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element);\n    }\n\n    this._clearInterval();\n  }\n\n  cycle() {\n    this._clearInterval();\n    this._updateInterval();\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n      return;\n    }\n\n    this.cycle();\n  }\n\n  to(index) {\n    const items = this._getItems();\n    if (index > items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive());\n    if (activeIndex === index) {\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, items[index]);\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose();\n    }\n\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval;\n    return config;\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault());\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return;\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause();\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout);\n      }\n\n      this.touchTimeout = setTimeout(\n        () => this._maybeEnableCycle(),\n        TOUCHEVENT_COMPAT_WAIT + this._config.interval\n      );\n    };\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack,\n    };\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig);\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n    if (direction) {\n      event.preventDefault();\n      this._slide(this._directionToOrder(direction));\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element);\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return;\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE);\n    activeIndicator.removeAttribute('aria-current');\n\n    const newActiveIndicator = SelectorEngine.findOne(\n      `[data-bs-slide-to=\"${index}\"]`,\n      this._indicatorsElement\n    );\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);\n      newActiveIndicator.setAttribute('aria-current', 'true');\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive();\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    this._config.interval = elementInterval || this._config.defaultInterval;\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return;\n    }\n\n    const activeElement = this._getActive();\n    const isNext = order === ORDER_NEXT;\n    const nextElement =\n      element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n    if (nextElement === activeElement) {\n      return;\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const triggerEvent = (eventName) => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex,\n      });\n    };\n\n    const slideEvent = triggerEvent(EVENT_SLIDE);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return;\n    }\n\n    const isCycling = Boolean(this._interval);\n    this.pause();\n\n    this._isSliding = true;\n\n    this._setActiveIndicatorElement(nextElementIndex);\n    this._activeElement = nextElement;\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    nextElement.classList.add(orderClassName);\n\n    reflow(nextElement);\n\n    activeElement.classList.add(directionalClassName);\n    nextElement.classList.add(directionalClassName);\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName);\n      nextElement.classList.add(CLASS_NAME_ACTIVE);\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);\n\n      this._isSliding = false;\n\n      triggerEvent(EVENT_SLID);\n    };\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE);\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element);\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config);\n\n      if (typeof config === 'number') {\n        data.to(config);\n        return;\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return;\n  }\n\n  event.preventDefault();\n\n  const carousel = Carousel.getOrCreateInstance(target);\n  const slideIndex = this.getAttribute('data-bs-slide-to');\n\n  if (slideIndex) {\n    carousel.to(slideIndex);\n    carousel._maybeEnableCycle();\n    return;\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next();\n    carousel._maybeEnableCycle();\n    return;\n  }\n\n  carousel.prev();\n  carousel._maybeEnableCycle();\n});\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel);\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\nexport default Carousel;\n"
  },
  {
    "path": "src/js/bootstrap/src/collapse.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse';\nconst DATA_KEY = 'bs.collapse';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]';\n\nconst Default = {\n  parent: null,\n  toggle: true,\n};\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._isTransitioning = false;\n    this._triggerArray = [];\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(\n        (foundElement) => foundElement === this._element\n      );\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._initializeChildren();\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return;\n    }\n\n    let activeChildren = [];\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter((element) => element !== this._element)\n        .map((element) => Collapse.getOrCreateInstance(element, { toggle: false }));\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide();\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true);\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n      this._element.style[dimension] = '';\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger);\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false);\n      }\n    }\n\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle); // Coerce string values\n    config.parent = getElement(config.parent);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return;\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element);\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected));\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(\n      (element) => !children.includes(element)\n    );\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return;\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n      element.setAttribute('aria-expanded', isOpen);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {};\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (\n    event.target.tagName === 'A' ||\n    (event.delegateTarget && event.delegateTarget.tagName === 'A')\n  ) {\n    event.preventDefault();\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle();\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\nexport default Collapse;\n"
  },
  {
    "path": "src/js/bootstrap/src/dom/data.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element);\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(\n        `Bootstrap doesn't allow more than one instance per element. Bound instance: ${\n          Array.from(instanceMap.keys())[0]\n        }.`\n      );\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n\n    instanceMap.delete(key);\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  },\n};\n"
  },
  {
    "path": "src/js/bootstrap/src/dom/event-handler.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js';\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout',\n};\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll',\n]);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element);\n\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element });\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue;\n        }\n\n        hydrateObj(event, { delegateTarget: target });\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn);\n        }\n\n        return fn.apply(target, [event]);\n      }\n    }\n  };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events).find(\n    (event) => event.callable === callable && event.delegationSelector === delegationSelector\n  );\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string';\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(\n    originalTypeEvent,\n    handler,\n    delegationFunction\n  );\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = (fn) => {\n      return function (event) {\n        if (\n          !event.relatedTarget ||\n          (event.relatedTarget !== event.delegateTarget &&\n            !event.delegateTarget.contains(event.relatedTarget))\n        ) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    callable = wrapFunction(callable);\n  }\n\n  const events = getElementEvents(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\n\n    return;\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = isDelegated\n    ? bootstrapDelegationHandler(element, handler, callable)\n    : bootstrapHandler(element, callable);\n\n  fn.delegationSelector = isDelegated ? handler : null;\n  fn.callable = callable;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n\n  element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false);\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(\n      originalTypeEvent,\n      handler,\n      delegationFunction\n    );\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getElementEvents(element);\n    const storeElementEvent = events[typeEvent] || {};\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n\n    let jQueryEvent = null;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args);\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  },\n};\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value;\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value;\n        },\n      });\n    }\n  }\n\n  return obj;\n}\n\nexport default EventHandler;\n"
  },
  {
    "path": "src/js/bootstrap/src/dom/manipulator.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true;\n  }\n\n  if (value === 'false') {\n    return false;\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value);\n  }\n\n  if (value === '' || value === 'null') {\n    return null;\n  }\n\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value));\n  } catch {\n    return value;\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    const bsKeys = Object.keys(element.dataset).filter(\n      (key) => key.startsWith('bs') && !key.startsWith('bsConfig')\n    );\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    }\n\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n};\n\nexport default Manipulator;\n"
  },
  {
    "path": "src/js/bootstrap/src/dom/selector-engine.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js';\n\nconst getSelector = (element) => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href');\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null;\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n  }\n\n  return selector\n    ? selector\n        .split(',')\n        .map((sel) => parseSelector(sel))\n        .join(',')\n    : null;\n};\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter((child) => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode.closest(selector);\n\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]',\n    ]\n      .map((selector) => `${selector}:not([tabindex^=\"-\"])`)\n      .join(',');\n\n    return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null;\n    }\n\n    return null;\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element);\n\n    return selector ? SelectorEngine.findOne(selector) : null;\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element);\n\n    return selector ? SelectorEngine.find(selector) : [];\n  },\n};\n\nexport default SelectorEngine;\n"
  },
  {
    "path": "src/js/bootstrap/src/dropdown.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n} from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = 'bs.dropdown';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ESCAPE_KEY = 'Escape';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle',\n};\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)',\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._popper = null;\n    this._parent = this._element.parentNode; // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu =\n      SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n    this._inNavbar = this._detectNavbar();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element,\n    };\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._createPopper();\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n\n    this._element.focus();\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.add(CLASS_NAME_SHOW);\n    this._element.classList.add(CLASS_NAME_SHOW);\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element,\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW);\n    this._element.classList.remove(CLASS_NAME_SHOW);\n    this._element.setAttribute('aria-expanded', 'false');\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config);\n\n    if (\n      typeof config.reference === 'object' &&\n      !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(\n        `${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`\n      );\n    }\n\n    return config;\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");\n    }\n\n    let referenceElement = this._element;\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent;\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference);\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference;\n    }\n\n    const popperConfig = this._getPopperConfig();\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER;\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null;\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((value) => Number.parseInt(value, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n      ],\n    };\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [\n        {\n          name: 'applyStyles',\n          enabled: false,\n        },\n      ];\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n    };\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) =>\n      isVisible(element)\n    );\n\n    if (!items.length) {\n      return;\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle);\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      const composedPath = event.composedPath();\n      const isMenuTarget = composedPath.includes(context._menu);\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue;\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (\n        context._menu.contains(event.target) &&\n        ((event.type === 'keyup' && event.key === TAB_KEY) ||\n          /input|select|option|textarea|form/i.test(event.target.tagName))\n      ) {\n        continue;\n      }\n\n      const relatedTarget = { relatedTarget: context._element };\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event;\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName);\n    const isEscapeEvent = event.key === ESCAPE_KEY;\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return;\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return;\n    }\n\n    event.preventDefault();\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE)\n      ? this\n      : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation();\n      instance.show();\n      instance._selectMenuItem(event);\n      return;\n    }\n\n    if (instance._isShown()) {\n      // else is escape and we check if it is shown\n      event.stopPropagation();\n      instance.hide();\n      getToggleButton.focus();\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(\n  document,\n  EVENT_KEYDOWN_DATA_API,\n  SELECTOR_DATA_TOGGLE,\n  Dropdown.dataApiKeydownHandler\n);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault();\n  Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\nexport default Dropdown;\n"
  },
  {
    "path": "src/js/bootstrap/src/modal.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'modal';\nconst DATA_KEY = 'bs.modal';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst ESCAPE_KEY = 'Escape';\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\n\nconst OPEN_SELECTOR = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]';\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._isShown = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget,\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._isTransitioning = true;\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._backdrop.show(() => this._showElement(relatedTarget));\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n    this._isTransitioning = true;\n    this._focustrap.deactivate();\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY);\n    EventHandler.off(this._dialog, EVENT_KEY);\n\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n\n    super.dispose();\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated(),\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element,\n    });\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element);\n    }\n\n    this._element.style.display = 'block';\n    this._element.removeAttribute('aria-hidden');\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.scrollTop = 0;\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOW);\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget,\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n\n      this._triggerBackdropTransition();\n    });\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog();\n      }\n    });\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return;\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n          return;\n        }\n\n        if (this._config.backdrop) {\n          this.hide();\n        }\n      });\n    });\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n    this._element.setAttribute('aria-hidden', true);\n    this._element.removeAttribute('aria-modal');\n    this._element.removeAttribute('role');\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n      this._resetAdjustments();\n      this._scrollBar.reset();\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    });\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const initialOverflowY = this._element.style.overflowY;\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden';\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC);\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY;\n      }, this._dialog);\n    }, this._dialog);\n\n    this._element.focus();\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const scrollbarWidth = this._scrollBar.getWidth();\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide();\n  }\n\n  const data = Modal.getOrCreateInstance(target);\n\n  data.toggle(this);\n});\n\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\nexport default Modal;\n"
  },
  {
    "path": "src/js/bootstrap/src/offcanvas.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isDisabled, isVisible } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas';\nconst DATA_KEY = 'bs.offcanvas';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst ESCAPE_KEY = 'Escape';\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]';\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n    }\n\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate();\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._focustrap.deactivate();\n    this._element.blur();\n    this._isShown = false;\n    this._element.classList.add(CLASS_NAME_HIDING);\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        return;\n      }\n\n      this.hide();\n    };\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop);\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null,\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element,\n    });\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    });\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  });\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show();\n  }\n});\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide();\n    }\n  }\n});\n\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\nexport default Offcanvas;\n"
  },
  {
    "path": "src/js/bootstrap/src/popover.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'popover';\n\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template:\n    '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click',\n};\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)',\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent();\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent(),\n    };\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content);\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\nexport default Popover;\n"
  },
  {
    "path": "src/js/bootstrap/src/scrollspy.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = 'bs.scrollspy';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE = 'active';\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1],\n};\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array',\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    this._rootElement =\n      getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n    this._activeTarget = null;\n    this._observer = null;\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0,\n    };\n    this.refresh(); // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables();\n    this._maybeEnableSmoothScroll();\n\n    if (this._observer) {\n      this._observer.disconnect();\n    } else {\n      this._observer = this._getNewObserver();\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section);\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect();\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body;\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value));\n    }\n\n    return config;\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return;\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK);\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {\n      const observableSection = this._observableSections.get(event.target.hash);\n      if (observableSection) {\n        event.preventDefault();\n        const root = this._rootElement || window;\n        const height = observableSection.offsetTop - this._element.offsetTop;\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' });\n          return;\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height;\n      }\n    });\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin,\n    };\n\n    return new IntersectionObserver((entries) => this._observerCallback(entries), options);\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);\n    const activate = (entry) => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n      this._process(targetElement(entry));\n    };\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n    this._previousScrollData.parentScrollTop = parentScrollTop;\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null;\n        this._clearActiveClass(targetElement(entry));\n\n        continue;\n      }\n\n      const entryIsLowerThanPrevious =\n        entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry);\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return;\n        }\n\n        continue;\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry);\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue;\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor);\n        this._observableSections.set(anchor.hash, observableSection);\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return;\n    }\n\n    this._clearActiveClass(this._config.target);\n    this._activeTarget = target;\n    target.classList.add(CLASS_NAME_ACTIVE);\n    this._activateParents(target);\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target });\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(\n        SELECTOR_DROPDOWN_TOGGLE,\n        target.closest(SELECTOR_DROPDOWN)\n      ).classList.add(CLASS_NAME_ACTIVE);\n      return;\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE);\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE);\n\n    const activeNodes = SelectorEngine.find(\n      `${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`,\n      parent\n    );\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy);\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\nexport default ScrollSpy;\n"
  },
  {
    "path": "src/js/bootstrap/src/tab.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = 'bs.tab';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE =\n  '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element);\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n    if (!this._parent) {\n      return;\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren());\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n\n    const hideEvent = active\n      ? EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem })\n      : null;\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return;\n    }\n\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem,\n      });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _keydown(event) {\n    if (\n      ![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(\n        event.key\n      )\n    ) {\n      return;\n    }\n\n    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault();\n\n    const children = this._getChildren().filter((element) => !isDisabled(element));\n    let nextActiveElement;\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true });\n      Tab.getOrCreateInstance(nextActiveElement).show();\n    }\n  }\n\n  _getChildren() {\n    // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find((child) => this._elemIsActive(child)) || null;\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child);\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child);\n    const isActive = this._elemIsActive(child);\n    const outerElem = this._getOuterElement(child);\n    child.setAttribute('aria-selected', isActive);\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1');\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab');\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child);\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child);\n\n    if (!target) {\n      return;\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element);\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return;\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem);\n      if (element) {\n        element.classList.toggle(className, open);\n      }\n    };\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);\n    outerElem.setAttribute('aria-expanded', open);\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value);\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE);\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM)\n      ? elem\n      : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element);\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\nexport default Tab;\n"
  },
  {
    "path": "src/js/bootstrap/src/toast.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number',\n};\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000,\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n    this._setListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting;\n        break;\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n      }\n\n      default: {\n        break;\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport default Toast;\n"
  },
  {
    "path": "src/js/bootstrap/src/tooltip.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport {\n  defineJQueryPlugin,\n  execute,\n  findShadowRoot,\n  getElement,\n  getUID,\n  isRTL,\n  noop,\n} from './util/index.js';\nimport { DefaultAllowlist } from './util/sanitizer.js';\nimport TemplateFactory from './util/template-factory.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW = 'show';\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\n\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n\nconst EVENT_HIDE = 'hide';\nconst EVENT_HIDDEN = 'hidden';\nconst EVENT_SHOW = 'show';\nconst EVENT_SHOWN = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK = 'click';\nconst EVENT_FOCUSIN = 'focusin';\nconst EVENT_FOCUSOUT = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left',\n};\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template:\n    '<div class=\"tooltip\" role=\"tooltip\">' +\n    '<div class=\"tooltip-arrow\"></div>' +\n    '<div class=\"tooltip-inner\"></div>' +\n    '</div>',\n  title: '',\n  trigger: 'hover focus',\n};\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");\n    }\n\n    super(element, config);\n\n    // Private\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._isHovered = null;\n    this._activeTrigger = {};\n    this._popper = null;\n    this._templateFactory = null;\n    this._newContent = null;\n\n    // Protected\n    this.tip = null;\n\n    this._setListeners();\n\n    if (!this._config.selector) {\n      this._fixTitle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this._activeTrigger.click = !this._activeTrigger.click;\n    if (this._isShown()) {\n      this._leave();\n      return;\n    }\n\n    this._enter();\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n\n    EventHandler.off(\n      this._element.closest(SELECTOR_MODAL),\n      EVENT_MODAL_HIDE,\n      this._hideModalHandler\n    );\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n    }\n\n    this._disposePopper();\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(\n      this._element\n    );\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper();\n\n    const tip = this._getTipElement();\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n    const { container } = this._config;\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip);\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n    }\n\n    this._popper = this._createPopper(tip);\n\n    tip.classList.add(CLASS_NAME_SHOW);\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));\n\n      if (this._isHovered === false) {\n        this._leave();\n      }\n\n      this._isHovered = false;\n    };\n\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const tip = this._getTipElement();\n    tip.classList.remove(CLASS_NAME_SHOW);\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    this._isHovered = null; // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper();\n      }\n\n      this._element.removeAttribute('aria-describedby');\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));\n    };\n\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle());\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n    }\n\n    return this.tip;\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml();\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null;\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n\n    const tipId = getUID(this.constructor.NAME).toString();\n\n    tip.setAttribute('id', tipId);\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE);\n    }\n\n    return tip;\n  }\n\n  setContent(content) {\n    this._newContent = content;\n    if (this._isShown()) {\n      this._disposePopper();\n      this.show();\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content);\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass),\n      });\n    }\n\n    return this._templateFactory;\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle(),\n    };\n  }\n\n  _getTitle() {\n    return (\n      this._resolvePossibleFunction(this._config.title) ||\n      this._element.getAttribute('data-bs-original-title')\n    );\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element]);\n    const attachment = AttachmentMap[placement.toUpperCase()];\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((value) => Number.parseInt(value, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element]);\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`,\n          },\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: (data) => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n          },\n        },\n      ],\n    };\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n    };\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(\n          this._element,\n          this.constructor.eventName(EVENT_CLICK),\n          this._config.selector,\n          (event) => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context.toggle();\n          }\n        );\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn =\n          trigger === TRIGGER_HOVER\n            ? this.constructor.eventName(EVENT_MOUSEENTER)\n            : this.constructor.eventName(EVENT_FOCUSIN);\n        const eventOut =\n          trigger === TRIGGER_HOVER\n            ? this.constructor.eventName(EVENT_MOUSELEAVE)\n            : this.constructor.eventName(EVENT_FOCUSOUT);\n\n        EventHandler.on(this._element, eventIn, this._config.selector, (event) => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n          context._enter();\n        });\n        EventHandler.on(this._element, eventOut, this._config.selector, (event) => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget);\n\n          context._leave();\n        });\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(\n      this._element.closest(SELECTOR_MODAL),\n      EVENT_MODAL_HIDE,\n      this._hideModalHandler\n    );\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    if (!title) {\n      return;\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title);\n    }\n\n    this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title');\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true;\n      return;\n    }\n\n    this._isHovered = true;\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show();\n      }\n    }, this._config.delay.show);\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return;\n    }\n\n    this._isHovered = false;\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide();\n      }\n    }, this._config.delay.hide);\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout);\n    this._timeout = setTimeout(handler, timeout);\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true);\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute];\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {}),\n    };\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay,\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value;\n      }\n    }\n\n    config.selector = false;\n    config.trigger = 'manual';\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config;\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy();\n      this._popper = null;\n    }\n\n    if (this.tip) {\n      this.tip.remove();\n      this.tip = null;\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\nexport default Tooltip;\n"
  },
  {
    "path": "src/js/bootstrap/src/util/backdrop.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`;\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body', // give the choice to place backdrop under different elements\n};\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)',\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    const element = this._getElement();\n    if (this._config.isAnimated) {\n      reflow(element);\n    }\n\n    element.classList.add(CLASS_NAME_SHOW);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n    this._isAppended = false;\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = this._config.className;\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    const element = this._getElement();\n    this._config.rootElement.append(element);\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n\n    this._isAppended = true;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n}\n\nexport default Backdrop;\n"
  },
  {
    "path": "src/js/bootstrap/src/util/component-functions.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isDisabled } from './index.js';\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n  const name = component.NAME;\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n    const instance = component.getOrCreateInstance(target);\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]();\n  });\n};\n\nexport { enableDismissTrigger };\n"
  },
  {
    "path": "src/js/bootstrap/src/util/config.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport { isElement, toType } from './index.js';\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {};\n  }\n\n  static get DefaultType() {\n    return {};\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  _configAfterMerge(config) {\n    return config;\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {}),\n    };\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property];\n      const valueType = isElement(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        );\n      }\n    }\n  }\n}\n\nexport default Config;\n"
  },
  {
    "path": "src/js/bootstrap/src/util/focustrap.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap';\nconst DATA_KEY = 'bs.focustrap';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`;\n\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\n\nconst Default = {\n  autofocus: true,\n  trapElement: null, // The element to trap focus inside of\n};\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element',\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isActive = false;\n    this._lastTabNavDirection = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return;\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus();\n    }\n\n    EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));\n\n    this._isActive = true;\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return;\n    }\n\n    this._isActive = false;\n    EventHandler.off(document, EVENT_KEY);\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config;\n\n    if (\n      event.target === document ||\n      event.target === trapElement ||\n      trapElement.contains(event.target)\n    ) {\n      return;\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement);\n\n    if (elements.length === 0) {\n      trapElement.focus();\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus();\n    } else {\n      elements[0].focus();\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return;\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n  }\n}\n\nexport default FocusTrap;\n"
  },
  {
    "path": "src/js/bootstrap/src/util/index.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = (selector) => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n  }\n\n  return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = (object) => {\n  if (object === null || object === undefined) {\n    return `${object}`;\n  }\n\n  return Object.prototype.toString\n    .call(object)\n    .match(/\\s([a-z]+)/i)[1]\n    .toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = (prefix) => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n\n  return (\n    (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n    MILLISECONDS_MULTIPLIER\n  );\n};\n\nconst triggerTransitionEnd = (element) => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (object) => {\n  if (!object || typeof object !== 'object') {\n    return false;\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0];\n  }\n\n  return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = (object) => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object;\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object));\n  }\n\n  return null;\n};\n\nconst isVisible = (element) => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])');\n\n  if (!closedDetails) {\n    return elementIsVisible;\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary');\n    if (summary && summary.parentNode !== closedDetails) {\n      return false;\n    }\n\n    if (summary === null) {\n      return false;\n    }\n  }\n\n  return elementIsVisible;\n};\n\nconst isDisabled = (element) => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = (element) => {\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = (callback) => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback();\n        }\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = (plugin) => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n\n  let called = false;\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length;\n  let index = list.indexOf(activeElement);\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n  }\n\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType,\n};\n"
  },
  {
    "path": "src/js/bootstrap/src/util/sanitizer.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: [],\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n]);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n    }\n\n    return true;\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList\n    .filter((attributeRegex) => attributeRegex instanceof RegExp)\n    .some((regex) => regex.test(attributeName));\n};\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase();\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...element.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName);\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML;\n}\n"
  },
  {
    "path": "src/js/bootstrap/src/util/scrollbar.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n    this._disableOverFlow();\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(\n      this._element,\n      PROPERTY_PADDING,\n      (calculatedValue) => calculatedValue + width\n    );\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(\n      SELECTOR_FIXED_CONTENT,\n      PROPERTY_PADDING,\n      (calculatedValue) => calculatedValue + width\n    );\n    this._setElementAttributes(\n      SELECTOR_STICKY_CONTENT,\n      PROPERTY_MARGIN,\n      (calculatedValue) => calculatedValue - width\n    );\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n    this._resetElementAttributes(this._element, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth();\n    const manipulationCallBack = (element) => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProperty);\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty);\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = (element) => {\n      const value = Manipulator.getDataAttribute(element, styleProperty);\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty);\n        return;\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty);\n      element.style.setProperty(styleProperty, value);\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n      return;\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel);\n    }\n  }\n}\n\nexport default ScrollBarHelper;\n"
  },
  {
    "path": "src/js/bootstrap/src/util/swipe.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe';\nconst EVENT_KEY = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null,\n};\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)',\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super();\n    this._element = element;\n\n    if (!element || !Swipe.isSupported()) {\n      return;\n    }\n\n    this._config = this._getConfig(config);\n    this._deltaX = 0;\n    this._supportPointerEvents = Boolean(window.PointerEvent);\n    this._initEvents();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY);\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX;\n\n      return;\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX;\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX;\n    }\n\n    this._handleSwipe();\n    execute(this._config.endCallback);\n  }\n\n  _move(event) {\n    this._deltaX =\n      event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX);\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltaX / this._deltaX;\n\n    this._deltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event));\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return (\n      this._supportPointerEvents &&\n      (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n    );\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n  }\n}\n\nexport default Swipe;\n"
  },
  {
    "path": "src/js/bootstrap/src/util/template-factory.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js';\nimport { execute, getElement, isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory';\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>',\n};\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string',\n};\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)',\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map((config) => this._resolvePossibleFunction(config))\n      .filter(Boolean);\n  }\n\n  hasContent() {\n    return this.getContent().length > 0;\n  }\n\n  changeContent(content) {\n    this._checkContent(content);\n    this._config.content = { ...this._config.content, ...content };\n    return this;\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div');\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector);\n    }\n\n    const template = templateWrapper.children[0];\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '));\n    }\n\n    return template;\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config);\n    this._checkContent(config.content);\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType);\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template);\n\n    if (!templateElement) {\n      return;\n    }\n\n    content = this._resolvePossibleFunction(content);\n\n    if (!content) {\n      templateElement.remove();\n      return;\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement);\n      return;\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content);\n      return;\n    }\n\n    templateElement.textContent = content;\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize\n      ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn)\n      : arg;\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this]);\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = '';\n      templateElement.append(element);\n      return;\n    }\n\n    templateElement.textContent = element.textContent;\n  }\n}\n\nexport default TemplateFactory;\n"
  },
  {
    "path": "src/js/free/alert.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSAlert from '../bootstrap/mdb-prefix/alert';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert';\n\nconst EVENT_CLOSE_BS = 'close.bs.alert';\nconst EVENT_CLOSED_BS = 'closed.bs.alert';\n\nconst EXTENDED_EVENTS = [{ name: 'close' }, { name: 'closed' }];\n\nclass Alert extends BSAlert {\n  constructor(element, data = {}) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_CLOSE_BS);\n    EventHandler.off(this._element, EVENT_CLOSED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Alert;\n"
  },
  {
    "path": "src/js/free/base-component.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from '../mdb/dom/data';\nimport { getElement } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n// const VERSION = '5.1.3';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.setData(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.removeData(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n    Object.getOwnPropertyNames(this).forEach((propertyName) => {\n      this[propertyName] = null;\n    });\n  }\n\n  /** Static */\n\n  static getInstance(element) {\n    return Data.getData(getElement(element), this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return (\n      this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n    );\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `mdb.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n}\n\nexport default BaseComponent;\n"
  },
  {
    "path": "src/js/free/button.js",
    "content": "import Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\n\nimport BSButton from '../bootstrap/mdb-prefix/button';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'button';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_TRANSITIONEND = 'transitionend';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SHOWN = 'shown';\nconst CLASS_NAME_FIXED_ACTION_BTN = 'fixed-action-btn';\n\nconst SELECTOR_ACTION_BUTTON = '.fixed-action-btn:not(.smooth-scroll) > .btn-floating';\nconst SELECTOR_LIST_ELEMENT = 'ul .btn';\nconst SELECTOR_LIST = 'ul';\n\nclass Button extends BSButton {\n  constructor(element) {\n    super(element);\n    this._fn = {};\n\n    if (this._element) {\n      Data.setData(this._element, DATA_KEY, this);\n      this._init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Static\n  static get NAME() {\n    return NAME;\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Button(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n\n  // Getters\n  get _actionButton() {\n    return SelectorEngine.findOne(SELECTOR_ACTION_BUTTON, this._element);\n  }\n\n  get _buttonListElements() {\n    return SelectorEngine.find(SELECTOR_LIST_ELEMENT, this._element);\n  }\n\n  get _buttonList() {\n    return SelectorEngine.findOne(SELECTOR_LIST, this._element);\n  }\n\n  get _isTouchDevice() {\n    return 'ontouchstart' in document.documentElement;\n  }\n\n  // Public\n  show() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n      EventHandler.trigger(this._element, EVENT_SHOW);\n      // EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, this._bindListOpenTransitionEnd);\n      this._bindListOpenTransitionEnd();\n      Manipulator.addStyle(this._element, { height: `${this._fullContainerHeight}px` });\n      this._toggleVisibility(true);\n    }\n  }\n\n  hide() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n      EventHandler.trigger(this._element, EVENT_HIDE);\n      // EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, this._bindListHideTransitionEnd);\n      this._bindListHideTransitionEnd();\n      this._toggleVisibility(false);\n    }\n  }\n\n  dispose() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      EventHandler.off(this._actionButton, EVENT_CLICK);\n      this._actionButton.removeEventListener(EVENT_MOUSEENTER, this._fn.mouseenter);\n      this._element.removeEventListener(EVENT_MOUSELEAVE, this._fn.mouseleave);\n    }\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _init() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      this._saveInitialHeights();\n      this._setInitialStyles();\n      this._bindInitialEvents();\n    }\n  }\n\n  _bindMouseEnter() {\n    this._actionButton.addEventListener(\n      EVENT_MOUSEENTER,\n      // prettier-ignore\n      this._fn.mouseenter = () => {\n        if (!this._isTouchDevice) {\n          this.show();\n        }\n      }\n      // prettier-ignore\n    );\n  }\n\n  _bindMouseLeave() {\n    this._element.addEventListener(\n      EVENT_MOUSELEAVE,\n      // prettier-ignore\n      this._fn.mouseleave = () => {\n        this.hide();\n      }\n      // prettier-ignore\n    );\n  }\n\n  _bindClick() {\n    EventHandler.on(this._actionButton, EVENT_CLICK, () => {\n      if (Manipulator.hasClass(this._element, CLASS_NAME_ACTIVE)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    });\n  }\n\n  _bindListHideTransitionEnd() {\n    EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, (event) => {\n      if (event.propertyName === 'transform') {\n        EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n        this._element.style.height = `${this._initialContainerHeight}px`;\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      }\n    });\n  }\n\n  _bindListOpenTransitionEnd() {\n    EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, (event) => {\n      if (event.propertyName === 'transform') {\n        EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n      }\n    });\n  }\n\n  _toggleVisibility(isVisible) {\n    const action = isVisible ? 'addClass' : 'removeClass';\n    const listTranslate = isVisible ? 'translate(0)' : `translateY(${this._fullContainerHeight}px)`;\n    Manipulator.addStyle(this._buttonList, { transform: listTranslate });\n\n    if (this._buttonListElements) {\n      this._buttonListElements.forEach((el) => Manipulator[action](el, CLASS_NAME_SHOWN));\n    }\n    Manipulator[action](this._element, CLASS_NAME_ACTIVE);\n  }\n\n  _getHeight(element) {\n    const computed = window.getComputedStyle(element);\n    const height = parseFloat(computed.getPropertyValue('height'));\n    return height;\n  }\n\n  _saveInitialHeights() {\n    this._initialContainerHeight = this._getHeight(this._element);\n    this._initialListHeight = this._getHeight(this._buttonList);\n    this._fullContainerHeight = this._initialContainerHeight + this._initialListHeight;\n  }\n\n  _bindInitialEvents() {\n    this._bindClick();\n    this._bindMouseEnter();\n    this._bindMouseLeave();\n  }\n\n  _setInitialStyles() {\n    this._buttonList.style.marginBottom = `${this._initialContainerHeight}px`;\n    this._buttonList.style.transform = `translateY(${this._fullContainerHeight}px)`;\n\n    this._element.style.height = `${this._initialContainerHeight}px`;\n  }\n}\n\nexport default Button;\n"
  },
  {
    "path": "src/js/free/carousel.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSCarousel from '../bootstrap/mdb-prefix/carousel';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel';\n\nconst EVENT_SLIDE_BS = 'slide.bs.carousel';\nconst EVENT_SLID_BS = 'slid.bs.carousel';\n\nconst EXTENDED_EVENTS = [\n  { name: 'slide', parametersToCopy: ['relatedTarget', 'direction', 'from', 'to'] },\n  { name: 'slid', parametersToCopy: ['relatedTarget', 'direction', 'from', 'to'] },\n];\n\nclass Carousel extends BSCarousel {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SLIDE_BS);\n    EventHandler.off(this._element, EVENT_SLID_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Carousel;\n"
  },
  {
    "path": "src/js/free/collapse.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSCollapse from '../bootstrap/mdb-prefix/collapse';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse';\n\nconst EVENT_SHOW_BS = 'show.bs.collapse';\nconst EVENT_SHOWN_BS = 'shown.bs.collapse';\nconst EVENT_HIDE_BS = 'hide.bs.collapse';\nconst EVENT_HIDDEN_BS = 'hidden.bs.collapse';\n\nconst EXTENDED_EVENTS = [{ name: 'show' }, { name: 'shown' }, { name: 'hide' }, { name: 'hidden' }];\n\nclass Collapse extends BSCollapse {\n  constructor(element, data = {}) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Collapse;\n"
  },
  {
    "path": "src/js/free/dropdown.js",
    "content": "import { typeCheckConfig } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSDropdown from '../bootstrap/mdb-prefix/dropdown';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst Default = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  dropdownAnimation: 'on',\n};\n\nconst DefaultType = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  dropdownAnimation: 'string',\n};\n\nconst EVENT_HIDE = 'hide.bs.dropdown';\nconst EVENT_HIDDEN = 'hidden.bs.dropdown';\nconst EVENT_SHOW = 'show.bs.dropdown';\nconst EVENT_SHOWN = 'shown.bs.dropdown';\n\nconst EVENT_HIDE_MDB = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN_MDB = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW_MDB = `show${EVENT_KEY}`;\nconst EVENT_SHOWN_MDB = `shown${EVENT_KEY}`;\n\nconst ANIMATION_CLASS = 'animation';\nconst ANIMATION_SHOW_CLASS = 'fade-in';\nconst ANIMATION_HIDE_CLASS = 'fade-out';\n\nclass Dropdown extends BSDropdown {\n  constructor(element, data) {\n    super(element, data);\n    this._config = this._getConfig(data);\n    this._menuStyle = '';\n    this._popperPlacement = '';\n    this._mdbPopperConfig = '';\n\n    //* prevents dropdown close issue when system animation is turned off\n    const isPrefersReducedMotionSet = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    if (this._config.dropdownAnimation === 'on' && !isPrefersReducedMotionSet) {\n      this._init();\n    }\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW);\n    EventHandler.off(this._parent, EVENT_SHOWN);\n    EventHandler.off(this._parent, EVENT_HIDE);\n    EventHandler.off(this._parent, EVENT_HIDDEN);\n\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindShowEvent();\n    this._bindShownEvent();\n    this._bindHideEvent();\n    this._bindHiddenEvent();\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((val) => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const popperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n      ],\n    };\n\n    // Disable Popper if we have a static display\n    if (this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      popperConfig.modifiers = [\n        {\n          name: 'applyStyles',\n          enabled: false,\n        },\n      ];\n    }\n\n    return {\n      ...popperConfig,\n      /* eslint no-extra-parens: \"off\" */\n      ...(typeof this._config.popperConfig === 'function'\n        ? this._config.popperConfig(popperConfig)\n        : this._config.popperConfig),\n    };\n  }\n\n  _bindShowEvent() {\n    EventHandler.on(this._element, EVENT_SHOW, (e) => {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (showEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n\n      this._dropdownAnimationStart('show');\n    });\n  }\n\n  _bindShownEvent() {\n    EventHandler.on(this._parent, EVENT_SHOWN, (e) => {\n      const shownEvent = EventHandler.trigger(this._parent, EVENT_SHOWN_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (shownEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n    });\n  }\n\n  _bindHideEvent() {\n    EventHandler.on(this._parent, EVENT_HIDE, (e) => {\n      const hideEvent = EventHandler.trigger(this._parent, EVENT_HIDE_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (hideEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n\n      this._menuStyle = this._menu.style.cssText;\n      this._popperPlacement = this._menu.getAttribute('data-popper-placement');\n      this._mdbPopperConfig = this._menu.getAttribute('data-mdb-popper');\n    });\n  }\n\n  _bindHiddenEvent() {\n    EventHandler.on(this._parent, EVENT_HIDDEN, (e) => {\n      const hiddenEvent = EventHandler.trigger(this._parent, EVENT_HIDDEN_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (hiddenEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n\n      if (this._config.display !== 'static' && this._menuStyle !== '') {\n        this._menu.style.cssText = this._menuStyle;\n      }\n\n      this._menu.setAttribute('data-popper-placement', this._popperPlacement);\n      this._menu.setAttribute('data-mdb-popper', this._mdbPopperConfig);\n\n      this._dropdownAnimationStart('hide');\n    });\n  }\n\n  _dropdownAnimationStart(action) {\n    switch (action) {\n      case 'show':\n        this._menu.classList.add(ANIMATION_CLASS, ANIMATION_SHOW_CLASS);\n        this._menu.classList.remove(ANIMATION_HIDE_CLASS);\n        break;\n      default:\n        // hide\n        this._menu.classList.add(ANIMATION_CLASS, ANIMATION_HIDE_CLASS);\n        this._menu.classList.remove(ANIMATION_SHOW_CLASS);\n        break;\n    }\n\n    this._bindAnimationEnd();\n  }\n\n  _bindAnimationEnd() {\n    EventHandler.one(this._menu, 'animationend', () => {\n      this._menu.classList.remove(ANIMATION_CLASS, ANIMATION_HIDE_CLASS, ANIMATION_SHOW_CLASS);\n    });\n  }\n}\n\nexport default Dropdown;\n"
  },
  {
    "path": "src/js/free/input.js",
    "content": "import { element, onDOMContentLoaded } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport 'detect-autofill';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'input';\nconst DATA_KEY = 'mdb.input';\nconst CLASSNAME_ACTIVE = 'active';\nconst CLASSNAME_NOTCH = 'form-notch';\nconst CLASSNAME_NOTCH_LEADING = 'form-notch-leading';\nconst CLASSNAME_NOTCH_MIDDLE = 'form-notch-middle';\nconst CLASSNAME_NOTCH_TRAILING = 'form-notch-trailing';\nconst CLASSNAME_PLACEHOLDER_ACTIVE = 'placeholder-active';\nconst CLASSNAME_HELPER = 'form-helper';\nconst CLASSNAME_COUNTER = 'form-counter';\n\nconst SELECTOR_NOTCH = `.${CLASSNAME_NOTCH}`;\nconst SELECTOR_NOTCH_LEADING = `.${CLASSNAME_NOTCH_LEADING}`;\nconst SELECTOR_NOTCH_MIDDLE = `.${CLASSNAME_NOTCH_MIDDLE}`;\nconst SELECTOR_HELPER = `.${CLASSNAME_HELPER}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Input extends BaseComponent {\n  constructor(element) {\n    super(element);\n\n    this._label = null;\n    this._labelWidth = 0;\n    this._labelMarginLeft = 0;\n    this._notchLeading = null;\n    this._notchMiddle = null;\n    this._notchTrailing = null;\n    this._initiated = false;\n    this._helper = null;\n    this._counter = false;\n    this._counterElement = null;\n    this._maxLength = 0;\n    this._leadingIcon = null;\n    if (this._element) {\n      this.init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get input() {\n    const inputElement =\n      SelectorEngine.findOne('input', this._element) ||\n      SelectorEngine.findOne('textarea', this._element);\n    return inputElement;\n  }\n\n  // Public\n  init() {\n    if (this._initiated) {\n      return;\n    }\n    this._getLabelData();\n    this._applyDivs();\n    this._applyNotch();\n    this._activate();\n    this._getHelper();\n    this._getCounter();\n    this._initiated = true;\n  }\n\n  update() {\n    this._getLabelData();\n    this._getNotchData();\n    this._applyNotch();\n    this._activate();\n    this._getHelper();\n    this._getCounter();\n  }\n\n  forceActive() {\n    Manipulator.addClass(this.input, CLASSNAME_ACTIVE);\n  }\n\n  forceInactive() {\n    Manipulator.removeClass(this.input, CLASSNAME_ACTIVE);\n  }\n\n  dispose() {\n    this._removeBorder();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  /*\n  _getIcons() {\n    this._leadingIcon = SelectorEngine.findOne('i.leading', this._element);\n\n    if (this._leadingIcon !== null) {\n      this._applyLeadingIcon();\n    }\n  }\n\n  _applyLeadingIcon() {\n    this._label.innerHTML = ` ${this._label.innerHTML}`;\n    this._label.insertBefore(this._leadingIcon, this._label.firstChild);\n  }\n  */\n\n  _getLabelData() {\n    this._label = SelectorEngine.findOne('label', this._element);\n    if (this._label === null) {\n      this._showPlaceholder();\n    } else {\n      this._getLabelWidth();\n      this._getLabelPositionInInputGroup();\n      this._toggleDefaultDatePlaceholder();\n    }\n  }\n\n  _getHelper() {\n    this._helper = SelectorEngine.findOne(SELECTOR_HELPER, this._element);\n  }\n\n  _getCounter() {\n    this._counter = Manipulator.getDataAttribute(this.input, 'showcounter');\n    if (this._counter) {\n      this._maxLength = this.input.maxLength;\n      this._showCounter();\n    }\n  }\n\n  _showCounter() {\n    const counters = SelectorEngine.find('.form-counter', this._element);\n    if (counters.length > 0) {\n      return;\n    }\n    this._counterElement = document.createElement('div');\n    Manipulator.addClass(this._counterElement, CLASSNAME_COUNTER);\n    const actualLength = this.input.value.length;\n    this._counterElement.innerHTML = `${actualLength} / ${this._maxLength}`;\n    this._helper.appendChild(this._counterElement);\n    this._bindCounter();\n  }\n\n  _bindCounter() {\n    EventHandler.on(this.input, 'input', () => {\n      const actualLength = this.input.value.length;\n      this._counterElement.innerHTML = `${actualLength} / ${this._maxLength}`;\n    });\n  }\n\n  _toggleDefaultDatePlaceholder(input = this.input) {\n    const type = input.getAttribute('type');\n    const typesWithPlaceholder = ['date', 'time', 'datetime-local', 'month', 'week'];\n\n    if (!typesWithPlaceholder.includes(type)) {\n      return;\n    }\n\n    const isInputFocused = document.activeElement === input;\n\n    if (!isInputFocused && !input.value) {\n      input.style.opacity = 0;\n    } else {\n      input.style.opacity = 1;\n    }\n  }\n\n  _showPlaceholder() {\n    Manipulator.addClass(this.input, CLASSNAME_PLACEHOLDER_ACTIVE);\n  }\n\n  _getNotchData() {\n    this._notchMiddle = SelectorEngine.findOne(SELECTOR_NOTCH_MIDDLE, this._element);\n    this._notchLeading = SelectorEngine.findOne(SELECTOR_NOTCH_LEADING, this._element);\n  }\n\n  _getLabelWidth() {\n    this._labelWidth = this._label.clientWidth * 0.8 + 8;\n  }\n\n  _getLabelPositionInInputGroup() {\n    this._labelMarginLeft = 0;\n\n    if (!this._element.classList.contains('input-group')) return;\n    const input = this.input;\n    const prefix = SelectorEngine.prev(input, '.input-group-text')[0];\n    if (prefix === undefined) {\n      this._labelMarginLeft = 0;\n    } else {\n      this._labelMarginLeft = prefix.offsetWidth - 1;\n    }\n  }\n\n  _applyDivs() {\n    const allNotchWrappers = SelectorEngine.find(SELECTOR_NOTCH, this._element);\n    const notchWrapper = element('div');\n    Manipulator.addClass(notchWrapper, CLASSNAME_NOTCH);\n    this._notchLeading = element('div');\n    Manipulator.addClass(this._notchLeading, CLASSNAME_NOTCH_LEADING);\n    this._notchMiddle = element('div');\n    Manipulator.addClass(this._notchMiddle, CLASSNAME_NOTCH_MIDDLE);\n    this._notchTrailing = element('div');\n    Manipulator.addClass(this._notchTrailing, CLASSNAME_NOTCH_TRAILING);\n    if (allNotchWrappers.length >= 1) {\n      return;\n    }\n    notchWrapper.append(this._notchLeading);\n    notchWrapper.append(this._notchMiddle);\n    notchWrapper.append(this._notchTrailing);\n    this._element.append(notchWrapper);\n  }\n\n  _applyNotch() {\n    this._notchMiddle.style.width = `${this._labelWidth}px`;\n    this._notchLeading.style.width = `${this._labelMarginLeft + 9}px`;\n\n    if (this._label === null) return;\n    this._label.style.marginLeft = `${this._labelMarginLeft}px`;\n  }\n\n  _removeBorder() {\n    const border = SelectorEngine.findOne(SELECTOR_NOTCH, this._element);\n    if (border) border.remove();\n  }\n\n  _activate(event) {\n    onDOMContentLoaded(() => {\n      this._getElements(event);\n\n      if (!this._element) {\n        return;\n      }\n\n      const input = event ? event.target : this.input;\n\n      if (input.value !== '') {\n        Manipulator.addClass(input, CLASSNAME_ACTIVE);\n      }\n      this._toggleDefaultDatePlaceholder(input);\n    });\n  }\n\n  _getElements(event) {\n    let initialized;\n    if (event) {\n      this._element = event.target.parentNode;\n      this._label = SelectorEngine.findOne('label', this._element);\n\n      initialized = Manipulator.getDataAttribute(\n        this._element,\n        `${this.constructor.NAME}-initialized`\n      );\n    }\n\n    if (!initialized) {\n      return;\n    }\n\n    if (event && this._label) {\n      const prevLabelWidth = this._labelWidth;\n      this._getLabelData();\n\n      if (prevLabelWidth !== this._labelWidth) {\n        this._notchMiddle = SelectorEngine.findOne('.form-notch-middle', event.target.parentNode);\n        this._notchLeading = SelectorEngine.findOne(\n          SELECTOR_NOTCH_LEADING,\n          event.target.parentNode\n        );\n        this._applyNotch();\n      }\n    }\n  }\n\n  _deactivate(event) {\n    const input = event ? event.target : this.input;\n\n    if (input.value === '') {\n      input.classList.remove(CLASSNAME_ACTIVE);\n    }\n    this._toggleDefaultDatePlaceholder(input);\n  }\n\n  static activate(instance) {\n    return function (event) {\n      instance._activate(event);\n    };\n  }\n\n  static deactivate(instance) {\n    return function (event) {\n      instance._deactivate(event);\n    };\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n      if (!data) {\n        data = new Input(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Input;\n"
  },
  {
    "path": "src/js/free/modal.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSModal from '../bootstrap/mdb-prefix/modal';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal';\n\nconst EVENT_HIDE_BS = 'hide.bs.modal';\nconst EVENT_HIDE_PREVENTED_BS = 'hidePrevented.bs.modal';\nconst EVENT_HIDDEN_BS = 'hidden.bs.modal';\nconst EVENT_SHOW_BS = 'show.bs.modal';\nconst EVENT_SHOWN_BS = 'shown.bs.modal';\n\nconst EXTENDED_EVENTS = [\n  { name: 'show', parametersToCopy: ['relatedTarget'] },\n  { name: 'shown', parametersToCopy: ['relatedTarget'] },\n  { name: 'hide' },\n  { name: 'hidePrevented' },\n  { name: 'hidden' },\n];\n\nclass Modal extends BSModal {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_PREVENTED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Modal;\n"
  },
  {
    "path": "src/js/free/popover.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSPopover from '../bootstrap/mdb-prefix/popover';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover';\n\nconst EVENT_SHOW_BS = 'show.bs.popover';\nconst EVENT_SHOWN_BS = 'shown.bs.popover';\nconst EVENT_HIDE_BS = 'hide.bs.popover';\nconst EVENT_HIDDEN_BS = 'hidden.bs.popover';\nconst EVENT_INSERTED_BS = 'inserted.bs.popover';\n\nconst EXTENDED_EVENTS = [\n  { name: 'show' },\n  { name: 'shown' },\n  { name: 'hide' },\n  { name: 'hidden' },\n  { name: 'inserted' },\n];\n\nclass Popover extends BSPopover {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this.element, EVENT_SHOW_BS);\n    EventHandler.off(this.element, EVENT_SHOWN_BS);\n    EventHandler.off(this.element, EVENT_HIDE_BS);\n    EventHandler.off(this.element, EVENT_HIDDEN_BS);\n    EventHandler.off(this.element, EVENT_INSERTED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Popover;\n"
  },
  {
    "path": "src/js/free/range.js",
    "content": "import { element } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'range';\nconst DATA_KEY = 'mdb.range';\nconst CLASSNAME_THUMB = 'thumb';\nconst CLASSNAME_ACTIVE = 'thumb-active';\nconst CLASSNAME_THUMB_VALUE = 'thumb-value';\n\nconst SELECTOR_THUMB_VALUE = `.${CLASSNAME_THUMB_VALUE}`;\nconst SELECTOR_THUMB = `.${CLASSNAME_THUMB}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Range extends BaseComponent {\n  constructor(element) {\n    super(element);\n\n    this._initiated = false;\n    this._thumb = null;\n\n    if (this._element) {\n      this.init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get rangeInput() {\n    return SelectorEngine.findOne('input[type=range]', this._element);\n  }\n\n  // Public\n  init() {\n    if (this._initiated) {\n      return;\n    }\n    this._addThumb();\n    this._thumbUpdate();\n    this._handleEvents();\n    this._initiated = true;\n  }\n\n  dispose() {\n    this._disposeEvents();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _addThumb() {\n    const RANGE_THUMB = element('span');\n    Manipulator.addClass(RANGE_THUMB, CLASSNAME_THUMB);\n    RANGE_THUMB.innerHTML = '<span class=\"thumb-value\"></span>';\n    this._element.append(RANGE_THUMB);\n    this._thumb = SelectorEngine.findOne(SELECTOR_THUMB, this._element);\n  }\n\n  _handleEvents() {\n    EventHandler.on(this.rangeInput, 'mousedown', () => this._showThumb());\n    EventHandler.on(this.rangeInput, 'mouseup', () => this._hideThumb());\n    EventHandler.on(this.rangeInput, 'touchstart', () => this._showThumb());\n    EventHandler.on(this.rangeInput, 'touchend', () => this._hideThumb());\n    EventHandler.on(this.rangeInput, 'input', () => this._thumbUpdate());\n  }\n\n  _disposeEvents() {\n    EventHandler.off(this.rangeInput, 'mousedown');\n    EventHandler.off(this.rangeInput, 'mouseup');\n    EventHandler.off(this.rangeInput, 'touchstart');\n    EventHandler.off(this.rangeInput, 'touchend');\n    EventHandler.off(this.rangeInput, 'input');\n  }\n\n  _showThumb() {\n    Manipulator.addClass(this._thumb, CLASSNAME_ACTIVE);\n  }\n\n  _hideThumb() {\n    Manipulator.removeClass(this._thumb, CLASSNAME_ACTIVE);\n  }\n\n  _thumbUpdate() {\n    const rangeInput = this.rangeInput;\n    const inputValue = rangeInput.value;\n    const minValue = rangeInput.min ? rangeInput.min : 0;\n    const maxValue = rangeInput.max ? rangeInput.max : 100;\n    const thumbValue = SelectorEngine.findOne(SELECTOR_THUMB_VALUE, this._thumb);\n    thumbValue.textContent = inputValue;\n    const newValue = Number(((inputValue - minValue) * 100) / (maxValue - minValue));\n    Manipulator.style(this._thumb, { left: `calc(${newValue}% + (${8 - newValue * 0.15}px))` });\n  }\n  // Static\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n      if (!data) {\n        data = new Range(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Range;\n"
  },
  {
    "path": "src/js/free/ripple.js",
    "content": "import { element, typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'ripple';\nconst DATA_KEY = 'mdb.ripple';\nconst CLASSNAME_RIPPLE = 'ripple-surface';\nconst CLASSNAME_RIPPLE_WAVE = 'ripple-wave';\nconst CLASSNAME_RIPPLE_WRAPPER = 'input-wrapper';\nconst SELECTOR_BTN = '.btn';\nconst SELECTOR_COMPONENT = [SELECTOR_BTN, `[data-mdb-${NAME}-init]`];\n\nconst CLASSNAME_UNBOUND = 'ripple-surface-unbound';\nconst GRADIENT =\n  'rgba({{color}}, 0.2) 0, rgba({{color}}, 0.3) 40%, rgba({{color}}, 0.4) 50%, rgba({{color}}, 0.5) 60%, rgba({{color}}, 0) 70%';\nconst DEFAULT_RIPPLE_COLOR = [0, 0, 0];\nconst BOOTSTRAP_COLORS = [\n  'primary',\n  'secondary',\n  'success',\n  'danger',\n  'warning',\n  'info',\n  'light',\n  'dark',\n];\n\n// Sets value when run opacity transition\n// Hide element after 50% (0.5) time of animation and finish on 100%\nconst TRANSITION_BREAK_OPACITY = 0.5;\n\nconst Default = {\n  rippleCentered: false,\n  rippleColor: '',\n  rippleDuration: '500ms',\n  rippleRadius: 0,\n  rippleUnbound: false,\n};\n\nconst DefaultType = {\n  rippleCentered: 'boolean',\n  rippleColor: 'string',\n  rippleDuration: 'string',\n  rippleRadius: 'number',\n  rippleUnbound: 'boolean',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Ripple extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n    this._options = this._getConfig(options);\n\n    if (this._element) {\n      Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n\n    this._clickHandler = this._createRipple.bind(this);\n    this._rippleTimer = null;\n    this._isMinWidthSet = false;\n    this._rippleInSpan = false;\n\n    this.init();\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  init() {\n    this._addClickEvent(this._element);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, 'mousedown', this._clickHandler);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _autoInit(event) {\n    SELECTOR_COMPONENT.forEach((selector) => {\n      const target = SelectorEngine.closest(event.target, selector);\n      if (target) {\n        this._element = SelectorEngine.closest(event.target, selector);\n      }\n    });\n\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    if (this._element.classList.contains('btn') && dataAttributes.rippleInit === false) {\n      return;\n    }\n\n    this._options = this._getConfig();\n\n    if (this._element.tagName.toLowerCase() === 'input') {\n      const parent = this._element.parentNode;\n\n      this._rippleInSpan = true;\n\n      if (parent.tagName.toLowerCase() === 'span' && parent.classList.contains(CLASSNAME_RIPPLE)) {\n        this._element = parent;\n      } else {\n        const shadow = getComputedStyle(this._element).boxShadow;\n        const btn = this._element;\n        const wrapper = document.createElement('span');\n\n        if (btn.classList.contains('btn-block')) {\n          wrapper.style.display = 'block';\n        }\n\n        EventHandler.one(wrapper, 'mouseup', (e) => {\n          // prevent submit on click other than LMB, ripple still triggered, but submit is blocked\n          if (e.button === 0) {\n            btn.click();\n          }\n        });\n\n        wrapper.classList.add(CLASSNAME_RIPPLE, CLASSNAME_RIPPLE_WRAPPER);\n\n        Manipulator.addStyle(wrapper, {\n          border: 0,\n          'box-shadow': shadow,\n        });\n\n        // Put element as child\n        parent.replaceChild(wrapper, this._element);\n        wrapper.appendChild(this._element);\n        this._element = wrapper;\n      }\n      this._element.focus();\n    }\n\n    if (!this._element.style.minWidth) {\n      Manipulator.style(this._element, { 'min-width': `${getComputedStyle(this._element).width}` });\n      this._isMinWidthSet = true;\n    }\n\n    Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n    this._createRipple(event);\n  }\n\n  _addClickEvent(target) {\n    EventHandler.on(target, 'mousedown', this._clickHandler);\n  }\n\n  _getEventLayer(event) {\n    const x = Math.round(event.clientX - event.target.getBoundingClientRect().x);\n    const y = Math.round(event.clientY - event.target.getBoundingClientRect().y);\n    return { layerX: x, layerY: y };\n  }\n\n  _createRipple(event) {\n    if (this._element === null) {\n      return;\n    }\n\n    if (!Manipulator.hasClass(this._element, CLASSNAME_RIPPLE)) {\n      Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n    }\n\n    const { layerX, layerY } = this._getEventLayer(event);\n    const offsetX = layerX;\n    const offsetY = layerY;\n    const height = this._element.offsetHeight;\n    const width = this._element.offsetWidth;\n    const duration = this._durationToMsNumber(this._options.rippleDuration);\n    const diameterOptions = {\n      offsetX: this._options.rippleCentered ? height / 2 : offsetX,\n      offsetY: this._options.rippleCentered ? width / 2 : offsetY,\n      height,\n      width,\n    };\n    const diameter = this._getDiameter(diameterOptions);\n    const radiusValue = this._options.rippleRadius || diameter / 2;\n\n    const opacity = {\n      delay: duration * TRANSITION_BREAK_OPACITY,\n      duration: duration - duration * TRANSITION_BREAK_OPACITY,\n    };\n\n    const styles = {\n      left: this._options.rippleCentered\n        ? `${width / 2 - radiusValue}px`\n        : `${offsetX - radiusValue}px`,\n      top: this._options.rippleCentered\n        ? `${height / 2 - radiusValue}px`\n        : `${offsetY - radiusValue}px`,\n      height: `${this._options.rippleRadius * 2 || diameter}px`,\n      width: `${this._options.rippleRadius * 2 || diameter}px`,\n      transitionDelay: `0s, ${opacity.delay}ms`,\n      transitionDuration: `${duration}ms, ${opacity.duration}ms`,\n    };\n\n    const rippleHTML = element('div');\n\n    this._createHTMLRipple({ wrapper: this._element, ripple: rippleHTML, styles });\n    this._removeHTMLRipple({ ripple: rippleHTML, duration });\n  }\n\n  _createHTMLRipple({ wrapper, ripple, styles }) {\n    Object.keys(styles).forEach((property) => (ripple.style[property] = styles[property]));\n    ripple.classList.add(CLASSNAME_RIPPLE_WAVE);\n    if (this._options.rippleColor !== '') {\n      this._removeOldColorClasses(wrapper);\n      this._addColor(ripple, wrapper);\n    }\n\n    this._toggleUnbound(wrapper);\n    this._appendRipple(ripple, wrapper);\n  }\n\n  _removeHTMLRipple({ ripple, duration }) {\n    if (this._rippleTimer) {\n      clearTimeout(this._rippleTimer);\n      this._rippleTimer = null;\n    }\n    this._rippleTimer = setTimeout(() => {\n      if (ripple) {\n        ripple.remove();\n        if (this._element) {\n          SelectorEngine.find(`.${CLASSNAME_RIPPLE_WAVE}`, this._element).forEach((rippleEl) => {\n            rippleEl.remove();\n          });\n          if (this._isMinWidthSet) {\n            Manipulator.style(this._element, { 'min-width': '' });\n            this._isMinWidthSet = false;\n          }\n          if (this._rippleInSpan && this._element.classList.contains(CLASSNAME_RIPPLE_WRAPPER)) {\n            this._removeWrapperSpan();\n          } else {\n            Manipulator.removeClass(this._element, CLASSNAME_RIPPLE);\n          }\n        }\n      }\n    }, duration);\n  }\n\n  _removeWrapperSpan() {\n    const child = this._element.firstChild;\n\n    this._element.replaceWith(child);\n    this._element = child;\n    this._element.focus();\n    this._rippleInSpan = false;\n  }\n\n  _durationToMsNumber(time) {\n    return Number(time.replace('ms', '').replace('s', '000'));\n  }\n\n  _getConfig(config = {}) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _getDiameter({ offsetX, offsetY, height, width }) {\n    const top = offsetY <= height / 2;\n    const left = offsetX <= width / 2;\n    const pythagorean = (sideA, sideB) => Math.sqrt(sideA ** 2 + sideB ** 2);\n\n    const positionCenter = offsetY === height / 2 && offsetX === width / 2;\n    // mouse position on the quadrants of the coordinate system\n    const quadrant = {\n      first: top === true && left === false,\n      second: top === true && left === true,\n      third: top === false && left === true,\n      fourth: top === false && left === false,\n    };\n\n    const getCorner = {\n      topLeft: pythagorean(offsetX, offsetY),\n      topRight: pythagorean(width - offsetX, offsetY),\n      bottomLeft: pythagorean(offsetX, height - offsetY),\n      bottomRight: pythagorean(width - offsetX, height - offsetY),\n    };\n\n    let diameter = 0;\n\n    if (positionCenter || quadrant.fourth) {\n      diameter = getCorner.topLeft;\n    } else if (quadrant.third) {\n      diameter = getCorner.topRight;\n    } else if (quadrant.second) {\n      diameter = getCorner.bottomRight;\n    } else if (quadrant.first) {\n      diameter = getCorner.bottomLeft;\n    }\n    return diameter * 2;\n  }\n\n  _appendRipple(target, parent) {\n    const FIX_ADD_RIPPLE_EFFECT = 50; // delay for active animations\n    parent.appendChild(target);\n    setTimeout(() => {\n      Manipulator.addClass(target, 'active');\n    }, FIX_ADD_RIPPLE_EFFECT);\n  }\n\n  _toggleUnbound(target) {\n    if (this._options.rippleUnbound === true) {\n      Manipulator.addClass(target, CLASSNAME_UNBOUND);\n    } else {\n      target.classList.remove(CLASSNAME_UNBOUND);\n    }\n  }\n\n  _addColor(target, parent) {\n    const IS_BOOTSTRAP_COLOR = BOOTSTRAP_COLORS.find(\n      (color) => color === this._options.rippleColor.toLowerCase()\n    );\n\n    if (IS_BOOTSTRAP_COLOR) {\n      Manipulator.addClass(\n        parent,\n        `${CLASSNAME_RIPPLE}-${this._options.rippleColor.toLowerCase()}`\n      );\n    } else {\n      const rgbValue = this._colorToRGB(this._options.rippleColor).join(',');\n      const gradientImage = GRADIENT.split('{{color}}').join(`${rgbValue}`);\n      target.style.backgroundImage = `radial-gradient(circle, ${gradientImage})`;\n    }\n  }\n\n  _removeOldColorClasses(target) {\n    const REGEXP_CLASS_COLOR = new RegExp(`${CLASSNAME_RIPPLE}-[a-z]+`, 'gi');\n    const PARENT_CLASSS_COLOR = target.classList.value.match(REGEXP_CLASS_COLOR) || [];\n    PARENT_CLASSS_COLOR.forEach((className) => {\n      target.classList.remove(className);\n    });\n  }\n\n  _colorToRGB(color) {\n    function hexToRgb(color) {\n      const HEX_COLOR_LENGTH = 7;\n      const IS_SHORT_HEX = color.length < HEX_COLOR_LENGTH;\n      if (IS_SHORT_HEX) {\n        color = `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}`;\n      }\n      return [\n        parseInt(color.substr(1, 2), 16),\n        parseInt(color.substr(3, 2), 16),\n        parseInt(color.substr(5, 2), 16),\n      ];\n    }\n\n    function namedColorsToRgba(color) {\n      const tempElem = document.body.appendChild(document.createElement('fictum'));\n      const flag = 'rgb(1, 2, 3)';\n      tempElem.style.color = flag;\n      if (tempElem.style.color !== flag) {\n        return DEFAULT_RIPPLE_COLOR;\n      }\n      tempElem.style.color = color;\n      if (tempElem.style.color === flag || tempElem.style.color === '') {\n        return DEFAULT_RIPPLE_COLOR;\n      } // color parse failed\n      color = getComputedStyle(tempElem).color;\n      document.body.removeChild(tempElem);\n      return color;\n    }\n\n    function rgbaToRgb(color) {\n      color = color.match(/[.\\d]+/g).map((a) => +Number(a));\n      color.length = 3;\n      return color;\n    }\n\n    if (color.toLowerCase() === 'transparent') {\n      return DEFAULT_RIPPLE_COLOR;\n    }\n    if (color[0] === '#') {\n      return hexToRgb(color);\n    }\n    if (color.indexOf('rgb') === -1) {\n      color = namedColorsToRgba(color);\n    }\n    if (color.indexOf('rgb') === 0) {\n      return rgbaToRgb(color);\n    }\n\n    return DEFAULT_RIPPLE_COLOR;\n  }\n\n  // Static\n  static autoInitial(instance) {\n    return function (event) {\n      instance._autoInit(event);\n    };\n  }\n\n  static jQueryInterface(options) {\n    return this.each(function () {\n      const data = Data.getData(this, DATA_KEY);\n      if (!data) {\n        return new Ripple(this, options);\n      }\n\n      return null;\n    });\n  }\n}\n\nexport default Ripple;\n"
  },
  {
    "path": "src/js/free/scrollspy.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSScrollSpy from '../bootstrap/mdb-prefix/scrollspy';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_ACTIVATE_BS = 'activate.bs.scrollspy';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\n\nconst CLASS_COLLAPSIBLE = 'collapsible-scrollspy';\nconst CLASS_ACTIVE = 'active';\n\nconst SELECTOR_LIST = 'ul';\nconst SELECTOR_ACTIVE = `.${CLASS_ACTIVE}`;\nconst SELECTOR_COLLAPSIBLE_SCROLLSPY = `.${CLASS_COLLAPSIBLE}`;\n\nclass ScrollSpy extends BSScrollSpy {\n  constructor(element, data) {\n    super(element, data);\n\n    this._collapsibles = [];\n    this._init();\n\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_ACTIVATE_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindActivateEvent();\n    this._getCollapsibles();\n\n    if (this._collapsibles.length === 0) {\n      return;\n    }\n\n    this._showSubsection();\n    this._hideSubsection();\n  }\n\n  _getHeight(element) {\n    return element.offsetHeight;\n  }\n\n  _hide(target) {\n    const itemsToHide = SelectorEngine.findOne(SELECTOR_LIST, target.parentNode);\n    itemsToHide.style.overflow = 'hidden';\n    itemsToHide.style.height = `${0}px`;\n  }\n\n  _show(target, destinedHeight) {\n    target.style.height = destinedHeight;\n  }\n\n  _getCollapsibles() {\n    const collapsibleElements = SelectorEngine.find(SELECTOR_COLLAPSIBLE_SCROLLSPY);\n\n    if (!collapsibleElements) {\n      return;\n    }\n\n    collapsibleElements.forEach((collapsibleElement) => {\n      const listParent = collapsibleElement.parentNode;\n      const list = SelectorEngine.findOne(SELECTOR_LIST, listParent);\n      const listHeight = list.offsetHeight;\n      this._collapsibles.push({\n        element: list,\n        relatedTarget: collapsibleElement.getAttribute('href'),\n        height: `${listHeight}px`,\n      });\n    });\n  }\n\n  _showSubsection() {\n    const activeElements = SelectorEngine.find(SELECTOR_ACTIVE);\n    const actives = activeElements.filter((active) => {\n      return Manipulator.hasClass(active, CLASS_COLLAPSIBLE);\n    });\n\n    actives.forEach((active) => {\n      const list = SelectorEngine.findOne(SELECTOR_LIST, active.parentNode);\n      const height = this._collapsibles.find((collapsible) => {\n        return (collapsible.relatedTarget = active.getAttribute('href'));\n      }).height;\n      this._show(list, height);\n    });\n  }\n\n  _hideSubsection() {\n    const unactives = SelectorEngine.find(SELECTOR_COLLAPSIBLE_SCROLLSPY).filter((collapsible) => {\n      return Manipulator.hasClass(collapsible, 'active') === false;\n    });\n    unactives.forEach((unactive) => {\n      this._hide(unactive);\n    });\n  }\n\n  _bindActivateEvent() {\n    EventHandler.on(this._element, EVENT_ACTIVATE_BS, (e) => {\n      this._showSubsection();\n      this._hideSubsection();\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n        relatedTarget: e.relatedTarget,\n      });\n    });\n  }\n}\n\nexport default ScrollSpy;\n"
  },
  {
    "path": "src/js/free/tab.js",
    "content": "import { getElementFromSelector } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BSTab from '../bootstrap/mdb-prefix/tab';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_SHOW_BS = 'show.bs.tab';\nconst EVENT_SHOWN_BS = 'shown.bs.tab';\nconst EVENT_HIDE_BS = 'hide.bs.tab';\nconst EVENT_HIDDEN_BS = 'hidden.bs.tab';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\nclass Tab extends BSTab {\n  constructor(element) {\n    super(element);\n\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Override\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n\n    let hideEvent = null;\n    let hideEventMdb = null;\n\n    if (active) {\n      hideEvent = EventHandler.trigger(active, EVENT_HIDE_BS, { relatedTarget: innerElem });\n      hideEventMdb = EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem });\n    }\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW_BS, { relatedTarget: active });\n    const showEventMdb = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n    if (\n      showEvent.defaultPrevented ||\n      showEventMdb.defaultPrevented ||\n      (hideEvent && hideEvent.defaultPrevented) ||\n      (hideEventMdb && hideEventMdb.defaultPrevented)\n    ) {\n      return;\n    }\n\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.focus();\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN_BS, {\n        relatedTarget: relatedElem,\n      });\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem,\n      });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n\n    this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN_BS, { relatedTarget: relatedElem });\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n}\n\nexport default Tab;\n"
  },
  {
    "path": "src/js/free/toast.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSToast from '../bootstrap/mdb-prefix/toast';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\n\nconst EVENT_SHOW_BS = 'show.bs.toast';\nconst EVENT_SHOWN_BS = 'shown.bs.toast';\nconst EVENT_HIDE_BS = 'hide.bs.toast';\nconst EVENT_HIDDEN_BS = 'hidden.bs.toast';\n\nconst EXTENDED_EVENTS = [{ name: 'show' }, { name: 'shown' }, { name: 'hide' }, { name: 'hidden' }];\n\nclass Toast extends BSToast {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Toast;\n"
  },
  {
    "path": "src/js/free/tooltip.js",
    "content": "import EventHandler from '../mdb/dom/event-handler';\nimport BSTooltip from '../bootstrap/mdb-prefix/tooltip';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip';\n\nconst EVENT_HIDE_BS = 'hide.bs.tooltip';\nconst EVENT_HIDDEN_BS = 'hidden.bs.tooltip';\nconst EVENT_SHOW_BS = 'show.bs.tooltip';\nconst EVENT_SHOWN_BS = 'shown.bs.tooltip';\nconst EVENT_INSERTED_BS = 'inserted.bs.tooltip';\n\nconst EXTENDED_EVENTS = [\n  { name: 'show' },\n  { name: 'shown' },\n  { name: 'hide' },\n  { name: 'hidden' },\n  { name: 'inserted' },\n];\n\nclass Tooltip extends BSTooltip {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    EventHandler.off(this._element, EVENT_INSERTED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Tooltip;\n"
  },
  {
    "path": "src/js/mdb/dom/data.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst mapData = (() => {\n  const storeData = {};\n  let id = 1;\n  return {\n    set(element, key, data) {\n      if (typeof element[key] === 'undefined') {\n        element[key] = {\n          key,\n          id,\n        };\n        id++;\n      }\n\n      storeData[element[key].id] = data;\n    },\n    get(element, key) {\n      if (!element || typeof element[key] === 'undefined') {\n        return null;\n      }\n\n      const keyProperties = element[key];\n      if (keyProperties.key === key) {\n        return storeData[keyProperties.id];\n      }\n\n      return null;\n    },\n    delete(element, key) {\n      if (typeof element[key] === 'undefined') {\n        return;\n      }\n\n      const keyProperties = element[key];\n      if (keyProperties.key === key) {\n        delete storeData[keyProperties.id];\n        delete element[key];\n      }\n    },\n  };\n})();\n\nconst Data = {\n  setData(instance, key, data) {\n    mapData.set(instance, key, data);\n  },\n  getData(instance, key) {\n    return mapData.get(instance, key);\n  },\n  removeData(instance, key) {\n    mapData.delete(instance, key);\n  },\n};\n\nexport default Data;\n"
  },
  {
    "path": "src/js/mdb/dom/event-handler.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst $ = getjQuery();\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout',\n};\nconst nativeEvents = [\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll',\n];\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--; '') {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    }\n\n    // To please ESLint\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  let typeEvent = originalTypeEvent.replace(stripNameRegex, '');\n  const custom = customEvents[typeEvent];\n\n  if (custom) {\n    typeEvent = custom;\n  }\n\n  const isNative = nativeEvents.indexOf(typeEvent) > -1;\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(\n    originalTypeEvent,\n    handler,\n    delegationFn\n  );\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation\n    ? bootstrapDelegationHandler(element, handler, delegationFn)\n    : bootstrapHandler(element, handler);\n\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n\n  Object.keys(storeElementEvent).forEach((handlerKey) => {\n    if (handlerKey.indexOf(namespace) > -1) {\n      const event = storeElementEvent[handlerKey];\n\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  extend(element, events, componentName) {\n    events.forEach((event) => {\n      EventHandler.on(element, `${event.name}.bs.${componentName}`, (e) => {\n        const eventParameters = {};\n        if (event.parametersToCopy) {\n          event.parametersToCopy.forEach((param) => {\n            eventParameters[param] = e[param];\n          });\n        }\n\n        const mdbEvent = EventHandler.trigger(\n          element,\n          `${event.name}.mdb.${componentName}`,\n          eventParameters\n        );\n\n        if (mdbEvent.defaultPrevented) {\n          e.preventDefault();\n        }\n      });\n    });\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(\n      originalTypeEvent,\n      handler,\n      delegationFn\n    );\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.charAt(0) === '.';\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach((elementEvent) => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach((keyHandlers) => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.indexOf(handlerKey) > -1) {\n        const event = storeElementEvent[keyHandlers];\n\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const typeEvent = event.replace(stripNameRegex, '');\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.indexOf(typeEvent) > -1;\n\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true,\n      });\n    }\n\n    // merge custom informations in our event\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach((key) => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          },\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  },\n};\n\nexport const EventHandlerMulti = {\n  on(element, eventsName, handler, delegationFn) {\n    const events = eventsName.split(' ');\n\n    for (let i = 0; i < events.length; i++) {\n      EventHandler.on(element, events[i], handler, delegationFn);\n    }\n  },\n  off(element, originalTypeEvent, handler, delegationFn) {\n    const events = originalTypeEvent.split(' ');\n\n    for (let i = 0; i < events.length; i++) {\n      EventHandler.off(element, events[i], handler, delegationFn);\n    }\n  },\n};\n\nexport default EventHandler;\n"
  },
  {
    "path": "src/js/mdb/dom/manipulator.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {\n      ...element.dataset,\n    };\n\n    Object.keys(attributes)\n      .filter((key) => key.startsWith('mdb'))\n      .forEach((key) => {\n        let pureKey = key.replace(/^mdb/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(attributes[key]);\n      });\n\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft,\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft,\n    };\n  },\n\n  style(element, style) {\n    Object.assign(element.style, style);\n  },\n\n  toggleClass(element, className) {\n    if (!element) {\n      return;\n    }\n\n    if (element.classList.contains(className)) {\n      element.classList.remove(className);\n    } else {\n      element.classList.add(className);\n    }\n  },\n\n  addClass(element, className) {\n    if (element.classList.contains(className)) return;\n    element.classList.add(className);\n  },\n\n  addStyle(element, style) {\n    Object.keys(style).forEach((property) => {\n      element.style[property] = style[property];\n    });\n  },\n\n  removeClass(element, className) {\n    if (!element.classList.contains(className)) return;\n    element.classList.remove(className);\n  },\n\n  hasClass(element, className) {\n    return element.classList.contains(className);\n  },\n};\n\nexport default Manipulator;\n"
  },
  {
    "path": "src/js/mdb/dom/selector-engine.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3;\n\nconst SelectorEngine = {\n  closest(element, selector) {\n    return element.closest(selector);\n  },\n\n  matches(element, selector) {\n    return element.matches(selector);\n  },\n\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    const children = [].concat(...element.children);\n\n    return children.filter((child) => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (this.matches(ancestor, selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (this.matches(next, selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n};\n\nexport default SelectorEngine;\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/handlers/click-rail.js",
    "content": "/* eslint-disable */\n\nimport updateGeometry from '../update-geometry';\n\nexport default function (i) {\n  // const element = i.element;\n\n  i.event.bind(i.scrollbarY, 'mousedown', (e) => e.stopPropagation());\n  i.event.bind(i.scrollbarYRail, 'mousedown', (e) => {\n    const positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;\n    const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n    i.element.scrollTop += direction * i.containerHeight;\n    updateGeometry(i);\n\n    e.stopPropagation();\n  });\n\n  i.event.bind(i.scrollbarX, 'mousedown', (e) => e.stopPropagation());\n  i.event.bind(i.scrollbarXRail, 'mousedown', (e) => {\n    const positionLeft =\n      e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;\n    const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n    i.element.scrollLeft += direction * i.containerWidth;\n    updateGeometry(i);\n\n    e.stopPropagation();\n  });\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/handlers/drag-thumb.js",
    "content": "import cls, { addScrollingClass, removeScrollingClass } from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\n\nlet activeSlider = null; // Variable to track the currently active slider\n\nexport default function setupScrollHandlers(i) {\n  bindMouseScrollHandler(i, [\n    'containerHeight',\n    'contentHeight',\n    'pageY',\n    'railYHeight',\n    'scrollbarY',\n    'scrollbarYHeight',\n    'scrollTop',\n    'y',\n    'scrollbarYRail',\n  ]);\n\n  bindMouseScrollHandler(i, [\n    'containerWidth',\n    'contentWidth',\n    'pageX',\n    'railXWidth',\n    'scrollbarX',\n    'scrollbarXWidth',\n    'scrollLeft',\n    'x',\n    'scrollbarXRail',\n  ]);\n}\n\nfunction bindMouseScrollHandler(\n  i,\n  [\n    containerDimension,\n    contentDimension,\n    pageAxis,\n    railDimension,\n    scrollbarAxis,\n    scrollbarDimension,\n    scrollAxis,\n    axis,\n    scrollbarRail,\n  ]\n) {\n  const element = i.element;\n  let startingScrollPosition = null;\n  let startingMousePagePosition = null;\n  let scrollBy = null;\n\n  function moveHandler(e) {\n    if (e.touches && e.touches[0]) {\n      e[pageAxis] = e.touches[0][`page${axis.toUpperCase()}`];\n    }\n\n    // Only move if the active slider is the one we started with\n    if (activeSlider === scrollbarAxis) {\n      element[scrollAxis] =\n        startingScrollPosition + scrollBy * (e[pageAxis] - startingMousePagePosition);\n      addScrollingClass(i, axis);\n      updateGeometry(i);\n\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n\n  function endHandler() {\n    removeScrollingClass(i, axis);\n    i[scrollbarRail].classList.remove(cls.state.clicking);\n    document.removeEventListener('mousemove', moveHandler);\n    document.removeEventListener('mouseup', endHandler);\n    document.removeEventListener('touchmove', moveHandler);\n    document.removeEventListener('touchend', endHandler);\n    activeSlider = null; // Reset active slider when interaction ends\n  }\n\n  function bindMoves(e) {\n    if (activeSlider === null) {\n      // Only bind if no slider is currently active\n      activeSlider = scrollbarAxis; // Set current slider as active\n\n      startingScrollPosition = element[scrollAxis];\n      if (e.touches) {\n        e[pageAxis] = e.touches[0][`page${axis.toUpperCase()}`];\n      }\n      startingMousePagePosition = e[pageAxis];\n      scrollBy =\n        (i[contentDimension] - i[containerDimension]) / (i[railDimension] - i[scrollbarDimension]);\n\n      if (!e.touches) {\n        document.addEventListener('mousemove', moveHandler);\n        document.addEventListener('mouseup', endHandler);\n      } else {\n        document.addEventListener('touchmove', moveHandler, { passive: false });\n        document.addEventListener('touchend', endHandler);\n      }\n\n      i[scrollbarRail].classList.add(cls.state.clicking);\n    }\n\n    e.stopPropagation();\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n  }\n\n  i[scrollbarAxis].addEventListener('mousedown', bindMoves);\n  i[scrollbarAxis].addEventListener('touchstart', bindMoves);\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/handlers/keyboard.js",
    "content": "/* eslint-disable */\n\nimport * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function (i) {\n  const element = i.element;\n\n  const elementHovered = () => DOM.matches(element, ':hover');\n  const scrollbarFocused = () =>\n    DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n  function shouldPreventDefault(deltaX, deltaY) {\n    const scrollTop = Math.floor(element.scrollTop);\n    if (deltaX === 0) {\n      if (!i.scrollbarYActive) {\n        return false;\n      }\n      if (\n        (scrollTop === 0 && deltaY > 0) ||\n        (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n      ) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n\n    const scrollLeft = element.scrollLeft;\n    if (deltaY === 0) {\n      if (!i.scrollbarXActive) {\n        return false;\n      }\n      if (\n        (scrollLeft === 0 && deltaX < 0) ||\n        (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n      ) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n    return true;\n  }\n\n  i.event.bind(i.ownerDocument, 'keydown', (e) => {\n    if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {\n      return;\n    }\n\n    if (!elementHovered() && !scrollbarFocused()) {\n      return;\n    }\n\n    let activeElement = document.activeElement\n      ? document.activeElement\n      : i.ownerDocument.activeElement;\n    if (activeElement) {\n      if (activeElement.tagName === 'IFRAME') {\n        activeElement = activeElement.contentDocument.activeElement;\n      } else {\n        // go deeper if element is a webcomponent\n        while (activeElement.shadowRoot) {\n          activeElement = activeElement.shadowRoot.activeElement;\n        }\n      }\n      if (isEditable(activeElement)) {\n        return;\n      }\n    }\n\n    let deltaX = 0;\n    let deltaY = 0;\n\n    switch (e.which) {\n      case 37: // left\n        if (e.metaKey) {\n          deltaX = -i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = -i.containerWidth;\n        } else {\n          deltaX = -30;\n        }\n        break;\n      case 38: // up\n        if (e.metaKey) {\n          deltaY = i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = 30;\n        }\n        break;\n      case 39: // right\n        if (e.metaKey) {\n          deltaX = i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = i.containerWidth;\n        } else {\n          deltaX = 30;\n        }\n        break;\n      case 40: // down\n        if (e.metaKey) {\n          deltaY = -i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = -i.containerHeight;\n        } else {\n          deltaY = -30;\n        }\n        break;\n      case 32: // space bar\n        if (e.shiftKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = -i.containerHeight;\n        }\n        break;\n      case 33: // page up\n        deltaY = i.containerHeight;\n        break;\n      case 34: // page down\n        deltaY = -i.containerHeight;\n        break;\n      case 36: // home\n        deltaY = i.contentHeight;\n        break;\n      case 35: // end\n        deltaY = -i.contentHeight;\n        break;\n      default:\n        return;\n    }\n\n    if (i.settings.suppressScrollX && deltaX !== 0) {\n      return;\n    }\n    if (i.settings.suppressScrollY && deltaY !== 0) {\n      return;\n    }\n\n    element.scrollTop -= deltaY;\n    element.scrollLeft += deltaX;\n    updateGeometry(i);\n\n    if (shouldPreventDefault(deltaX, deltaY)) {\n      e.preventDefault();\n    }\n  });\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/handlers/mouse-wheel.js",
    "content": "/* eslint-disable */\n\nimport * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function (i) {\n  const element = i.element;\n\n  let shouldPrevent = false;\n\n  function shouldPreventDefault(deltaX, deltaY) {\n    const roundedScrollTop = Math.floor(element.scrollTop);\n    const isTop = element.scrollTop === 0;\n    const isBottom = roundedScrollTop + element.offsetHeight === element.scrollHeight;\n    const isLeft = element.scrollLeft === 0;\n    const isRight = element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n    let hitsBound;\n\n    // pick axis with primary direction\n    if (Math.abs(deltaY) > Math.abs(deltaX)) {\n      hitsBound = isTop || isBottom;\n    } else {\n      hitsBound = isLeft || isRight;\n    }\n\n    return hitsBound ? !i.settings.wheelPropagation : true;\n  }\n\n  function getDeltaFromEvent(e) {\n    let deltaX = e.deltaX;\n    let deltaY = -1 * e.deltaY;\n\n    if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n      // OS X Safari\n      deltaX = (-1 * e.wheelDeltaX) / 6;\n      deltaY = e.wheelDeltaY / 6;\n    }\n\n    if (e.deltaMode && e.deltaMode === 1) {\n      // Firefox in deltaMode 1: Line scrolling\n      deltaX *= 10;\n      deltaY *= 10;\n    }\n\n    if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n      // IE in some mouse drivers\n      deltaX = 0;\n      deltaY = e.wheelDelta;\n    }\n\n    if (e.shiftKey) {\n      // reverse axis with shift key\n      return [-deltaY, -deltaX];\n    }\n    return [deltaX, deltaY];\n  }\n\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    // FIXME: this is a workaround for <select> issue in FF and IE #571\n    if (!env.isWebKit && element.querySelector('select:focus')) {\n      return true;\n    }\n\n    if (!element.contains(target)) {\n      return false;\n    }\n\n    let cursor = target;\n\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n\n      const style = CSS.get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (\n            (cursor.scrollTop > 0 && deltaY < 0) ||\n            (cursor.scrollTop < maxScrollTop && deltaY > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (\n            (cursor.scrollLeft > 0 && deltaX < 0) ||\n            (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n\n      cursor = cursor.parentNode;\n    }\n\n    return false;\n  }\n\n  function mousewheelHandler(e) {\n    const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n    if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n      return;\n    }\n\n    let shouldPrevent = false;\n    if (!i.settings.useBothWheelAxes) {\n      // deltaX will only be used for horizontal scrolling and deltaY will\n      // only be used for vertical scrolling - this is the default\n      element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      element.scrollLeft += deltaX * i.settings.wheelSpeed;\n    } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n      // only vertical scrollbar is active and useBothWheelAxes option is\n      // active, so let's scroll vertical bar using both mouse wheel axes\n      if (deltaY) {\n        element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      } else {\n        element.scrollTop += deltaX * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n      // useBothWheelAxes and only horizontal bar is active, so use both\n      // wheel axes for horizontal bar\n      if (deltaX) {\n        element.scrollLeft += deltaX * i.settings.wheelSpeed;\n      } else {\n        element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    }\n\n    updateGeometry(i);\n\n    shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n    if (shouldPrevent && !e.ctrlKey) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n\n  if (typeof window.onwheel !== 'undefined') {\n    i.event.bind(element, 'wheel', mousewheelHandler);\n  } else if (typeof window.onmousewheel !== 'undefined') {\n    i.event.bind(element, 'mousewheel', mousewheelHandler);\n  }\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/handlers/touch.js",
    "content": "import updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function (i) {\n  if (!env.supportsTouch && !env.supportsIePointer) {\n    return;\n  }\n\n  const element = i.element;\n\n  const state = {\n    startOffset: {},\n    startTime: 0,\n    speed: {},\n    easingLoop: null,\n  };\n\n  function shouldPrevent(deltaX, deltaY) {\n    const scrollTop = Math.floor(element.scrollTop);\n    const scrollLeft = element.scrollLeft;\n    const magnitudeX = Math.abs(deltaX);\n    const magnitudeY = Math.abs(deltaY);\n\n    if (magnitudeY > magnitudeX) {\n      if (\n        (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n        (deltaY > 0 && scrollTop === 0)\n      ) {\n        return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n      }\n    } else if (magnitudeX > magnitudeY) {\n      if (\n        (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n        (deltaX > 0 && scrollLeft === 0)\n      ) {\n        return true;\n      }\n    }\n\n    return true;\n  }\n\n  function applyTouchMove(differenceX, differenceY) {\n    element.scrollTop -= differenceY;\n    element.scrollLeft -= differenceX;\n\n    updateGeometry(i);\n  }\n\n  function getTouch(e) {\n    if (e.targetTouches) {\n      return e.targetTouches[0];\n    }\n    // Maybe IE pointer\n    return e;\n  }\n\n  function shouldHandle(e) {\n    if (e.target === i.scrollbarX || e.target === i.scrollbarY) {\n      return false;\n    }\n    if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n      return false;\n    }\n    if (e.targetTouches && e.targetTouches.length === 1) {\n      return true;\n    }\n    if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n      return true;\n    }\n    return false;\n  }\n\n  function touchStart(e) {\n    if (!shouldHandle(e)) {\n      return;\n    }\n\n    const touch = getTouch(e);\n\n    state.startOffset.pageX = touch.pageX;\n    state.startOffset.pageY = touch.pageY;\n\n    state.startTime = new Date().getTime();\n\n    if (state.easingLoop !== null) {\n      clearInterval(state.easingLoop);\n    }\n  }\n\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    if (!element.contains(target)) {\n      return false;\n    }\n\n    let cursor = target;\n\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n\n      const style = CSS.get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (\n            (cursor.scrollTop > 0 && deltaY < 0) ||\n            (cursor.scrollTop < maxScrollTop && deltaY > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (\n            (cursor.scrollLeft > 0 && deltaX < 0) ||\n            (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n\n      cursor = cursor.parentNode;\n    }\n\n    return false;\n  }\n\n  function touchMove(e) {\n    if (shouldHandle(e)) {\n      const touch = getTouch(e);\n\n      const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n      const differenceX = currentOffset.pageX - state.startOffset.pageX;\n      const differenceY = currentOffset.pageY - state.startOffset.pageY;\n\n      if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n        return;\n      }\n\n      applyTouchMove(differenceX, differenceY);\n      state.startOffset = currentOffset;\n\n      const currentTime = new Date().getTime();\n\n      const timeGap = currentTime - state.startTime;\n      if (timeGap > 0) {\n        state.speed.x = differenceX / timeGap;\n        state.speed.y = differenceY / timeGap;\n        state.startTime = currentTime;\n      }\n\n      if (shouldPrevent(differenceX, differenceY)) {\n        // Prevent the default behavior if the event is cancelable\n        if (e.cancelable) {\n          e.preventDefault();\n        }\n      }\n    }\n  }\n\n  function touchEnd() {\n    if (i.settings.swipeEasing) {\n      clearInterval(state.easingLoop);\n      state.easingLoop = setInterval(() => {\n        if (i.isInitialized) {\n          clearInterval(state.easingLoop);\n          return;\n        }\n\n        if (!state.speed.x && !state.speed.y) {\n          clearInterval(state.easingLoop);\n          return;\n        }\n\n        if (Math.abs(state.speed.x) < 0.01 && Math.abs(state.speed.y) < 0.01) {\n          clearInterval(state.easingLoop);\n          return;\n        }\n\n        applyTouchMove(state.speed.x * 30, state.speed.y * 30);\n\n        state.speed.x *= 0.8;\n        state.speed.y *= 0.8;\n      }, 10);\n    }\n  }\n\n  if (env.supportsTouch) {\n    i.event.bind(element, 'touchstart', touchStart);\n    i.event.bind(element, 'touchmove', touchMove);\n    i.event.bind(element, 'touchend', touchEnd);\n  } else if (env.supportsIePointer) {\n    if (window.PointerEvent) {\n      i.event.bind(element, 'pointerdown', touchStart);\n      i.event.bind(element, 'pointermove', touchMove);\n      i.event.bind(element, 'pointerup', touchEnd);\n    } else if (window.MSPointerEvent) {\n      i.event.bind(element, 'MSPointerDown', touchStart);\n      i.event.bind(element, 'MSPointerMove', touchMove);\n      i.event.bind(element, 'MSPointerUp', touchEnd);\n    }\n  }\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/index.js",
    "content": "/* eslint-disable */\n\nimport * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n  handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n  maxScrollbarLength: null,\n  minScrollbarLength: null,\n  scrollingThreshold: 1000,\n  scrollXMarginOffset: 0,\n  scrollYMarginOffset: 0,\n  suppressScrollX: false,\n  suppressScrollY: false,\n  swipeEasing: true,\n  useBothWheelAxes: false,\n  wheelPropagation: true,\n  wheelSpeed: 1,\n});\n\nconst handlers = {\n  'click-rail': clickRail,\n  'drag-thumb': dragThumb,\n  keyboard,\n  wheel,\n  touch,\n};\n\nexport default class PerfectScrollbar {\n  constructor(element, userSettings = {}) {\n    if (typeof element === 'string') {\n      element = document.querySelector(element);\n    }\n\n    if (!element || !element.nodeName) {\n      throw new Error('no element is specified to initialize PerfectScrollbar');\n    }\n\n    this.element = element;\n\n    element.classList.add(cls.main);\n\n    this.settings = defaultSettings();\n    for (const key in userSettings) {\n      this.settings[key] = userSettings[key];\n    }\n\n    this.containerWidth = null;\n    this.containerHeight = null;\n    this.contentWidth = null;\n    this.contentHeight = null;\n\n    const focus = () => element.classList.add(cls.state.focus);\n    const blur = () => element.classList.remove(cls.state.focus);\n\n    this.isRtl = CSS.get(element).direction === 'rtl';\n    if (this.isRtl === true) {\n      element.classList.add(cls.rtl);\n    }\n    this.isNegativeScroll = (() => {\n      const originalScrollLeft = element.scrollLeft;\n      let result = null;\n      element.scrollLeft = -1;\n      result = element.scrollLeft < 0;\n      element.scrollLeft = originalScrollLeft;\n      return result;\n    })();\n    this.negativeScrollAdjustment = this.isNegativeScroll\n      ? element.scrollWidth - element.clientWidth\n      : 0;\n    this.event = new EventManager();\n    this.ownerDocument = element.ownerDocument || document;\n\n    this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n    element.appendChild(this.scrollbarXRail);\n    this.scrollbarX = DOM.div(cls.element.thumb('x'));\n    this.scrollbarXRail.appendChild(this.scrollbarX);\n    this.scrollbarX.setAttribute('tabindex', 0);\n    this.event.bind(this.scrollbarX, 'focus', focus);\n    this.event.bind(this.scrollbarX, 'blur', blur);\n    this.scrollbarXActive = null;\n    this.scrollbarXWidth = null;\n    this.scrollbarXLeft = null;\n    const railXStyle = CSS.get(this.scrollbarXRail);\n    this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n    if (isNaN(this.scrollbarXBottom)) {\n      this.isScrollbarXUsingBottom = false;\n      this.scrollbarXTop = toInt(railXStyle.top);\n    } else {\n      this.isScrollbarXUsingBottom = true;\n    }\n    this.railBorderXWidth = toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n    // Set rail to display:block to calculate margins\n    CSS.set(this.scrollbarXRail, { display: 'block' });\n    this.railXMarginWidth = toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n    CSS.set(this.scrollbarXRail, { display: '' });\n    this.railXWidth = null;\n    this.railXRatio = null;\n\n    this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n    element.appendChild(this.scrollbarYRail);\n    this.scrollbarY = DOM.div(cls.element.thumb('y'));\n    this.scrollbarYRail.appendChild(this.scrollbarY);\n    this.scrollbarY.setAttribute('tabindex', 0);\n    this.event.bind(this.scrollbarY, 'focus', focus);\n    this.event.bind(this.scrollbarY, 'blur', blur);\n    this.scrollbarYActive = null;\n    this.scrollbarYHeight = null;\n    this.scrollbarYTop = null;\n    const railYStyle = CSS.get(this.scrollbarYRail);\n    this.scrollbarYRight = parseInt(railYStyle.right, 10);\n    if (isNaN(this.scrollbarYRight)) {\n      this.isScrollbarYUsingRight = false;\n      this.scrollbarYLeft = toInt(railYStyle.left);\n    } else {\n      this.isScrollbarYUsingRight = true;\n    }\n    this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n    this.railBorderYWidth = toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n    CSS.set(this.scrollbarYRail, { display: 'block' });\n    this.railYMarginHeight = toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n    CSS.set(this.scrollbarYRail, { display: '' });\n    this.railYHeight = null;\n    this.railYRatio = null;\n\n    this.reach = {\n      x:\n        element.scrollLeft <= 0\n          ? 'start'\n          : element.scrollLeft >= this.contentWidth - this.containerWidth\n          ? 'end'\n          : null,\n      y:\n        element.scrollTop <= 0\n          ? 'start'\n          : element.scrollTop >= this.contentHeight - this.containerHeight\n          ? 'end'\n          : null,\n    };\n\n    this.isAlive = true;\n\n    this.settings.handlers.forEach((handlerName) => handlers[handlerName](this));\n\n    this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n    this.lastScrollLeft = element.scrollLeft; // for onScroll only\n    this.event.bind(this.element, 'scroll', (e) => this.onScroll(e));\n    updateGeometry(this);\n  }\n\n  update() {\n    if (!this.isAlive) {\n      return;\n    }\n\n    // Recalcuate negative scrollLeft adjustment\n    this.negativeScrollAdjustment = this.isNegativeScroll\n      ? this.element.scrollWidth - this.element.clientWidth\n      : 0;\n\n    // Recalculate rail margins\n    CSS.set(this.scrollbarXRail, { display: 'block' });\n    CSS.set(this.scrollbarYRail, { display: 'block' });\n    this.railXMarginWidth =\n      toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n      toInt(CSS.get(this.scrollbarXRail).marginRight);\n    this.railYMarginHeight =\n      toInt(CSS.get(this.scrollbarYRail).marginTop) +\n      toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n    // Hide scrollbars not to affect scrollWidth and scrollHeight\n    CSS.set(this.scrollbarXRail, { display: 'none' });\n    CSS.set(this.scrollbarYRail, { display: 'none' });\n\n    updateGeometry(this);\n\n    processScrollDiff(this, 'top', 0, false, true);\n    processScrollDiff(this, 'left', 0, false, true);\n\n    CSS.set(this.scrollbarXRail, { display: '' });\n    CSS.set(this.scrollbarYRail, { display: '' });\n  }\n\n  onScroll(e) {\n    if (!this.isAlive) {\n      return;\n    }\n\n    updateGeometry(this);\n    processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n    processScrollDiff(this, 'left', this.element.scrollLeft - this.lastScrollLeft);\n\n    this.lastScrollTop = Math.floor(this.element.scrollTop);\n    this.lastScrollLeft = this.element.scrollLeft;\n  }\n\n  destroy() {\n    if (!this.isAlive) {\n      return;\n    }\n\n    this.event.unbindAll();\n    DOM.remove(this.scrollbarX);\n    DOM.remove(this.scrollbarY);\n    DOM.remove(this.scrollbarXRail);\n    DOM.remove(this.scrollbarYRail);\n    this.removePsClasses();\n\n    // unset elements\n    this.element = null;\n    this.scrollbarX = null;\n    this.scrollbarY = null;\n    this.scrollbarXRail = null;\n    this.scrollbarYRail = null;\n\n    this.isAlive = false;\n  }\n\n  removePsClasses() {\n    this.element.className = this.element.className\n      .split(' ')\n      .filter((name) => !name.match(/^ps([-_].+|)$/))\n      .join(' ');\n  }\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/lib/class-names.js",
    "content": "/* eslint-disable */\n\nconst cls = {\n  main: 'ps',\n  rtl: 'ps__rtl',\n  element: {\n    thumb: (x) => `ps__thumb-${x}`,\n    rail: (x) => `ps__rail-${x}`,\n    consuming: 'ps__child--consume',\n  },\n  state: {\n    focus: 'ps--focus',\n    clicking: 'ps--clicking',\n    active: (x) => `ps--active-${x}`,\n    scrolling: (x) => `ps--scrolling-${x}`,\n  },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n  const classList = i.element.classList;\n  const className = cls.state.scrolling(x);\n\n  if (classList.contains(className)) {\n    clearTimeout(scrollingClassTimeout[x]);\n  } else {\n    classList.add(className);\n  }\n}\n\nexport function removeScrollingClass(i, x) {\n  scrollingClassTimeout[x] = setTimeout(\n    () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n    i.settings.scrollingThreshold\n  );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n  addScrollingClass(i, x);\n  removeScrollingClass(i, x);\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/lib/css.js",
    "content": "/* eslint-disable */\n\nexport function get(element) {\n  return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n  for (const key in obj) {\n    let val = obj[key];\n    if (typeof val === 'number') {\n      val = `${val}px`;\n    }\n    element.style[key] = val;\n  }\n  return element;\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/lib/dom.js",
    "content": "/* eslint-disable */\n\nexport function div(className) {\n  const div = document.createElement('div');\n  div.className = className;\n  return div;\n}\n\nconst elMatches =\n  typeof Element !== 'undefined' &&\n  (Element.prototype.matches ||\n    Element.prototype.webkitMatchesSelector ||\n    Element.prototype.mozMatchesSelector ||\n    Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n  if (!elMatches) {\n    throw new Error('No element matching method supported');\n  }\n\n  return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n  if (element.remove) {\n    element.remove();\n  } else {\n    if (element.parentNode) {\n      element.parentNode.removeChild(element);\n    }\n  }\n}\n\nexport function queryChildren(element, selector) {\n  return Array.prototype.filter.call(element.children, (child) => matches(child, selector));\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/lib/event-manager.js",
    "content": "/* eslint-disable */\nclass EventElement {\n  constructor(element) {\n    this.element = element;\n    this.handlers = {};\n  }\n\n  bind(eventName, handler) {\n    if (typeof this.handlers[eventName] === 'undefined') {\n      this.handlers[eventName] = [];\n    }\n    this.handlers[eventName].push(handler);\n    this.element.addEventListener(eventName, handler, false);\n  }\n\n  unbind(eventName, target) {\n    this.handlers[eventName] = this.handlers[eventName].filter((handler) => {\n      if (target && handler !== target) {\n        return true;\n      }\n      this.element.removeEventListener(eventName, handler, false);\n      return false;\n    });\n  }\n\n  unbindAll() {\n    for (const name in this.handlers) {\n      this.unbind(name);\n    }\n  }\n\n  get isEmpty() {\n    return Object.keys(this.handlers).every((key) => this.handlers[key].length === 0);\n  }\n}\n\nexport default class EventManager {\n  constructor() {\n    this.eventElements = [];\n  }\n\n  eventElement(element) {\n    let ee = this.eventElements.filter((ee) => ee.element === element)[0];\n    if (!ee) {\n      ee = new EventElement(element);\n      this.eventElements.push(ee);\n    }\n    return ee;\n  }\n\n  bind(element, eventName, handler) {\n    this.eventElement(element).bind(eventName, handler);\n  }\n\n  unbind(element, eventName, handler) {\n    const ee = this.eventElement(element);\n    ee.unbind(eventName, handler);\n\n    if (ee.isEmpty) {\n      // remove\n      this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n    }\n  }\n\n  unbindAll() {\n    this.eventElements.forEach((e) => e.unbindAll());\n    this.eventElements = [];\n  }\n\n  once(element, eventName, handler) {\n    const ee = this.eventElement(element);\n    const onceHandler = (evt) => {\n      ee.unbind(eventName, onceHandler);\n      handler(evt);\n    };\n    ee.bind(eventName, onceHandler);\n  }\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/lib/util.js",
    "content": "/* eslint-disable */\n\nimport * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n  return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n  return (\n    DOM.matches(el, 'input,[contenteditable]') ||\n    DOM.matches(el, 'select,[contenteditable]') ||\n    DOM.matches(el, 'textarea,[contenteditable]') ||\n    DOM.matches(el, 'button,[contenteditable]')\n  );\n}\n\nexport function outerWidth(element) {\n  const styles = CSS.get(element);\n  return (\n    toInt(styles.width) +\n    toInt(styles.paddingLeft) +\n    toInt(styles.paddingRight) +\n    toInt(styles.borderLeftWidth) +\n    toInt(styles.borderRightWidth)\n  );\n}\n\nexport const env = {\n  isWebKit: typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style,\n  supportsTouch:\n    typeof window !== 'undefined' &&\n    ('ontouchstart' in window ||\n      ('maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints > 0) ||\n      (window.DocumentTouch && document instanceof window.DocumentTouch)),\n  supportsIePointer: typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n  isChrome: typeof navigator !== 'undefined' && /Chrome/i.test(navigator && navigator.userAgent),\n};\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/process-scroll-diff.js",
    "content": "import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n  if (typeof window.CustomEvent === 'function') {\n    return new CustomEvent(name);\n  }\n\n  const evt = document.createEvent('CustomEvent');\n  evt.initCustomEvent(name, false, false, undefined);\n  return evt;\n}\n\nexport default function (i, axis, diff, useScrollingClass = true, forceFireReachEvent = false) {\n  let fields;\n  if (axis === 'top') {\n    fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];\n  } else if (axis === 'left') {\n    fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];\n  } else {\n    throw new Error('A proper axis should be provided');\n  }\n\n  processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n  i,\n  diff,\n  [contentHeight, containerHeight, scrollTop, y, up, down],\n  useScrollingClass = true,\n  forceFireReachEvent = false\n) {\n  const element = i.element;\n\n  // reset reach\n  i.reach[y] = null;\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] < 1) {\n    i.reach[y] = 'start';\n  }\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n    i.reach[y] = 'end';\n  }\n\n  if (diff) {\n    element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n    if (diff < 0) {\n      element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n    } else if (diff > 0) {\n      element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n    }\n\n    if (useScrollingClass) {\n      setScrollingClassInstantly(i, y);\n    }\n  }\n\n  if (i.reach[y] && (diff || forceFireReachEvent)) {\n    element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n  }\n}\n"
  },
  {
    "path": "src/js/mdb/perfect-scrollbar/update-geometry.js",
    "content": "import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\n/* eslint-disable no-lonely-if */\n\nexport default function (i) {\n  const element = i.element;\n  const roundedScrollTop = Math.floor(element.scrollTop);\n  const rect = element.getBoundingClientRect();\n\n  i.containerWidth = Math.floor(rect.width);\n  i.containerHeight = Math.floor(rect.height);\n\n  i.contentWidth = element.scrollWidth;\n  i.contentHeight = element.scrollHeight;\n\n  if (!element.contains(i.scrollbarXRail)) {\n    // clean up and append\n    DOM.queryChildren(element, cls.element.rail('x')).forEach((el) => DOM.remove(el));\n    element.appendChild(i.scrollbarXRail);\n  }\n  if (!element.contains(i.scrollbarYRail)) {\n    // clean up and append\n    DOM.queryChildren(element, cls.element.rail('y')).forEach((el) => DOM.remove(el));\n    element.appendChild(i.scrollbarYRail);\n  }\n\n  if (\n    !i.settings.suppressScrollX &&\n    i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n  ) {\n    i.scrollbarXActive = true;\n    i.railXWidth = i.containerWidth - i.railXMarginWidth;\n    i.railXRatio = i.containerWidth / i.railXWidth;\n    i.scrollbarXWidth = getThumbSize(i, toInt((i.railXWidth * i.containerWidth) / i.contentWidth));\n    i.scrollbarXLeft = toInt(\n      ((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth)) /\n        (i.contentWidth - i.containerWidth)\n    );\n  } else {\n    i.scrollbarXActive = false;\n  }\n\n  if (\n    !i.settings.suppressScrollY &&\n    i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n  ) {\n    i.scrollbarYActive = true;\n    i.railYHeight = i.containerHeight - i.railYMarginHeight;\n    i.railYRatio = i.containerHeight / i.railYHeight;\n    i.scrollbarYHeight = getThumbSize(\n      i,\n      toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n    );\n    i.scrollbarYTop = toInt(\n      (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n        (i.contentHeight - i.containerHeight)\n    );\n  } else {\n    i.scrollbarYActive = false;\n  }\n\n  if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n    i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n  }\n  if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n    i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n  }\n\n  updateCss(element, i);\n\n  if (i.scrollbarXActive) {\n    element.classList.add(cls.state.active('x'));\n  } else {\n    element.classList.remove(cls.state.active('x'));\n    i.scrollbarXWidth = 0;\n    i.scrollbarXLeft = 0;\n    element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n  }\n  if (i.scrollbarYActive) {\n    element.classList.add(cls.state.active('y'));\n  } else {\n    element.classList.remove(cls.state.active('y'));\n    i.scrollbarYHeight = 0;\n    i.scrollbarYTop = 0;\n    element.scrollTop = 0;\n  }\n}\n\nfunction getThumbSize(i, thumbSize) {\n  if (i.settings.minScrollbarLength) {\n    thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n  }\n  if (i.settings.maxScrollbarLength) {\n    thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n  }\n  return thumbSize;\n}\n\nfunction updateCss(element, i) {\n  const xRailOffset = { width: i.railXWidth };\n  const roundedScrollTop = Math.floor(element.scrollTop);\n\n  if (i.isRtl) {\n    xRailOffset.left =\n      i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;\n  } else {\n    xRailOffset.left = element.scrollLeft;\n  }\n  if (i.isScrollbarXUsingBottom) {\n    xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n  } else {\n    xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n  }\n  CSS.set(i.scrollbarXRail, xRailOffset);\n\n  const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n  if (i.isScrollbarYUsingRight) {\n    if (i.isRtl) {\n      yRailOffset.right =\n        i.contentWidth -\n        (i.negativeScrollAdjustment + element.scrollLeft) -\n        i.scrollbarYRight -\n        i.scrollbarYOuterWidth -\n        9;\n    } else {\n      yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n    }\n  } else {\n    if (i.isRtl) {\n      yRailOffset.left =\n        i.negativeScrollAdjustment +\n        element.scrollLeft +\n        i.containerWidth * 2 -\n        i.contentWidth -\n        i.scrollbarYLeft -\n        i.scrollbarYOuterWidth;\n    } else {\n      yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n    }\n  }\n  CSS.set(i.scrollbarYRail, yRailOffset);\n\n  CSS.set(i.scrollbarX, {\n    left: i.scrollbarXLeft,\n    width: i.scrollbarXWidth - i.railBorderXWidth,\n  });\n  CSS.set(i.scrollbarY, {\n    top: i.scrollbarYTop,\n    height: i.scrollbarYHeight - i.railBorderYWidth,\n  });\n}\n"
  },
  {
    "path": "src/js/mdb/util/focusTrap.js",
    "content": "import SelectorEngine from '../dom/selector-engine';\nimport { isVisible } from './index';\n\nclass FocusTrap {\n  constructor(element, options = {}, toggler) {\n    this._element = element;\n    this._toggler = toggler;\n    this._event = options.event || 'blur';\n    this._condition = options.condition || (() => true);\n    this._selector =\n      options.selector || 'button, a, input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n    this._onlyVisible = options.onlyVisible || false;\n    this._focusableElements = [];\n    this._firstElement = null;\n    this._lastElement = null;\n\n    this.handler = (e) => {\n      if (this._condition(e) && e.target === this._lastElement) {\n        e.preventDefault();\n        this._firstElement.focus();\n      }\n    };\n  }\n\n  trap() {\n    this._setElements();\n    this._init();\n    this._setFocusTrap();\n  }\n\n  disable() {\n    this._focusableElements.forEach((element) => {\n      element.removeEventListener(this._event, this.handler);\n    });\n\n    if (this._toggler) {\n      this._toggler.focus();\n    }\n  }\n\n  update() {\n    this._setElements();\n    this._setFocusTrap();\n  }\n\n  _init() {\n    const handler = (e) => {\n      if (!this._firstElement || e.key !== 'Tab' || this._focusableElements.includes(e.target)) {\n        return;\n      }\n\n      e.preventDefault();\n      this._firstElement.focus();\n\n      window.removeEventListener('keydown', handler);\n    };\n\n    window.addEventListener('keydown', handler);\n  }\n\n  _filterVisible(elements) {\n    return elements.filter((el) => {\n      if (!isVisible(el)) return false;\n\n      const ancestors = SelectorEngine.parents(el, '*');\n\n      for (let i = 0; i < ancestors.length; i++) {\n        const style = window.getComputedStyle(ancestors[i]);\n        if (style && (style.display === 'none' || style.visibility === 'hidden')) return false;\n      }\n      return true;\n    });\n  }\n\n  _setElements() {\n    const allElements = SelectorEngine.find(this._selector, this._element);\n\n    // filter out elements that are not focusable\n    this._focusableElements = allElements.filter((el) => {\n      const hasDisabledAttribute =\n        el.getAttribute('data-mdb-disabled') === 'true' || el.hasAttribute('disabled');\n      const isDisabled = el.disabled || hasDisabledAttribute;\n\n      if (!isDisabled) {\n        return el;\n      }\n      return null;\n    });\n\n    if (this._onlyVisible) {\n      this._focusableElements = this._filterVisible(this._focusableElements);\n    }\n\n    this._firstElement = this._focusableElements[0];\n    this._lastElement = this._focusableElements[this._focusableElements.length - 1];\n  }\n\n  _setFocusTrap() {\n    this._focusableElements.forEach((element, i) => {\n      if (i === this._focusableElements.length - 1) {\n        element.addEventListener(this._event, this.handler);\n      } else {\n        element.removeEventListener(this._event, this.handler);\n      }\n    });\n  }\n}\n\nexport default FocusTrap;\n"
  },
  {
    "path": "src/js/mdb/util/index.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = (obj) => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString\n    .call(obj)\n    .match(/\\s([a-z]+)/i)[1]\n    .toLowerCase();\n};\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = (prefix) => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = (element) => {\n  let selector = element.getAttribute('data-mdb-target');\n\n  if (!selector || selector === '#') {\n    const hrefAttr = element.getAttribute('href');\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = (element) => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = (element) => {\n  const selector = getSelector(element);\n\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n\n  return (\n    (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n    MILLISECONDS_MULTIPLIER\n  );\n};\n\nconst triggerTransitionEnd = (element) => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (obj) => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = (obj) => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return document.querySelector(obj);\n  }\n\n  return null;\n};\n\nconst emulateTransitionEnd = (element, duration) => {\n  let called = false;\n  const durationPadding = 5;\n  const emulatedDuration = duration + durationPadding;\n\n  function listener() {\n    called = true;\n    element.removeEventListener(TRANSITION_END, listener);\n  }\n\n  element.addEventListener(TRANSITION_END, listener);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(element);\n    }\n  }, emulatedDuration);\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach((property) => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new Error(\n        `${componentName.toUpperCase()}: ` +\n          `Option \"${property}\" provided type \"${valueType}\" ` +\n          `but expected type \"${expectedTypes}\".`\n      );\n    }\n  });\n};\n\nconst isVisible = (element) => {\n  if (!element) {\n    return false;\n  }\n\n  if (element.style && element.parentNode && element.parentNode.style) {\n    const elementStyle = getComputedStyle(element);\n    const parentNodeStyle = getComputedStyle(element.parentNode);\n\n    return (\n      elementStyle.display !== 'none' &&\n      parentNodeStyle.display !== 'none' &&\n      elementStyle.visibility !== 'hidden'\n    );\n  }\n\n  return false;\n};\n\nconst isDisabled = (element) => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => function () {};\n\nconst reflow = (element) => element.offsetHeight;\n\nconst getjQuery = () => {\n  const { jQuery } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-mdb-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst onDOMContentLoaded = (callback) => {\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = document.documentElement.dir === 'rtl';\n\nconst array = (collection) => {\n  return Array.from(collection);\n};\n\nconst element = (tag) => {\n  return document.createElement(tag);\n};\n\nconst defineJQueryPlugin = (plugin) => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nexport {\n  getjQuery,\n  TRANSITION_END,\n  getUID,\n  getSelectorFromElement,\n  getElementFromSelector,\n  getTransitionDurationFromElement,\n  triggerTransitionEnd,\n  isElement,\n  getElement,\n  emulateTransitionEnd,\n  typeCheckConfig,\n  isVisible,\n  isDisabled,\n  findShadowRoot,\n  noop,\n  reflow,\n  array,\n  element,\n  onDOMContentLoaded,\n  isRTL,\n  defineJQueryPlugin,\n};\n"
  },
  {
    "path": "src/js/mdb/util/keycodes.js",
    "content": "export const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const HOME = 36;\nexport const END = 35;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const ENTER = 13;\nexport const SPACE = 32;\nexport const ESCAPE = 27;\nexport const TAB = 9;\nexport const BACKSPACE = 8;\nexport const DELETE = 46;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\n"
  },
  {
    "path": "src/js/mdb/util/sanitizer.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n]);\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n  /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(\n        attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)\n      );\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp);\n\n  // Check if a regular expression validates the attribute.\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nexport const DefaultWhitelist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: [],\n};\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const whitelistKeys = Object.keys(whiteList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (whitelistKeys.indexOf(elName) === -1) {\n      el.parentNode.removeChild(el);\n\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n    attributeList.forEach((attr) => {\n      if (!allowedAttribute(attr, whitelistedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n"
  },
  {
    "path": "src/js/mdb/util/scrollbar.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine';\nimport Manipulator from '../dom/manipulator';\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nconst getWidth = () => {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n  const documentWidth = document.documentElement.clientWidth;\n  return Math.abs(window.innerWidth - documentWidth);\n};\n\nconst hide = (width = getWidth()) => {\n  _disableOverFlow();\n  // give padding to element to balances the hidden scrollbar width\n  _setElementAttributes('body', 'paddingRight', (calculatedValue) => calculatedValue + width);\n  // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements, to keep shown fullwidth\n  _setElementAttributes(\n    SELECTOR_FIXED_CONTENT,\n    'paddingRight',\n    (calculatedValue) => calculatedValue + width\n  );\n  _setElementAttributes(\n    SELECTOR_STICKY_CONTENT,\n    'marginRight',\n    (calculatedValue) => calculatedValue - width\n  );\n};\n\nconst _disableOverFlow = () => {\n  const actualValue = document.body.style.overflow;\n  if (actualValue) {\n    Manipulator.setDataAttribute(document.body, 'overflow', actualValue);\n  }\n\n  document.body.style.overflow = 'hidden';\n};\n\nconst _setElementAttributes = (selector, styleProp, callback) => {\n  const scrollbarWidth = getWidth();\n  SelectorEngine.find(selector).forEach((element) => {\n    if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {\n      return;\n    }\n\n    const actualValue = element.style[styleProp];\n    const calculatedValue = window.getComputedStyle(element)[styleProp];\n    Manipulator.setDataAttribute(element, styleProp, actualValue);\n    element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n  });\n};\n\nconst reset = () => {\n  _resetElementAttributes('body', 'overflow');\n  _resetElementAttributes('body', 'paddingRight');\n  _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n  _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n};\n\nconst _resetElementAttributes = (selector, styleProp) => {\n  SelectorEngine.find(selector).forEach((element) => {\n    const value = Manipulator.getDataAttribute(element, styleProp);\n    if (typeof value === 'undefined') {\n      element.style.removeProperty(styleProp);\n    } else {\n      Manipulator.removeDataAttribute(element, styleProp);\n      element.style[styleProp] = value;\n    }\n  });\n};\n\nconst isBodyOverflowing = () => {\n  return getWidth() > 0;\n};\n\nexport { getWidth, hide, isBodyOverflowing, reset };\n"
  },
  {
    "path": "src/js/mdb/util/stack.js",
    "content": "import SelectorEngine from '../dom/selector-engine';\nimport { isVisible, typeCheckConfig } from './index';\n\nconst NAME = 'Stack';\n\nconst DEFAULT_OPTIONS = {\n  position: 'top',\n  container: null,\n  refresh: 1000,\n  filter: (el) => {\n    return el;\n  },\n};\n\nconst TYPE_OPTIONS = {\n  position: 'string',\n  container: '(undefined|null|string)',\n  refresh: 'number',\n  filter: 'function',\n};\n\nclass Stack {\n  constructor(element, selector, options) {\n    this._element = element;\n    this._selector = selector;\n    this._options = this._getConfig(options);\n\n    this._offset = null;\n\n    if (this._options.container) {\n      this._parent = SelectorEngine.findOne(this._options.container);\n    }\n  }\n\n  get stackableElements() {\n    return SelectorEngine.find(this._selector)\n      .filter((el, i) => this._options.filter(el, i))\n      .map((el) => ({ el, rect: el.getBoundingClientRect() }))\n      .filter(({ el, rect }) => {\n        const basicCondition = el !== this._element && isVisible(el);\n        if (this._offset === null) {\n          return basicCondition;\n        }\n\n        return basicCondition && this._getBoundryOffset(rect) < this._offset;\n      })\n      .sort((a, b) => {\n        return this._getBoundryOffset(b.rect) - this._getBoundryOffset(a.rect);\n      });\n  }\n\n  get nextElements() {\n    return SelectorEngine.find(this._selector)\n      .filter((el) => el !== this._element)\n      .filter((el, i) => this._options.filter(el, i))\n      .filter((el) => {\n        this._offset = null;\n        return this._getBoundryOffset(el.getBoundingClientRect()) > this._offset;\n      });\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n\n    typeCheckConfig(NAME, config, TYPE_OPTIONS);\n\n    return config;\n  }\n\n  _getBoundryOffset(rect) {\n    const { position } = this._options;\n\n    let parentTopOffset = 0;\n    let parentBottomBoundry = window.innerHeight;\n\n    if (this._parent) {\n      const parentRect = this._parent.getBoundingClientRect();\n\n      parentTopOffset = parentRect.top;\n      parentBottomBoundry = parentRect.bottom;\n    }\n\n    if (position === 'top') {\n      return rect.top - parentTopOffset;\n    }\n    return parentBottomBoundry - rect.bottom;\n  }\n\n  calculateOffset() {\n    const [previousElement] = this.stackableElements;\n\n    if (!previousElement) {\n      this._offset = 0;\n    } else {\n      this._offset = this._getBoundryOffset(previousElement.rect) + previousElement.rect.height;\n    }\n\n    return this._offset;\n  }\n}\n\nexport default Stack;\n"
  },
  {
    "path": "src/js/mdb/util/touch/index.js",
    "content": "import Swipe from './swipe';\n\nclass Touch {\n  constructor(element, event = 'swipe', options = {}) {\n    this._element = element;\n    this._event = event;\n\n    // events\n\n    this.swipe = new Swipe(element, options);\n\n    // handlers\n\n    this._touchStartHandler = this._handleTouchStart.bind(this);\n    this._touchMoveHandler = this._handleTouchMove.bind(this);\n    this._touchEndHandler = this._handleTouchEnd.bind(this);\n  }\n\n  dispose() {\n    this._element.removeEventListener('touchstart', this._touchStartHandler);\n    this._element.removeEventListener('touchmove', this._touchMoveHandler);\n    window.removeEventListener('touchend', this._touchEndHandler);\n  }\n\n  init() {\n    // istanbul ignore next\n    this._element.addEventListener('touchstart', (e) => this._handleTouchStart(e));\n    // istanbul ignore next\n    this._element.addEventListener('touchmove', (e) => this._handleTouchMove(e));\n    // istanbul ignore next\n    window.addEventListener('touchend', (e) => this._handleTouchEnd(e));\n  }\n\n  _handleTouchStart(e) {\n    this[this._event].handleTouchStart(e);\n  }\n\n  _handleTouchMove(e) {\n    this[this._event].handleTouchMove(e);\n  }\n\n  _handleTouchEnd(e) {\n    this[this._event].handleTouchEnd(e);\n  }\n}\n\nexport default Touch;\n"
  },
  {
    "path": "src/js/mdb/util/touch/swipe.js",
    "content": "import EventHandler from '../../dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  threshold: 10,\n  direction: 'all',\n};\n\nclass Swipe {\n  constructor(element, options) {\n    this._element = element;\n    this._startPosition = null;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n  }\n\n  handleTouchStart(e) {\n    this._startPosition = this._getCoordinates(e);\n  }\n\n  handleTouchMove(e) {\n    if (!this._startPosition) return;\n\n    const position = this._getCoordinates(e);\n    const displacement = {\n      x: position.x - this._startPosition.x,\n      y: position.y - this._startPosition.y,\n    };\n\n    const swipe = this._getDirection(displacement);\n\n    if (this._options.direction === 'all') {\n      if (swipe.y.value < this._options.threshold && swipe.x.value < this._options.threshold) {\n        return;\n      }\n      const direction = swipe.y.value > swipe.x.value ? swipe.y.direction : swipe.x.direction;\n      EventHandler.trigger(this._element, `swipe${direction}`);\n      EventHandler.trigger(this._element, 'swipe', { direction });\n      this._startPosition = null;\n      return;\n    }\n\n    const axis = this._options.direction === 'left' || this._options === 'right' ? 'x' : 'y';\n\n    if (\n      swipe[axis].direction === this._options.direction &&\n      swipe[axis].value > this._options.threshold\n    ) {\n      EventHandler.trigger(this._element, `swipe${swipe[axis].direction}`);\n      this._startPosition = null;\n    }\n  }\n\n  handleTouchEnd() {\n    this._startPosition = null;\n  }\n\n  _getCoordinates(e) {\n    const [touch] = e.touches;\n    return {\n      x: touch.clientX,\n      y: touch.clientY,\n    };\n  }\n\n  _getDirection(displacement) {\n    return {\n      x: {\n        direction: displacement.x < 0 ? 'left' : 'right',\n        value: Math.abs(displacement.x),\n      },\n      y: {\n        direction: displacement.y < 0 ? 'up' : 'down',\n        value: Math.abs(displacement.y),\n      },\n    };\n  }\n}\n\nexport default Swipe;\n"
  },
  {
    "path": "src/js/mdb/util/touch/touchUtil.js",
    "content": "class TouchUtil {\n  _getCoordinates(e) {\n    const [touch] = e.touches;\n    return {\n      x: touch.clientX,\n      y: touch.clientY,\n    };\n  }\n\n  _getDirection(displacement) {\n    return {\n      x: {\n        direction: displacement.x < 0 ? 'left' : 'right',\n        value: Math.abs(displacement.x),\n      },\n      y: {\n        direction: displacement.y < 0 ? 'up' : 'down',\n        value: Math.abs(displacement.y),\n      },\n    };\n  }\n}\n\nexport default TouchUtil;\n"
  },
  {
    "path": "src/js/mdb.free.es.js",
    "content": "// BOOTSTRAP CORE COMPONENTS\nimport Button from './free/button';\nimport Offcanvas from './bootstrap/mdb-prefix/offcanvas';\nimport Alert from './free/alert';\nimport Carousel from './free/carousel';\nimport Modal from './free/modal';\nimport Popover from './free/popover';\nimport ScrollSpy from './free/scrollspy';\nimport Tab from './free/tab';\nimport Tooltip from './free/tooltip';\nimport Toast from './free/toast';\n\n// MDB FREE COMPONENTS\nimport Input from './free/input';\nimport Collapse from './free/collapse';\nimport Dropdown from './free/dropdown';\nimport Ripple from './free/ripple';\nimport Range from './free/range';\n\nimport initMDB from './autoinit/index.free';\n\nexport {\n  Alert,\n  Button,\n  Carousel,\n  Collapse,\n  Offcanvas,\n  Dropdown,\n  Input,\n  Modal,\n  Popover,\n  Ripple,\n  ScrollSpy,\n  Tab,\n  Toast,\n  Tooltip,\n  Range,\n  initMDB,\n};\n"
  },
  {
    "path": "src/js/mdb.free.umd.js",
    "content": "// BOOTSTRAP CORE COMPONENTS\nimport Button from './free/button';\nimport Offcanvas from './bootstrap/mdb-prefix/offcanvas';\nimport Alert from './free/alert';\nimport Carousel from './free/carousel';\nimport Modal from './free/modal';\nimport Popover from './free/popover';\nimport ScrollSpy from './free/scrollspy';\nimport Tab from './free/tab';\nimport Tooltip from './free/tooltip';\nimport Toast from './free/toast';\n\n// MDB FREE COMPONENTS\nimport Input from './free/input';\nimport Collapse from './free/collapse';\nimport Dropdown from './free/dropdown';\nimport Ripple from './free/ripple';\nimport Range from './free/range';\nimport initMDB from './autoinit/index.free';\n\nconst mdb = {\n  Alert,\n  Button,\n  Carousel,\n  Collapse,\n  Offcanvas,\n  Dropdown,\n  Input,\n  Modal,\n  Popover,\n  Ripple,\n  ScrollSpy,\n  Tab,\n  Toast,\n  Tooltip,\n  Range,\n};\n\ninitMDB(mdb);\n\nexport {\n  Alert,\n  Button,\n  Carousel,\n  Collapse,\n  Offcanvas,\n  Dropdown,\n  Input,\n  Modal,\n  Popover,\n  Ripple,\n  ScrollSpy,\n  Tab,\n  Toast,\n  Tooltip,\n  Range,\n  initMDB,\n};\n"
  },
  {
    "path": "src/scss/bootstrap/_accordion.scss",
    "content": "//\n// Base styles\n//\n\n.accordion {\n  // scss-docs-start accordion-css-vars\n  --#{$prefix}accordion-color: #{$accordion-color};\n  --#{$prefix}accordion-bg: #{$accordion-bg};\n  --#{$prefix}accordion-transition: #{$accordion-transition};\n  --#{$prefix}accordion-border-color: #{$accordion-border-color};\n  --#{$prefix}accordion-border-width: #{$accordion-border-width};\n  --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n  --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n  --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n  --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n  --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n  --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n  --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n  --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n  --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n  --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n  --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n  --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n  --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n  --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n  --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n  --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n  // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n  @include font-size($font-size-base);\n  color: var(--#{$prefix}accordion-btn-color);\n  text-align: left; // Reset button style\n  background-color: var(--#{$prefix}accordion-btn-bg);\n  border: 0;\n  @include border-radius(0);\n  overflow-anchor: none;\n  @include transition(var(--#{$prefix}accordion-transition));\n\n  &:not(.collapsed) {\n    color: var(--#{$prefix}accordion-active-color);\n    background-color: var(--#{$prefix}accordion-active-bg);\n    box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0\n      var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n    &::after {\n      background-image: var(--#{$prefix}accordion-btn-active-icon);\n      transform: var(--#{$prefix}accordion-btn-icon-transform);\n    }\n  }\n\n  // Accordion icon\n  &::after {\n    flex-shrink: 0;\n    width: var(--#{$prefix}accordion-btn-icon-width);\n    height: var(--#{$prefix}accordion-btn-icon-width);\n    margin-left: auto;\n    content: '';\n    background-image: var(--#{$prefix}accordion-btn-icon);\n    background-repeat: no-repeat;\n    background-size: var(--#{$prefix}accordion-btn-icon-width);\n    @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n  }\n\n  &:hover {\n    z-index: 2;\n  }\n\n  &:focus {\n    z-index: 3;\n    outline: 0;\n    box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n  }\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  color: var(--#{$prefix}accordion-color);\n  background-color: var(--#{$prefix}accordion-bg);\n  border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n  &:first-of-type {\n    @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n    > .accordion-header .accordion-button {\n      @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n    }\n  }\n\n  &:not(:first-of-type) {\n    border-top: 0;\n  }\n\n  // Only set a border-radius on the last item if the accordion is collapsed\n  &:last-of-type {\n    @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n    > .accordion-header .accordion-button {\n      &.collapsed {\n        @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n      }\n    }\n\n    > .accordion-collapse {\n      @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n    }\n  }\n}\n\n.accordion-body {\n  padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n  > .accordion-item {\n    border-right: 0;\n    border-left: 0;\n    @include border-radius(0);\n\n    &:first-child {\n      border-top: 0;\n    }\n    &:last-child {\n      border-bottom: 0;\n    }\n\n    // stylelint-disable selector-max-class\n    > .accordion-header .accordion-button {\n      &,\n      &.collapsed {\n        @include border-radius(0);\n      }\n    }\n    // stylelint-enable selector-max-class\n\n    > .accordion-collapse {\n      @include border-radius(0);\n    }\n  }\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .accordion-button::after {\n      --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};\n      --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_alert.scss",
    "content": "//\n// Base styles\n//\n\n.alert {\n  // scss-docs-start alert-css-vars\n  --#{$prefix}alert-bg: transparent;\n  --#{$prefix}alert-padding-x: #{$alert-padding-x};\n  --#{$prefix}alert-padding-y: #{$alert-padding-y};\n  --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n  --#{$prefix}alert-color: inherit;\n  --#{$prefix}alert-border-color: transparent;\n  --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n  --#{$prefix}alert-border-radius: #{$alert-border-radius};\n  --#{$prefix}alert-link-color: inherit;\n  // scss-docs-end alert-css-vars\n\n  position: relative;\n  padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n  margin-bottom: var(--#{$prefix}alert-margin-bottom);\n  color: var(--#{$prefix}alert-color);\n  background-color: var(--#{$prefix}alert-bg);\n  border: var(--#{$prefix}alert-border);\n  @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n  // Specified to prevent conflicts of changing $headings-color\n  color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n  font-weight: $alert-link-font-weight;\n  color: var(--#{$prefix}alert-link-color);\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n  padding-right: $alert-dismissible-padding-r;\n\n  // Adjust close link position\n  .btn-close {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: $stretched-link-z-index + 1;\n    padding: $alert-padding-y * 1.25 $alert-padding-x;\n  }\n}\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n  .alert-#{$state} {\n    --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis);\n    --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n    --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text-emphasis);\n  }\n}\n// scss-docs-end alert-modifiers\n"
  },
  {
    "path": "src/scss/bootstrap/_badge.scss",
    "content": "// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n  // scss-docs-start badge-css-vars\n  --#{$prefix}badge-padding-x: #{$badge-padding-x};\n  --#{$prefix}badge-padding-y: #{$badge-padding-y};\n  @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n  --#{$prefix}badge-font-weight: #{$badge-font-weight};\n  --#{$prefix}badge-color: #{$badge-color};\n  --#{$prefix}badge-border-radius: #{$badge-border-radius};\n  // scss-docs-end badge-css-vars\n\n  display: inline-block;\n  padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n  @include font-size(var(--#{$prefix}badge-font-size));\n  font-weight: var(--#{$prefix}badge-font-weight);\n  line-height: 1;\n  color: var(--#{$prefix}badge-color);\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  @include border-radius(var(--#{$prefix}badge-border-radius));\n  @include gradient-bg();\n\n  // Empty badges collapse automatically\n  &:empty {\n    display: none;\n  }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_breadcrumb.scss",
    "content": ".breadcrumb {\n  // scss-docs-start breadcrumb-css-vars\n  --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n  --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n  --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n  @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n  --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n  --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n  --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n  --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n  --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n  // scss-docs-end breadcrumb-css-vars\n\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n  margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n  @include font-size(var(--#{$prefix}breadcrumb-font-size));\n  list-style: none;\n  background-color: var(--#{$prefix}breadcrumb-bg);\n  @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n  // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n  + .breadcrumb-item {\n    padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n    &::before {\n      float: left; // Suppress inline spacings and underlining of the separator\n      padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n      color: var(--#{$prefix}breadcrumb-divider-color);\n      content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{'/* rtl:'} var(\n          --#{$prefix}breadcrumb-divider,\n          escape-svg($breadcrumb-divider-flipped)\n        ) #{'*/'};\n    }\n  }\n\n  &.active {\n    color: var(--#{$prefix}breadcrumb-item-active-color);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_button-group.scss",
    "content": "// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n\n  > .btn {\n    position: relative;\n    flex: 1 1 auto;\n  }\n\n  // Bring the hover, focused, and \"active\" buttons to the front to overlay\n  // the borders properly\n  > .btn-check:checked + .btn,\n  > .btn-check:focus + .btn,\n  > .btn:hover,\n  > .btn:focus,\n  > .btn:active,\n  > .btn.active {\n    z-index: 1;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n\n  .input-group {\n    width: auto;\n  }\n}\n\n.btn-group {\n  @include border-radius($btn-border-radius);\n\n  // Prevent double borders when buttons are next to each other\n  > :not(.btn-check:first-child) + .btn,\n  > .btn-group:not(:first-child) {\n    margin-left: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list\n  }\n\n  // Reset rounded corners\n  > .btn:not(:last-child):not(.dropdown-toggle),\n  > .btn.dropdown-toggle-split:first-child,\n  > .btn-group:not(:last-child) > .btn {\n    @include border-end-radius(0);\n  }\n\n  // The left radius should be 0 if the button is:\n  // - the \"third or more\" child\n  // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n  // - part of a btn-group which isn't the first child\n  > .btn:nth-child(n + 3),\n  > :not(.btn-check) + .btn,\n  > .btn-group:not(:first-child) > .btn {\n    @include border-start-radius(0);\n  }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn {\n  @extend .btn-sm;\n}\n.btn-group-lg > .btn {\n  @extend .btn-lg;\n}\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n  padding-right: $btn-padding-x * 0.75;\n  padding-left: $btn-padding-x * 0.75;\n\n  &::after,\n  .dropup &::after,\n  .dropend &::after {\n    margin-left: 0;\n  }\n\n  .dropstart &::before {\n    margin-right: 0;\n  }\n}\n\n.btn-sm + .dropdown-toggle-split {\n  padding-right: $btn-padding-x-sm * 0.75;\n  padding-left: $btn-padding-x-sm * 0.75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n  padding-right: $btn-padding-x-lg * 0.75;\n  padding-left: $btn-padding-x-lg * 0.75;\n}\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n  @include box-shadow($btn-active-box-shadow);\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    @include box-shadow(none);\n  }\n}\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n\n  > .btn,\n  > .btn-group {\n    width: 100%;\n  }\n\n  > .btn:not(:first-child),\n  > .btn-group:not(:first-child) {\n    margin-top: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list\n  }\n\n  // Reset rounded corners\n  > .btn:not(:last-child):not(.dropdown-toggle),\n  > .btn-group:not(:last-child) > .btn {\n    @include border-bottom-radius(0);\n  }\n\n  > .btn ~ .btn,\n  > .btn-group:not(:first-child) > .btn {\n    @include border-top-radius(0);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_buttons.scss",
    "content": "//\n// Base styles\n//\n\n.btn {\n  // scss-docs-start btn-css-vars\n  --#{$prefix}btn-padding-x: #{$btn-padding-x};\n  --#{$prefix}btn-padding-y: #{$btn-padding-y};\n  --#{$prefix}btn-font-family: #{$btn-font-family};\n  @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n  --#{$prefix}btn-font-weight: #{$btn-font-weight};\n  --#{$prefix}btn-line-height: #{$btn-line-height};\n  --#{$prefix}btn-color: #{$btn-color};\n  --#{$prefix}btn-bg: transparent;\n  --#{$prefix}btn-border-width: #{$btn-border-width};\n  --#{$prefix}btn-border-color: transparent;\n  --#{$prefix}btn-border-radius: #{$btn-border-radius};\n  --#{$prefix}btn-hover-border-color: transparent;\n  --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n  --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n  --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), 0.5);\n  // scss-docs-end btn-css-vars\n\n  display: inline-block;\n  padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n  font-family: var(--#{$prefix}btn-font-family);\n  @include font-size(var(--#{$prefix}btn-font-size));\n  font-weight: var(--#{$prefix}btn-font-weight);\n  line-height: var(--#{$prefix}btn-line-height);\n  color: var(--#{$prefix}btn-color);\n  text-align: center;\n  text-decoration: if($link-decoration == none, null, none);\n  white-space: $btn-white-space;\n  vertical-align: middle;\n  cursor: if($enable-button-pointers, pointer, null);\n  user-select: none;\n  border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n  @include border-radius(var(--#{$prefix}btn-border-radius));\n  @include gradient-bg(var(--#{$prefix}btn-bg));\n  @include box-shadow(var(--#{$prefix}btn-box-shadow));\n  @include transition($btn-transition);\n\n  &:hover {\n    color: var(--#{$prefix}btn-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n    background-color: var(--#{$prefix}btn-hover-bg);\n    border-color: var(--#{$prefix}btn-hover-border-color);\n  }\n\n  .btn-check + &:hover {\n    // override for the checkbox/radio buttons\n    color: var(--#{$prefix}btn-color);\n    background-color: var(--#{$prefix}btn-bg);\n    border-color: var(--#{$prefix}btn-border-color);\n  }\n\n  &:focus-visible {\n    color: var(--#{$prefix}btn-hover-color);\n    @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n    border-color: var(--#{$prefix}btn-hover-border-color);\n    outline: 0;\n    // Avoid using mixin so we can pass custom focus shadow properly\n    @if $enable-shadows {\n      box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n    } @else {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  .btn-check:focus-visible + & {\n    border-color: var(--#{$prefix}btn-hover-border-color);\n    outline: 0;\n    // Avoid using mixin so we can pass custom focus shadow properly\n    @if $enable-shadows {\n      box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n    } @else {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  .btn-check:checked + &,\n  :not(.btn-check) + &:active,\n  &:first-child:active,\n  &.active,\n  &.show {\n    color: var(--#{$prefix}btn-active-color);\n    background-color: var(--#{$prefix}btn-active-bg);\n    // Remove CSS gradients if they're enabled\n    background-image: if($enable-gradients, none, null);\n    border-color: var(--#{$prefix}btn-active-border-color);\n    @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n    &:focus-visible {\n      // Avoid using mixin so we can pass custom focus shadow properly\n      @if $enable-shadows {\n        box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n      } @else {\n        box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n      }\n    }\n  }\n\n  .btn-check:checked:focus-visible + & {\n    // Avoid using mixin so we can pass custom focus shadow properly\n    @if $enable-shadows {\n      box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n    } @else {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    color: var(--#{$prefix}btn-disabled-color);\n    pointer-events: none;\n    background-color: var(--#{$prefix}btn-disabled-bg);\n    background-image: if($enable-gradients, none, null);\n    border-color: var(--#{$prefix}btn-disabled-border-color);\n    opacity: var(--#{$prefix}btn-disabled-opacity);\n    @include box-shadow(none);\n  }\n}\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n  .btn-#{$color} {\n    @if $color == 'light' {\n      @include button-variant(\n        $value,\n        $value,\n        $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n        $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n        $active-background: shade-color($value, $btn-active-bg-shade-amount),\n        $active-border: shade-color($value, $btn-active-border-shade-amount)\n      );\n    } @else if $color == 'dark' {\n      @include button-variant(\n        $value,\n        $value,\n        $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n        $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n        $active-background: tint-color($value, $btn-active-bg-tint-amount),\n        $active-border: tint-color($value, $btn-active-border-tint-amount)\n      );\n    } @else {\n      @include button-variant($value, $value);\n    }\n  }\n}\n\n@each $color, $value in $theme-colors {\n  .btn-outline-#{$color} {\n    @include button-outline-variant($value);\n  }\n}\n// scss-docs-end btn-variant-loops\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n  --#{$prefix}btn-font-weight: #{$font-weight-normal};\n  --#{$prefix}btn-color: #{$btn-link-color};\n  --#{$prefix}btn-bg: transparent;\n  --#{$prefix}btn-border-color: transparent;\n  --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n  --#{$prefix}btn-hover-border-color: transparent;\n  --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n  --#{$prefix}btn-active-border-color: transparent;\n  --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n  --#{$prefix}btn-disabled-border-color: transparent;\n  --#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows\n  --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb};\n\n  text-decoration: $link-decoration;\n  @if $enable-gradients {\n    background-image: none;\n  }\n\n  &:hover,\n  &:focus-visible {\n    text-decoration: $link-hover-decoration;\n  }\n\n  &:focus-visible {\n    color: var(--#{$prefix}btn-color);\n  }\n\n  &:hover {\n    color: var(--#{$prefix}btn-hover-color);\n  }\n\n  // No need for an active state here\n}\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n  @include button-size(\n    $btn-padding-y-lg,\n    $btn-padding-x-lg,\n    $btn-font-size-lg,\n    $btn-border-radius-lg\n  );\n}\n\n.btn-sm {\n  @include button-size(\n    $btn-padding-y-sm,\n    $btn-padding-x-sm,\n    $btn-font-size-sm,\n    $btn-border-radius-sm\n  );\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_card.scss",
    "content": "//\n// Base styles\n//\n\n.card {\n  // scss-docs-start card-css-vars\n  --#{$prefix}card-spacer-y: #{$card-spacer-y};\n  --#{$prefix}card-spacer-x: #{$card-spacer-x};\n  --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n  --#{$prefix}card-title-color: #{$card-title-color};\n  --#{$prefix}card-subtitle-color: #{$card-subtitle-color};\n  --#{$prefix}card-border-width: #{$card-border-width};\n  --#{$prefix}card-border-color: #{$card-border-color};\n  --#{$prefix}card-border-radius: #{$card-border-radius};\n  --#{$prefix}card-box-shadow: #{$card-box-shadow};\n  --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n  --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n  --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n  --#{$prefix}card-cap-bg: #{$card-cap-bg};\n  --#{$prefix}card-cap-color: #{$card-cap-color};\n  --#{$prefix}card-height: #{$card-height};\n  --#{$prefix}card-color: #{$card-color};\n  --#{$prefix}card-bg: #{$card-bg};\n  --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n  --#{$prefix}card-group-margin: #{$card-group-margin};\n  // scss-docs-end card-css-vars\n\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n  height: var(--#{$prefix}card-height);\n  color: var(--#{$prefix}body-color);\n  word-wrap: break-word;\n  background-color: var(--#{$prefix}card-bg);\n  background-clip: border-box;\n  border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n  @include border-radius(var(--#{$prefix}card-border-radius));\n  @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n  > hr {\n    margin-right: 0;\n    margin-left: 0;\n  }\n\n  > .list-group {\n    border-top: inherit;\n    border-bottom: inherit;\n\n    &:first-child {\n      border-top-width: 0;\n      @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n    }\n\n    &:last-child {\n      border-bottom-width: 0;\n      @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n    }\n  }\n\n  // Due to specificity of the above selector (`.card > .list-group`), we must\n  // use a child selector here to prevent double borders.\n  > .card-header + .list-group,\n  > .list-group + .card-footer {\n    border-top: 0;\n  }\n}\n\n.card-body {\n  // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n  // as much space as possible, ensuring footers are aligned to the bottom.\n  flex: 1 1 auto;\n  padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n  color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n  margin-bottom: var(--#{$prefix}card-title-spacer-y);\n  color: var(--#{$prefix}card-title-color);\n}\n\n.card-subtitle {\n  margin-top: calc(\n    -0.5 * var(--#{$prefix}card-title-spacer-y)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-bottom: 0;\n  color: var(--#{$prefix}card-subtitle-color);\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link {\n  &:hover {\n    text-decoration: if($link-hover-decoration == underline, none, null);\n  }\n\n  + .card-link {\n    margin-left: var(--#{$prefix}card-spacer-x);\n  }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n  padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n  margin-bottom: 0; // Removes the default margin-bottom of <hN>\n  color: var(--#{$prefix}card-cap-color);\n  background-color: var(--#{$prefix}card-cap-bg);\n  border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n  &:first-child {\n    @include border-radius(\n      var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0\n    );\n  }\n}\n\n.card-footer {\n  padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n  color: var(--#{$prefix}card-cap-color);\n  background-color: var(--#{$prefix}card-cap-bg);\n  border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n  &:last-child {\n    @include border-radius(\n      0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius)\n    );\n  }\n}\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n  margin-right: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-bottom: calc(\n    -1 * var(--#{$prefix}card-cap-padding-y)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-left: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n  border-bottom: 0;\n\n  .nav-link.active {\n    background-color: var(--#{$prefix}card-bg);\n    border-bottom-color: var(--#{$prefix}card-bg);\n  }\n}\n\n.card-header-pills {\n  margin-right: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-left: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: var(--#{$prefix}card-img-overlay-padding);\n  @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n  @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n  @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n//\n// Card groups\n//\n\n.card-group {\n  // The child selector allows nested `.card` within `.card-group`\n  // to display properly.\n  > .card {\n    margin-bottom: var(--#{$prefix}card-group-margin);\n  }\n\n  @include media-breakpoint-up(sm) {\n    display: flex;\n    flex-flow: row wrap;\n    // The child selector allows nested `.card` within `.card-group`\n    // to display properly.\n    > .card {\n      // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n      flex: 1 0 0%;\n      margin-bottom: 0;\n\n      + .card {\n        margin-left: 0;\n        border-left: 0;\n      }\n\n      // Handle rounded corners\n      @if $enable-rounded {\n        &:not(:last-child) {\n          @include border-end-radius(0);\n\n          .card-img-top,\n          .card-header {\n            // stylelint-disable-next-line property-disallowed-list\n            border-top-right-radius: 0;\n          }\n          .card-img-bottom,\n          .card-footer {\n            // stylelint-disable-next-line property-disallowed-list\n            border-bottom-right-radius: 0;\n          }\n        }\n\n        &:not(:first-child) {\n          @include border-start-radius(0);\n\n          .card-img-top,\n          .card-header {\n            // stylelint-disable-next-line property-disallowed-list\n            border-top-left-radius: 0;\n          }\n          .card-img-bottom,\n          .card-footer {\n            // stylelint-disable-next-line property-disallowed-list\n            border-bottom-left-radius: 0;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_carousel.scss",
    "content": "// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n//    even when their scroll action started on a carousel, but for compatibility (with Firefox)\n//    we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n//    the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n//    slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n//    is the upcoming slide in transition.\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n  @include clearfix();\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n  .carousel-item {\n    opacity: 0;\n    transition-property: opacity;\n    transform: none;\n  }\n\n  .carousel-item.active,\n  .carousel-item-next.carousel-item-start,\n  .carousel-item-prev.carousel-item-end {\n    z-index: 1;\n    opacity: 1;\n  }\n\n  .active.carousel-item-start,\n  .active.carousel-item-end {\n    z-index: 0;\n    opacity: 0;\n    @include transition(opacity 0s $carousel-transition-duration);\n  }\n}\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  // Use flex for alignment (1-3)\n  display: flex; // 1. allow flex styles\n  align-items: center; // 2. vertically center contents\n  justify-content: center; // 3. horizontally center contents\n  width: $carousel-control-width;\n  padding: 0;\n  color: $carousel-control-color;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: $carousel-control-opacity;\n  @include transition($carousel-control-transition);\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    color: $carousel-control-color;\n    text-decoration: none;\n    outline: 0;\n    opacity: $carousel-control-hover-opacity;\n  }\n}\n.carousel-control-prev {\n  left: 0;\n  background-image: if(\n    $enable-gradients,\n    linear-gradient(90deg, rgba($black, 0.25), rgba($black, 0.001)),\n    null\n  );\n}\n.carousel-control-next {\n  right: 0;\n  background-image: if(\n    $enable-gradients,\n    linear-gradient(270deg, rgba($black, 0.25), rgba($black, 0.001)),\n    null\n  );\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: $carousel-control-icon-width;\n  height: $carousel-control-icon-width;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: escape-svg($carousel-control-prev-icon-bg) #{'/*rtl:' +\n    escape-svg($carousel-control-next-icon-bg) + '*/'};\n}\n.carousel-control-next-icon {\n  background-image: escape-svg($carousel-control-next-icon-bg) #{'/*rtl:' +\n    escape-svg($carousel-control-prev-icon-bg) + '*/'};\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  // Use the .carousel-control's width as margin so we don't overlay those\n  margin-right: $carousel-control-width;\n  margin-bottom: 1rem;\n  margin-left: $carousel-control-width;\n\n  [data-bs-target] {\n    box-sizing: content-box;\n    flex: 0 1 auto;\n    width: $carousel-indicator-width;\n    height: $carousel-indicator-height;\n    padding: 0;\n    margin-right: $carousel-indicator-spacer;\n    margin-left: $carousel-indicator-spacer;\n    text-indent: -999px;\n    cursor: pointer;\n    background-color: $carousel-indicator-active-bg;\n    background-clip: padding-box;\n    border: 0;\n    // Use transparent borders to increase the hit area by 10px on top and bottom.\n    border-top: $carousel-indicator-hit-area-height solid transparent;\n    border-bottom: $carousel-indicator-hit-area-height solid transparent;\n    opacity: $carousel-indicator-opacity;\n    @include transition($carousel-indicator-transition);\n  }\n\n  .active {\n    opacity: $carousel-indicator-active-opacity;\n  }\n}\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n  position: absolute;\n  right: (100% - $carousel-caption-width) * 0.5;\n  bottom: $carousel-caption-spacer;\n  left: (100% - $carousel-caption-width) * 0.5;\n  padding-top: $carousel-caption-padding-y;\n  padding-bottom: $carousel-caption-padding-y;\n  color: $carousel-caption-color;\n  text-align: center;\n}\n\n// Dark mode carousel\n\n@mixin carousel-dark() {\n  .carousel-control-prev-icon,\n  .carousel-control-next-icon {\n    filter: $carousel-dark-control-icon-filter;\n  }\n\n  .carousel-indicators [data-bs-target] {\n    background-color: $carousel-dark-indicator-active-bg;\n  }\n\n  .carousel-caption {\n    color: $carousel-dark-caption-color;\n  }\n}\n\n.carousel-dark {\n  @include carousel-dark();\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    @if $color-mode-type == 'media-query' {\n      .carousel {\n        @include carousel-dark();\n      }\n    } @else {\n      .carousel,\n      &.carousel {\n        @include carousel-dark();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_close.scss",
    "content": "// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n  // scss-docs-start close-css-vars\n  --#{$prefix}btn-close-color: #{$btn-close-color};\n  --#{$prefix}btn-close-bg: #{escape-svg($btn-close-bg)};\n  --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n  --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n  --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n  --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n  --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n  --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n  // scss-docs-end close-css-vars\n\n  box-sizing: content-box;\n  width: $btn-close-width;\n  height: $btn-close-height;\n  padding: $btn-close-padding-y $btn-close-padding-x;\n  color: var(--#{$prefix}btn-close-color);\n  background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n  border: 0; // for button elements\n  @include border-radius();\n  opacity: var(--#{$prefix}btn-close-opacity);\n\n  // Override <a>'s hover style\n  &:hover {\n    color: var(--#{$prefix}btn-close-color);\n    text-decoration: none;\n    opacity: var(--#{$prefix}btn-close-hover-opacity);\n  }\n\n  &:focus {\n    outline: 0;\n    box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n    opacity: var(--#{$prefix}btn-close-focus-opacity);\n  }\n\n  &:disabled,\n  &.disabled {\n    pointer-events: none;\n    user-select: none;\n    opacity: var(--#{$prefix}btn-close-disabled-opacity);\n  }\n}\n\n@mixin btn-close-white() {\n  filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n  @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .btn-close {\n      @include btn-close-white();\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_containers.scss",
    "content": "// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n  // Single container class with breakpoint max-widths\n  .container,\n  // 100% wide container at all breakpoints\n  .container-fluid {\n    @include make-container();\n  }\n\n  // Responsive containers that are 100% wide until a breakpoint\n  @each $breakpoint, $container-max-width in $container-max-widths {\n    .container-#{$breakpoint} {\n      @extend .container-fluid;\n    }\n\n    @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n      %responsive-container-#{$breakpoint} {\n        max-width: $container-max-width;\n      }\n\n      // Extend each breakpoint which is smaller or equal to the current breakpoint\n      $extend-breakpoint: true;\n\n      @each $name, $width in $grid-breakpoints {\n        @if ($extend-breakpoint) {\n          .container#{breakpoint-infix($name, $grid-breakpoints)} {\n            @extend %responsive-container-#{$breakpoint};\n          }\n\n          // Once the current breakpoint is reached, stop extending\n          @if ($breakpoint == $name) {\n            $extend-breakpoint: false;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_dropdown.scss",
    "content": "// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n\n  // Generate the caret automatically\n  @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n  // scss-docs-start dropdown-css-vars\n  --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n  --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n  --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n  --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n  --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n  @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n  --#{$prefix}dropdown-color: #{$dropdown-color};\n  --#{$prefix}dropdown-bg: #{$dropdown-bg};\n  --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n  --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n  --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n  --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n  --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n  --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n  --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n  --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n  --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n  --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n  --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n  --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n  --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n  --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n  --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n  --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n  --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n  --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n  // scss-docs-end dropdown-css-vars\n\n  position: absolute;\n  z-index: var(--#{$prefix}dropdown-zindex);\n  display: none; // none by default, but block on \"open\" of the menu\n  min-width: var(--#{$prefix}dropdown-min-width);\n  padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n  margin: 0; // Override default margin of ul\n  @include font-size(var(--#{$prefix}dropdown-font-size));\n  color: var(--#{$prefix}dropdown-color);\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  list-style: none;\n  background-color: var(--#{$prefix}dropdown-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n  @include border-radius(var(--#{$prefix}dropdown-border-radius));\n  @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n  &[data-bs-popper] {\n    top: 100%;\n    left: 0;\n    margin-top: var(--#{$prefix}dropdown-spacer);\n  }\n\n  @if $dropdown-padding-y == 0 {\n    > .dropdown-item:first-child,\n    > li:first-child .dropdown-item {\n      @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n    }\n    > .dropdown-item:last-child,\n    > li:last-child .dropdown-item {\n      @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n    }\n  }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    .dropdown-menu#{$infix}-start {\n      --bs-position: start;\n\n      &[data-bs-popper] {\n        right: auto;\n        left: 0;\n      }\n    }\n\n    .dropdown-menu#{$infix}-end {\n      --bs-position: end;\n\n      &[data-bs-popper] {\n        right: 0;\n        left: auto;\n      }\n    }\n  }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n  .dropdown-menu[data-bs-popper] {\n    top: auto;\n    bottom: 100%;\n    margin-top: 0;\n    margin-bottom: var(--#{$prefix}dropdown-spacer);\n  }\n\n  .dropdown-toggle {\n    @include caret(up);\n  }\n}\n\n.dropend {\n  .dropdown-menu[data-bs-popper] {\n    top: 0;\n    right: auto;\n    left: 100%;\n    margin-top: 0;\n    margin-left: var(--#{$prefix}dropdown-spacer);\n  }\n\n  .dropdown-toggle {\n    @include caret(end);\n    &::after {\n      vertical-align: 0;\n    }\n  }\n}\n\n.dropstart {\n  .dropdown-menu[data-bs-popper] {\n    top: 0;\n    right: 100%;\n    left: auto;\n    margin-top: 0;\n    margin-right: var(--#{$prefix}dropdown-spacer);\n  }\n\n  .dropdown-toggle {\n    @include caret(start);\n    &::before {\n      vertical-align: 0;\n    }\n  }\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n  height: 0;\n  margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n  overflow: hidden;\n  border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n  opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n  display: block;\n  width: 100%; // For `<button>`s\n  padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n  clear: both;\n  font-weight: $font-weight-normal;\n  color: var(--#{$prefix}dropdown-link-color);\n  text-align: inherit; // For `<button>`s\n  text-decoration: if($link-decoration == none, null, none);\n  white-space: nowrap; // prevent links from randomly breaking onto new lines\n  background-color: transparent; // For `<button>`s\n  border: 0; // For `<button>`s\n  @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}dropdown-link-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n    @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n  }\n\n  &.active,\n  &:active {\n    color: var(--#{$prefix}dropdown-link-active-color);\n    text-decoration: none;\n    @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n  }\n\n  &.disabled,\n  &:disabled {\n    color: var(--#{$prefix}dropdown-link-disabled-color);\n    pointer-events: none;\n    background-color: transparent;\n    // Remove CSS gradients if they're enabled\n    background-image: if($enable-gradients, none, null);\n  }\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n  margin-bottom: 0; // for use with heading elements\n  @include font-size($font-size-sm);\n  color: var(--#{$prefix}dropdown-header-color);\n  white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n  display: block;\n  padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n  color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n  // scss-docs-start dropdown-dark-css-vars\n  --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n  --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n  --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n  --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n  --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n  --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n  --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n  --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n  --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n  --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n  --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n  --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n  // scss-docs-end dropdown-dark-css-vars\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_forms.scss",
    "content": "@import 'forms/labels';\n@import 'forms/form-text';\n@import 'forms/form-control';\n@import 'forms/form-select';\n@import 'forms/form-check';\n@import 'forms/form-range';\n@import 'forms/floating-labels';\n@import 'forms/input-group';\n@import 'forms/validation';\n"
  },
  {
    "path": "src/scss/bootstrap/_functions.scss",
    "content": "// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n  $prev-key: null;\n  $prev-num: null;\n  @each $key, $num in $map {\n    @if $prev-num == null or unit($num) == '%' or unit($prev-num) == '%' {\n      // Do nothing\n    } @else if not comparable($prev-num, $num) {\n      @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n    } @else if $prev-num >= $num {\n      @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n    }\n    $prev-key: $key;\n    $prev-num: $num;\n  }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: '$grid-breakpoints') {\n  @if length($map) > 0 {\n    $values: map-values($map);\n    $first-value: nth($values, 1);\n    @if $first-value != 0 {\n      @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n    }\n  }\n}\n\n// Colors\n@function to-rgb($value) {\n  @return red($value), green($value), blue($value);\n}\n\n// stylelint-disable scss/dollar-variable-pattern\n@function rgba-css-var($identifier, $target) {\n  @if $identifier == 'body' and $target == 'bg' {\n    @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity));\n  }\n  @if $identifier == 'body' and $target == 'text' {\n    @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity));\n  } @else {\n    @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity));\n  }\n}\n\n@function map-loop($map, $func, $args...) {\n  $_map: ();\n\n  @each $key, $value in $map {\n    // allow to pass the $key and $value of the map as an function argument\n    $_args: ();\n    @each $arg in $args {\n      $_args: append($_args, if($arg == '$key', $key, if($arg == '$value', $value, $arg)));\n    }\n\n    $_map: map-merge(\n      $_map,\n      (\n        $key: call(get-function($func), $_args...),\n      )\n    );\n  }\n\n  @return $_map;\n}\n// stylelint-enable scss/dollar-variable-pattern\n\n@function varify($list) {\n  $result: null;\n  @each $entry in $list {\n    $result: append($result, var(--#{$prefix}#{$entry}), space);\n  }\n  @return $result;\n}\n\n// Internal Bootstrap function to turn maps into its negative variant.\n// It prefixes the keys with `n` and makes the value negative.\n@function negativify-map($map) {\n  $result: ();\n  @each $key, $value in $map {\n    @if $key != 0 {\n      $result: map-merge($result, ('n' + $key: (-$value)));\n    }\n  }\n  @return $result;\n}\n\n// Get multiple keys from a sass map\n@function map-get-multiple($map, $values) {\n  $result: ();\n  @each $key, $value in $map {\n    @if (index($values, $key) != null) {\n      $result: map-merge(\n        $result,\n        (\n          $key: $value,\n        )\n      );\n    }\n  }\n  @return $result;\n}\n\n// Merge multiple maps\n@function map-merge-multiple($maps...) {\n  $merged-maps: ();\n\n  @each $map in $maps {\n    $merged-maps: map-merge($merged-maps, $map);\n  }\n  @return $merged-maps;\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Kitty Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: '') {\n  $index: str-index($string, $search);\n\n  @if $index {\n    @return str-slice($string, 1, $index - 1) + $replace +\n      str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n  }\n\n  @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n  @if str-index($string, 'data:image/svg+xml') {\n    @each $char, $encoded in $escaped-characters {\n      // Do not escape the url brackets\n      @if str-index($string, 'url(') == 1 {\n        $string: url('#{str-replace(str-slice($string, 6, -3), $char, $encoded)}');\n      } @else {\n        $string: str-replace($string, $char, $encoded);\n      }\n    }\n  }\n\n  @return $string;\n}\n\n// Color contrast\n// See https://github.com/twbs/bootstrap/pull/30168\n\n// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)\n// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern\n$_luminance-list: 0.0008 0.001 0.0011 0.0013 0.0015 0.0017 0.002 0.0022 0.0025 0.0027 0.003 0.0033\n  0.0037 0.004 0.0044 0.0048 0.0052 0.0056 0.006 0.0065 0.007 0.0075 0.008 0.0086 0.0091 0.0097\n  0.0103 0.011 0.0116 0.0123 0.013 0.0137 0.0144 0.0152 0.016 0.0168 0.0176 0.0185 0.0194 0.0203\n  0.0212 0.0222 0.0232 0.0242 0.0252 0.0262 0.0273 0.0284 0.0296 0.0307 0.0319 0.0331 0.0343 0.0356\n  0.0369 0.0382 0.0395 0.0409 0.0423 0.0437 0.0452 0.0467 0.0482 0.0497 0.0513 0.0529 0.0545 0.0561\n  0.0578 0.0595 0.0612 0.063 0.0648 0.0666 0.0685 0.0704 0.0723 0.0742 0.0762 0.0782 0.0802 0.0823\n  0.0844 0.0865 0.0887 0.0908 0.0931 0.0953 0.0976 0.0999 0.1022 0.1046 0.107 0.1095 0.1119 0.1144\n  0.117 0.1195 0.1221 0.1248 0.1274 0.1301 0.1329 0.1356 0.1384 0.1413 0.1441 0.147 0.15 0.1529\n  0.1559 0.159 0.162 0.1651 0.1683 0.1714 0.1746 0.1779 0.1812 0.1845 0.1878 0.1912 0.1946 0.1981\n  0.2016 0.2051 0.2086 0.2122 0.2159 0.2195 0.2232 0.227 0.2307 0.2346 0.2384 0.2423 0.2462 0.2502\n  0.2542 0.2582 0.2623 0.2664 0.2705 0.2747 0.2789 0.2831 0.2874 0.2918 0.2961 0.3005 0.305 0.3095\n  0.314 0.3185 0.3231 0.3278 0.3325 0.3372 0.3419 0.3467 0.3515 0.3564 0.3613 0.3663 0.3712 0.3763\n  0.3813 0.3864 0.3916 0.3968 0.402 0.4072 0.4125 0.4179 0.4233 0.4287 0.4342 0.4397 0.4452 0.4508\n  0.4564 0.4621 0.4678 0.4735 0.4793 0.4851 0.491 0.4969 0.5029 0.5089 0.5149 0.521 0.5271 0.5333\n  0.5395 0.5457 0.552 0.5583 0.5647 0.5711 0.5776 0.5841 0.5906 0.5972 0.6038 0.6105 0.6172 0.624\n  0.6308 0.6376 0.6445 0.6514 0.6584 0.6654 0.6724 0.6795 0.6867 0.6939 0.7011 0.7084 0.7157 0.7231\n  0.7305 0.7379 0.7454 0.7529 0.7605 0.7682 0.7758 0.7835 0.7913 0.7991 0.807 0.8148 0.8228 0.8308\n  0.8388 0.8469 0.855 0.8632 0.8714 0.8796 0.8879 0.8963 0.9047 0.9131 0.9216 0.9301 0.9387 0.9473\n  0.956 0.9647 0.9734 0.9823 0.9911 1;\n\n@function color-contrast(\n  $background,\n  $color-contrast-dark: $color-contrast-dark,\n  $color-contrast-light: $color-contrast-light,\n  $min-contrast-ratio: $min-contrast-ratio\n) {\n  $foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black;\n  $max-ratio: 0;\n  $max-ratio-color: null;\n\n  @each $color in $foregrounds {\n    $contrast-ratio: contrast-ratio($background, $color);\n    @if $contrast-ratio > $min-contrast-ratio {\n      @return $color;\n    } @else if $contrast-ratio > $max-ratio {\n      $max-ratio: $contrast-ratio;\n      $max-ratio-color: $color;\n    }\n  }\n\n  @warn \"Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}...\";\n\n  @return $max-ratio-color;\n}\n\n@function contrast-ratio($background, $foreground: $color-contrast-light) {\n  $l1: luminance($background);\n  $l2: luminance(opaque($background, $foreground));\n\n  @return if($l1 > $l2, divide($l1 + 0.05, $l2 + 0.05), divide($l2 + 0.05, $l1 + 0.05));\n}\n\n// Return WCAG2.1 relative luminance\n// See https://www.w3.org/TR/WCAG/#dfn-relative-luminance\n// See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio\n@function luminance($color) {\n  $rgb: (\n    'r': red($color),\n    'g': green($color),\n    'b': blue($color),\n  );\n\n  @each $name, $value in $rgb {\n    $value: if(\n      divide($value, 255) < 0.04045,\n      divide(divide($value, 255), 12.92),\n      nth($_luminance-list, $value + 1)\n    );\n    $rgb: map-merge(\n      $rgb,\n      (\n        $name: $value,\n      )\n    );\n  }\n\n  @return (map-get($rgb, 'r') * 0.2126) + (map-get($rgb, 'g') * 0.7152) +\n    (map-get($rgb, 'b') * 0.0722);\n}\n\n// Return opaque color\n// opaque(#fff, rgba(0, 0, 0, .5)) => #808080\n@function opaque($background, $foreground) {\n  @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);\n}\n\n// scss-docs-start color-functions\n// Tint a color: mix a color with white\n@function tint-color($color, $weight) {\n  @return mix(white, $color, $weight);\n}\n\n// Shade a color: mix a color with black\n@function shade-color($color, $weight) {\n  @return mix(black, $color, $weight);\n}\n\n// Shade the color if the weight is positive, else tint it\n@function shift-color($color, $weight) {\n  @return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));\n}\n// scss-docs-end color-functions\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n  @if $value1 == null {\n    @return $value2;\n  }\n\n  @if $value2 == null {\n    @return $value1;\n  }\n\n  @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n    @return $value1 + $value2;\n  }\n\n  @return if(\n    $return-calc == true,\n    calc(#{$value1} + #{$value2}),\n    $value1 + unquote(' + ') + $value2\n  );\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n  @if $value1 == null and $value2 == null {\n    @return null;\n  }\n\n  @if $value1 == null {\n    @return -$value2;\n  }\n\n  @if $value2 == null {\n    @return $value1;\n  }\n\n  @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n    @return $value1 - $value2;\n  }\n\n  @if type-of($value2) != number {\n    $value2: unquote('(') + $value2 + unquote(')');\n  }\n\n  @return if(\n    $return-calc == true,\n    calc(#{$value1} - #{$value2}),\n    $value1 + unquote(' - ') + $value2\n  );\n}\n\n@function divide($dividend, $divisor, $precision: 10) {\n  $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n  $dividend: abs($dividend);\n  $divisor: abs($divisor);\n  @if $dividend == 0 {\n    @return 0;\n  }\n  @if $divisor == 0 {\n    @error \"Cannot divide by 0\";\n  }\n  $remainder: $dividend;\n  $result: 0;\n  $factor: 10;\n  @while ($remainder > 0 and $precision >= 0) {\n    $quotient: 0;\n    @while ($remainder >= $divisor) {\n      $remainder: $remainder - $divisor;\n      $quotient: $quotient + 1;\n    }\n    $result: $result * 10 + $quotient;\n    $factor: $factor * 0.1;\n    $remainder: $remainder * 10;\n    $precision: $precision - 1;\n    @if ($precision < 0 and $remainder >= $divisor * 5) {\n      $result: $result + 1;\n    }\n  }\n  $result: $result * $factor * $sign;\n  $dividend-unit: unit($dividend);\n  $divisor-unit: unit($divisor);\n  $unit-map: (\n    'px': 1px,\n    'rem': 1rem,\n    'em': 1em,\n    '%': 1%,\n  );\n  @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n    $result: $result * map-get($unit-map, $dividend-unit);\n  }\n  @return $result;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_grid.scss",
    "content": "// Row\n//\n// Rows contain your columns.\n\n:root {\n  @each $name, $value in $grid-breakpoints {\n    --#{$prefix}breakpoint-#{$name}: #{$value};\n  }\n}\n\n@if $enable-grid-classes {\n  .row {\n    @include make-row();\n\n    > * {\n      @include make-col-ready();\n    }\n  }\n}\n\n@if $enable-cssgrid {\n  .grid {\n    display: grid;\n    grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n    grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n    gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n    @include make-cssgrid();\n  }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n  @include make-grid-columns();\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_helpers.scss",
    "content": "@import 'helpers/clearfix';\n@import 'helpers/color-bg';\n@import 'helpers/colored-links';\n@import 'helpers/focus-ring';\n@import 'helpers/icon-link';\n@import 'helpers/ratio';\n@import 'helpers/position';\n@import 'helpers/stacks';\n@import 'helpers/visually-hidden';\n@import 'helpers/stretched-link';\n@import 'helpers/text-truncation';\n@import 'helpers/vr';\n"
  },
  {
    "path": "src/scss/bootstrap/_images.scss",
    "content": "// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n  @include img-fluid();\n}\n\n// Image thumbnails\n.img-thumbnail {\n  padding: $thumbnail-padding;\n  background-color: $thumbnail-bg;\n  border: $thumbnail-border-width solid $thumbnail-border-color;\n  @include border-radius($thumbnail-border-radius);\n  @include box-shadow($thumbnail-box-shadow);\n\n  // Keep them at most 100% wide\n  @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n  // Ensures the caption's text aligns with the image.\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: $spacer * 0.5;\n  line-height: 1;\n}\n\n.figure-caption {\n  @include font-size($figure-caption-font-size);\n  color: $figure-caption-color;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_list-group.scss",
    "content": "// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // scss-docs-start list-group-css-vars\n  --#{$prefix}list-group-color: #{$list-group-color};\n  --#{$prefix}list-group-bg: #{$list-group-bg};\n  --#{$prefix}list-group-border-color: #{$list-group-border-color};\n  --#{$prefix}list-group-border-width: #{$list-group-border-width};\n  --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n  --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n  --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n  --#{$prefix}list-group-action-color: #{$list-group-action-color};\n  --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n  --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n  --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n  --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n  --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n  --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n  --#{$prefix}list-group-active-color: #{$list-group-active-color};\n  --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n  --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n  // scss-docs-end list-group-css-vars\n\n  display: flex;\n  flex-direction: column;\n\n  // No need to set list-style: none; since .list-group-item is block level\n  padding-left: 0; // reset padding because ul and ol\n  margin-bottom: 0;\n  @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n\n  > .list-group-item::before {\n    // Increments only this instance of the section counter\n    content: counters(section, '.') '. ';\n    counter-increment: section;\n  }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n  width: 100%; // For `<button>`s (anchors become 100% by default though)\n  color: var(--#{$prefix}list-group-action-color);\n  text-align: inherit; // For `<button>`s (anchors inherit)\n\n  // Hover state\n  &:hover,\n  &:focus {\n    z-index: 1; // Place hover/focus items above their siblings for proper border styling\n    color: var(--#{$prefix}list-group-action-hover-color);\n    text-decoration: none;\n    background-color: var(--#{$prefix}list-group-action-hover-bg);\n  }\n\n  &:active {\n    color: var(--#{$prefix}list-group-action-active-color);\n    background-color: var(--#{$prefix}list-group-action-active-bg);\n  }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n  color: var(--#{$prefix}list-group-color);\n  text-decoration: if($link-decoration == none, null, none);\n  background-color: var(--#{$prefix}list-group-bg);\n  border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n  &:first-child {\n    @include border-top-radius(inherit);\n  }\n\n  &:last-child {\n    @include border-bottom-radius(inherit);\n  }\n\n  &.disabled,\n  &:disabled {\n    color: var(--#{$prefix}list-group-disabled-color);\n    pointer-events: none;\n    background-color: var(--#{$prefix}list-group-disabled-bg);\n  }\n\n  // Include both here for `<a>`s and `<button>`s\n  &.active {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: var(--#{$prefix}list-group-active-color);\n    background-color: var(--#{$prefix}list-group-active-bg);\n    border-color: var(--#{$prefix}list-group-active-border-color);\n  }\n\n  // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n  & + .list-group-item {\n    border-top-width: 0;\n\n    &.active {\n      margin-top: calc(\n        -1 * var(--#{$prefix}list-group-border-width)\n      ); // stylelint-disable-line function-disallowed-list\n      border-top-width: var(--#{$prefix}list-group-border-width);\n    }\n  }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    .list-group-horizontal#{$infix} {\n      flex-direction: row;\n\n      > .list-group-item {\n        &:first-child:not(:last-child) {\n          @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n          @include border-top-end-radius(0);\n        }\n\n        &:last-child:not(:first-child) {\n          @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n          @include border-bottom-start-radius(0);\n        }\n\n        &.active {\n          margin-top: 0;\n        }\n\n        + .list-group-item {\n          border-top-width: var(--#{$prefix}list-group-border-width);\n          border-left-width: 0;\n\n          &.active {\n            margin-left: calc(\n              -1 * var(--#{$prefix}list-group-border-width)\n            ); // stylelint-disable-line function-disallowed-list\n            border-left-width: var(--#{$prefix}list-group-border-width);\n          }\n        }\n      }\n    }\n  }\n}\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n  @include border-radius(0);\n\n  > .list-group-item {\n    border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n    &:last-child {\n      border-bottom-width: 0;\n    }\n  }\n}\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state in map-keys($theme-colors) {\n  .list-group-item-#{$state} {\n    --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text-emphasis);\n    --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);\n    --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);\n    --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}list-group-action-active-color: var(--#{$prefix}emphasis-color);\n    --#{$prefix}list-group-action-active-bg: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}list-group-active-color: var(--#{$prefix}#{$state}-bg-subtle);\n    --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text-emphasis);\n    --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text-emphasis);\n  }\n}\n// scss-docs-end list-group-modifiers\n"
  },
  {
    "path": "src/scss/bootstrap/_maps.scss",
    "content": "// Re-assigned maps\n//\n// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, '$value') !default;\n// scss-docs-end theme-colors-rgb\n\n// scss-docs-start theme-text-map\n$theme-colors-text: (\n  'primary': $primary-text-emphasis,\n  'secondary': $secondary-text-emphasis,\n  'success': $success-text-emphasis,\n  'info': $info-text-emphasis,\n  'warning': $warning-text-emphasis,\n  'danger': $danger-text-emphasis,\n  'light': $light-text-emphasis,\n  'dark': $dark-text-emphasis,\n) !default;\n// scss-docs-end theme-text-map\n\n// scss-docs-start theme-bg-subtle-map\n$theme-colors-bg-subtle: (\n  'primary': $primary-bg-subtle,\n  'secondary': $secondary-bg-subtle,\n  'success': $success-bg-subtle,\n  'info': $info-bg-subtle,\n  'warning': $warning-bg-subtle,\n  'danger': $danger-bg-subtle,\n  'light': $light-bg-subtle,\n  'dark': $dark-bg-subtle,\n) !default;\n// scss-docs-end theme-bg-subtle-map\n\n// scss-docs-start theme-border-subtle-map\n$theme-colors-border-subtle: (\n  'primary': $primary-border-subtle,\n  'secondary': $secondary-border-subtle,\n  'success': $success-border-subtle,\n  'info': $info-border-subtle,\n  'warning': $warning-border-subtle,\n  'danger': $danger-border-subtle,\n  'light': $light-border-subtle,\n  'dark': $dark-border-subtle,\n) !default;\n// scss-docs-end theme-border-subtle-map\n\n$theme-colors-text-dark: null !default;\n$theme-colors-bg-subtle-dark: null !default;\n$theme-colors-border-subtle-dark: null !default;\n\n@if $enable-dark-mode {\n  // scss-docs-start theme-text-dark-map\n  $theme-colors-text-dark: (\n    'primary': $primary-text-emphasis-dark,\n    'secondary': $secondary-text-emphasis-dark,\n    'success': $success-text-emphasis-dark,\n    'info': $info-text-emphasis-dark,\n    'warning': $warning-text-emphasis-dark,\n    'danger': $danger-text-emphasis-dark,\n    'light': $light-text-emphasis-dark,\n    'dark': $dark-text-emphasis-dark,\n  ) !default;\n  // scss-docs-end theme-text-dark-map\n\n  // scss-docs-start theme-bg-subtle-dark-map\n  $theme-colors-bg-subtle-dark: (\n    'primary': $primary-bg-subtle-dark,\n    'secondary': $secondary-bg-subtle-dark,\n    'success': $success-bg-subtle-dark,\n    'info': $info-bg-subtle-dark,\n    'warning': $warning-bg-subtle-dark,\n    'danger': $danger-bg-subtle-dark,\n    'light': $light-bg-subtle-dark,\n    'dark': $dark-bg-subtle-dark,\n  ) !default;\n  // scss-docs-end theme-bg-subtle-dark-map\n\n  // scss-docs-start theme-border-subtle-dark-map\n  $theme-colors-border-subtle-dark: (\n    'primary': $primary-border-subtle-dark,\n    'secondary': $secondary-border-subtle-dark,\n    'success': $success-border-subtle-dark,\n    'info': $info-border-subtle-dark,\n    'warning': $warning-border-subtle-dark,\n    'danger': $danger-border-subtle-dark,\n    'light': $light-border-subtle-dark,\n    'dark': $dark-border-subtle-dark,\n  ) !default;\n  // scss-docs-end theme-border-subtle-dark-map\n}\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n  $utilities-colors,\n  (\n    'black': to-rgb($black),\n    'white': to-rgb($white),\n    'body': to-rgb($body-color),\n  )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, '$key', 'text') !default;\n\n$utilities-text-emphasis-colors: (\n  'primary-emphasis': var(--#{$prefix}primary-text-emphasis),\n  'secondary-emphasis': var(--#{$prefix}secondary-text-emphasis),\n  'success-emphasis': var(--#{$prefix}success-text-emphasis),\n  'info-emphasis': var(--#{$prefix}info-text-emphasis),\n  'warning-emphasis': var(--#{$prefix}warning-text-emphasis),\n  'danger-emphasis': var(--#{$prefix}danger-text-emphasis),\n  'light-emphasis': var(--#{$prefix}light-text-emphasis),\n  'dark-emphasis': var(--#{$prefix}dark-text-emphasis),\n) !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n  $utilities-colors,\n  (\n    'black': to-rgb($black),\n    'white': to-rgb($white),\n    'body': to-rgb($body-bg),\n  )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, '$key', 'bg') !default;\n\n$utilities-bg-subtle: (\n  'primary-subtle': var(--#{$prefix}primary-bg-subtle),\n  'secondary-subtle': var(--#{$prefix}secondary-bg-subtle),\n  'success-subtle': var(--#{$prefix}success-bg-subtle),\n  'info-subtle': var(--#{$prefix}info-bg-subtle),\n  'warning-subtle': var(--#{$prefix}warning-bg-subtle),\n  'danger-subtle': var(--#{$prefix}danger-bg-subtle),\n  'light-subtle': var(--#{$prefix}light-bg-subtle),\n  'dark-subtle': var(--#{$prefix}dark-bg-subtle),\n) !default;\n// scss-docs-end utilities-bg-colors\n\n// scss-docs-start utilities-border-colors\n$utilities-border: map-merge(\n  $utilities-colors,\n  (\n    'black': to-rgb($black),\n    'white': to-rgb($white),\n  )\n) !default;\n$utilities-border-colors: map-loop($utilities-border, rgba-css-var, '$key', 'border') !default;\n\n$utilities-border-subtle: (\n  'primary-subtle': var(--#{$prefix}primary-border-subtle),\n  'secondary-subtle': var(--#{$prefix}secondary-border-subtle),\n  'success-subtle': var(--#{$prefix}success-border-subtle),\n  'info-subtle': var(--#{$prefix}info-border-subtle),\n  'warning-subtle': var(--#{$prefix}warning-border-subtle),\n  'danger-subtle': var(--#{$prefix}danger-border-subtle),\n  'light-subtle': var(--#{$prefix}light-border-subtle),\n  'dark-subtle': var(--#{$prefix}dark-border-subtle),\n) !default;\n// scss-docs-end utilities-border-colors\n\n$utilities-links-underline: map-loop(\n  $utilities-colors,\n  rgba-css-var,\n  '$key',\n  'link-underline'\n) !default;\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n\n$gutters: $spacers !default;\n"
  },
  {
    "path": "src/scss/bootstrap/_mixins.scss",
    "content": "// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Vendor\n@import 'vendor/rfs';\n\n// Deprecate\n@import 'mixins/deprecate';\n\n// Helpers\n@import 'mixins/breakpoints';\n@import 'mixins/color-mode';\n@import 'mixins/color-scheme';\n@import 'mixins/image';\n@import 'mixins/resize';\n@import 'mixins/visually-hidden';\n@import 'mixins/reset-text';\n@import 'mixins/text-truncate';\n\n// Utilities\n@import 'mixins/utilities';\n\n// Components\n@import 'mixins/backdrop';\n@import 'mixins/buttons';\n@import 'mixins/caret';\n@import 'mixins/pagination';\n@import 'mixins/lists';\n@import 'mixins/forms';\n@import 'mixins/table-variants';\n\n// Skins\n@import 'mixins/border-radius';\n@import 'mixins/box-shadow';\n@import 'mixins/gradients';\n@import 'mixins/transition';\n\n// Layout\n@import 'mixins/clearfix';\n@import 'mixins/container';\n@import 'mixins/grid';\n"
  },
  {
    "path": "src/scss/bootstrap/_modal.scss",
    "content": "// stylelint-disable function-disallowed-list\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and stuff\n\n// Container that the modal scrolls within\n.modal {\n  // scss-docs-start modal-css-vars\n  --#{$prefix}modal-zindex: #{$zindex-modal};\n  --#{$prefix}modal-width: #{$modal-md};\n  --#{$prefix}modal-padding: #{$modal-inner-padding};\n  --#{$prefix}modal-margin: #{$modal-dialog-margin};\n  --#{$prefix}modal-color: #{$modal-content-color};\n  --#{$prefix}modal-bg: #{$modal-content-bg};\n  --#{$prefix}modal-border-color: #{$modal-content-border-color};\n  --#{$prefix}modal-border-width: #{$modal-content-border-width};\n  --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n  --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n  --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n  --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n  --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n  --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n  --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n  --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n  --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n  --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n  --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n  --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n  --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n  // scss-docs-end modal-css-vars\n\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--#{$prefix}modal-zindex);\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n  // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n  // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n  // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: var(--#{$prefix}modal-margin);\n  // allow clicks to pass through for custom click handling to close modal\n  pointer-events: none;\n\n  // When fading in the modal, animate it to slide down\n  .modal.fade & {\n    @include transition($modal-transition);\n    transform: $modal-fade-transform;\n  }\n  .modal.show & {\n    transform: $modal-show-transform;\n  }\n\n  // When trying to close, animate focus to scale\n  .modal.modal-static & {\n    transform: $modal-scale-transform;\n  }\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n  .modal-content {\n    max-height: 100%;\n    overflow: hidden;\n  }\n\n  .modal-body {\n    overflow-y: auto;\n  }\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n  // counteract the pointer-events: none; in the .modal-dialog\n  color: var(--#{$prefix}modal-color);\n  pointer-events: auto;\n  background-color: var(--#{$prefix}modal-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n  @include border-radius(var(--#{$prefix}modal-border-radius));\n  @include box-shadow(var(--#{$prefix}modal-box-shadow));\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  // scss-docs-start modal-backdrop-css-vars\n  --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n  --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n  --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n  // scss-docs-end modal-backdrop-css-vars\n\n  @include overlay-backdrop(\n    var(--#{$prefix}backdrop-zindex),\n    var(--#{$prefix}backdrop-bg),\n    var(--#{$prefix}backdrop-opacity)\n  );\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  padding: var(--#{$prefix}modal-header-padding);\n  border-bottom: var(--#{$prefix}modal-header-border-width) solid\n    var(--#{$prefix}modal-header-border-color);\n  @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n  .btn-close {\n    padding: calc(var(--#{$prefix}modal-header-padding-y) * 0.5)\n      calc(var(--#{$prefix}modal-header-padding-x) * 0.5);\n    margin: calc(-0.5 * var(--#{$prefix}modal-header-padding-y))\n      calc(-0.5 * var(--#{$prefix}modal-header-padding-x))\n      calc(-0.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n  }\n}\n\n// Title text within header\n.modal-title {\n  margin-bottom: 0;\n  line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  // Enable `flex-grow: 1` so that the body take up as much space as possible\n  // when there should be a fixed height on `.modal-dialog`.\n  flex: 1 1 auto;\n  padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  align-items: center; // vertically center\n  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n  padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * 0.5);\n  background-color: var(--#{$prefix}modal-footer-bg);\n  border-top: var(--#{$prefix}modal-footer-border-width) solid\n    var(--#{$prefix}modal-footer-border-color);\n  @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n  // Place margin between footer elements\n  // This solution is far from ideal because of the universal selector usage,\n  // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n  > * {\n    margin: calc(\n      var(--#{$prefix}modal-footer-gap) * 0.5\n    ); // Todo in v6: replace with gap on parent class\n  }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n  .modal {\n    --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n    --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n  }\n\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    max-width: var(--#{$prefix}modal-width);\n    margin-right: auto;\n    margin-left: auto;\n  }\n\n  .modal-sm {\n    --#{$prefix}modal-width: #{$modal-sm};\n  }\n}\n\n@include media-breakpoint-up(lg) {\n  .modal-lg,\n  .modal-xl {\n    --#{$prefix}modal-width: #{$modal-lg};\n  }\n}\n\n@include media-breakpoint-up(xl) {\n  .modal-xl {\n    --#{$prefix}modal-width: #{$modal-xl};\n  }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n  $postfix: if($infix != '', $infix + '-down', '');\n\n  @include media-breakpoint-down($breakpoint) {\n    .modal-fullscreen#{$postfix} {\n      width: 100vw;\n      max-width: none;\n      height: 100%;\n      margin: 0;\n\n      .modal-content {\n        height: 100%;\n        border: 0;\n        @include border-radius(0);\n      }\n\n      .modal-header,\n      .modal-footer {\n        @include border-radius(0);\n      }\n\n      .modal-body {\n        overflow-y: auto;\n      }\n    }\n  }\n}\n// scss-docs-end modal-fullscreen-loop\n"
  },
  {
    "path": "src/scss/bootstrap/_nav.scss",
    "content": "// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n  // scss-docs-start nav-css-vars\n  --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n  @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n  --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n  --#{$prefix}nav-link-color: #{$nav-link-color};\n  --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n  --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n  // scss-docs-end nav-css-vars\n\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n  @include font-size(var(--#{$prefix}nav-link-font-size));\n  font-weight: var(--#{$prefix}nav-link-font-weight);\n  color: var(--#{$prefix}nav-link-color);\n  text-decoration: if($link-decoration == none, null, none);\n  background: none;\n  border: 0;\n  @include transition($nav-link-transition);\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}nav-link-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n  }\n\n  &:focus-visible {\n    outline: 0;\n    box-shadow: $nav-link-focus-box-shadow;\n  }\n\n  // Disabled state lightens text\n  &.disabled,\n  &:disabled {\n    color: var(--#{$prefix}nav-link-disabled-color);\n    pointer-events: none;\n    cursor: default;\n  }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n  // scss-docs-start nav-tabs-css-vars\n  --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n  --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n  --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n  --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n  --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n  --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n  --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n  // scss-docs-end nav-tabs-css-vars\n\n  border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n  .nav-link {\n    margin-bottom: calc(\n      -1 * var(--#{$prefix}nav-tabs-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n    @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n    &:hover,\n    &:focus {\n      // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n      isolation: isolate;\n      border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n    }\n  }\n\n  .nav-link.active,\n  .nav-item.show .nav-link {\n    color: var(--#{$prefix}nav-tabs-link-active-color);\n    background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n    border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n  }\n\n  .dropdown-menu {\n    // Make dropdown border overlap tab border\n    margin-top: calc(\n      -1 * var(--#{$prefix}nav-tabs-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    // Remove the top rounded corners here since there is a hard edge above the menu\n    @include border-top-radius(0);\n  }\n}\n\n//\n// Pills\n//\n\n.nav-pills {\n  // scss-docs-start nav-pills-css-vars\n  --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n  --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n  --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n  // scss-docs-end nav-pills-css-vars\n\n  .nav-link {\n    @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n  }\n\n  .nav-link.active,\n  .show > .nav-link {\n    color: var(--#{$prefix}nav-pills-link-active-color);\n    @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n  }\n}\n\n//\n// Underline\n//\n\n.nav-underline {\n  // scss-docs-start nav-underline-css-vars\n  --#{$prefix}nav-underline-gap: #{$nav-underline-gap};\n  --#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};\n  --#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};\n  // scss-docs-end nav-underline-css-vars\n\n  gap: var(--#{$prefix}nav-underline-gap);\n\n  .nav-link {\n    padding-right: 0;\n    padding-left: 0;\n    border-bottom: var(--#{$prefix}nav-underline-border-width) solid transparent;\n\n    &:hover,\n    &:focus {\n      border-bottom-color: currentcolor;\n    }\n  }\n\n  .nav-link.active,\n  .show > .nav-link {\n    font-weight: $font-weight-bold;\n    color: var(--#{$prefix}nav-underline-link-active-color);\n    border-bottom-color: currentcolor;\n  }\n}\n\n//\n// Justified variants\n//\n\n.nav-fill {\n  > .nav-link,\n  .nav-item {\n    flex: 1 1 auto;\n    text-align: center;\n  }\n}\n\n.nav-justified {\n  > .nav-link,\n  .nav-item {\n    flex-basis: 0;\n    flex-grow: 1;\n    text-align: center;\n  }\n}\n\n.nav-fill,\n.nav-justified {\n  .nav-item .nav-link {\n    width: 100%; // Make sure button will grow\n  }\n}\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_navbar.scss",
    "content": "// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  // scss-docs-start navbar-css-vars\n  --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n  --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n  --#{$prefix}navbar-color: #{$navbar-light-color};\n  --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n  --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n  --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n  --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n  --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n  --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n  --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n  --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n  --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n  --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n  --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n  --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n  --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n  --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n  --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n  --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n  --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n  // scss-docs-end navbar-css-vars\n\n  position: relative;\n  display: flex;\n  flex-wrap: wrap; // allow us to do the line break for collapsing content\n  align-items: center;\n  justify-content: space-between; // space out brand from logo\n  padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n  @include gradient-bg();\n\n  // Because flex properties aren't inherited, we need to redeclare these first\n  // few properties so that content nested within behave properly.\n  // The `flex-wrap` property is inherited to simplify the expanded navbars\n  %container-flex-properties {\n    display: flex;\n    flex-wrap: inherit;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  > .container,\n  > .container-fluid {\n    @extend %container-flex-properties;\n  }\n\n  @each $breakpoint, $container-max-width in $container-max-widths {\n    > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n      @extend %container-flex-properties;\n    }\n  }\n}\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n  padding-top: var(--#{$prefix}navbar-brand-padding-y);\n  padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n  margin-right: var(--#{$prefix}navbar-brand-margin-end);\n  @include font-size(var(--#{$prefix}navbar-brand-font-size));\n  color: var(--#{$prefix}navbar-brand-color);\n  text-decoration: if($link-decoration == none, null, none);\n  white-space: nowrap;\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}navbar-brand-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n  }\n}\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n  // scss-docs-start navbar-nav-css-vars\n  --#{$prefix}nav-link-padding-x: 0;\n  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n  @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n  --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n  --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n  --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n  --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n  // scss-docs-end navbar-nav-css-vars\n\n  display: flex;\n  flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n\n  .nav-link {\n    &.active,\n    &.show {\n      color: var(--#{$prefix}navbar-active-color);\n    }\n  }\n\n  .dropdown-menu {\n    position: static;\n  }\n}\n\n// Navbar text\n//\n//\n\n.navbar-text {\n  padding-top: $nav-link-padding-y;\n  padding-bottom: $nav-link-padding-y;\n  color: var(--#{$prefix}navbar-color);\n\n  a,\n  a:hover,\n  a:focus {\n    color: var(--#{$prefix}navbar-active-color);\n  }\n}\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  // For always expanded or extra full navbars, ensure content aligns itself\n  // properly vertically. Can be easily overridden with flex utilities.\n  align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n  padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n  @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n  line-height: 1;\n  color: var(--#{$prefix}navbar-color);\n  background-color: transparent; // remove default button style\n  border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n  @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n  @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n  &:hover {\n    text-decoration: none;\n  }\n\n  &:focus {\n    text-decoration: none;\n    outline: 0;\n    box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n  }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--#{$prefix}scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n  @each $breakpoint in map-keys($grid-breakpoints) {\n    $next: breakpoint-next($breakpoint, $grid-breakpoints);\n    $infix: breakpoint-infix($next, $grid-breakpoints);\n\n    // stylelint-disable-next-line scss/selector-no-union-class-name\n    &#{$infix} {\n      @include media-breakpoint-up($next) {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n\n        .navbar-nav {\n          flex-direction: row;\n\n          .dropdown-menu {\n            position: absolute;\n          }\n\n          .nav-link {\n            padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n            padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n          }\n        }\n\n        .navbar-nav-scroll {\n          overflow: visible;\n        }\n\n        .navbar-collapse {\n          display: flex !important; // stylelint-disable-line declaration-no-important\n          flex-basis: auto;\n        }\n\n        .navbar-toggler {\n          display: none;\n        }\n\n        .offcanvas {\n          // stylelint-disable declaration-no-important\n          position: static;\n          z-index: auto;\n          flex-grow: 1;\n          width: auto !important;\n          height: auto !important;\n          visibility: visible !important;\n          background-color: transparent !important;\n          border: 0 !important;\n          transform: none !important;\n          @include box-shadow(none);\n          @include transition(none);\n          // stylelint-enable declaration-no-important\n\n          .offcanvas-header {\n            display: none;\n          }\n\n          .offcanvas-body {\n            display: flex;\n            flex-grow: 0;\n            padding: 0;\n            overflow-y: visible;\n          }\n        }\n      }\n    }\n  }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n  @include deprecate('`.navbar-light`', 'v5.2.0', 'v6.0.0', true);\n}\n\n.navbar-dark,\n.navbar[data-bs-theme='dark'] {\n  // scss-docs-start navbar-dark-css-vars\n  --#{$prefix}navbar-color: #{$navbar-dark-color};\n  --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n  --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n  --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n  --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n  --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n  --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n  --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n  // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .navbar-toggler-icon {\n      --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_offcanvas.scss",
    "content": "// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n  // scss-docs-start offcanvas-css-vars\n  --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n  --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n  --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n  --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n  --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n  --#{$prefix}offcanvas-color: #{$offcanvas-color};\n  --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n  --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n  --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n  --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n  --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};\n  --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};\n  // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $next: breakpoint-next($breakpoint, $grid-breakpoints);\n  $infix: breakpoint-infix($next, $grid-breakpoints);\n\n  .offcanvas#{$infix} {\n    @extend %offcanvas-css-vars;\n  }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $next: breakpoint-next($breakpoint, $grid-breakpoints);\n  $infix: breakpoint-infix($next, $grid-breakpoints);\n\n  .offcanvas#{$infix} {\n    @include media-breakpoint-down($next) {\n      position: fixed;\n      bottom: 0;\n      z-index: var(--#{$prefix}offcanvas-zindex);\n      display: flex;\n      flex-direction: column;\n      max-width: 100%;\n      color: var(--#{$prefix}offcanvas-color);\n      visibility: hidden;\n      background-color: var(--#{$prefix}offcanvas-bg);\n      background-clip: padding-box;\n      outline: 0;\n      @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n      @include transition(var(--#{$prefix}offcanvas-transition));\n\n      &.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--#{$prefix}offcanvas-width);\n        border-right: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateX(-100%);\n      }\n\n      &.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--#{$prefix}offcanvas-width);\n        border-left: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateX(100%);\n      }\n\n      &.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--#{$prefix}offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateY(-100%);\n      }\n\n      &.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--#{$prefix}offcanvas-height);\n        max-height: 100%;\n        border-top: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateY(100%);\n      }\n\n      &.showing,\n      &.show:not(.hiding) {\n        transform: none;\n      }\n\n      &.showing,\n      &.hiding,\n      &.show {\n        visibility: visible;\n      }\n    }\n\n    @if not($infix == '') {\n      @include media-breakpoint-up($next) {\n        --#{$prefix}offcanvas-height: auto;\n        --#{$prefix}offcanvas-border-width: 0;\n        background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n        .offcanvas-header {\n          display: none;\n        }\n\n        .offcanvas-body {\n          display: flex;\n          flex-grow: 0;\n          padding: 0;\n          overflow-y: visible;\n          // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n          background-color: transparent !important; // stylelint-disable-line declaration-no-important\n        }\n      }\n    }\n  }\n}\n\n.offcanvas-backdrop {\n  @include overlay-backdrop(\n    $zindex-offcanvas-backdrop,\n    $offcanvas-backdrop-bg,\n    $offcanvas-backdrop-opacity\n  );\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n  .btn-close {\n    padding: calc(var(--#{$prefix}offcanvas-padding-y) * 0.5)\n      calc(var(--#{$prefix}offcanvas-padding-x) * 0.5);\n    margin: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y))\n      calc(-0.5 * var(--#{$prefix}offcanvas-padding-x))\n      calc(-0.5 * var(--#{$prefix}offcanvas-padding-y)) auto;\n  }\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: var(--#{$prefix}offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n  overflow-y: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_pagination.scss",
    "content": ".pagination {\n  // scss-docs-start pagination-css-vars\n  --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n  --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n  @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n  --#{$prefix}pagination-color: #{$pagination-color};\n  --#{$prefix}pagination-bg: #{$pagination-bg};\n  --#{$prefix}pagination-border-width: #{$pagination-border-width};\n  --#{$prefix}pagination-border-color: #{$pagination-border-color};\n  --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n  --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n  --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n  --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n  --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n  --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n  --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n  --#{$prefix}pagination-active-color: #{$pagination-active-color};\n  --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n  --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n  --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n  --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n  --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n  // scss-docs-end pagination-css-vars\n\n  display: flex;\n  @include list-unstyled();\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n  @include font-size(var(--#{$prefix}pagination-font-size));\n  color: var(--#{$prefix}pagination-color);\n  text-decoration: if($link-decoration == none, null, none);\n  background-color: var(--#{$prefix}pagination-bg);\n  border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n  @include transition($pagination-transition);\n\n  &:hover {\n    z-index: 2;\n    color: var(--#{$prefix}pagination-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n    background-color: var(--#{$prefix}pagination-hover-bg);\n    border-color: var(--#{$prefix}pagination-hover-border-color);\n  }\n\n  &:focus {\n    z-index: 3;\n    color: var(--#{$prefix}pagination-focus-color);\n    background-color: var(--#{$prefix}pagination-focus-bg);\n    outline: $pagination-focus-outline;\n    box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n  }\n\n  &.active,\n  .active > & {\n    z-index: 3;\n    color: var(--#{$prefix}pagination-active-color);\n    @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n    border-color: var(--#{$prefix}pagination-active-border-color);\n  }\n\n  &.disabled,\n  .disabled > & {\n    color: var(--#{$prefix}pagination-disabled-color);\n    pointer-events: none;\n    background-color: var(--#{$prefix}pagination-disabled-bg);\n    border-color: var(--#{$prefix}pagination-disabled-border-color);\n  }\n}\n\n.page-item {\n  &:not(:first-child) .page-link {\n    margin-left: $pagination-margin-start;\n  }\n\n  @if $pagination-margin-start == calc(#{$pagination-border-width} * -1) {\n    &:first-child {\n      .page-link {\n        @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n      }\n    }\n\n    &:last-child {\n      .page-link {\n        @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n      }\n    }\n  } @else {\n    // Add border-radius to all pageLinks in case they have left margin\n    .page-link {\n      @include border-radius(var(--#{$prefix}pagination-border-radius));\n    }\n  }\n}\n\n//\n// Sizing\n//\n\n.pagination-lg {\n  @include pagination-size(\n    $pagination-padding-y-lg,\n    $pagination-padding-x-lg,\n    $font-size-lg,\n    $pagination-border-radius-lg\n  );\n}\n\n.pagination-sm {\n  @include pagination-size(\n    $pagination-padding-y-sm,\n    $pagination-padding-x-sm,\n    $font-size-sm,\n    $pagination-border-radius-sm\n  );\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_placeholders.scss",
    "content": ".placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentcolor;\n  opacity: $placeholder-opacity-max;\n\n  &.btn::before {\n    display: inline-block;\n    content: '';\n  }\n}\n\n// Sizing\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n  .placeholder {\n    animation: placeholder-glow 2s ease-in-out infinite;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: $placeholder-opacity-min;\n  }\n}\n\n.placeholder-wave {\n  mask-image: linear-gradient(\n    130deg,\n    $black 55%,\n    rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%,\n    $black 95%\n  );\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    mask-position: -200% 0%;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_popover.scss",
    "content": ".popover {\n  // scss-docs-start popover-css-vars\n  --#{$prefix}popover-zindex: #{$zindex-popover};\n  --#{$prefix}popover-max-width: #{$popover-max-width};\n  @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n  --#{$prefix}popover-bg: #{$popover-bg};\n  --#{$prefix}popover-border-width: #{$popover-border-width};\n  --#{$prefix}popover-border-color: #{$popover-border-color};\n  --#{$prefix}popover-border-radius: #{$popover-border-radius};\n  --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n  --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n  --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n  --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n  @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n  --#{$prefix}popover-header-color: #{$popover-header-color};\n  --#{$prefix}popover-header-bg: #{$popover-header-bg};\n  --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n  --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n  --#{$prefix}popover-body-color: #{$popover-body-color};\n  --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n  --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n  --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n  // scss-docs-end popover-css-vars\n\n  z-index: var(--#{$prefix}popover-zindex);\n  display: block;\n  max-width: var(--#{$prefix}popover-max-width);\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  @include reset-text();\n  @include font-size(var(--#{$prefix}popover-font-size));\n  // Allow breaking very long words so they don't overflow the popover's bounds\n  word-wrap: break-word;\n  background-color: var(--#{$prefix}popover-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n  @include border-radius(var(--#{$prefix}popover-border-radius));\n  @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n  .popover-arrow {\n    display: block;\n    width: var(--#{$prefix}popover-arrow-width);\n    height: var(--#{$prefix}popover-arrow-height);\n\n    &::before,\n    &::after {\n      position: absolute;\n      display: block;\n      content: '';\n      border-color: transparent;\n      border-style: solid;\n      border-width: 0;\n    }\n  }\n}\n\n.bs-popover-top {\n  > .popover-arrow {\n    bottom: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n\n    &::before,\n    &::after {\n      border-width: var(--#{$prefix}popover-arrow-height)\n        calc(var(--#{$prefix}popover-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      bottom: 0;\n      border-top-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      bottom: var(--#{$prefix}popover-border-width);\n      border-top-color: var(--#{$prefix}popover-bg);\n    }\n  }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n  > .popover-arrow {\n    left: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    width: var(--#{$prefix}popover-arrow-height);\n    height: var(--#{$prefix}popover-arrow-width);\n\n    &::before,\n    &::after {\n      border-width: calc(var(--#{$prefix}popover-arrow-width) * 0.5)\n        var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      left: 0;\n      border-right-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      left: var(--#{$prefix}popover-border-width);\n      border-right-color: var(--#{$prefix}popover-bg);\n    }\n  }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n  > .popover-arrow {\n    top: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n\n    &::before,\n    &::after {\n      border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * 0.5)\n        var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      top: 0;\n      border-bottom-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      top: var(--#{$prefix}popover-border-width);\n      border-bottom-color: var(--#{$prefix}popover-bg);\n    }\n  }\n\n  // This will remove the popover-header's border just below the arrow\n  .popover-header::before {\n    position: absolute;\n    top: 0;\n    left: 50%;\n    display: block;\n    width: var(--#{$prefix}popover-arrow-width);\n    margin-left: calc(\n      -0.5 * var(--#{$prefix}popover-arrow-width)\n    ); // stylelint-disable-line function-disallowed-list\n    content: '';\n    border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n  }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n  > .popover-arrow {\n    right: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    width: var(--#{$prefix}popover-arrow-height);\n    height: var(--#{$prefix}popover-arrow-width);\n\n    &::before,\n    &::after {\n      border-width: calc(var(--#{$prefix}popover-arrow-width) * 0.5) 0\n        calc(var(--#{$prefix}popover-arrow-width) * 0.5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      right: 0;\n      border-left-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      right: var(--#{$prefix}popover-border-width);\n      border-left-color: var(--#{$prefix}popover-bg);\n    }\n  }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n  &[data-popper-placement^='top'] {\n    @extend .bs-popover-top;\n  }\n  &[data-popper-placement^='right'] {\n    @extend .bs-popover-end;\n  }\n  &[data-popper-placement^='bottom'] {\n    @extend .bs-popover-bottom;\n  }\n  &[data-popper-placement^='left'] {\n    @extend .bs-popover-start;\n  }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n  padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n  margin-bottom: 0; // Reset the default from Reboot\n  @include font-size(var(--#{$prefix}popover-header-font-size));\n  color: var(--#{$prefix}popover-header-color);\n  background-color: var(--#{$prefix}popover-header-bg);\n  border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n  @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n  &:empty {\n    display: none;\n  }\n}\n\n.popover-body {\n  padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n  color: var(--#{$prefix}popover-body-color);\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_progress.scss",
    "content": "// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n  @keyframes progress-bar-stripes {\n    0% {\n      background-position-x: $progress-height;\n    }\n  }\n}\n// scss-docs-end progress-keyframes\n\n.progress,\n.progress-stacked {\n  // scss-docs-start progress-css-vars\n  --#{$prefix}progress-height: #{$progress-height};\n  @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n  --#{$prefix}progress-bg: #{$progress-bg};\n  --#{$prefix}progress-border-radius: #{$progress-border-radius};\n  --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n  --#{$prefix}progress-bar-color: #{$progress-bar-color};\n  --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n  --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n  // scss-docs-end progress-css-vars\n\n  display: flex;\n  height: var(--#{$prefix}progress-height);\n  overflow: hidden; // force rounded corners by cropping it\n  @include font-size(var(--#{$prefix}progress-font-size));\n  background-color: var(--#{$prefix}progress-bg);\n  @include border-radius(var(--#{$prefix}progress-border-radius));\n  @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: var(--#{$prefix}progress-bar-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--#{$prefix}progress-bar-bg);\n  @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n  @include gradient-striped();\n  background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n.progress-stacked > .progress {\n  overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n  width: 100%;\n}\n\n@if $enable-transitions {\n  .progress-bar-animated {\n    animation: $progress-bar-animation-timing progress-bar-stripes;\n\n    @if $enable-reduced-motion {\n      @media (prefers-reduced-motion: reduce) {\n        animation: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_reboot.scss",
    "content": "// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n  @if $font-size-root != null {\n    @include font-size(var(--#{$prefix}root-font-size));\n  }\n\n  @if $enable-smooth-scroll {\n    @media (prefers-reduced-motion: no-preference) {\n      scroll-behavior: smooth;\n    }\n  }\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n  margin: 0; // 1\n  font-family: var(--#{$prefix}body-font-family);\n  @include font-size(var(--#{$prefix}body-font-size));\n  font-weight: var(--#{$prefix}body-font-weight);\n  line-height: var(--#{$prefix}body-line-height);\n  color: var(--#{$prefix}body-color);\n  text-align: var(--#{$prefix}body-text-align);\n  background-color: var(--#{$prefix}body-bg); // 2\n  -webkit-text-size-adjust: 100%; // 3\n  -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n  margin: $hr-margin-y 0;\n  color: $hr-color; // 1\n  border: 0;\n  border-top: $hr-border-width solid $hr-border-color;\n  opacity: $hr-opacity;\n}\n\n// Typography\n//\n// 1. Remove top margins from headings\n//    By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n//    margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n  margin-top: 0; // 1\n  margin-bottom: $headings-margin-bottom;\n  font-family: $headings-font-family;\n  font-style: $headings-font-style;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n  @extend %heading;\n  @include font-size($h1-font-size);\n}\n\nh2 {\n  @extend %heading;\n  @include font-size($h2-font-size);\n}\n\nh3 {\n  @extend %heading;\n  @include font-size($h3-font-size);\n}\n\nh4 {\n  @extend %heading;\n  @include font-size($h4-font-size);\n}\n\nh5 {\n  @extend %heading;\n  @include font-size($h5-font-size);\n}\n\nh6 {\n  @extend %heading;\n  @include font-size($h6-font-size);\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n  margin-top: 0;\n  margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n  text-decoration: underline dotted; // 1\n  cursor: help; // 2\n  text-decoration-skip-ink: none; // 3\n}\n\n// Address\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\n// Lists\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0; // 1\n}\n\n// Blockquote\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n  font-weight: $font-weight-bolder;\n}\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n  @include font-size($small-font-size);\n}\n\n// Mark\n\nmark {\n  padding: $mark-padding;\n  color: var(--#{$prefix}highlight-color);\n  background-color: var(--#{$prefix}highlight-bg);\n}\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n  position: relative;\n  @include font-size($sub-sup-font-size);\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\n\n// Links\n\na {\n  color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n  text-decoration: $link-decoration;\n\n  &:hover {\n    --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n    text-decoration: $link-hover-decoration;\n  }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n  &,\n  &:hover {\n    color: inherit;\n    text-decoration: none;\n  }\n}\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: $font-family-code;\n  @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n  display: block;\n  margin-top: 0; // 1\n  margin-bottom: 1rem; // 2\n  overflow: auto; // 3\n  @include font-size($code-font-size);\n  color: $pre-color;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    @include font-size(inherit);\n    color: inherit;\n    word-break: normal;\n  }\n}\n\ncode {\n  @include font-size($code-font-size);\n  color: var(--#{$prefix}code-color);\n  word-wrap: break-word;\n\n  // Streamline the style when inside anchors to avoid broken underline and more\n  a > & {\n    color: inherit;\n  }\n}\n\nkbd {\n  padding: $kbd-padding-y $kbd-padding-x;\n  @include font-size($kbd-font-size);\n  color: $kbd-color;\n  background-color: $kbd-bg;\n  @include border-radius($border-radius-sm);\n\n  kbd {\n    padding: 0;\n    @include font-size(1em);\n    font-weight: $nested-kbd-font-weight;\n  }\n}\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n  margin: 0 0 1rem;\n}\n\n// Images and content\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: $table-cell-padding-y;\n  padding-bottom: $table-cell-padding-y;\n  color: $table-caption-color;\n  text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n  font-weight: $table-th-font-weight; // 1\n  text-align: inherit; // 2\n  text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n  display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n  // stylelint-disable-next-line property-disallowed-list\n  border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0; // 1\n  font-family: inherit;\n  @include font-size(inherit);\n  line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n  text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role='button'] {\n  cursor: pointer;\n}\n\nselect {\n  // Remove the inheritance of word-wrap in Safari.\n  // See https://github.com/twbs/bootstrap/issues/24990\n  word-wrap: normal;\n\n  // Undo the opacity change from Chrome\n  &:disabled {\n    opacity: 1;\n  }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type='date']):not([type='datetime-local']):not([type='month']):not([type='week']):not(\n    [type='time']\n  )::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n//    controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n\n  @if $enable-button-pointers {\n    &:not(:disabled) {\n      cursor: pointer; // 3\n    }\n  }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n  resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n//    unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n//    So we reset that to ensure fieldsets behave more like a standard block element.\n//    See https://github.com/twbs/bootstrap/issues/12359\n//    and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n  min-width: 0; // 1\n  padding: 0; // 2\n  margin: 0; // 2\n  border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n//    This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n//    See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n  float: left; // 1\n  width: 100%;\n  padding: 0;\n  margin-bottom: $legend-margin-bottom;\n  @include font-size($legend-font-size);\n  font-weight: $legend-font-weight;\n  line-height: inherit;\n\n  + * {\n    clear: left; // 2\n  }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n// 1. This overrides the extra rounded corners on search inputs in iOS so that our\n//    `.form-control` class can properly style them. Note that this cannot simply\n//    be added to `.form-control` as it's not specific enough. For details, see\n//    https://github.com/twbs/bootstrap/issues/11586.\n// 2. Correct the outline style in Safari.\n\n[type='search'] {\n  -webkit-appearance: textfield; // 1\n  outline-offset: -2px; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n  font: inherit; // 1\n  -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n  display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n  border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n  display: list-item; // 1\n  cursor: pointer;\n}\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n  vertical-align: baseline;\n}\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n  display: none !important;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_root.scss",
    "content": ":root,\n[data-bs-theme='light'] {\n  // Note: Custom variable values only support SassScript inside `#{}`.\n\n  // Colors\n  //\n  // Generate palettes for full colors, grays, and theme colors.\n\n  @each $color, $value in $colors {\n    --#{$prefix}#{$color}: #{$value};\n  }\n\n  @each $color, $value in $grays {\n    --#{$prefix}gray-#{$color}: #{$value};\n  }\n\n  @each $color, $value in $theme-colors {\n    --#{$prefix}#{$color}: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-rgb {\n    --#{$prefix}#{$color}-rgb: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-text {\n    --#{$prefix}#{$color}-text-emphasis: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-bg-subtle {\n    --#{$prefix}#{$color}-bg-subtle: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-border-subtle {\n    --#{$prefix}#{$color}-border-subtle: #{$value};\n  }\n\n  --#{$prefix}white-rgb: #{to-rgb($white)};\n  --#{$prefix}black-rgb: #{to-rgb($black)};\n\n  // Fonts\n\n  // Note: Use `inspect` for lists so that quoted items keep the quotes.\n  // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n  --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n  --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n  --#{$prefix}gradient: #{$gradient};\n\n  // Root and body\n  // scss-docs-start root-body-variables\n  @if $font-size-root != null {\n    --#{$prefix}root-font-size: #{$font-size-root};\n  }\n  --#{$prefix}body-font-family: #{inspect($font-family-base)};\n  @include rfs($font-size-base, --#{$prefix}body-font-size);\n  --#{$prefix}body-font-weight: #{$font-weight-base};\n  --#{$prefix}body-line-height: #{$line-height-base};\n  @if $body-text-align != null {\n    --#{$prefix}body-text-align: #{$body-text-align};\n  }\n\n  --#{$prefix}body-color: #{$body-color};\n  --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n  --#{$prefix}body-bg: #{$body-bg};\n  --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n  --#{$prefix}emphasis-color: #{$body-emphasis-color};\n  --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n  --#{$prefix}secondary-color: #{$body-secondary-color};\n  --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n  --#{$prefix}secondary-bg: #{$body-secondary-bg};\n  --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n  --#{$prefix}tertiary-color: #{$body-tertiary-color};\n  --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n  --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n  --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n  // scss-docs-end root-body-variables\n\n  --#{$prefix}heading-color: #{$headings-color};\n\n  --#{$prefix}link-color: #{$link-color};\n  --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n  --#{$prefix}link-decoration: #{$link-decoration};\n\n  --#{$prefix}link-hover-color: #{$link-hover-color};\n  --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n  @if $link-hover-decoration != null {\n    --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n  }\n\n  --#{$prefix}code-color: #{$code-color};\n  --#{$prefix}highlight-color: #{$mark-color};\n  --#{$prefix}highlight-bg: #{$mark-bg};\n\n  // scss-docs-start root-border-var\n  --#{$prefix}border-width: #{$border-width};\n  --#{$prefix}border-style: #{$border-style};\n  --#{$prefix}border-color: #{$border-color};\n  --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n  --#{$prefix}border-radius: #{$border-radius};\n  --#{$prefix}border-radius-sm: #{$border-radius-sm};\n  --#{$prefix}border-radius-lg: #{$border-radius-lg};\n  --#{$prefix}border-radius-xl: #{$border-radius-xl};\n  --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n  --#{$prefix}border-radius-2xl: var(\n    --#{$prefix}border-radius-xxl\n  ); // Deprecated in v5.3.0 for consistency\n  --#{$prefix}border-radius-pill: #{$border-radius-pill};\n  // scss-docs-end root-border-var\n\n  --#{$prefix}box-shadow: #{$box-shadow};\n  --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n  --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n  --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n  // Focus styles\n  // scss-docs-start root-focus-variables\n  --#{$prefix}focus-ring-width: #{$focus-ring-width};\n  --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n  --#{$prefix}focus-ring-color: #{$focus-ring-color};\n  // scss-docs-end root-focus-variables\n\n  // scss-docs-start root-form-validation-variables\n  --#{$prefix}form-valid-color: #{$form-valid-color};\n  --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n  --#{$prefix}form-invalid-color: #{$form-invalid-color};\n  --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n  // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark, true) {\n    color-scheme: dark;\n\n    // scss-docs-start root-dark-mode-vars\n    --#{$prefix}body-color: #{$body-color-dark};\n    --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n    --#{$prefix}body-bg: #{$body-bg-dark};\n    --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n    --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n    --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n    --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n    --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n    --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n    --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n    --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n    --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n    --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n    --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n    @each $color, $value in $theme-colors-text-dark {\n      --#{$prefix}#{$color}-text-emphasis: #{$value};\n    }\n\n    @each $color, $value in $theme-colors-bg-subtle-dark {\n      --#{$prefix}#{$color}-bg-subtle: #{$value};\n    }\n\n    @each $color, $value in $theme-colors-border-subtle-dark {\n      --#{$prefix}#{$color}-border-subtle: #{$value};\n    }\n\n    --#{$prefix}heading-color: #{$headings-color-dark};\n\n    --#{$prefix}link-color: #{$link-color-dark};\n    --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n    --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n    --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n    --#{$prefix}code-color: #{$code-color-dark};\n    --#{$prefix}highlight-color: #{$mark-color-dark};\n    --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n    --#{$prefix}border-color: #{$border-color-dark};\n    --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n    --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n    --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n    --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n    --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n    // scss-docs-end root-dark-mode-vars\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_spinners.scss",
    "content": "//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n  display: inline-block;\n  width: var(--#{$prefix}spinner-width);\n  height: var(--#{$prefix}spinner-height);\n  vertical-align: var(--#{$prefix}spinner-vertical-align);\n  // stylelint-disable-next-line property-disallowed-list\n  border-radius: 50%;\n  animation: var(--#{$prefix}spinner-animation-speed) linear infinite\n    var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) #{'/* rtl:ignore */'};\n  }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n  // scss-docs-start spinner-border-css-vars\n  --#{$prefix}spinner-width: #{$spinner-width};\n  --#{$prefix}spinner-height: #{$spinner-height};\n  --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n  --#{$prefix}spinner-border-width: #{$spinner-border-width};\n  --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n  --#{$prefix}spinner-animation-name: spinner-border;\n  // scss-docs-end spinner-border-css-vars\n\n  border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n  border-right-color: transparent;\n}\n\n.spinner-border-sm {\n  // scss-docs-start spinner-border-sm-css-vars\n  --#{$prefix}spinner-width: #{$spinner-width-sm};\n  --#{$prefix}spinner-height: #{$spinner-height-sm};\n  --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n  // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n  // scss-docs-start spinner-grow-css-vars\n  --#{$prefix}spinner-width: #{$spinner-width};\n  --#{$prefix}spinner-height: #{$spinner-height};\n  --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n  --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n  --#{$prefix}spinner-animation-name: spinner-grow;\n  // scss-docs-end spinner-grow-css-vars\n\n  background-color: currentcolor;\n  opacity: 0;\n}\n\n.spinner-grow-sm {\n  --#{$prefix}spinner-width: #{$spinner-width-sm};\n  --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n  @media (prefers-reduced-motion: reduce) {\n    .spinner-border,\n    .spinner-grow {\n      --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_tables.scss",
    "content": "//\n// Basic Bootstrap table\n//\n\n.table {\n  // Reset needed for nesting tables\n  --#{$prefix}table-color-type: initial;\n  --#{$prefix}table-bg-type: initial;\n  --#{$prefix}table-color-state: initial;\n  --#{$prefix}table-bg-state: initial;\n  // End of reset\n  --#{$prefix}table-color: #{$table-color};\n  --#{$prefix}table-bg: #{$table-bg};\n  --#{$prefix}table-border-color: #{$table-border-color};\n  --#{$prefix}table-accent-bg: #{$table-accent-bg};\n  --#{$prefix}table-striped-color: #{$table-striped-color};\n  --#{$prefix}table-striped-bg: #{$table-striped-bg};\n  --#{$prefix}table-active-color: #{$table-active-color};\n  --#{$prefix}table-active-bg: #{$table-active-bg};\n  --#{$prefix}table-hover-color: #{$table-hover-color};\n  --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n  width: 100%;\n  margin-bottom: $spacer;\n  vertical-align: $table-cell-vertical-align;\n  border-color: var(--#{$prefix}table-border-color);\n\n  // Target th & td\n  // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n  // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n  // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n  // stylelint-disable-next-line selector-max-universal\n  > :not(caption) > * > * {\n    padding: $table-cell-padding-y $table-cell-padding-x;\n    // Following the precept of cascades: https://codepen.io/miriamsuzanne/full/vYNgodb\n    color: var(\n      --#{$prefix}table-color-state,\n      var(--#{$prefix}table-color-type, var(--#{$prefix}table-color))\n    );\n    background-color: var(--#{$prefix}table-bg);\n    border-bottom-width: $table-border-width;\n    box-shadow: inset 0 0 0 9999px\n      var(\n        --#{$prefix}table-bg-state,\n        var(--#{$prefix}table-bg-type, var(--#{$prefix}table-accent-bg))\n      );\n  }\n\n  > tbody {\n    vertical-align: inherit;\n  }\n\n  > thead {\n    vertical-align: bottom;\n  }\n}\n\n.table-group-divider {\n  border-top: calc(#{$table-border-width} * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n  caption-side: top;\n}\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n  // stylelint-disable-next-line selector-max-universal\n  > :not(caption) > * > * {\n    padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n  }\n}\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefore we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n  > :not(caption) > * {\n    border-width: $table-border-width 0;\n\n    // stylelint-disable-next-line selector-max-universal\n    > * {\n      border-width: 0 $table-border-width;\n    }\n  }\n}\n\n.table-borderless {\n  // stylelint-disable-next-line selector-max-universal\n  > :not(caption) > * > * {\n    border-bottom-width: 0;\n  }\n\n  > :not(:first-child) {\n    border-top-width: 0;\n  }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n  > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n    --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n    --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n  }\n}\n\n// For columns\n.table-striped-columns {\n  > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n    --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n    --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n  }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n  --#{$prefix}table-color-state: var(--#{$prefix}table-active-color);\n  --#{$prefix}table-bg-state: var(--#{$prefix}table-active-bg);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover > * {\n    --#{$prefix}table-color-state: var(--#{$prefix}table-hover-color);\n    --#{$prefix}table-bg-state: var(--#{$prefix}table-hover-bg);\n  }\n}\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n  @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n  @include media-breakpoint-down($breakpoint) {\n    .table-responsive#{$infix} {\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_toasts.scss",
    "content": ".toast {\n  // scss-docs-start toast-css-vars\n  --#{$prefix}toast-zindex: #{$zindex-toast};\n  --#{$prefix}toast-padding-x: #{$toast-padding-x};\n  --#{$prefix}toast-padding-y: #{$toast-padding-y};\n  --#{$prefix}toast-spacing: #{$toast-spacing};\n  --#{$prefix}toast-max-width: #{$toast-max-width};\n  @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n  --#{$prefix}toast-color: #{$toast-color};\n  --#{$prefix}toast-bg: #{$toast-background-color};\n  --#{$prefix}toast-border-width: #{$toast-border-width};\n  --#{$prefix}toast-border-color: #{$toast-border-color};\n  --#{$prefix}toast-border-radius: #{$toast-border-radius};\n  --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n  --#{$prefix}toast-header-color: #{$toast-header-color};\n  --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n  --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n  // scss-docs-end toast-css-vars\n\n  width: var(--#{$prefix}toast-max-width);\n  max-width: 100%;\n  @include font-size(var(--#{$prefix}toast-font-size));\n  color: var(--#{$prefix}toast-color);\n  pointer-events: auto;\n  background-color: var(--#{$prefix}toast-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n  box-shadow: var(--#{$prefix}toast-box-shadow);\n  @include border-radius(var(--#{$prefix}toast-border-radius));\n\n  &.showing {\n    opacity: 0;\n  }\n\n  &:not(.show) {\n    display: none;\n  }\n}\n\n.toast-container {\n  --#{$prefix}toast-zindex: #{$zindex-toast};\n\n  position: absolute;\n  z-index: var(--#{$prefix}toast-zindex);\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n\n  > :not(:last-child) {\n    margin-bottom: var(--#{$prefix}toast-spacing);\n  }\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n  color: var(--#{$prefix}toast-header-color);\n  background-color: var(--#{$prefix}toast-header-bg);\n  background-clip: padding-box;\n  border-bottom: var(--#{$prefix}toast-border-width) solid\n    var(--#{$prefix}toast-header-border-color);\n  @include border-top-radius(\n    calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width))\n  );\n\n  .btn-close {\n    margin-right: calc(\n      -0.5 * var(--#{$prefix}toast-padding-x)\n    ); // stylelint-disable-line function-disallowed-list\n    margin-left: var(--#{$prefix}toast-padding-x);\n  }\n}\n\n.toast-body {\n  padding: var(--#{$prefix}toast-padding-x);\n  word-wrap: break-word;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_tooltip.scss",
    "content": "// Base class\n.tooltip {\n  // scss-docs-start tooltip-css-vars\n  --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n  --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n  --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n  --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n  --#{$prefix}tooltip-margin: #{$tooltip-margin};\n  @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n  --#{$prefix}tooltip-color: #{$tooltip-color};\n  --#{$prefix}tooltip-bg: #{$tooltip-bg};\n  --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n  --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n  --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n  --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n  // scss-docs-end tooltip-css-vars\n\n  z-index: var(--#{$prefix}tooltip-zindex);\n  display: block;\n  margin: var(--#{$prefix}tooltip-margin);\n  @include deprecate('`$tooltip-margin`', 'v5', 'v5.x', true);\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  @include reset-text();\n  @include font-size(var(--#{$prefix}tooltip-font-size));\n  // Allow breaking very long words so they don't overflow the tooltip's bounds\n  word-wrap: break-word;\n  opacity: 0;\n\n  &.show {\n    opacity: var(--#{$prefix}tooltip-opacity);\n  }\n\n  .tooltip-arrow {\n    display: block;\n    width: var(--#{$prefix}tooltip-arrow-width);\n    height: var(--#{$prefix}tooltip-arrow-height);\n\n    &::before {\n      position: absolute;\n      content: '';\n      border-color: transparent;\n      border-style: solid;\n    }\n  }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n  bottom: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n\n  &::before {\n    top: -1px;\n    border-width: var(--#{$prefix}tooltip-arrow-height)\n      calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    border-top-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n  left: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n  width: var(--#{$prefix}tooltip-arrow-height);\n  height: var(--#{$prefix}tooltip-arrow-width);\n\n  &::before {\n    right: -1px;\n    border-width: calc(var(--#{$prefix}tooltip-arrow-width) * 0.5)\n      var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    border-right-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n  top: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n\n  &::before {\n    bottom: -1px;\n    border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * 0.5)\n      var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n    border-bottom-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n  right: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n  width: var(--#{$prefix}tooltip-arrow-height);\n  height: var(--#{$prefix}tooltip-arrow-width);\n\n  &::before {\n    left: -1px;\n    border-width: calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) 0\n      calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n    border-left-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n  &[data-popper-placement^='top'] {\n    @extend .bs-tooltip-top;\n  }\n  &[data-popper-placement^='right'] {\n    @extend .bs-tooltip-end;\n  }\n  &[data-popper-placement^='bottom'] {\n    @extend .bs-tooltip-bottom;\n  }\n  &[data-popper-placement^='left'] {\n    @extend .bs-tooltip-start;\n  }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: var(--#{$prefix}tooltip-max-width);\n  padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n  color: var(--#{$prefix}tooltip-color);\n  text-align: center;\n  background-color: var(--#{$prefix}tooltip-bg);\n  @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_transitions.scss",
    "content": ".fade {\n  @include transition($transition-fade);\n\n  &:not(.show) {\n    opacity: 0;\n  }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n  &:not(.show) {\n    display: none;\n  }\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  @include transition($transition-collapse);\n\n  &.collapse-horizontal {\n    width: 0;\n    height: auto;\n    @include transition($transition-collapse-width);\n  }\n}\n// scss-docs-end collapse-classes\n"
  },
  {
    "path": "src/scss/bootstrap/_type.scss",
    "content": "//\n// Headings\n//\n.h1 {\n  @extend h1;\n}\n\n.h2 {\n  @extend h2;\n}\n\n.h3 {\n  @extend h3;\n}\n\n.h4 {\n  @extend h4;\n}\n\n.h5 {\n  @extend h5;\n}\n\n.h6 {\n  @extend h6;\n}\n\n.lead {\n  @include font-size($lead-font-size);\n  font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n  .display-#{$display} {\n    @include font-size($font-size);\n    font-family: $display-font-family;\n    font-style: $display-font-style;\n    font-weight: $display-font-weight;\n    line-height: $display-line-height;\n  }\n}\n\n//\n// Emphasis\n//\n.small {\n  @extend small;\n}\n\n.mark {\n  @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n  @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  @include list-unstyled();\n}\n.list-inline-item {\n  display: inline-block;\n\n  &:not(:last-child) {\n    margin-right: $list-inline-padding;\n  }\n}\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n  @include font-size($initialism-font-size);\n  text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n  margin-bottom: $blockquote-margin-y;\n  @include font-size($blockquote-font-size);\n\n  > :last-child {\n    margin-bottom: 0;\n  }\n}\n\n.blockquote-footer {\n  margin-top: -$blockquote-margin-y;\n  margin-bottom: $blockquote-margin-y;\n  @include font-size($blockquote-footer-font-size);\n  color: $blockquote-footer-color;\n\n  &::before {\n    content: '\\2014\\00A0'; // em dash, nbsp\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/_utilities.scss",
    "content": "// Utilities\n\n$utilities: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-merge(\n  (\n    // scss-docs-start utils-vertical-align\n    'align':\n      (\n        property: vertical-align,\n        class: align,\n        values: baseline top middle bottom text-bottom text-top,\n      ),\n    // scss-docs-end utils-vertical-align\n    // scss-docs-start utils-float\n    'float':\n      (\n        responsive: true,\n        property: float,\n        values: (\n          start: left,\n          end: right,\n          none: none,\n        ),\n      ),\n    // scss-docs-end utils-float\n    // Object Fit utilities\n    // scss-docs-start utils-object-fit\n    'object-fit':\n      (\n        responsive: true,\n        property: object-fit,\n        values: (\n          contain: contain,\n          cover: cover,\n          fill: fill,\n          scale: scale-down,\n          none: none,\n        ),\n      ),\n    // scss-docs-end utils-object-fit\n    // Opacity utilities\n    // scss-docs-start utils-opacity\n    'opacity':\n      (\n        property: opacity,\n        values: (\n          0: 0,\n          25: 0.25,\n          50: 0.5,\n          75: 0.75,\n          100: 1,\n        ),\n      ),\n    // scss-docs-end utils-opacity\n    // scss-docs-start utils-overflow\n    'overflow':\n      (\n        property: overflow,\n        values: auto hidden visible scroll,\n      ),\n    'overflow-x': (\n      property: overflow-x,\n      values: auto hidden visible scroll,\n    ),\n    'overflow-y': (\n      property: overflow-y,\n      values: auto hidden visible scroll,\n    ),\n    // scss-docs-end utils-overflow\n    // scss-docs-start utils-display\n    'display':\n      (\n        responsive: true,\n        print: true,\n        property: display,\n        class: d,\n        values: inline inline-block block grid inline-grid table table-row table-cell flex\n          inline-flex none,\n      ),\n    // scss-docs-end utils-display\n    // scss-docs-start utils-shadow\n    'shadow':\n      (\n        property: box-shadow,\n        class: shadow,\n        values: (\n          null: var(--#{$prefix}box-shadow),\n          sm: var(--#{$prefix}box-shadow-sm),\n          lg: var(--#{$prefix}box-shadow-lg),\n          none: none,\n        ),\n      ),\n    // scss-docs-end utils-shadow\n    // scss-docs-start utils-focus-ring\n    'focus-ring':\n      (\n        css-var: true,\n        css-variable-name: focus-ring-color,\n        class: focus-ring,\n        values: map-loop($theme-colors-rgb, rgba-css-var, '$key', 'focus-ring'),\n      ),\n    // scss-docs-end utils-focus-ring\n    // scss-docs-start utils-position\n    'position':\n      (\n        property: position,\n        values: static relative absolute fixed sticky,\n      ),\n    'top': (\n      property: top,\n      values: $position-values,\n    ),\n    'bottom': (\n      property: bottom,\n      values: $position-values,\n    ),\n    'start': (\n      property: left,\n      class: start,\n      values: $position-values,\n    ),\n    'end': (\n      property: right,\n      class: end,\n      values: $position-values,\n    ),\n    'translate-middle': (\n      property: transform,\n      class: translate-middle,\n      values: (\n        null: translate(-50%, -50%),\n        x: translateX(-50%),\n        y: translateY(-50%),\n      ),\n    ),\n    // scss-docs-end utils-position\n    // scss-docs-start utils-borders\n    'border':\n      (\n        property: border,\n        values: (\n          null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n            var(--#{$prefix}border-color),\n          0: 0,\n        ),\n      ),\n    'border-top': (\n      property: border-top,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-end': (\n      property: border-right,\n      class: border-end,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-bottom': (\n      property: border-bottom,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-start': (\n      property: border-left,\n      class: border-start,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-color': (\n      property: border-color,\n      class: border,\n      local-vars: (\n        'border-opacity': 1,\n      ),\n      values: $utilities-border-colors,\n    ),\n    'subtle-border-color': (\n      property: border-color,\n      class: border,\n      values: $utilities-border-subtle,\n    ),\n    'border-width': (\n      property: border-width,\n      class: border,\n      values: $border-widths,\n    ),\n    'border-opacity': (\n      css-var: true,\n      class: border-opacity,\n      values: (\n        10: 0.1,\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    // scss-docs-end utils-borders\n    // Sizing utilities\n    // scss-docs-start utils-sizing\n    'width':\n      (\n        property: width,\n        class: w,\n        values: (\n          25: 25%,\n          50: 50%,\n          75: 75%,\n          100: 100%,\n          auto: auto,\n        ),\n      ),\n    'max-width': (\n      property: max-width,\n      class: mw,\n      values: (\n        100: 100%,\n      ),\n    ),\n    'viewport-width': (\n      property: width,\n      class: vw,\n      values: (\n        100: 100vw,\n      ),\n    ),\n    'min-viewport-width': (\n      property: min-width,\n      class: min-vw,\n      values: (\n        100: 100vw,\n      ),\n    ),\n    'height': (\n      property: height,\n      class: h,\n      values: (\n        25: 25%,\n        50: 50%,\n        75: 75%,\n        100: 100%,\n        auto: auto,\n      ),\n    ),\n    'max-height': (\n      property: max-height,\n      class: mh,\n      values: (\n        100: 100%,\n      ),\n    ),\n    'viewport-height': (\n      property: height,\n      class: vh,\n      values: (\n        100: 100vh,\n      ),\n    ),\n    'min-viewport-height': (\n      property: min-height,\n      class: min-vh,\n      values: (\n        100: 100vh,\n      ),\n    ),\n    // scss-docs-end utils-sizing\n    // Flex utilities\n    // scss-docs-start utils-flex\n    'flex':\n      (\n        responsive: true,\n        property: flex,\n        values: (\n          fill: 1 1 auto,\n        ),\n      ),\n    'flex-direction': (\n      responsive: true,\n      property: flex-direction,\n      class: flex,\n      values: row column row-reverse column-reverse,\n    ),\n    'flex-grow': (\n      responsive: true,\n      property: flex-grow,\n      class: flex,\n      values: (\n        grow-0: 0,\n        grow-1: 1,\n      ),\n    ),\n    'flex-shrink': (\n      responsive: true,\n      property: flex-shrink,\n      class: flex,\n      values: (\n        shrink-0: 0,\n        shrink-1: 1,\n      ),\n    ),\n    'flex-wrap': (\n      responsive: true,\n      property: flex-wrap,\n      class: flex,\n      values: wrap nowrap wrap-reverse,\n    ),\n    'justify-content': (\n      responsive: true,\n      property: justify-content,\n      values: (\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        between: space-between,\n        around: space-around,\n        evenly: space-evenly,\n      ),\n    ),\n    'align-items': (\n      responsive: true,\n      property: align-items,\n      values: (\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        baseline: baseline,\n        stretch: stretch,\n      ),\n    ),\n    'align-content': (\n      responsive: true,\n      property: align-content,\n      values: (\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        between: space-between,\n        around: space-around,\n        stretch: stretch,\n      ),\n    ),\n    'align-self': (\n      responsive: true,\n      property: align-self,\n      values: (\n        auto: auto,\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        baseline: baseline,\n        stretch: stretch,\n      ),\n    ),\n    'order': (\n      responsive: true,\n      property: order,\n      values: (\n        first: -1,\n        0: 0,\n        1: 1,\n        2: 2,\n        3: 3,\n        4: 4,\n        5: 5,\n        last: 6,\n      ),\n    ),\n    // scss-docs-end utils-flex\n    // Margin utilities\n    // scss-docs-start utils-spacing\n    'margin':\n      (\n        responsive: true,\n        property: margin,\n        class: m,\n        values:\n          map-merge(\n            $spacers,\n            (\n              auto: auto,\n            )\n          ),\n      ),\n    'margin-x': (\n      responsive: true,\n      property: margin-right margin-left,\n      class: mx,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-y': (\n      responsive: true,\n      property: margin-top margin-bottom,\n      class: my,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-top': (\n      responsive: true,\n      property: margin-top,\n      class: mt,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-end': (\n      responsive: true,\n      property: margin-right,\n      class: me,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-bottom': (\n      responsive: true,\n      property: margin-bottom,\n      class: mb,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-start': (\n      responsive: true,\n      property: margin-left,\n      class: ms,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    // Negative margin utilities\n    'negative-margin':\n      (\n        responsive: true,\n        property: margin,\n        class: m,\n        values: $negative-spacers,\n      ),\n    'negative-margin-x': (\n      responsive: true,\n      property: margin-right margin-left,\n      class: mx,\n      values: $negative-spacers,\n    ),\n    'negative-margin-y': (\n      responsive: true,\n      property: margin-top margin-bottom,\n      class: my,\n      values: $negative-spacers,\n    ),\n    'negative-margin-top': (\n      responsive: true,\n      property: margin-top,\n      class: mt,\n      values: $negative-spacers,\n    ),\n    'negative-margin-end': (\n      responsive: true,\n      property: margin-right,\n      class: me,\n      values: $negative-spacers,\n    ),\n    'negative-margin-bottom': (\n      responsive: true,\n      property: margin-bottom,\n      class: mb,\n      values: $negative-spacers,\n    ),\n    'negative-margin-start': (\n      responsive: true,\n      property: margin-left,\n      class: ms,\n      values: $negative-spacers,\n    ),\n    // Padding utilities\n    'padding':\n      (\n        responsive: true,\n        property: padding,\n        class: p,\n        values: $spacers,\n      ),\n    'padding-x': (\n      responsive: true,\n      property: padding-right padding-left,\n      class: px,\n      values: $spacers,\n    ),\n    'padding-y': (\n      responsive: true,\n      property: padding-top padding-bottom,\n      class: py,\n      values: $spacers,\n    ),\n    'padding-top': (\n      responsive: true,\n      property: padding-top,\n      class: pt,\n      values: $spacers,\n    ),\n    'padding-end': (\n      responsive: true,\n      property: padding-right,\n      class: pe,\n      values: $spacers,\n    ),\n    'padding-bottom': (\n      responsive: true,\n      property: padding-bottom,\n      class: pb,\n      values: $spacers,\n    ),\n    'padding-start': (\n      responsive: true,\n      property: padding-left,\n      class: ps,\n      values: $spacers,\n    ),\n    // Gap utility\n    'gap':\n      (\n        responsive: true,\n        property: gap,\n        class: gap,\n        values: $spacers,\n      ),\n    'row-gap': (\n      responsive: true,\n      property: row-gap,\n      class: row-gap,\n      values: $spacers,\n    ),\n    'column-gap': (\n      responsive: true,\n      property: column-gap,\n      class: column-gap,\n      values: $spacers,\n    ),\n    // scss-docs-end utils-spacing\n    // Text\n    // scss-docs-start utils-text\n    'font-family':\n      (\n        property: font-family,\n        class: font,\n        values: (\n          monospace: var(--#{$prefix}font-monospace),\n        ),\n      ),\n    'font-size': (\n      rfs: true,\n      property: font-size,\n      class: fs,\n      values: $font-sizes,\n    ),\n    'font-style': (\n      property: font-style,\n      class: fst,\n      values: italic normal,\n    ),\n    'font-weight': (\n      property: font-weight,\n      class: fw,\n      values: (\n        lighter: $font-weight-lighter,\n        light: $font-weight-light,\n        normal: $font-weight-normal,\n        medium: $font-weight-medium,\n        semibold: $font-weight-semibold,\n        bold: $font-weight-bold,\n        bolder: $font-weight-bolder,\n      ),\n    ),\n    'line-height': (\n      property: line-height,\n      class: lh,\n      values: (\n        1: 1,\n        sm: $line-height-sm,\n        base: $line-height-base,\n        lg: $line-height-lg,\n      ),\n    ),\n    'text-align': (\n      responsive: true,\n      property: text-align,\n      class: text,\n      values: (\n        start: left,\n        end: right,\n        center: center,\n      ),\n    ),\n    'text-decoration': (\n      property: text-decoration,\n      values: none underline line-through,\n    ),\n    'text-transform': (\n      property: text-transform,\n      class: text,\n      values: lowercase uppercase capitalize,\n    ),\n    'white-space': (\n      property: white-space,\n      class: text,\n      values: (\n        wrap: normal,\n        nowrap: nowrap,\n      ),\n    ),\n    'word-wrap': (\n      property: word-wrap word-break,\n      class: text,\n      values: (\n        break: break-word,\n      ),\n      rtl: false,\n    ),\n    // scss-docs-end utils-text\n    // scss-docs-start utils-color\n    'color':\n      (\n        property: color,\n        class: text,\n        local-vars: (\n          'text-opacity': 1,\n        ),\n        values:\n          map-merge(\n            $utilities-text-colors,\n            (\n              'muted': var(--#{$prefix}secondary-color),\n              // deprecated\n              'black-50': rgba($black, 0.5),\n              // deprecated\n              'white-50': rgba($white, 0.5),\n              // deprecated\n              'body-secondary': var(--#{$prefix}secondary-color),\n              'body-tertiary': var(--#{$prefix}tertiary-color),\n              'body-emphasis': var(--#{$prefix}emphasis-color),\n              'reset': inherit,\n            )\n          ),\n      ),\n    'text-opacity': (\n      css-var: true,\n      class: text-opacity,\n      values: (\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    'text-color': (\n      property: color,\n      class: text,\n      values: $utilities-text-emphasis-colors,\n    ),\n    // scss-docs-end utils-color\n    // scss-docs-start utils-links\n    'link-opacity':\n      (\n        css-var: true,\n        class: link-opacity,\n        state: hover,\n        values: (\n          10: 0.1,\n          25: 0.25,\n          50: 0.5,\n          75: 0.75,\n          100: 1,\n        ),\n      ),\n    'link-offset': (\n      property: text-underline-offset,\n      class: link-offset,\n      state: hover,\n      values: (\n        1: 0.125em,\n        2: 0.25em,\n        3: 0.375em,\n      ),\n    ),\n    'link-underline': (\n      property: text-decoration-color,\n      class: link-underline,\n      local-vars: (\n        'link-underline-opacity': 1,\n      ),\n      values:\n        map-merge(\n          $utilities-links-underline,\n          (\n            null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)),\n          )\n        ),\n    ),\n    'link-underline-opacity': (\n      css-var: true,\n      class: link-underline-opacity,\n      state: hover,\n      values: (\n        0: 0,\n        10: 0.1,\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    // scss-docs-end utils-links\n    // scss-docs-start utils-bg-color\n    'background-color':\n      (\n        property: background-color,\n        class: bg,\n        local-vars: (\n          'bg-opacity': 1,\n        ),\n        values:\n          map-merge(\n            $utilities-bg-colors,\n            (\n              'transparent': transparent,\n              'body-secondary': rgba(var(--#{$prefix}secondary-bg-rgb), var(--#{$prefix}bg-opacity)),\n              'body-tertiary': rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity)),\n            )\n          ),\n      ),\n    'bg-opacity': (\n      css-var: true,\n      class: bg-opacity,\n      values: (\n        10: 0.1,\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    'subtle-background-color': (\n      property: background-color,\n      class: bg,\n      values: $utilities-bg-subtle,\n    ),\n    // scss-docs-end utils-bg-color\n    'gradient':\n      (\n        property: background-image,\n        class: bg,\n        values: (\n          gradient: var(--#{$prefix}gradient),\n        ),\n      ),\n    // scss-docs-start utils-interaction\n    'user-select':\n      (\n        property: user-select,\n        values: all auto none,\n      ),\n    'pointer-events': (\n      property: pointer-events,\n      class: pe,\n      values: none auto,\n    ),\n    // scss-docs-end utils-interaction\n    // scss-docs-start utils-border-radius\n    'rounded':\n      (\n        property: border-radius,\n        class: rounded,\n        values: (\n          null: var(--#{$prefix}border-radius),\n          0: 0,\n          1: var(--#{$prefix}border-radius-sm),\n          2: var(--#{$prefix}border-radius),\n          3: var(--#{$prefix}border-radius-lg),\n          4: var(--#{$prefix}border-radius-xl),\n          5: var(--#{$prefix}border-radius-xxl),\n          circle: 50%,\n          pill: var(--#{$prefix}border-radius-pill),\n        ),\n      ),\n    'rounded-top': (\n      property: border-top-left-radius border-top-right-radius,\n      class: rounded-top,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    'rounded-end': (\n      property: border-top-right-radius border-bottom-right-radius,\n      class: rounded-end,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    'rounded-bottom': (\n      property: border-bottom-right-radius border-bottom-left-radius,\n      class: rounded-bottom,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    'rounded-start': (\n      property: border-bottom-left-radius border-top-left-radius,\n      class: rounded-start,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    // scss-docs-end utils-border-radius\n    // scss-docs-start utils-visibility\n    'visibility':\n      (\n        property: visibility,\n        class: null,\n        values: (\n          visible: visible,\n          invisible: hidden,\n        ),\n      ),\n    // scss-docs-end utils-visibility\n    // scss-docs-start utils-zindex\n    'z-index':\n      (\n        property: z-index,\n        class: z,\n        values: $zindex-levels,\n      )\n      // scss-docs-end utils-zindex\n  ),\n  $utilities\n);\n"
  },
  {
    "path": "src/scss/bootstrap/_variables-dark.scss",
    "content": "// Dark color mode variables\n//\n// Custom variables for the `[data-bs-theme=\"dark\"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need.\n\n//\n// Global colors\n//\n\n// scss-docs-start sass-dark-mode-vars\n// scss-docs-start theme-text-dark-variables\n$primary-text-emphasis-dark: tint-color($primary, 40%) !default;\n$secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;\n$success-text-emphasis-dark: tint-color($success, 40%) !default;\n$info-text-emphasis-dark: tint-color($info, 40%) !default;\n$warning-text-emphasis-dark: tint-color($warning, 40%) !default;\n$danger-text-emphasis-dark: tint-color($danger, 40%) !default;\n$light-text-emphasis-dark: $gray-100 !default;\n$dark-text-emphasis-dark: $gray-300 !default;\n// scss-docs-end theme-text-dark-variables\n\n// scss-docs-start theme-bg-subtle-dark-variables\n$primary-bg-subtle-dark: shade-color($primary, 80%) !default;\n$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;\n$success-bg-subtle-dark: shade-color($success, 80%) !default;\n$info-bg-subtle-dark: shade-color($info, 80%) !default;\n$warning-bg-subtle-dark: shade-color($warning, 80%) !default;\n$danger-bg-subtle-dark: shade-color($danger, 80%) !default;\n$light-bg-subtle-dark: $gray-800 !default;\n$dark-bg-subtle-dark: mix($gray-800, $black) !default;\n// scss-docs-end theme-bg-subtle-dark-variables\n\n// scss-docs-start theme-border-subtle-dark-variables\n$primary-border-subtle-dark: shade-color($primary, 40%) !default;\n$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;\n$success-border-subtle-dark: shade-color($success, 40%) !default;\n$info-border-subtle-dark: shade-color($info, 40%) !default;\n$warning-border-subtle-dark: shade-color($warning, 40%) !default;\n$danger-border-subtle-dark: shade-color($danger, 40%) !default;\n$light-border-subtle-dark: $gray-700 !default;\n$dark-border-subtle-dark: $gray-800 !default;\n// scss-docs-end theme-border-subtle-dark-variables\n\n$body-color-dark: $gray-300 !default;\n$body-bg-dark: $gray-900 !default;\n$body-secondary-color-dark: rgba($body-color-dark, 0.75) !default;\n$body-secondary-bg-dark: $gray-800 !default;\n$body-tertiary-color-dark: rgba($body-color-dark, 0.5) !default;\n$body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%) !default;\n$body-emphasis-color-dark: $white !default;\n$border-color-dark: $gray-700 !default;\n$border-color-translucent-dark: rgba($white, 0.15) !default;\n$headings-color-dark: inherit !default;\n$link-color-dark: tint-color($primary, 40%) !default;\n$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;\n$code-color-dark: tint-color($code-color, 40%) !default;\n$mark-color-dark: $body-color-dark !default;\n$mark-bg-dark: $yellow-800 !default;\n\n//\n// Forms\n//\n\n$form-select-indicator-color-dark: $body-color-dark !default;\n$form-select-indicator-dark: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-switch-color-dark: rgba($white, 0.25) !default;\n$form-switch-bg-image-dark: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>\") !default;\n\n// scss-docs-start form-validation-colors-dark\n$form-valid-color-dark: $green-300 !default;\n$form-valid-border-color-dark: $green-300 !default;\n$form-invalid-color-dark: $red-300 !default;\n$form-invalid-border-color-dark: $red-300 !default;\n// scss-docs-end form-validation-colors-dark\n\n//\n// Accordion\n//\n\n$accordion-icon-color-dark: $primary-text-emphasis-dark !default;\n$accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;\n\n$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;\n$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;\n// scss-docs-end sass-dark-mode-vars\n"
  },
  {
    "path": "src/scss/bootstrap/_variables.scss",
    "content": "// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n  '100': $gray-100,\n  '200': $gray-200,\n  '300': $gray-300,\n  '400': $gray-400,\n  '500': $gray-500,\n  '600': $gray-600,\n  '700': $gray-700,\n  '800': $gray-800,\n  '900': $gray-900,\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n  'blue': $blue,\n  'indigo': $indigo,\n  'purple': $purple,\n  'pink': $pink,\n  'red': $red,\n  'orange': $orange,\n  'yellow': $yellow,\n  'green': $green,\n  'teal': $teal,\n  'cyan': $cyan,\n  'black': $black,\n  'white': $white,\n  'gray': $gray-600,\n  'gray-dark': $gray-800,\n) !default;\n// scss-docs-end colors-map\n\n// 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.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n  'blue-100': $blue-100,\n  'blue-200': $blue-200,\n  'blue-300': $blue-300,\n  'blue-400': $blue-400,\n  'blue-500': $blue-500,\n  'blue-600': $blue-600,\n  'blue-700': $blue-700,\n  'blue-800': $blue-800,\n  'blue-900': $blue-900,\n) !default;\n\n$indigos: (\n  'indigo-100': $indigo-100,\n  'indigo-200': $indigo-200,\n  'indigo-300': $indigo-300,\n  'indigo-400': $indigo-400,\n  'indigo-500': $indigo-500,\n  'indigo-600': $indigo-600,\n  'indigo-700': $indigo-700,\n  'indigo-800': $indigo-800,\n  'indigo-900': $indigo-900,\n) !default;\n\n$purples: (\n  'purple-100': $purple-100,\n  'purple-200': $purple-200,\n  'purple-300': $purple-300,\n  'purple-400': $purple-400,\n  'purple-500': $purple-500,\n  'purple-600': $purple-600,\n  'purple-700': $purple-700,\n  'purple-800': $purple-800,\n  'purple-900': $purple-900,\n) !default;\n\n$pinks: (\n  'pink-100': $pink-100,\n  'pink-200': $pink-200,\n  'pink-300': $pink-300,\n  'pink-400': $pink-400,\n  'pink-500': $pink-500,\n  'pink-600': $pink-600,\n  'pink-700': $pink-700,\n  'pink-800': $pink-800,\n  'pink-900': $pink-900,\n) !default;\n\n$reds: (\n  'red-100': $red-100,\n  'red-200': $red-200,\n  'red-300': $red-300,\n  'red-400': $red-400,\n  'red-500': $red-500,\n  'red-600': $red-600,\n  'red-700': $red-700,\n  'red-800': $red-800,\n  'red-900': $red-900,\n) !default;\n\n$oranges: (\n  'orange-100': $orange-100,\n  'orange-200': $orange-200,\n  'orange-300': $orange-300,\n  'orange-400': $orange-400,\n  'orange-500': $orange-500,\n  'orange-600': $orange-600,\n  'orange-700': $orange-700,\n  'orange-800': $orange-800,\n  'orange-900': $orange-900,\n) !default;\n\n$yellows: (\n  'yellow-100': $yellow-100,\n  'yellow-200': $yellow-200,\n  'yellow-300': $yellow-300,\n  'yellow-400': $yellow-400,\n  'yellow-500': $yellow-500,\n  'yellow-600': $yellow-600,\n  'yellow-700': $yellow-700,\n  'yellow-800': $yellow-800,\n  'yellow-900': $yellow-900,\n) !default;\n\n$greens: (\n  'green-100': $green-100,\n  'green-200': $green-200,\n  'green-300': $green-300,\n  'green-400': $green-400,\n  'green-500': $green-500,\n  'green-600': $green-600,\n  'green-700': $green-700,\n  'green-800': $green-800,\n  'green-900': $green-900,\n) !default;\n\n$teals: (\n  'teal-100': $teal-100,\n  'teal-200': $teal-200,\n  'teal-300': $teal-300,\n  'teal-400': $teal-400,\n  'teal-500': $teal-500,\n  'teal-600': $teal-600,\n  'teal-700': $teal-700,\n  'teal-800': $teal-800,\n  'teal-900': $teal-900,\n) !default;\n\n$cyans: (\n  'cyan-100': $cyan-100,\n  'cyan-200': $cyan-200,\n  'cyan-300': $cyan-300,\n  'cyan-400': $cyan-400,\n  'cyan-500': $cyan-500,\n  'cyan-600': $cyan-600,\n  'cyan-700': $cyan-700,\n  'cyan-800': $cyan-800,\n  'cyan-900': $cyan-900,\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n  'primary': $primary,\n  'secondary': $secondary,\n  'success': $success,\n  'info': $info,\n  'warning': $warning,\n  'danger': $danger,\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n  ('<', '%3c'),\n  ('>', '%3e'),\n  ('#', '%23'),\n  ('(', '%28'),\n  (')', '%29')\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, 0.15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n  0: 0,\n  1: $spacer * 0.25,\n  2: $spacer * 0.5,\n  3: $spacer,\n  4: $spacer * 1.5,\n  5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n  0: 0,\n  50: 50%,\n  100: 100%,\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, 0.75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, 0.5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: 0.375rem !default;\n$icon-link-underline-offset: 0.25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: 0.2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(0.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n  xs: 0,\n  sm: 576px,\n  md: 768px,\n  lg: 992px,\n  xl: 1200px,\n  xxl: 1400px,\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, '$grid-breakpoints');\n@include _assert-starts-at-zero($grid-breakpoints, '$grid-breakpoints');\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n  sm: 540px,\n  md: 720px,\n  lg: 960px,\n  xl: 1140px,\n  xxl: 1320px,\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, '$container-max-widths');\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n  1: 1px,\n  2: 2px,\n  3: 3px,\n  4: 4px,\n  5: 5px,\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, 0.175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: 0.375rem !default;\n$border-radius-sm: 0.25rem !default;\n$border-radius-lg: 0.5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default;\n$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, 0.175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, 0.075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start focus-ring-variables\n$focus-ring-width: 0.25rem !default;\n$focus-ring-opacity: 0.25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\n\n// scss-docs-start caret-variables\n$caret-width: 0.3em !default;\n$caret-vertical-align: $caret-width * 0.85 !default;\n$caret-spacing: $caret-width * 0.85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all 0.2s ease-in-out !default;\n$transition-fade: opacity 0.15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height 0.35s ease !default;\n$transition-collapse-width: width 0.35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n  '1x1': 100%,\n  '4x3': calc(3 / 4 * 100%),\n  '16x9': calc(9 / 16 * 100%),\n  '21x9': calc(9 / 21 * 100%),\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans',\n  'Liberation Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n  'Noto Color Emoji' !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n  monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * 0.875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n  1: $h1-font-size,\n  2: $h2-font-size,\n  3: $h3-font-size,\n  4: $h4-font-size,\n  5: $h5-font-size,\n  6: $h6-font-size,\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * 0.5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n  1: 5rem,\n  2: 4.5rem,\n  3: 4rem,\n  4: 3.5rem,\n  5: 3rem,\n  6: 2.5rem,\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 0.875em !default;\n\n$sub-sup-font-size: 0.75em !default;\n\n// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: 0.25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: 0.5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: 0.5rem !default;\n\n$mark-padding: 0.1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: 0.5rem !default;\n$table-cell-padding-x: 0.5rem !default;\n$table-cell-padding-y-sm: 0.25rem !default;\n$table-cell-padding-x-sm: 0.25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: 0.05 !default;\n$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: 0.1 !default;\n$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: 0.075 !default;\n$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: 0.2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n  'primary': shift-color($primary, $table-bg-scale),\n  'secondary': shift-color($secondary, $table-bg-scale),\n  'success': shift-color($success, $table-bg-scale),\n  'info': shift-color($info, $table-bg-scale),\n  'warning': shift-color($warning, $table-bg-scale),\n  'danger': shift-color($danger, $table-bg-scale),\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end table-loop\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: 0.375rem !default;\n$input-btn-padding-x: 0.75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$input-btn-padding-y-sm: 0.25rem !default;\n$input-btn-padding-x-sm: 0.5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: 0.5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-color: var(--#{$prefix}body-color) !default;\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, 0.15), 0 1px 1px rgba($black, 0.075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: 0.65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, 0.125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$btn-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: 0.25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: 0.5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(\n  #{$input-border-width} * 2\n) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * 0.5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * 0.25em, $input-padding-y * 0.5) !default;\n\n$input-height: add(\n  $input-line-height * 1em,\n  add($input-padding-y * 2, $input-height-border, false)\n) !default;\n$input-height-sm: add(\n  $input-line-height * 1em,\n  add($input-padding-y-sm * 2, $input-height-border, false)\n) !default;\n$input-height-lg: add(\n  $input-line-height * 1em,\n  add($input-padding-y-lg * 2, $input-height-border, false)\n) !default;\n\n$input-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + 0.5em !default;\n$form-check-margin-bottom: 0.125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: 0.25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: 0.5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, 0.25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + 0.5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position 0.15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 +\n  $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: 0.5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 0.1rem 0.25rem rgba($black, 0.1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out,\n  box-shadow 0.15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: 0.625rem !default;\n$form-floating-label-height: 1.5em !default;\n$form-floating-label-opacity: 0.65 !default;\n$form-floating-label-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$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;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$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;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n  'valid': (\n    'color': var(--#{$prefix}form-valid-color),\n    'icon': $form-feedback-icon-valid,\n    'tooltip-color': #fff,\n    'tooltip-bg-color': var(--#{$prefix}success),\n    'focus-box-shadow': 0 0 $input-btn-focus-blur $input-focus-width\n      rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n    'border-color': var(--#{$prefix}form-valid-border-color),\n  ),\n  'invalid': (\n    'color': var(--#{$prefix}form-invalid-color),\n    'icon': $form-feedback-icon-invalid,\n    'tooltip-color': #fff,\n    'tooltip-bg-color': var(--#{$prefix}danger),\n    'focus-box-shadow': 0 0 $input-btn-focus-blur $input-focus-width\n      rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n    'border-color': var(--#{$prefix}form-invalid-border-color),\n  ),\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n  n1: -1,\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n) !default;\n// scss-docs-end zindex-levels-map\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: 0.5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg)\n  $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color)\n  $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: 0.125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !default;\n// scss-docs-end nav-variables\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * 0.5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: 0.5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * 0.5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: 0.25rem !default;\n$navbar-toggler-padding-x: 0.75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow 0.15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.3) !default;\n$navbar-light-icon-color: rgba($body-color, 0.75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-icon-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, 0.55) !default;\n$navbar-dark-hover-color: rgba($white, 0.75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, 0.25) !default;\n$navbar-dark-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-icon-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, 0.1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: 0.5rem !default;\n$dropdown-spacer: 0.125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(\n  #{$dropdown-border-radius} - #{$dropdown-border-width}\n) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * 0.5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color) !default;\n\n$dropdown-item-padding-y: $spacer * 0.25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, 0.15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: 0.375rem !default;\n$pagination-padding-x: 0.75rem !default;\n$pagination-padding-y-sm: 0.25rem !default;\n$pagination-padding-x-sm: 0.5rem !default;\n$pagination-padding-y-lg: 0.75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(\n  #{$pagination-border-width} * -1\n) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n\n$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n// scss-docs-end pagination-variables\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: 0.5 !default;\n$placeholder-opacity-min: 0.2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * 0.5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * 0.5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), 0.03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * 0.5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract(\n  $accordion-border-radius,\n  $accordion-border-width\n) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius 0.15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n// fusv-disable\n$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3\n// fusv-enable\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !default;\n$accordion-icon-transition: transform 0.2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$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;\n$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;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: 0.9 !default;\n$tooltip-padding-y: $spacer * 0.25 !default;\n$tooltip-padding-x: $spacer * 0.5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: 0.8rem !default;\n$tooltip-arrow-height: 0.4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(\n  #{$popover-border-radius} - #{$popover-border-width}\n) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: 0.5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: 0.5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: 0.75rem !default;\n$toast-padding-y: 0.5rem !default;\n$toast-font-size: 0.875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), 0.85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), 0.85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: 0.75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: 0.35em !default;\n$badge-padding-x: 0.65em !default;\n$badge-border-radius: var(--#{$prefix}border-radius) !default;\n// scss-docs-end badge-variables\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: 0.5rem !default;\n\n$modal-dialog-margin: 0.5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract(\n  $modal-content-border-radius,\n  $modal-content-border-width\n) !default;\n$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: 0.5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform 0.3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * 0.75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width 0.6s ease !default;\n// scss-docs-end progress-variables\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * 0.5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: 0.25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: 0.5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote('/') !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: 0.5 !default;\n$carousel-control-hover-opacity: 0.9 !default;\n$carousel-control-transition: opacity 0.15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: 0.5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity 0.6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$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;\n$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;\n\n$carousel-transition-duration: 0.6s !default;\n$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`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -0.125em !default;\n$spinner-border-width: 0.25em !default;\n$spinner-animation-speed: 0.75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: 0.2em !default;\n// scss-docs-end spinner-variables\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: 0.25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$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;\n$btn-close-focus-shadow: $focus-ring-box-shadow !default;\n$btn-close-opacity: 0.5 !default;\n$btn-close-hover-opacity: 0.75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: 0.25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: 0.3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: 0.1875rem !default;\n$kbd-padding-x: 0.375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n\n@import 'variables-dark'; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3\n"
  },
  {
    "path": "src/scss/bootstrap/bootstrap-grid.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner(Grid);\n\n$include-column-box-sizing: true !default;\n\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n\n@import 'mixins/breakpoints';\n@import 'mixins/container';\n@import 'mixins/grid';\n@import 'mixins/utilities';\n\n@import 'vendor/rfs';\n\n@import 'containers';\n@import 'grid';\n\n@import 'utilities';\n// Only use the utilities we need\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-get-multiple(\n  $utilities,\n  (\n    'display',\n    'order',\n    'flex',\n    'flex-direction',\n    'flex-grow',\n    'flex-shrink',\n    'flex-wrap',\n    'justify-content',\n    'align-items',\n    'align-content',\n    'align-self',\n    'margin',\n    'margin-x',\n    'margin-y',\n    'margin-top',\n    'margin-end',\n    'margin-bottom',\n    'margin-start',\n    'negative-margin',\n    'negative-margin-x',\n    'negative-margin-y',\n    'negative-margin-top',\n    'negative-margin-end',\n    'negative-margin-bottom',\n    'negative-margin-start',\n    'padding',\n    'padding-x',\n    'padding-y',\n    'padding-top',\n    'padding-end',\n    'padding-bottom',\n    'padding-start'\n  )\n);\n\n@import 'utilities/api';\n"
  },
  {
    "path": "src/scss/bootstrap/bootstrap-reboot.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner(Reboot);\n\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n@import 'mixins';\n@import 'root';\n@import 'reboot';\n"
  },
  {
    "path": "src/scss/bootstrap/bootstrap-utilities.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner(Utilities);\n\n// Configuration\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n@import 'mixins';\n@import 'utilities';\n\n// Layout & components\n@import 'root';\n\n// Helpers\n@import 'helpers';\n\n// Utilities\n@import 'utilities/api';\n"
  },
  {
    "path": "src/scss/bootstrap/bootstrap.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner('');\n\n// scss-docs-start import-stack\n// Configuration\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n@import 'mixins';\n@import 'utilities';\n\n// Layout & components\n@import 'root';\n@import 'reboot';\n@import 'type';\n@import 'images';\n@import 'containers';\n@import 'grid';\n@import 'tables';\n@import 'forms';\n@import 'buttons';\n@import 'transitions';\n@import 'dropdown';\n@import 'button-group';\n@import 'nav';\n@import 'navbar';\n@import 'card';\n@import 'accordion';\n@import 'breadcrumb';\n@import 'pagination';\n@import 'badge';\n@import 'alert';\n@import 'progress';\n@import 'list-group';\n@import 'close';\n@import 'toasts';\n@import 'modal';\n@import 'tooltip';\n@import 'popover';\n@import 'carousel';\n@import 'spinners';\n@import 'offcanvas';\n@import 'placeholders';\n\n// Helpers\n@import 'helpers';\n\n// Utilities\n@import 'utilities/api';\n// scss-docs-end import-stack\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_floating-labels.scss",
    "content": ".form-floating {\n  position: relative;\n\n  > .form-control,\n  > .form-control-plaintext,\n  > .form-select {\n    height: $form-floating-height;\n    min-height: $form-floating-height;\n    line-height: $form-floating-line-height;\n  }\n\n  > label {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    height: 100%; // allow textareas\n    padding: $form-floating-padding-y $form-floating-padding-x;\n    overflow: hidden;\n    text-align: start;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    pointer-events: none;\n    border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n    transform-origin: 0 0;\n    @include transition($form-floating-transition);\n  }\n\n  > .form-control,\n  > .form-control-plaintext {\n    padding: $form-floating-padding-y $form-floating-padding-x;\n\n    &::placeholder {\n      color: transparent;\n    }\n\n    &:focus,\n    &:not(:placeholder-shown) {\n      padding-top: $form-floating-input-padding-t;\n      padding-bottom: $form-floating-input-padding-b;\n    }\n    // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n    &:-webkit-autofill {\n      padding-top: $form-floating-input-padding-t;\n      padding-bottom: $form-floating-input-padding-b;\n    }\n  }\n\n  > .form-select {\n    padding-top: $form-floating-input-padding-t;\n    padding-bottom: $form-floating-input-padding-b;\n  }\n\n  > .form-control:focus,\n  > .form-control:not(:placeholder-shown),\n  > .form-control-plaintext,\n  > .form-select {\n    ~ label {\n      color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n      transform: $form-floating-label-transform;\n\n      &::after {\n        position: absolute;\n        inset: $form-floating-padding-y ($form-floating-padding-x * 0.5);\n        z-index: -1;\n        height: $form-floating-label-height;\n        content: '';\n        background-color: $input-bg;\n        @include border-radius($input-border-radius);\n      }\n    }\n  }\n  // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n  > .form-control:-webkit-autofill {\n    ~ label {\n      color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n      transform: $form-floating-label-transform;\n    }\n  }\n\n  > .form-control-plaintext {\n    ~ label {\n      border-width: $input-border-width 0; // Required to properly position label text - as explained above\n    }\n  }\n\n  > :disabled ~ label,\n  > .form-control:disabled ~ label {\n    // Required for `.form-control`s because of specificity\n    color: $form-floating-label-disabled-color;\n\n    &::after {\n      background-color: $input-disabled-bg;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_form-check.scss",
    "content": "//\n// Check/radio\n//\n\n.form-check {\n  display: block;\n  min-height: $form-check-min-height;\n  padding-left: $form-check-padding-start;\n  margin-bottom: $form-check-margin-bottom;\n\n  .form-check-input {\n    float: left;\n    margin-left: $form-check-padding-start * -1;\n  }\n}\n\n.form-check-reverse {\n  padding-right: $form-check-padding-start;\n  padding-left: 0;\n  text-align: right;\n\n  .form-check-input {\n    float: right;\n    margin-right: $form-check-padding-start * -1;\n    margin-left: 0;\n  }\n}\n\n.form-check-input {\n  --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n  flex-shrink: 0;\n  width: $form-check-input-width;\n  height: $form-check-input-width;\n  margin-top: ($line-height-base - $form-check-input-width) * 0.5; // line-height minus check height\n  vertical-align: top;\n  appearance: none;\n  background-color: var(--#{$prefix}form-check-bg);\n  background-image: var(--#{$prefix}form-check-bg-image);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: $form-check-input-border;\n  print-color-adjust: exact; // Keep themed appearance for print\n  @include transition($form-check-transition);\n\n  &[type='checkbox'] {\n    @include border-radius($form-check-input-border-radius);\n  }\n\n  &[type='radio'] {\n    // stylelint-disable-next-line property-disallowed-list\n    border-radius: $form-check-radio-border-radius;\n  }\n\n  &:active {\n    filter: $form-check-input-active-filter;\n  }\n\n  &:focus {\n    border-color: $form-check-input-focus-border;\n    outline: 0;\n    box-shadow: $form-check-input-focus-box-shadow;\n  }\n\n  &:checked {\n    background-color: $form-check-input-checked-bg-color;\n    border-color: $form-check-input-checked-border-color;\n\n    &[type='checkbox'] {\n      @if $enable-gradients {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)},\n          var(--#{$prefix}gradient);\n      } @else {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n      }\n    }\n\n    &[type='radio'] {\n      @if $enable-gradients {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)},\n          var(--#{$prefix}gradient);\n      } @else {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n      }\n    }\n  }\n\n  &[type='checkbox']:indeterminate {\n    background-color: $form-check-input-indeterminate-bg-color;\n    border-color: $form-check-input-indeterminate-border-color;\n\n    @if $enable-gradients {\n      --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)},\n        var(--#{$prefix}gradient);\n    } @else {\n      --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n    }\n  }\n\n  &:disabled {\n    pointer-events: none;\n    filter: none;\n    opacity: $form-check-input-disabled-opacity;\n  }\n\n  // Use disabled attribute in addition of :disabled pseudo-class\n  // See: https://github.com/twbs/bootstrap/issues/28247\n  &[disabled],\n  &:disabled {\n    ~ .form-check-label {\n      cursor: default;\n      opacity: $form-check-label-disabled-opacity;\n    }\n  }\n}\n\n.form-check-label {\n  color: $form-check-label-color;\n  cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n  padding-left: $form-switch-padding-start;\n\n  .form-check-input {\n    --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n    width: $form-switch-width;\n    margin-left: $form-switch-padding-start * -1;\n    background-image: var(--#{$prefix}form-switch-bg);\n    background-position: left center;\n    @include border-radius($form-switch-border-radius, 0);\n    @include transition($form-switch-transition);\n\n    &:focus {\n      --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n    }\n\n    &:checked {\n      background-position: $form-switch-checked-bg-position;\n\n      @if $enable-gradients {\n        --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)},\n          var(--#{$prefix}gradient);\n      } @else {\n        --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n      }\n    }\n  }\n\n  &.form-check-reverse {\n    padding-right: $form-switch-padding-start;\n    padding-left: 0;\n\n    .form-check-input {\n      margin-right: $form-switch-padding-start * -1;\n      margin-left: 0;\n    }\n  }\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n\n  &[disabled],\n  &:disabled {\n    + .btn {\n      pointer-events: none;\n      filter: none;\n      opacity: $form-check-btn-check-disabled-opacity;\n    }\n  }\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .form-switch .form-check-input:not(:checked):not(:focus) {\n      --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_form-control.scss",
    "content": "//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: $input-padding-y $input-padding-x;\n  font-family: $input-font-family;\n  @include font-size($input-font-size);\n  font-weight: $input-font-weight;\n  line-height: $input-line-height;\n  color: $input-color;\n  appearance: none; // Fix appearance for date inputs in Safari\n  background-color: $input-bg;\n  background-clip: padding-box;\n  border: $input-border-width solid $input-border-color;\n\n  // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n  @include border-radius($input-border-radius, 0);\n\n  @include box-shadow($input-box-shadow);\n  @include transition($input-transition);\n\n  &[type='file'] {\n    overflow: hidden; // prevent pseudo element button overlap\n\n    &:not(:disabled):not([readonly]) {\n      cursor: pointer;\n    }\n  }\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  &:focus {\n    color: $input-focus-color;\n    background-color: $input-focus-bg;\n    border-color: $input-focus-border-color;\n    outline: 0;\n    @if $enable-shadows {\n      @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n    } @else {\n      // Avoid using mixin so we can pass custom focus shadow properly\n      box-shadow: $input-focus-box-shadow;\n    }\n  }\n\n  &::-webkit-date-and-time-value {\n    // On Android Chrome, form-control's \"width: 100%\" makes the input width too small\n    // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n    //\n    // On iOS Safari, form-control's \"appearance: none\" + \"width: 100%\" makes the input width too small\n    // Tested under iOS 16.2 / Safari 16.2\n    min-width: 85px; // Seems to be a good minimum safe width\n\n    // Add some height to date inputs on iOS\n    // https://github.com/twbs/bootstrap/issues/23307\n    // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n    // Multiply line-height by 1em if it has no unit\n    height: if(unit($input-line-height) == '', $input-line-height * 1em, $input-line-height);\n\n    // Android Chrome type=\"date\" is taller than the other inputs\n    // because of \"margin: 1px 24px 1px 4px\" inside the shadow DOM\n    // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n    margin: 0;\n  }\n\n  // Prevent excessive date input height in Webkit\n  // https://github.com/twbs/bootstrap/issues/34433\n  &::-webkit-datetime-edit {\n    display: block;\n    padding: 0;\n  }\n\n  // Placeholder\n  &::placeholder {\n    color: $input-placeholder-color;\n    // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n    opacity: 1;\n  }\n\n  // Disabled inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &:disabled {\n    color: $input-disabled-color;\n    background-color: $input-disabled-bg;\n    border-color: $input-disabled-border-color;\n    // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n    opacity: 1;\n  }\n\n  // File input buttons theming\n  &::file-selector-button {\n    padding: $input-padding-y $input-padding-x;\n    margin: (-$input-padding-y) (-$input-padding-x);\n    margin-inline-end: $input-padding-x;\n    color: $form-file-button-color;\n    @include gradient-bg($form-file-button-bg);\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: $input-border-width;\n    border-radius: 0; // stylelint-disable-line property-disallowed-list\n    @include transition($btn-transition);\n  }\n\n  &:hover:not(:disabled):not([readonly])::file-selector-button {\n    background-color: $form-file-button-hover-bg;\n  }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: $input-padding-y 0;\n  margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n  line-height: $input-line-height;\n  color: $input-plaintext-color;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: $input-border-width 0;\n\n  &:focus {\n    outline: 0;\n  }\n\n  &.form-control-sm,\n  &.form-control-lg {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n  min-height: $input-height-sm;\n  padding: $input-padding-y-sm $input-padding-x-sm;\n  @include font-size($input-font-size-sm);\n  @include border-radius($input-border-radius-sm);\n\n  &::file-selector-button {\n    padding: $input-padding-y-sm $input-padding-x-sm;\n    margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n    margin-inline-end: $input-padding-x-sm;\n  }\n}\n\n.form-control-lg {\n  min-height: $input-height-lg;\n  padding: $input-padding-y-lg $input-padding-x-lg;\n  @include font-size($input-font-size-lg);\n  @include border-radius($input-border-radius-lg);\n\n  &::file-selector-button {\n    padding: $input-padding-y-lg $input-padding-x-lg;\n    margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n    margin-inline-end: $input-padding-x-lg;\n  }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n  &.form-control {\n    min-height: $input-height;\n  }\n\n  &.form-control-sm {\n    min-height: $input-height-sm;\n  }\n\n  &.form-control-lg {\n    min-height: $input-height-lg;\n  }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n  width: $form-color-width;\n  height: $input-height;\n  padding: $input-padding-y;\n\n  &:not(:disabled):not([readonly]) {\n    cursor: pointer;\n  }\n\n  &::-moz-color-swatch {\n    border: 0 !important; // stylelint-disable-line declaration-no-important\n    @include border-radius($input-border-radius);\n  }\n\n  &::-webkit-color-swatch {\n    border: 0 !important; // stylelint-disable-line declaration-no-important\n    @include border-radius($input-border-radius);\n  }\n\n  &.form-control-sm {\n    height: $input-height-sm;\n  }\n  &.form-control-lg {\n    height: $input-height-lg;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_form-range.scss",
    "content": "// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n  width: 100%;\n  height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n  padding: 0; // Need to reset padding\n  appearance: none;\n  background-color: transparent;\n\n  &:focus {\n    outline: 0;\n\n    // Pseudo-elements must be split across multiple rulesets to have an effect.\n    // No box-shadow() mixin for focus accessibility.\n    &::-webkit-slider-thumb {\n      box-shadow: $form-range-thumb-focus-box-shadow;\n    }\n    &::-moz-range-thumb {\n      box-shadow: $form-range-thumb-focus-box-shadow;\n    }\n  }\n\n  &::-moz-focus-outer {\n    border: 0;\n  }\n\n  &::-webkit-slider-thumb {\n    width: $form-range-thumb-width;\n    height: $form-range-thumb-height;\n    margin-top: ($form-range-track-height - $form-range-thumb-height) * 0.5; // Webkit specific\n    appearance: none;\n    @include gradient-bg($form-range-thumb-bg);\n    border: $form-range-thumb-border;\n    @include border-radius($form-range-thumb-border-radius);\n    @include box-shadow($form-range-thumb-box-shadow);\n    @include transition($form-range-thumb-transition);\n\n    &:active {\n      @include gradient-bg($form-range-thumb-active-bg);\n    }\n  }\n\n  &::-webkit-slider-runnable-track {\n    width: $form-range-track-width;\n    height: $form-range-track-height;\n    color: transparent; // Why?\n    cursor: $form-range-track-cursor;\n    background-color: $form-range-track-bg;\n    border-color: transparent;\n    @include border-radius($form-range-track-border-radius);\n    @include box-shadow($form-range-track-box-shadow);\n  }\n\n  &::-moz-range-thumb {\n    width: $form-range-thumb-width;\n    height: $form-range-thumb-height;\n    appearance: none;\n    @include gradient-bg($form-range-thumb-bg);\n    border: $form-range-thumb-border;\n    @include border-radius($form-range-thumb-border-radius);\n    @include box-shadow($form-range-thumb-box-shadow);\n    @include transition($form-range-thumb-transition);\n\n    &:active {\n      @include gradient-bg($form-range-thumb-active-bg);\n    }\n  }\n\n  &::-moz-range-track {\n    width: $form-range-track-width;\n    height: $form-range-track-height;\n    color: transparent;\n    cursor: $form-range-track-cursor;\n    background-color: $form-range-track-bg;\n    border-color: transparent; // Firefox specific?\n    @include border-radius($form-range-track-border-radius);\n    @include box-shadow($form-range-track-box-shadow);\n  }\n\n  &:disabled {\n    pointer-events: none;\n\n    &::-webkit-slider-thumb {\n      background-color: $form-range-thumb-disabled-bg;\n    }\n\n    &::-moz-range-thumb {\n      background-color: $form-range-thumb-disabled-bg;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_form-select.scss",
    "content": "// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n  --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n  display: block;\n  width: 100%;\n  padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y\n    $form-select-padding-x;\n  font-family: $form-select-font-family;\n  @include font-size($form-select-font-size);\n  font-weight: $form-select-font-weight;\n  line-height: $form-select-line-height;\n  color: $form-select-color;\n  appearance: none;\n  background-color: $form-select-bg;\n  background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n  background-repeat: no-repeat;\n  background-position: $form-select-bg-position;\n  background-size: $form-select-bg-size;\n  border: $form-select-border-width solid $form-select-border-color;\n  @include border-radius($form-select-border-radius, 0);\n  @include box-shadow($form-select-box-shadow);\n  @include transition($form-select-transition);\n\n  &:focus {\n    border-color: $form-select-focus-border-color;\n    outline: 0;\n    @if $enable-shadows {\n      @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n    } @else {\n      // Avoid using mixin so we can pass custom focus shadow properly\n      box-shadow: $form-select-focus-box-shadow;\n    }\n  }\n\n  &[multiple],\n  &[size]:not([size='1']) {\n    padding-right: $form-select-padding-x;\n    background-image: none;\n  }\n\n  &:disabled {\n    color: $form-select-disabled-color;\n    background-color: $form-select-disabled-bg;\n    border-color: $form-select-disabled-border-color;\n  }\n\n  // Remove outline from select box in FF\n  &:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 $form-select-color;\n  }\n}\n\n.form-select-sm {\n  padding-top: $form-select-padding-y-sm;\n  padding-bottom: $form-select-padding-y-sm;\n  padding-left: $form-select-padding-x-sm;\n  @include font-size($form-select-font-size-sm);\n  @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n  padding-top: $form-select-padding-y-lg;\n  padding-bottom: $form-select-padding-y-lg;\n  padding-left: $form-select-padding-x-lg;\n  @include font-size($form-select-font-size-lg);\n  @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .form-select {\n      --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_form-text.scss",
    "content": "//\n// Form text\n//\n\n.form-text {\n  margin-top: $form-text-margin-top;\n  @include font-size($form-text-font-size);\n  font-style: $form-text-font-style;\n  font-weight: $form-text-font-weight;\n  color: $form-text-color;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_input-group.scss",
    "content": "//\n// Base styles\n//\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap; // For form validation feedback\n  align-items: stretch;\n  width: 100%;\n\n  > .form-control,\n  > .form-select,\n  > .form-floating {\n    position: relative; // For focus state's z-index\n    flex: 1 1 auto;\n    width: 1%;\n    min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n  }\n\n  // Bring the \"active\" form control to the top of surrounding elements\n  > .form-control:focus,\n  > .form-select:focus,\n  > .form-floating:focus-within {\n    z-index: 5;\n  }\n\n  // Ensure buttons are always above inputs for more visually pleasing borders.\n  // This isn't needed for `.input-group-text` since it shares the same border-color\n  // as our inputs.\n  .btn {\n    position: relative;\n    z-index: 2;\n\n    &:focus {\n      z-index: 5;\n    }\n  }\n}\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n  @include font-size($input-font-size); // Match inputs\n  font-weight: $input-group-addon-font-weight;\n  line-height: $input-line-height;\n  color: $input-group-addon-color;\n  text-align: center;\n  white-space: nowrap;\n  background-color: $input-group-addon-bg;\n  border: $input-border-width solid $input-group-addon-border-color;\n  @include border-radius($input-border-radius);\n}\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: $input-padding-y-lg $input-padding-x-lg;\n  @include font-size($input-font-size-lg);\n  @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: $input-padding-y-sm $input-padding-x-sm;\n  @include font-size($input-font-size-sm);\n  @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n  &:not(.has-validation) {\n    > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n    > .dropdown-toggle:nth-last-child(n + 3),\n    > .form-floating:not(:last-child) > .form-control,\n    > .form-floating:not(:last-child) > .form-select {\n      @include border-end-radius(0);\n    }\n  }\n\n  &.has-validation {\n    > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n    > .dropdown-toggle:nth-last-child(n + 4),\n    > .form-floating:nth-last-child(n + 3) > .form-control,\n    > .form-floating:nth-last-child(n + 3) > .form-select {\n      @include border-end-radius(0);\n    }\n  }\n\n  $validation-messages: '';\n  @each $state in map-keys($form-validation-states) {\n    $validation-messages: $validation-messages +\n      ':not(.' +\n      unquote($state) +\n      '-tooltip)' +\n      ':not(.' +\n      unquote($state) +\n      '-feedback)';\n  }\n\n  > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n    margin-left: calc(\n      #{$input-border-width} * -1\n    ); // stylelint-disable-line function-disallowed-list\n    @include border-start-radius(0);\n  }\n\n  > .form-floating:not(:first-child) > .form-control,\n  > .form-floating:not(:first-child) > .form-select {\n    @include border-start-radius(0);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_labels.scss",
    "content": "//\n// Labels\n//\n\n.form-label {\n  margin-bottom: $form-label-margin-bottom;\n  @include font-size($form-label-font-size);\n  font-style: $form-label-font-style;\n  font-weight: $form-label-font-weight;\n  color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n  padding-top: add($input-padding-y, $input-border-width);\n  padding-bottom: add($input-padding-y, $input-border-width);\n  margin-bottom: 0; // Override the `<legend>` default\n  @include font-size(inherit); // Override the `<legend>` default\n  font-style: $form-label-font-style;\n  font-weight: $form-label-font-weight;\n  line-height: $input-line-height;\n  color: $form-label-color;\n}\n\n.col-form-label-lg {\n  padding-top: add($input-padding-y-lg, $input-border-width);\n  padding-bottom: add($input-padding-y-lg, $input-border-width);\n  @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n  padding-top: add($input-padding-y-sm, $input-border-width);\n  padding-bottom: add($input-padding-y-sm, $input-border-width);\n  @include font-size($input-font-size-sm);\n}\n"
  },
  {
    "path": "src/scss/bootstrap/forms/_validation.scss",
    "content": "// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server-side validation.\n\n// scss-docs-start form-validation-states-loop\n@each $state, $data in $form-validation-states {\n  @include form-validation-state($state, $data...);\n}\n// scss-docs-end form-validation-states-loop\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_clearfix.scss",
    "content": ".clearfix {\n  @include clearfix();\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_color-bg.scss",
    "content": "// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n  .text-bg-#{$color} {\n    color: color-contrast($value) if($enable-important-utilities, !important, null);\n    background-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1))\n      if($enable-important-utilities, !important, null);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_colored-links.scss",
    "content": "// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n  .link-#{$color} {\n    color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-opacity, 1))\n      if($enable-important-utilities, !important, null);\n    text-decoration-color: RGBA(\n        var(--#{$prefix}#{$color}-rgb),\n        var(--#{$prefix}link-underline-opacity, 1)\n      )\n      if($enable-important-utilities, !important, null);\n\n    @if $link-shade-percentage != 0 {\n      &:hover,\n      &:focus {\n        $hover-color: if(\n          color-contrast($value) == $color-contrast-light,\n          shade-color($value, $link-shade-percentage),\n          tint-color($value, $link-shade-percentage)\n        );\n        color: RGBA(#{to-rgb($hover-color)}, var(--#{$prefix}link-opacity, 1))\n          if($enable-important-utilities, !important, null);\n        text-decoration-color: RGBA(\n            to-rgb($hover-color),\n            var(--#{$prefix}link-underline-opacity, 1)\n          )\n          if($enable-important-utilities, !important, null);\n      }\n    }\n  }\n}\n\n// One-off special link helper as a bridge until v6\n.link-body-emphasis {\n  color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 1))\n    if($enable-important-utilities, !important, null);\n  text-decoration-color: RGBA(\n      var(--#{$prefix}emphasis-color-rgb),\n      var(--#{$prefix}link-underline-opacity, 1)\n    )\n    if($enable-important-utilities, !important, null);\n\n  @if $link-shade-percentage != 0 {\n    &:hover,\n    &:focus {\n      color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 0.75))\n        if($enable-important-utilities, !important, null);\n      text-decoration-color: RGBA(\n          var(--#{$prefix}emphasis-color-rgb),\n          var(--#{$prefix}link-underline-opacity, 0.75)\n        )\n        if($enable-important-utilities, !important, null);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_focus-ring.scss",
    "content": ".focus-ring:focus {\n  outline: 0;\n  // By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values\n  box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0)\n    var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width)\n    var(--#{$prefix}focus-ring-color);\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_icon-link.scss",
    "content": ".icon-link {\n  display: inline-flex;\n  gap: $icon-link-gap;\n  align-items: center;\n  text-decoration-color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 0.5));\n  text-underline-offset: $icon-link-underline-offset;\n  backface-visibility: hidden;\n\n  > .bi {\n    flex-shrink: 0;\n    width: $icon-link-icon-size;\n    height: $icon-link-icon-size;\n    fill: currentcolor;\n    @include transition($icon-link-icon-transition);\n  }\n}\n\n.icon-link-hover {\n  &:hover,\n  &:focus-visible {\n    > .bi {\n      transform: var(--#{$prefix}icon-link-transform, $icon-link-icon-transform);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_position.scss",
    "content": "// Shorthand\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    .sticky#{$infix}-top {\n      position: sticky;\n      top: 0;\n      z-index: $zindex-sticky;\n    }\n\n    .sticky#{$infix}-bottom {\n      position: sticky;\n      bottom: 0;\n      z-index: $zindex-sticky;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_ratio.scss",
    "content": "// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n  position: relative;\n  width: 100%;\n\n  &::before {\n    display: block;\n    padding-top: var(--#{$prefix}aspect-ratio);\n    content: '';\n  }\n\n  > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n  }\n}\n\n@each $key, $ratio in $aspect-ratios {\n  .ratio-#{$key} {\n    --#{$prefix}aspect-ratio: #{$ratio};\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_stacks.scss",
    "content": "// scss-docs-start stacks\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n// scss-docs-end stacks\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_stretched-link.scss",
    "content": "//\n// Stretched link\n//\n\n.stretched-link {\n  &::#{$stretched-link-pseudo-element} {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: $stretched-link-z-index;\n    content: \"\";\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_text-truncation.scss",
    "content": "//\n// Text truncation\n//\n\n.text-truncate {\n  @include text-truncate();\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_visually-hidden.scss",
    "content": "//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  @include visually-hidden();\n}\n"
  },
  {
    "path": "src/scss/bootstrap/helpers/_vr.scss",
    "content": ".vr {\n  display: inline-block;\n  align-self: stretch;\n  width: $vr-border-width;\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: $hr-opacity;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_alert.scss",
    "content": "@include deprecate('`alert-variant()`', 'v5.3.0', 'v6.0.0');\n\n// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n  --#{$prefix}alert-color: #{$color};\n  --#{$prefix}alert-bg: #{$background};\n  --#{$prefix}alert-border-color: #{$border};\n  --#{$prefix}alert-link-color: #{shade-color($color, 20%)};\n\n  @if $enable-gradients {\n    background-image: var(--#{$prefix}gradient);\n  }\n\n  .alert-link {\n    color: var(--#{$prefix}alert-link-color);\n  }\n}\n// scss-docs-end alert-variant-mixin\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_backdrop.scss",
    "content": "// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: $zindex;\n  width: 100vw;\n  height: 100vh;\n  background-color: $backdrop-bg;\n\n  // Fade for backdrop\n  &.fade {\n    opacity: 0;\n  }\n  &.show {\n    opacity: $backdrop-opacity;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_banner.scss",
    "content": "@mixin bsBanner($file) {\n  /*!\n   * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n   * Copyright 2011-2024 The Bootstrap Authors\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   */\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_border-radius.scss",
    "content": "// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n  $return: ();\n  @each $value in $radius {\n    @if type-of($value) == number {\n      $return: append($return, max($value, 0));\n    } @else {\n      $return: append($return, $value);\n    }\n  }\n  @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n  @if $enable-rounded {\n    border-radius: valid-radius($radius);\n  } @else if $fallback-border-radius != false {\n    border-radius: $fallback-border-radius;\n  }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n    border-top-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-right-radius: valid-radius($radius);\n    border-bottom-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: valid-radius($radius);\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n// scss-docs-end border-radius-mixins\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_box-shadow.scss",
    "content": "@mixin box-shadow($shadow...) {\n  @if $enable-shadows {\n    $result: ();\n\n    @each $value in $shadow {\n      @if $value != null {\n        $result: append($result, $value, 'comma');\n      }\n      @if $value == none and length($shadow) > 1 {\n        @warn \"The keyword 'none' must be used as a single argument.\";\n      }\n    }\n\n    @if (length($result) > 0) {\n      box-shadow: $result;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_breakpoints.scss",
    "content": "// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n//    (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n//    >> breakpoint-next(sm)\n//    md\n//    >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    md\n//    >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n//    md\n@function breakpoint-next(\n  $name,\n  $breakpoints: $grid-breakpoints,\n  $breakpoint-names: map-keys($breakpoints)\n) {\n  $n: index($breakpoint-names, $name);\n  @if not $n {\n    @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n  }\n  @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n//    >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n  $min: map-get($breakpoints, $name);\n  @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n//    >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n  $max: map-get($breakpoints, $name);\n  @return if($max and $max > 0, $max - 0.02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n//    >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    \"\"  (Returns a blank string)\n//    >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n  @return if(breakpoint-min($name, $breakpoints) == null, '', '-#{$name}');\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  @if $min {\n    @media (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n  $max: breakpoint-max($name, $breakpoints);\n  @if $max {\n    @media (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($lower, $breakpoints);\n  $max: breakpoint-max($upper, $breakpoints);\n\n  @if $min != null and $max != null {\n    @media (min-width: $min) and (max-width: $max) {\n      @content;\n    }\n  } @else if $max == null {\n    @include media-breakpoint-up($lower, $breakpoints) {\n      @content;\n    }\n  } @else if $min == null {\n    @include media-breakpoint-down($upper, $breakpoints) {\n      @content;\n    }\n  }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  $next: breakpoint-next($name, $breakpoints);\n  $max: breakpoint-max($next, $breakpoints);\n\n  @if $min != null and $max != null {\n    @media (min-width: $min) and (max-width: $max) {\n      @content;\n    }\n  } @else if $max == null {\n    @include media-breakpoint-up($name, $breakpoints) {\n      @content;\n    }\n  } @else if $min == null {\n    @include media-breakpoint-down($next, $breakpoints) {\n      @content;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_buttons.scss",
    "content": "// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n  $background,\n  $border,\n  $color: color-contrast($background),\n  $hover-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-hover-bg-shade-amount),\n      tint-color($background, $btn-hover-bg-tint-amount)\n    ),\n  $hover-border:\n    if(\n      $color == $color-contrast-light,\n      shade-color($border, $btn-hover-border-shade-amount),\n      tint-color($border, $btn-hover-border-tint-amount)\n    ),\n  $hover-color: color-contrast($hover-background),\n  $active-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-active-bg-shade-amount),\n      tint-color($background, $btn-active-bg-tint-amount)\n    ),\n  $active-border:\n    if(\n      $color == $color-contrast-light,\n      shade-color($border, $btn-active-border-shade-amount),\n      tint-color($border, $btn-active-border-tint-amount)\n    ),\n  $active-color: color-contrast($active-background),\n  $disabled-background: $background,\n  $disabled-border: $border,\n  $disabled-color: color-contrast($disabled-background)\n) {\n  --#{$prefix}btn-color: #{$color};\n  --#{$prefix}btn-bg: #{$background};\n  --#{$prefix}btn-border-color: #{$border};\n  --#{$prefix}btn-hover-color: #{$hover-color};\n  --#{$prefix}btn-hover-bg: #{$hover-background};\n  --#{$prefix}btn-hover-border-color: #{$hover-border};\n  --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n  --#{$prefix}btn-active-color: #{$active-color};\n  --#{$prefix}btn-active-bg: #{$active-background};\n  --#{$prefix}btn-active-border-color: #{$active-border};\n  --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n  --#{$prefix}btn-disabled-color: #{$disabled-color};\n  --#{$prefix}btn-disabled-bg: #{$disabled-background};\n  --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n  $color,\n  $color-hover: color-contrast($color),\n  $active-background: $color,\n  $active-border: $color,\n  $active-color: color-contrast($active-background)\n) {\n  --#{$prefix}btn-color: #{$color};\n  --#{$prefix}btn-border-color: #{$color};\n  --#{$prefix}btn-hover-color: #{$color-hover};\n  --#{$prefix}btn-hover-bg: #{$active-background};\n  --#{$prefix}btn-hover-border-color: #{$active-border};\n  --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n  --#{$prefix}btn-active-color: #{$active-color};\n  --#{$prefix}btn-active-bg: #{$active-background};\n  --#{$prefix}btn-active-border-color: #{$active-border};\n  --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n  --#{$prefix}btn-disabled-color: #{$color};\n  --#{$prefix}btn-disabled-bg: transparent;\n  --#{$prefix}btn-disabled-border-color: #{$color};\n  --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n  --#{$prefix}btn-padding-y: #{$padding-y};\n  --#{$prefix}btn-padding-x: #{$padding-x};\n  @include rfs($font-size, --#{$prefix}btn-font-size);\n  --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_caret.scss",
    "content": "// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n  border-top: $width solid;\n  border-right: $width solid transparent;\n  border-bottom: 0;\n  border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n  border-top: 0;\n  border-right: $width solid transparent;\n  border-bottom: $width solid;\n  border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n  border-top: $width solid transparent;\n  border-right: 0;\n  border-bottom: $width solid transparent;\n  border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n  border-top: $width solid transparent;\n  border-right: $width solid;\n  border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n  $direction: down,\n  $width: $caret-width,\n  $spacing: $caret-spacing,\n  $vertical-align: $caret-vertical-align\n) {\n  @if $enable-caret {\n    &::after {\n      display: inline-block;\n      margin-left: $spacing;\n      vertical-align: $vertical-align;\n      content: '';\n      @if $direction == down {\n        @include caret-down($width);\n      } @else if $direction == up {\n        @include caret-up($width);\n      } @else if $direction == end {\n        @include caret-end($width);\n      }\n    }\n\n    @if $direction == start {\n      &::after {\n        display: none;\n      }\n\n      &::before {\n        display: inline-block;\n        margin-right: $spacing;\n        vertical-align: $vertical-align;\n        content: '';\n        @include caret-start($width);\n      }\n    }\n\n    &:empty::after {\n      margin-left: 0;\n    }\n  }\n}\n// scss-docs-end caret-mixins\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_clearfix.scss",
    "content": "// scss-docs-start clearfix\n@mixin clearfix() {\n  &::after {\n    display: block;\n    clear: both;\n    content: \"\";\n  }\n}\n// scss-docs-end clearfix\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_color-mode.scss",
    "content": "// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n  @if $color-mode-type == 'media-query' {\n    @if $root == true {\n      @media (prefers-color-scheme: $mode) {\n        :root {\n          @content;\n        }\n      }\n    } @else {\n      @media (prefers-color-scheme: $mode) {\n        @content;\n      }\n    }\n  } @else {\n    [data-bs-theme='#{$mode}'] {\n      @content;\n    }\n  }\n}\n// scss-docs-end color-mode-mixin\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_color-scheme.scss",
    "content": "// scss-docs-start mixin-color-scheme\n@mixin color-scheme($name) {\n  @media (prefers-color-scheme: #{$name}) {\n    @content;\n  }\n}\n// scss-docs-end mixin-color-scheme\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_container.scss",
    "content": "// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n  --#{$prefix}gutter-x: #{$gutter};\n  --#{$prefix}gutter-y: 0;\n  width: 100%;\n  padding-right: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  padding-left: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  margin-right: auto;\n  margin-left: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_deprecate.scss",
    "content": "// Deprecate mixin\n//\n// This mixin can be used to deprecate mixins or functions.\n// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to\n// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)\n@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {\n  @if ($enable-deprecation-messages != false and $ignore-warning != true) {\n    @warn \"#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.\";\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_forms.scss",
    "content": "// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n  @if ($state == 'valid' or $state == 'invalid') {\n    .was-validated #{if(&, \"&\", \"\")}:#{$state},\n    #{if(&, \"&\", \"\")}.is-#{$state} {\n      @content;\n    }\n  } @else {\n    #{if(&, \"&\", \"\")}.is-#{$state} {\n      @content;\n    }\n  }\n}\n\n@mixin form-validation-state(\n  $state,\n  $color,\n  $icon,\n  $tooltip-color: color-contrast($color),\n  $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n  $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width\n    rgba($color, $input-btn-focus-color-opacity),\n  $border-color: $color\n) {\n  .#{$state}-feedback {\n    display: none;\n    width: 100%;\n    margin-top: $form-feedback-margin-top;\n    @include font-size($form-feedback-font-size);\n    font-style: $form-feedback-font-style;\n    color: $color;\n  }\n\n  .#{$state}-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%; // Contain to parent when possible\n    padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n    margin-top: 0.1rem;\n    @include font-size($form-feedback-tooltip-font-size);\n    line-height: $form-feedback-tooltip-line-height;\n    color: $tooltip-color;\n    background-color: $tooltip-bg-color;\n    @include border-radius($form-feedback-tooltip-border-radius);\n  }\n\n  @include form-validation-state-selector($state) {\n    ~ .#{$state}-feedback,\n    ~ .#{$state}-tooltip {\n      display: block;\n    }\n  }\n\n  .form-control {\n    @include form-validation-state-selector($state) {\n      border-color: $border-color;\n\n      @if $enable-validation-icons {\n        padding-right: $input-height-inner;\n        background-image: escape-svg($icon);\n        background-repeat: no-repeat;\n        background-position: right $input-height-inner-quarter center;\n        background-size: $input-height-inner-half $input-height-inner-half;\n      }\n\n      &:focus {\n        border-color: $border-color;\n        @if $enable-shadows {\n          @include box-shadow($input-box-shadow, $focus-box-shadow);\n        } @else {\n          // Avoid using mixin so we can pass custom focus shadow properly\n          box-shadow: $focus-box-shadow;\n        }\n      }\n    }\n  }\n\n  // stylelint-disable-next-line selector-no-qualifying-type\n  textarea.form-control {\n    @include form-validation-state-selector($state) {\n      @if $enable-validation-icons {\n        padding-right: $input-height-inner;\n        background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n      }\n    }\n  }\n\n  .form-select {\n    @include form-validation-state-selector($state) {\n      border-color: $border-color;\n\n      @if $enable-validation-icons {\n        &:not([multiple]):not([size]),\n        &:not([multiple])[size='1'] {\n          --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n          padding-right: $form-select-feedback-icon-padding-end;\n          background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n          background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n        }\n      }\n\n      &:focus {\n        border-color: $border-color;\n        @if $enable-shadows {\n          @include box-shadow($form-select-box-shadow, $focus-box-shadow);\n        } @else {\n          // Avoid using mixin so we can pass custom focus shadow properly\n          box-shadow: $focus-box-shadow;\n        }\n      }\n    }\n  }\n\n  .form-control-color {\n    @include form-validation-state-selector($state) {\n      @if $enable-validation-icons {\n        width: add($form-color-width, $input-height-inner);\n      }\n    }\n  }\n\n  .form-check-input {\n    @include form-validation-state-selector($state) {\n      border-color: $border-color;\n\n      &:checked {\n        background-color: $color;\n      }\n\n      &:focus {\n        box-shadow: $focus-box-shadow;\n      }\n\n      ~ .form-check-label {\n        color: $color;\n      }\n    }\n  }\n  .form-check-inline .form-check-input {\n    ~ .#{$state}-feedback {\n      margin-left: 0.5em;\n    }\n  }\n\n  .input-group {\n    > .form-control:not(:focus),\n    > .form-select:not(:focus),\n    > .form-floating:not(:focus-within) {\n      @include form-validation-state-selector($state) {\n        @if $state == 'valid' {\n          z-index: 3;\n        } @else if $state == 'invalid' {\n          z-index: 4;\n        }\n      }\n    }\n  }\n}\n// scss-docs-end form-validation-mixins\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_gradients.scss",
    "content": "// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n  background-color: $color;\n\n  @if $enable-gradients {\n    background-image: var(--#{$prefix}gradient);\n  }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x(\n  $start-color: $gray-700,\n  $end-color: $gray-800,\n  $start-percent: 0%,\n  $end-percent: 100%\n) {\n  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y(\n  $start-color: $gray-700,\n  $end-color: $gray-800,\n  $start-percent: null,\n  $end-percent: null\n) {\n  background-image: linear-gradient(\n    to bottom,\n    $start-color $start-percent,\n    $end-color $end-percent\n  );\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n  background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors(\n  $start-color: $blue,\n  $mid-color: $purple,\n  $color-stop: 50%,\n  $end-color: $red\n) {\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors(\n  $start-color: $blue,\n  $mid-color: $purple,\n  $color-stop: 50%,\n  $end-color: $red\n) {\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, 0.15), $angle: 45deg) {\n  background-image: linear-gradient(\n    $angle,\n    $color 25%,\n    transparent 25%,\n    transparent 50%,\n    $color 50%,\n    $color 75%,\n    transparent 75%,\n    transparent\n  );\n}\n// scss-docs-end gradient-mixins\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_grid.scss",
    "content": "// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n  --#{$prefix}gutter-x: #{$gutter};\n  --#{$prefix}gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n  margin-top: calc(\n    -1 * var(--#{$prefix}gutter-y)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-right: calc(\n    -0.5 * var(--#{$prefix}gutter-x)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-left: calc(\n    -0.5 * var(--#{$prefix}gutter-x)\n  ); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n  // Add box sizing if only the grid is loaded\n  box-sizing: if(\n    variable-exists(include-column-box-sizing) and $include-column-box-sizing,\n    border-box,\n    null\n  );\n  // Prevent columns from becoming too narrow when at smaller grid tiers by\n  // always setting `width: 100%;`. This works because we set the width\n  // later on to override this initial width.\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n  padding-right: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  padding-left: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n  @if $size {\n    flex: 0 0 auto;\n    width: percentage(divide($size, $columns));\n  } @else {\n    flex: 1 1 0;\n    max-width: 100%;\n  }\n}\n\n@mixin make-col-auto() {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n  $num: divide($size, $columns);\n  margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n  > * {\n    flex: 0 0 auto;\n    width: percentage(divide(1, $count));\n  }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns(\n  $columns: $grid-columns,\n  $gutter: $grid-gutter-width,\n  $breakpoints: $grid-breakpoints\n) {\n  @each $breakpoint in map-keys($breakpoints) {\n    $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n      .col#{$infix} {\n        flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n      }\n\n      .row-cols#{$infix}-auto > * {\n        @include make-col-auto();\n      }\n\n      @if $grid-row-columns > 0 {\n        @for $i from 1 through $grid-row-columns {\n          .row-cols#{$infix}-#{$i} {\n            @include row-cols($i);\n          }\n        }\n      }\n\n      .col#{$infix}-auto {\n        @include make-col-auto();\n      }\n\n      @if $columns > 0 {\n        @for $i from 1 through $columns {\n          .col#{$infix}-#{$i} {\n            @include make-col($i, $columns);\n          }\n        }\n\n        // `$columns - 1` because offsetting by the width of an entire row isn't possible\n        @for $i from 0 through ($columns - 1) {\n          @if not($infix == '' and $i == 0) {\n            // Avoid emitting useless .offset-0\n            .offset#{$infix}-#{$i} {\n              @include make-col-offset($i, $columns);\n            }\n          }\n        }\n      }\n\n      // Gutters\n      //\n      // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n      @each $key, $value in $gutters {\n        .g#{$infix}-#{$key},\n        .gx#{$infix}-#{$key} {\n          --#{$prefix}gutter-x: #{$value};\n        }\n\n        .g#{$infix}-#{$key},\n        .gy#{$infix}-#{$key} {\n          --#{$prefix}gutter-y: #{$value};\n        }\n      }\n    }\n  }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n  @each $breakpoint in map-keys($breakpoints) {\n    $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      @if $columns > 0 {\n        @for $i from 1 through $columns {\n          .g-col#{$infix}-#{$i} {\n            grid-column: auto / span $i;\n          }\n        }\n\n        // Start with `1` because `0` is an invalid value.\n        // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n        @for $i from 1 through ($columns - 1) {\n          .g-start#{$infix}-#{$i} {\n            grid-column-start: $i;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_image.scss",
    "content": "// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n  // Part 1: Set a maximum relative to the parent\n  max-width: 100%;\n  // Part 2: Override the height to auto, otherwise images will be stretched\n  // when setting a width and height attribute on the img element.\n  height: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_list-group.scss",
    "content": "@include deprecate('`list-group-item-variant()`', 'v5.3.0', 'v6.0.0');\n\n// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n  .list-group-item-#{$state} {\n    color: $color;\n    background-color: $background;\n\n    &.list-group-item-action {\n      &:hover,\n      &:focus {\n        color: $color;\n        background-color: shade-color($background, 10%);\n      }\n\n      &.active {\n        color: $white;\n        background-color: $color;\n        border-color: $color;\n      }\n    }\n  }\n}\n// scss-docs-end list-group-mixin\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_lists.scss",
    "content": "// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_pagination.scss",
    "content": "// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n  --#{$prefix}pagination-padding-x: #{$padding-x};\n  --#{$prefix}pagination-padding-y: #{$padding-y};\n  @include rfs($font-size, --#{$prefix}pagination-font-size);\n  --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_reset-text.scss",
    "content": "@mixin reset-text {\n  font-family: $font-family-base;\n  // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n  font-style: normal;\n  font-weight: $font-weight-normal;\n  line-height: $line-height-base;\n  text-align: left; // Fallback for where `start` is not supported\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_resize.scss",
    "content": "// Resize anything\n\n@mixin resizable($direction) {\n  overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n  resize: $direction; // Options: horizontal, vertical, both\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_table-variants.scss",
    "content": "// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n  .table-#{$state} {\n    $color: color-contrast(opaque($body-bg, $background));\n    $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n    $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n    $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n    $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n    --#{$prefix}table-color: #{$color};\n    --#{$prefix}table-bg: #{$background};\n    --#{$prefix}table-border-color: #{$table-border-color};\n    --#{$prefix}table-striped-bg: #{$striped-bg};\n    --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n    --#{$prefix}table-active-bg: #{$active-bg};\n    --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n    --#{$prefix}table-hover-bg: #{$hover-bg};\n    --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n    color: var(--#{$prefix}table-color);\n    border-color: var(--#{$prefix}table-border-color);\n  }\n}\n// scss-docs-end table-variant\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_text-truncate.scss",
    "content": "// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_transition.scss",
    "content": "// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n  @if length($transition) == 0 {\n    $transition: $transition-base;\n  }\n\n  @if length($transition) > 1 {\n    @each $value in $transition {\n      @if $value == null or $value == none {\n        @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n      }\n    }\n  }\n\n  @if $enable-transitions {\n    @if nth($transition, 1) != null {\n      transition: $transition;\n    }\n\n    @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n      @media (prefers-reduced-motion: reduce) {\n        transition: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_utilities.scss",
    "content": "// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix: '', $is-rfs-media-query: false) {\n  $values: map-get($utility, values);\n\n  // If the values are a list or string, convert it into a map\n  @if type-of($values) == 'string' or type-of(nth($values, 1)) != 'list' {\n    $values: zip($values, $values);\n  }\n\n  @each $key, $value in $values {\n    $properties: map-get($utility, property);\n\n    // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n    @if type-of($properties) == 'string' {\n      $properties: append((), $properties);\n    }\n\n    // Use custom class if present\n    $property-class: if(\n      map-has-key($utility, class),\n      map-get($utility, class),\n      nth($properties, 1)\n    );\n    $property-class: if($property-class == null, '', $property-class);\n\n    // Use custom CSS variable name if present, otherwise default to `class`\n    $css-variable-name: if(\n      map-has-key($utility, css-variable-name),\n      map-get($utility, css-variable-name),\n      map-get($utility, class)\n    );\n\n    // State params to generate pseudo-classes\n    $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n    $infix: if(\n      $property-class == '' and str-slice($infix, 1, 1) == '-',\n      str-slice($infix, 2),\n      $infix\n    );\n\n    // Don't prefix if value key is null (e.g. with shadow class)\n    $property-class-modifier: if(\n      $key,\n      if($property-class == '' and $infix == '', '', '-') + $key,\n      ''\n    );\n\n    @if map-get($utility, rfs) {\n      // Inside the media query\n      @if $is-rfs-media-query {\n        $val: rfs-value($value);\n\n        // Do not render anything if fluid and non fluid values are the same\n        $value: if($val == rfs-fluid-value($value), null, $val);\n      } @else {\n        $value: rfs-fluid-value($value);\n      }\n    }\n\n    $is-css-var: map-get($utility, css-var);\n    $is-local-vars: map-get($utility, local-vars);\n    $is-rtl: map-get($utility, rtl);\n\n    @if $value != null {\n      @if $is-rtl == false {\n        /* rtl:begin:remove */\n      }\n\n      @if $is-css-var {\n        .#{$property-class + $infix + $property-class-modifier} {\n          --#{$prefix}#{$css-variable-name}: #{$value};\n        }\n\n        @each $pseudo in $state {\n          .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n            --#{$prefix}#{$css-variable-name}: #{$value};\n          }\n        }\n      } @else {\n        .#{$property-class + $infix + $property-class-modifier} {\n          @each $property in $properties {\n            @if $is-local-vars {\n              @each $local-var, $variable in $is-local-vars {\n                --#{$prefix}#{$local-var}: #{$variable};\n              }\n            }\n            #{$property}: $value if($enable-important-utilities, !important, null);\n          }\n        }\n\n        @each $pseudo in $state {\n          .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n            @each $property in $properties {\n              @if $is-local-vars {\n                @each $local-var, $variable in $is-local-vars {\n                  --#{$prefix}#{$local-var}: #{$variable};\n                }\n              }\n              #{$property}: $value if($enable-important-utilities, !important, null);\n            }\n          }\n        }\n      }\n\n      @if $is-rtl == false {\n        /* rtl:end:remove */\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/mixins/_visually-hidden.scss",
    "content": "// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n\n  // Fix for positioned table caption that could become anonymous cells\n  &:not(caption) {\n    position: absolute !important;\n  }\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n  &:not(:focus):not(:focus-within) {\n    @include visually-hidden();\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/utilities/_api.scss",
    "content": "// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n  // Generate media query if needed\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    // Loop over each utility property\n    @each $key, $utility in $utilities {\n      // The utility can be disabled with `false`, thus check if the utility is a map first\n      // Only proceed if responsive media queries are enabled or if it's the base media query\n      @if type-of($utility) == 'map' and (map-get($utility, responsive) or $infix == '') {\n        @include generate-utility($utility, $infix);\n      }\n    }\n  }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n  @each $breakpoint in map-keys($grid-breakpoints) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n      // Loop over each utility property\n      @each $key, $utility in $utilities {\n        // The utility can be disabled with `false`, thus check if the utility is a map first\n        // Only proceed if responsive media queries are enabled or if it's the base media query\n        @if type-of($utility) ==\n          'map' and\n          map-get($utility, rfs) and\n          (map-get($utility, responsive) or $infix == '')\n        {\n          @include generate-utility($utility, $infix, true);\n        }\n      }\n    }\n  }\n}\n\n// Print utilities\n@media print {\n  @each $key, $utility in $utilities {\n    // The utility can be disabled with `false`, thus check if the utility is a map first\n    // Then check if the utility needs print styles\n    @if type-of($utility) == 'map' and map-get($utility, print) == true {\n      @include generate-utility($utility, '-print');\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap/vendor/_rfs.scss",
    "content": "// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n  @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n  @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n  @error \"`#{$rfs-factor}` is not a valid  $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n  $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n  $dividend: abs($dividend);\n  $divisor: abs($divisor);\n  @if $dividend == 0 {\n    @return 0;\n  }\n  @if $divisor == 0 {\n    @error \"Cannot divide by 0\";\n  }\n  $remainder: $dividend;\n  $result: 0;\n  $factor: 10;\n  @while ($remainder > 0 and $precision >= 0) {\n    $quotient: 0;\n    @while ($remainder >= $divisor) {\n      $remainder: $remainder - $divisor;\n      $quotient: $quotient + 1;\n    }\n    $result: $result * 10 + $quotient;\n    $factor: $factor * 0.1;\n    $remainder: $remainder * 10;\n    $precision: $precision - 1;\n    @if ($precision < 0 and $remainder >= $divisor * 5) {\n      $result: $result + 1;\n    }\n  }\n  $result: $result * $factor * $sign;\n  $dividend-unit: unit($dividend);\n  $divisor-unit: unit($divisor);\n  $unit-map: (\n    'px': 1px,\n    'rem': 1rem,\n    'em': 1em,\n    '%': 1%,\n  );\n  @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n    $result: $result * map-get($unit-map, $dividend-unit);\n  }\n  @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n  $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n} @else if $rfs-base-value-unit == rem {\n  $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n  $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n} @else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == 'em' {\n  $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if(\n  $rfs-breakpoint-unit == px,\n  #{$rfs-breakpoint}px,\n  #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit}\n);\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n  @if $rfs-two-dimensional {\n    @if $rfs-mode == max-media-query {\n      @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n        @content;\n      }\n    } @else {\n      @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n        @content;\n      }\n    }\n  } @else {\n    @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n      @content;\n    }\n  }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n  @if $rfs-class == disable and $rfs-mode == max-media-query {\n    // Adding an extra class increases specificity, which prevents the media query to override the property\n    &,\n    .disable-rfs &,\n    &.disable-rfs {\n      @content;\n    }\n  } @else if $rfs-class == enable and $rfs-mode == min-media-query {\n    .enable-rfs &,\n    &.enable-rfs {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n  @if $rfs-class == enable {\n    @if $rfs-mode == min-media-query {\n      @content;\n    }\n\n    @include _rfs-media-query() {\n      .enable-rfs &,\n      &.enable-rfs {\n        @content;\n      }\n    }\n  } @else {\n    @if $rfs-class == disable and $rfs-mode == min-media-query {\n      .disable-rfs &,\n      &.disable-rfs {\n        @content;\n      }\n    }\n    @include _rfs-media-query() {\n      @content;\n    }\n  }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n  // Convert to list\n  $values: if(type-of($values) != list, ($values), $values);\n\n  $val: '';\n\n  // Loop over each value and calculate value\n  @each $value in $values {\n    @if $value == 0 {\n      $val: $val + ' 0';\n    } @else {\n      // Cache $value unit\n      $unit: if(type-of($value) == 'number', unit($value), false);\n\n      @if $unit == px {\n        // Convert to rem if needed\n        $val: $val +\n          ' ' +\n          if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n      } @else if $unit == rem {\n        // Convert to px if needed\n        $val: $val +\n          ' ' +\n          if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n      } @else {\n        // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n        $val: $val + ' ' + $value;\n      }\n    }\n  }\n\n  // Remove first space\n  @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n  // Convert to list\n  $values: if(type-of($values) != list, ($values), $values);\n\n  $val: '';\n\n  // Loop over each value and calculate value\n  @each $value in $values {\n    @if $value == 0 {\n      $val: $val + ' 0';\n    } @else {\n      // Cache $value unit\n      $unit: if(type-of($value) == 'number', unit($value), false);\n\n      // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n      @if not $unit or $unit != px and $unit != rem {\n        $val: $val + ' ' + $value;\n      } @else {\n        // Remove unit from $value for calculations\n        $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n        // Only add the media query if the value is greater than the minimum value\n        @if abs($value) <= $rfs-base-value or not $enable-rfs {\n          $val: $val +\n            ' ' +\n            if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n        } @else {\n          // Calculate the minimum value\n          $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n          // Calculate difference between $value and the minimum value\n          $value-diff: abs($value) - $value-min;\n\n          // Base value formatting\n          $min-width: if(\n            $rfs-unit == rem,\n            #{divide($value-min, $rfs-rem-value)}rem,\n            #{$value-min}px\n          );\n\n          // Use negative value if needed\n          $min-width: if($value < 0, -$min-width, $min-width);\n\n          // Use `vmin` if two-dimensional is enabled\n          $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n          // Calculate the variable width between 0 and $rfs-breakpoint\n          $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n          // Return the calculated value\n          $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n        }\n      }\n    }\n  }\n\n  // Remove first space\n  @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n  @if $values != null {\n    $val: rfs-value($values);\n    $fluid-val: rfs-fluid-value($values);\n\n    // Do not print the media query if responsive & non-responsive values are the same\n    @if $val == $fluid-val {\n      #{$property}: $val;\n    } @else {\n      @include _rfs-rule() {\n        #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n        // Include safari iframe resize fix if needed\n        min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n      }\n\n      @include _rfs-media-query-rule() {\n        #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n      }\n    }\n  }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n  @include rfs($value);\n}\n\n@mixin padding($value) {\n  @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n  @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n  @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n  @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n  @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n  @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n  @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n  @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n  @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n  @include rfs($value, margin-left);\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_accordion.scss",
    "content": "//\n// Base styles\n//\n\n.accordion {\n  // scss-docs-start accordion-css-vars\n  --#{$prefix}accordion-color: #{$accordion-color};\n  --#{$prefix}accordion-bg: #{$accordion-bg};\n  --#{$prefix}accordion-transition: #{$accordion-transition};\n  --#{$prefix}accordion-border-color: #{$accordion-border-color};\n  --#{$prefix}accordion-border-width: #{$accordion-border-width};\n  --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n  --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n  --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n  --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n  --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n  --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n  --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n  --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n  --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n  --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n  --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n  --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n  --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n  --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n  --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n  --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n  // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n  @include font-size($font-size-base);\n  color: var(--#{$prefix}accordion-btn-color);\n  text-align: left; // Reset button style\n  background-color: var(--#{$prefix}accordion-btn-bg);\n  border: 0;\n  @include border-radius(0);\n  overflow-anchor: none;\n  @include transition(var(--#{$prefix}accordion-transition));\n\n  &:not(.collapsed) {\n    color: var(--#{$prefix}accordion-active-color);\n    background-color: var(--#{$prefix}accordion-active-bg);\n    box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0\n      var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n    &::after {\n      background-image: var(--#{$prefix}accordion-btn-active-icon);\n      transform: var(--#{$prefix}accordion-btn-icon-transform);\n    }\n  }\n\n  // Accordion icon\n  &::after {\n    flex-shrink: 0;\n    width: var(--#{$prefix}accordion-btn-icon-width);\n    height: var(--#{$prefix}accordion-btn-icon-width);\n    margin-left: auto;\n    content: '';\n    background-image: var(--#{$prefix}accordion-btn-icon);\n    background-repeat: no-repeat;\n    background-size: var(--#{$prefix}accordion-btn-icon-width);\n    @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n  }\n\n  &:hover {\n    z-index: 2;\n  }\n\n  &:focus {\n    z-index: 3;\n    outline: 0;\n    box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n  }\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  color: var(--#{$prefix}accordion-color);\n  background-color: var(--#{$prefix}accordion-bg);\n  border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n  &:first-of-type {\n    @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n    > .accordion-header .accordion-button {\n      @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n    }\n  }\n\n  &:not(:first-of-type) {\n    border-top: 0;\n  }\n\n  // Only set a border-radius on the last item if the accordion is collapsed\n  &:last-of-type {\n    @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n    > .accordion-header .accordion-button {\n      &.collapsed {\n        @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n      }\n    }\n\n    > .accordion-collapse {\n      @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n    }\n  }\n}\n\n.accordion-body {\n  padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n  > .accordion-item {\n    border-right: 0;\n    border-left: 0;\n    @include border-radius(0);\n\n    &:first-child {\n      border-top: 0;\n    }\n    &:last-child {\n      border-bottom: 0;\n    }\n\n    // stylelint-disable selector-max-class\n    > .accordion-header .accordion-button {\n      &,\n      &.collapsed {\n        @include border-radius(0);\n      }\n    }\n    // stylelint-enable selector-max-class\n\n    > .accordion-collapse {\n      @include border-radius(0);\n    }\n  }\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .accordion-button::after {\n      --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};\n      --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_alert.scss",
    "content": "//\n// Base styles\n//\n\n.alert {\n  // scss-docs-start alert-css-vars\n  --#{$prefix}alert-bg: transparent;\n  --#{$prefix}alert-padding-x: #{$alert-padding-x};\n  --#{$prefix}alert-padding-y: #{$alert-padding-y};\n  --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n  --#{$prefix}alert-color: inherit;\n  --#{$prefix}alert-border-color: transparent;\n  --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n  --#{$prefix}alert-border-radius: #{$alert-border-radius};\n  --#{$prefix}alert-link-color: inherit;\n  // scss-docs-end alert-css-vars\n\n  position: relative;\n  padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n  margin-bottom: var(--#{$prefix}alert-margin-bottom);\n  color: var(--#{$prefix}alert-color);\n  background-color: var(--#{$prefix}alert-bg);\n  border: var(--#{$prefix}alert-border);\n  @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n  // Specified to prevent conflicts of changing $headings-color\n  color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n  font-weight: $alert-link-font-weight;\n  color: var(--#{$prefix}alert-link-color);\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n  padding-right: $alert-dismissible-padding-r;\n\n  // Adjust close link position\n  .btn-close {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: $stretched-link-z-index + 1;\n    padding: $alert-padding-y * 1.25 $alert-padding-x;\n  }\n}\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n  .alert-#{$state} {\n    --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis);\n    --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n    --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text-emphasis);\n  }\n}\n// scss-docs-end alert-modifiers\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_badge.scss",
    "content": "// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n  // scss-docs-start badge-css-vars\n  --#{$prefix}badge-padding-x: #{$badge-padding-x};\n  --#{$prefix}badge-padding-y: #{$badge-padding-y};\n  @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n  --#{$prefix}badge-font-weight: #{$badge-font-weight};\n  --#{$prefix}badge-color: #{$badge-color};\n  --#{$prefix}badge-border-radius: #{$badge-border-radius};\n  // scss-docs-end badge-css-vars\n\n  display: inline-block;\n  padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n  @include font-size(var(--#{$prefix}badge-font-size));\n  font-weight: var(--#{$prefix}badge-font-weight);\n  line-height: 1;\n  color: var(--#{$prefix}badge-color);\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  @include border-radius(var(--#{$prefix}badge-border-radius));\n  @include gradient-bg();\n\n  // Empty badges collapse automatically\n  &:empty {\n    display: none;\n  }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_breadcrumb.scss",
    "content": ".breadcrumb {\n  // scss-docs-start breadcrumb-css-vars\n  --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n  --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n  --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n  @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n  --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n  --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n  --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n  --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n  --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n  // scss-docs-end breadcrumb-css-vars\n\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n  margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n  @include font-size(var(--#{$prefix}breadcrumb-font-size));\n  list-style: none;\n  background-color: var(--#{$prefix}breadcrumb-bg);\n  @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n  // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n  + .breadcrumb-item {\n    padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n    &::before {\n      float: left; // Suppress inline spacings and underlining of the separator\n      padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n      color: var(--#{$prefix}breadcrumb-divider-color);\n      content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{'/* rtl:'} var(\n          --#{$prefix}breadcrumb-divider,\n          escape-svg($breadcrumb-divider-flipped)\n        ) #{'*/'};\n    }\n  }\n\n  &.active {\n    color: var(--#{$prefix}breadcrumb-item-active-color);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_button-group.scss",
    "content": "// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n\n  > .btn {\n    position: relative;\n    flex: 1 1 auto;\n  }\n\n  // Bring the hover, focused, and \"active\" buttons to the front to overlay\n  // the borders properly\n  > .btn-check:checked + .btn,\n  > .btn-check:focus + .btn,\n  > .btn:hover,\n  > .btn:focus,\n  > .btn:active,\n  > .btn.active {\n    z-index: 1;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n\n  .input-group {\n    width: auto;\n  }\n}\n\n.btn-group {\n  @include border-radius($btn-border-radius);\n\n  // Prevent double borders when buttons are next to each other\n  > :not(.btn-check:first-child) + .btn,\n  > .btn-group:not(:first-child) {\n    margin-left: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list\n  }\n\n  // Reset rounded corners\n  > .btn:not(:last-child):not(.dropdown-toggle),\n  > .btn.dropdown-toggle-split:first-child,\n  > .btn-group:not(:last-child) > .btn {\n    @include border-end-radius(0);\n  }\n\n  // The left radius should be 0 if the button is:\n  // - the \"third or more\" child\n  // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n  // - part of a btn-group which isn't the first child\n  > .btn:nth-child(n + 3),\n  > :not(.btn-check) + .btn,\n  > .btn-group:not(:first-child) > .btn {\n    @include border-start-radius(0);\n  }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn {\n  @extend .btn-sm;\n}\n.btn-group-lg > .btn {\n  @extend .btn-lg;\n}\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n  padding-right: $btn-padding-x * 0.75;\n  padding-left: $btn-padding-x * 0.75;\n\n  &::after,\n  .dropup &::after,\n  .dropend &::after {\n    margin-left: 0;\n  }\n\n  .dropstart &::before {\n    margin-right: 0;\n  }\n}\n\n.btn-sm + .dropdown-toggle-split {\n  padding-right: $btn-padding-x-sm * 0.75;\n  padding-left: $btn-padding-x-sm * 0.75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n  padding-right: $btn-padding-x-lg * 0.75;\n  padding-left: $btn-padding-x-lg * 0.75;\n}\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n  @include box-shadow($btn-active-box-shadow);\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    @include box-shadow(none);\n  }\n}\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n\n  > .btn,\n  > .btn-group {\n    width: 100%;\n  }\n\n  > .btn:not(:first-child),\n  > .btn-group:not(:first-child) {\n    margin-top: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list\n  }\n\n  // Reset rounded corners\n  > .btn:not(:last-child):not(.dropdown-toggle),\n  > .btn-group:not(:last-child) > .btn {\n    @include border-bottom-radius(0);\n  }\n\n  > .btn ~ .btn,\n  > .btn-group:not(:first-child) > .btn {\n    @include border-top-radius(0);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_buttons.scss",
    "content": "//\n// Base styles\n//\n\n.btn {\n  // scss-docs-start btn-css-vars\n  --#{$prefix}btn-padding-x: #{$btn-padding-x};\n  --#{$prefix}btn-padding-y: #{$btn-padding-y};\n  --#{$prefix}btn-font-family: #{$btn-font-family};\n  @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n  --#{$prefix}btn-font-weight: #{$btn-font-weight};\n  --#{$prefix}btn-line-height: #{$btn-line-height};\n  --#{$prefix}btn-color: #{$btn-color};\n  --#{$prefix}btn-bg: transparent;\n  --#{$prefix}btn-border-width: #{$btn-border-width};\n  --#{$prefix}btn-border-color: transparent;\n  --#{$prefix}btn-border-radius: #{$btn-border-radius};\n  --#{$prefix}btn-hover-border-color: transparent;\n  --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n  --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n  --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), 0.5);\n  // scss-docs-end btn-css-vars\n\n  display: inline-block;\n  padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n  font-family: var(--#{$prefix}btn-font-family);\n  @include font-size(var(--#{$prefix}btn-font-size));\n  font-weight: var(--#{$prefix}btn-font-weight);\n  line-height: var(--#{$prefix}btn-line-height);\n  color: var(--#{$prefix}btn-color);\n  text-align: center;\n  text-decoration: if($link-decoration == none, null, none);\n  white-space: $btn-white-space;\n  vertical-align: middle;\n  cursor: if($enable-button-pointers, pointer, null);\n  user-select: none;\n  border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n  @include border-radius(var(--#{$prefix}btn-border-radius));\n  @include gradient-bg(var(--#{$prefix}btn-bg));\n  @include box-shadow(var(--#{$prefix}btn-box-shadow));\n  @include transition($btn-transition);\n\n  &:hover {\n    color: var(--#{$prefix}btn-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n    background-color: var(--#{$prefix}btn-hover-bg);\n    border-color: var(--#{$prefix}btn-hover-border-color);\n  }\n\n  .btn-check + &:hover {\n    // override for the checkbox/radio buttons\n    color: var(--#{$prefix}btn-color);\n    background-color: var(--#{$prefix}btn-bg);\n    border-color: var(--#{$prefix}btn-border-color);\n  }\n\n  &:focus-visible {\n    color: var(--#{$prefix}btn-hover-color);\n    @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n    border-color: var(--#{$prefix}btn-hover-border-color);\n    outline: 0;\n    // Avoid using mixin so we can pass custom focus shadow properly\n    @if $enable-shadows {\n      box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n    } @else {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  .btn-check:focus-visible + & {\n    border-color: var(--#{$prefix}btn-hover-border-color);\n    outline: 0;\n    // Avoid using mixin so we can pass custom focus shadow properly\n    @if $enable-shadows {\n      box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n    } @else {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  .btn-check:checked + &,\n  :not(.btn-check) + &:active,\n  &:first-child:active,\n  &.active,\n  &.show {\n    color: var(--#{$prefix}btn-active-color);\n    background-color: var(--#{$prefix}btn-active-bg);\n    // Remove CSS gradients if they're enabled\n    background-image: if($enable-gradients, none, null);\n    border-color: var(--#{$prefix}btn-active-border-color);\n    @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n    &:focus-visible {\n      // Avoid using mixin so we can pass custom focus shadow properly\n      @if $enable-shadows {\n        box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n      } @else {\n        box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n      }\n    }\n  }\n\n  .btn-check:checked:focus-visible + & {\n    // Avoid using mixin so we can pass custom focus shadow properly\n    @if $enable-shadows {\n      box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n    } @else {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    color: var(--#{$prefix}btn-disabled-color);\n    pointer-events: none;\n    background-color: var(--#{$prefix}btn-disabled-bg);\n    background-image: if($enable-gradients, none, null);\n    border-color: var(--#{$prefix}btn-disabled-border-color);\n    opacity: var(--#{$prefix}btn-disabled-opacity);\n    @include box-shadow(none);\n  }\n}\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n  .btn-#{$color} {\n    @if $color == 'light' {\n      @include button-variant(\n        $value,\n        $value,\n        $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n        $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n        $active-background: shade-color($value, $btn-active-bg-shade-amount),\n        $active-border: shade-color($value, $btn-active-border-shade-amount)\n      );\n    } @else if $color == 'dark' {\n      @include button-variant(\n        $value,\n        $value,\n        $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n        $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n        $active-background: tint-color($value, $btn-active-bg-tint-amount),\n        $active-border: tint-color($value, $btn-active-border-tint-amount)\n      );\n    } @else {\n      @include button-variant($value, $value);\n    }\n  }\n}\n\n@each $color, $value in $theme-colors {\n  .btn-outline-#{$color} {\n    @include button-outline-variant($value);\n  }\n}\n// scss-docs-end btn-variant-loops\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n  --#{$prefix}btn-font-weight: #{$font-weight-normal};\n  --#{$prefix}btn-color: #{$btn-link-color};\n  --#{$prefix}btn-bg: transparent;\n  --#{$prefix}btn-border-color: transparent;\n  --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n  --#{$prefix}btn-hover-border-color: transparent;\n  --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n  --#{$prefix}btn-active-border-color: transparent;\n  --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n  --#{$prefix}btn-disabled-border-color: transparent;\n  --#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows\n  --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb};\n\n  text-decoration: $link-decoration;\n  @if $enable-gradients {\n    background-image: none;\n  }\n\n  &:hover,\n  &:focus-visible {\n    text-decoration: $link-hover-decoration;\n  }\n\n  &:focus-visible {\n    color: var(--#{$prefix}btn-color);\n  }\n\n  &:hover {\n    color: var(--#{$prefix}btn-hover-color);\n  }\n\n  // No need for an active state here\n}\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n  @include button-size(\n    $btn-padding-y-lg,\n    $btn-padding-x-lg,\n    $btn-font-size-lg,\n    $btn-border-radius-lg\n  );\n}\n\n.btn-sm {\n  @include button-size(\n    $btn-padding-y-sm,\n    $btn-padding-x-sm,\n    $btn-font-size-sm,\n    $btn-border-radius-sm\n  );\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_card.scss",
    "content": "//\n// Base styles\n//\n\n.card {\n  // scss-docs-start card-css-vars\n  --#{$prefix}card-spacer-y: #{$card-spacer-y};\n  --#{$prefix}card-spacer-x: #{$card-spacer-x};\n  --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n  --#{$prefix}card-title-color: #{$card-title-color};\n  --#{$prefix}card-subtitle-color: #{$card-subtitle-color};\n  --#{$prefix}card-border-width: #{$card-border-width};\n  --#{$prefix}card-border-color: #{$card-border-color};\n  --#{$prefix}card-border-radius: #{$card-border-radius};\n  --#{$prefix}card-box-shadow: #{$card-box-shadow};\n  --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n  --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n  --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n  --#{$prefix}card-cap-bg: #{$card-cap-bg};\n  --#{$prefix}card-cap-color: #{$card-cap-color};\n  --#{$prefix}card-height: #{$card-height};\n  --#{$prefix}card-color: #{$card-color};\n  --#{$prefix}card-bg: #{$card-bg};\n  --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n  --#{$prefix}card-group-margin: #{$card-group-margin};\n  // scss-docs-end card-css-vars\n\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n  height: var(--#{$prefix}card-height);\n  color: var(--#{$prefix}body-color);\n  word-wrap: break-word;\n  background-color: var(--#{$prefix}card-bg);\n  background-clip: border-box;\n  border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n  @include border-radius(var(--#{$prefix}card-border-radius));\n  @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n  > hr {\n    margin-right: 0;\n    margin-left: 0;\n  }\n\n  > .list-group {\n    border-top: inherit;\n    border-bottom: inherit;\n\n    &:first-child {\n      border-top-width: 0;\n      @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n    }\n\n    &:last-child {\n      border-bottom-width: 0;\n      @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n    }\n  }\n\n  // Due to specificity of the above selector (`.card > .list-group`), we must\n  // use a child selector here to prevent double borders.\n  > .card-header + .list-group,\n  > .list-group + .card-footer {\n    border-top: 0;\n  }\n}\n\n.card-body {\n  // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n  // as much space as possible, ensuring footers are aligned to the bottom.\n  flex: 1 1 auto;\n  padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n  color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n  margin-bottom: var(--#{$prefix}card-title-spacer-y);\n  color: var(--#{$prefix}card-title-color);\n}\n\n.card-subtitle {\n  margin-top: calc(\n    -0.5 * var(--#{$prefix}card-title-spacer-y)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-bottom: 0;\n  color: var(--#{$prefix}card-subtitle-color);\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link {\n  &:hover {\n    text-decoration: if($link-hover-decoration == underline, none, null);\n  }\n\n  + .card-link {\n    margin-left: var(--#{$prefix}card-spacer-x);\n  }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n  padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n  margin-bottom: 0; // Removes the default margin-bottom of <hN>\n  color: var(--#{$prefix}card-cap-color);\n  background-color: var(--#{$prefix}card-cap-bg);\n  border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n  &:first-child {\n    @include border-radius(\n      var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0\n    );\n  }\n}\n\n.card-footer {\n  padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n  color: var(--#{$prefix}card-cap-color);\n  background-color: var(--#{$prefix}card-cap-bg);\n  border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n  &:last-child {\n    @include border-radius(\n      0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius)\n    );\n  }\n}\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n  margin-right: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-bottom: calc(\n    -1 * var(--#{$prefix}card-cap-padding-y)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-left: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n  border-bottom: 0;\n\n  .nav-link.active {\n    background-color: var(--#{$prefix}card-bg);\n    border-bottom-color: var(--#{$prefix}card-bg);\n  }\n}\n\n.card-header-pills {\n  margin-right: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-left: calc(\n    -0.5 * var(--#{$prefix}card-cap-padding-x)\n  ); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: var(--#{$prefix}card-img-overlay-padding);\n  @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n  @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n  @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n//\n// Card groups\n//\n\n.card-group {\n  // The child selector allows nested `.card` within `.card-group`\n  // to display properly.\n  > .card {\n    margin-bottom: var(--#{$prefix}card-group-margin);\n  }\n\n  @include media-breakpoint-up(sm) {\n    display: flex;\n    flex-flow: row wrap;\n    // The child selector allows nested `.card` within `.card-group`\n    // to display properly.\n    > .card {\n      // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n      flex: 1 0 0%;\n      margin-bottom: 0;\n\n      + .card {\n        margin-left: 0;\n        border-left: 0;\n      }\n\n      // Handle rounded corners\n      @if $enable-rounded {\n        &:not(:last-child) {\n          @include border-end-radius(0);\n\n          .card-img-top,\n          .card-header {\n            // stylelint-disable-next-line property-disallowed-list\n            border-top-right-radius: 0;\n          }\n          .card-img-bottom,\n          .card-footer {\n            // stylelint-disable-next-line property-disallowed-list\n            border-bottom-right-radius: 0;\n          }\n        }\n\n        &:not(:first-child) {\n          @include border-start-radius(0);\n\n          .card-img-top,\n          .card-header {\n            // stylelint-disable-next-line property-disallowed-list\n            border-top-left-radius: 0;\n          }\n          .card-img-bottom,\n          .card-footer {\n            // stylelint-disable-next-line property-disallowed-list\n            border-bottom-left-radius: 0;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_carousel.scss",
    "content": "// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n//    even when their scroll action started on a carousel, but for compatibility (with Firefox)\n//    we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n//    the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n//    slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n//    is the upcoming slide in transition.\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n  @include clearfix();\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n  .carousel-item {\n    opacity: 0;\n    transition-property: opacity;\n    transform: none;\n  }\n\n  .carousel-item.active,\n  .carousel-item-next.carousel-item-start,\n  .carousel-item-prev.carousel-item-end {\n    z-index: 1;\n    opacity: 1;\n  }\n\n  .active.carousel-item-start,\n  .active.carousel-item-end {\n    z-index: 0;\n    opacity: 0;\n    @include transition(opacity 0s $carousel-transition-duration);\n  }\n}\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  // Use flex for alignment (1-3)\n  display: flex; // 1. allow flex styles\n  align-items: center; // 2. vertically center contents\n  justify-content: center; // 3. horizontally center contents\n  width: $carousel-control-width;\n  padding: 0;\n  color: $carousel-control-color;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: $carousel-control-opacity;\n  @include transition($carousel-control-transition);\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    color: $carousel-control-color;\n    text-decoration: none;\n    outline: 0;\n    opacity: $carousel-control-hover-opacity;\n  }\n}\n.carousel-control-prev {\n  left: 0;\n  background-image: if(\n    $enable-gradients,\n    linear-gradient(90deg, rgba($black, 0.25), rgba($black, 0.001)),\n    null\n  );\n}\n.carousel-control-next {\n  right: 0;\n  background-image: if(\n    $enable-gradients,\n    linear-gradient(270deg, rgba($black, 0.25), rgba($black, 0.001)),\n    null\n  );\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: $carousel-control-icon-width;\n  height: $carousel-control-icon-width;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: escape-svg($carousel-control-prev-icon-bg) #{'/*rtl:' +\n    escape-svg($carousel-control-next-icon-bg) + '*/'};\n}\n.carousel-control-next-icon {\n  background-image: escape-svg($carousel-control-next-icon-bg) #{'/*rtl:' +\n    escape-svg($carousel-control-prev-icon-bg) + '*/'};\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-mdb-target for each slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  // Use the .carousel-control's width as margin so we don't overlay those\n  margin-right: $carousel-control-width;\n  margin-bottom: 1rem;\n  margin-left: $carousel-control-width;\n\n  [data-mdb-target] {\n    box-sizing: content-box;\n    flex: 0 1 auto;\n    width: $carousel-indicator-width;\n    height: $carousel-indicator-height;\n    padding: 0;\n    margin-right: $carousel-indicator-spacer;\n    margin-left: $carousel-indicator-spacer;\n    text-indent: -999px;\n    cursor: pointer;\n    background-color: $carousel-indicator-active-bg;\n    background-clip: padding-box;\n    border: 0;\n    // Use transparent borders to increase the hit area by 10px on top and bottom.\n    border-top: $carousel-indicator-hit-area-height solid transparent;\n    border-bottom: $carousel-indicator-hit-area-height solid transparent;\n    opacity: $carousel-indicator-opacity;\n    @include transition($carousel-indicator-transition);\n  }\n\n  .active {\n    opacity: $carousel-indicator-active-opacity;\n  }\n}\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n  position: absolute;\n  right: (100% - $carousel-caption-width) * 0.5;\n  bottom: $carousel-caption-spacer;\n  left: (100% - $carousel-caption-width) * 0.5;\n  padding-top: $carousel-caption-padding-y;\n  padding-bottom: $carousel-caption-padding-y;\n  color: $carousel-caption-color;\n  text-align: center;\n}\n\n// Dark mode carousel\n\n@mixin carousel-dark() {\n  .carousel-control-prev-icon,\n  .carousel-control-next-icon {\n    filter: $carousel-dark-control-icon-filter;\n  }\n\n  .carousel-indicators [data-mdb-target] {\n    background-color: $carousel-dark-indicator-active-bg;\n  }\n\n  .carousel-caption {\n    color: $carousel-dark-caption-color;\n  }\n}\n\n.carousel-dark {\n  @include carousel-dark();\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    @if $color-mode-type == 'media-query' {\n      .carousel {\n        @include carousel-dark();\n      }\n    } @else {\n      .carousel,\n      &.carousel {\n        @include carousel-dark();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_close.scss",
    "content": "// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n  // scss-docs-start close-css-vars\n  --#{$prefix}btn-close-color: #{$btn-close-color};\n  --#{$prefix}btn-close-bg: #{escape-svg($btn-close-bg)};\n  --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n  --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n  --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n  --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n  --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n  --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n  // scss-docs-end close-css-vars\n\n  box-sizing: content-box;\n  width: $btn-close-width;\n  height: $btn-close-height;\n  padding: $btn-close-padding-y $btn-close-padding-x;\n  color: var(--#{$prefix}btn-close-color);\n  background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n  border: 0; // for button elements\n  @include border-radius();\n  opacity: var(--#{$prefix}btn-close-opacity);\n\n  // Override <a>'s hover style\n  &:hover {\n    color: var(--#{$prefix}btn-close-color);\n    text-decoration: none;\n    opacity: var(--#{$prefix}btn-close-hover-opacity);\n  }\n\n  &:focus {\n    outline: 0;\n    box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n    opacity: var(--#{$prefix}btn-close-focus-opacity);\n  }\n\n  &:disabled,\n  &.disabled {\n    pointer-events: none;\n    user-select: none;\n    opacity: var(--#{$prefix}btn-close-disabled-opacity);\n  }\n}\n\n@mixin btn-close-white() {\n  filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n  @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .btn-close {\n      @include btn-close-white();\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_containers.scss",
    "content": "// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n  // Single container class with breakpoint max-widths\n  .container,\n  // 100% wide container at all breakpoints\n  .container-fluid {\n    @include make-container();\n  }\n\n  // Responsive containers that are 100% wide until a breakpoint\n  @each $breakpoint, $container-max-width in $container-max-widths {\n    .container-#{$breakpoint} {\n      @extend .container-fluid;\n    }\n\n    @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n      %responsive-container-#{$breakpoint} {\n        max-width: $container-max-width;\n      }\n\n      // Extend each breakpoint which is smaller or equal to the current breakpoint\n      $extend-breakpoint: true;\n\n      @each $name, $width in $grid-breakpoints {\n        @if ($extend-breakpoint) {\n          .container#{breakpoint-infix($name, $grid-breakpoints)} {\n            @extend %responsive-container-#{$breakpoint};\n          }\n\n          // Once the current breakpoint is reached, stop extending\n          @if ($breakpoint == $name) {\n            $extend-breakpoint: false;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_dropdown.scss",
    "content": "// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n\n  // Generate the caret automatically\n  @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n  // scss-docs-start dropdown-css-vars\n  --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n  --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n  --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n  --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n  --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n  @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n  --#{$prefix}dropdown-color: #{$dropdown-color};\n  --#{$prefix}dropdown-bg: #{$dropdown-bg};\n  --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n  --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n  --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n  --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n  --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n  --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n  --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n  --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n  --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n  --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n  --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n  --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n  --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n  --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n  --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n  --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n  --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n  --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n  // scss-docs-end dropdown-css-vars\n\n  position: absolute;\n  z-index: var(--#{$prefix}dropdown-zindex);\n  display: none; // none by default, but block on \"open\" of the menu\n  min-width: var(--#{$prefix}dropdown-min-width);\n  padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n  margin: 0; // Override default margin of ul\n  @include font-size(var(--#{$prefix}dropdown-font-size));\n  color: var(--#{$prefix}dropdown-color);\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  list-style: none;\n  background-color: var(--#{$prefix}dropdown-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n  @include border-radius(var(--#{$prefix}dropdown-border-radius));\n  @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n  &[data-mdb-popper] {\n    top: 100%;\n    left: 0;\n    margin-top: var(--#{$prefix}dropdown-spacer);\n  }\n\n  @if $dropdown-padding-y == 0 {\n    > .dropdown-item:first-child,\n    > li:first-child .dropdown-item {\n      @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n    }\n    > .dropdown-item:last-child,\n    > li:last-child .dropdown-item {\n      @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n    }\n  }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    .dropdown-menu#{$infix}-start {\n      --bs-position: start;\n\n      &[data-mdb-popper] {\n        right: auto;\n        left: 0;\n      }\n    }\n\n    .dropdown-menu#{$infix}-end {\n      --bs-position: end;\n\n      &[data-mdb-popper] {\n        right: 0;\n        left: auto;\n      }\n    }\n  }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n  .dropdown-menu[data-mdb-popper] {\n    top: auto;\n    bottom: 100%;\n    margin-top: 0;\n    margin-bottom: var(--#{$prefix}dropdown-spacer);\n  }\n\n  .dropdown-toggle {\n    @include caret(up);\n  }\n}\n\n.dropend {\n  .dropdown-menu[data-mdb-popper] {\n    top: 0;\n    right: auto;\n    left: 100%;\n    margin-top: 0;\n    margin-left: var(--#{$prefix}dropdown-spacer);\n  }\n\n  .dropdown-toggle {\n    @include caret(end);\n    &::after {\n      vertical-align: 0;\n    }\n  }\n}\n\n.dropstart {\n  .dropdown-menu[data-mdb-popper] {\n    top: 0;\n    right: 100%;\n    left: auto;\n    margin-top: 0;\n    margin-right: var(--#{$prefix}dropdown-spacer);\n  }\n\n  .dropdown-toggle {\n    @include caret(start);\n    &::before {\n      vertical-align: 0;\n    }\n  }\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n  height: 0;\n  margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n  overflow: hidden;\n  border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n  opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n  display: block;\n  width: 100%; // For `<button>`s\n  padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n  clear: both;\n  font-weight: $font-weight-normal;\n  color: var(--#{$prefix}dropdown-link-color);\n  text-align: inherit; // For `<button>`s\n  text-decoration: if($link-decoration == none, null, none);\n  white-space: nowrap; // prevent links from randomly breaking onto new lines\n  background-color: transparent; // For `<button>`s\n  border: 0; // For `<button>`s\n  @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}dropdown-link-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n    @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n  }\n\n  &.active,\n  &:active {\n    color: var(--#{$prefix}dropdown-link-active-color);\n    text-decoration: none;\n    @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n  }\n\n  &.disabled,\n  &:disabled {\n    color: var(--#{$prefix}dropdown-link-disabled-color);\n    pointer-events: none;\n    background-color: transparent;\n    // Remove CSS gradients if they're enabled\n    background-image: if($enable-gradients, none, null);\n  }\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n  margin-bottom: 0; // for use with heading elements\n  @include font-size($font-size-sm);\n  color: var(--#{$prefix}dropdown-header-color);\n  white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n  display: block;\n  padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n  color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n  // scss-docs-start dropdown-dark-css-vars\n  --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n  --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n  --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n  --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n  --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n  --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n  --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n  --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n  --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n  --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n  --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n  --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n  // scss-docs-end dropdown-dark-css-vars\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_forms.scss",
    "content": "@import 'forms/labels';\n@import 'forms/form-text';\n@import 'forms/form-control';\n@import 'forms/form-select';\n@import 'forms/form-check';\n@import 'forms/form-range';\n@import 'forms/floating-labels';\n@import 'forms/input-group';\n@import 'forms/validation';\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_functions.scss",
    "content": "// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n  $prev-key: null;\n  $prev-num: null;\n  @each $key, $num in $map {\n    @if $prev-num == null or unit($num) == '%' or unit($prev-num) == '%' {\n      // Do nothing\n    } @else if not comparable($prev-num, $num) {\n      @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n    } @else if $prev-num >= $num {\n      @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n    }\n    $prev-key: $key;\n    $prev-num: $num;\n  }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: '$grid-breakpoints') {\n  @if length($map) > 0 {\n    $values: map-values($map);\n    $first-value: nth($values, 1);\n    @if $first-value != 0 {\n      @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n    }\n  }\n}\n\n// Colors\n@function to-rgb($value) {\n  @return red($value), green($value), blue($value);\n}\n\n// stylelint-disable scss/dollar-variable-pattern\n@function rgba-css-var($identifier, $target) {\n  @if $identifier == 'body' and $target == 'bg' {\n    @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity));\n  }\n  @if $identifier == 'body' and $target == 'text' {\n    @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity));\n  } @else {\n    @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity));\n  }\n}\n\n@function map-loop($map, $func, $args...) {\n  $_map: ();\n\n  @each $key, $value in $map {\n    // allow to pass the $key and $value of the map as an function argument\n    $_args: ();\n    @each $arg in $args {\n      $_args: append($_args, if($arg == '$key', $key, if($arg == '$value', $value, $arg)));\n    }\n\n    $_map: map-merge(\n      $_map,\n      (\n        $key: call(get-function($func), $_args...),\n      )\n    );\n  }\n\n  @return $_map;\n}\n// stylelint-enable scss/dollar-variable-pattern\n\n@function varify($list) {\n  $result: null;\n  @each $entry in $list {\n    $result: append($result, var(--#{$prefix}#{$entry}), space);\n  }\n  @return $result;\n}\n\n// Internal Bootstrap function to turn maps into its negative variant.\n// It prefixes the keys with `n` and makes the value negative.\n@function negativify-map($map) {\n  $result: ();\n  @each $key, $value in $map {\n    @if $key != 0 {\n      $result: map-merge($result, ('n' + $key: (-$value)));\n    }\n  }\n  @return $result;\n}\n\n// Get multiple keys from a sass map\n@function map-get-multiple($map, $values) {\n  $result: ();\n  @each $key, $value in $map {\n    @if (index($values, $key) != null) {\n      $result: map-merge(\n        $result,\n        (\n          $key: $value,\n        )\n      );\n    }\n  }\n  @return $result;\n}\n\n// Merge multiple maps\n@function map-merge-multiple($maps...) {\n  $merged-maps: ();\n\n  @each $map in $maps {\n    $merged-maps: map-merge($merged-maps, $map);\n  }\n  @return $merged-maps;\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Kitty Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: '') {\n  $index: str-index($string, $search);\n\n  @if $index {\n    @return str-slice($string, 1, $index - 1) + $replace +\n      str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n  }\n\n  @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n  @if str-index($string, 'data:image/svg+xml') {\n    @each $char, $encoded in $escaped-characters {\n      // Do not escape the url brackets\n      @if str-index($string, 'url(') == 1 {\n        $string: url('#{str-replace(str-slice($string, 6, -3), $char, $encoded)}');\n      } @else {\n        $string: str-replace($string, $char, $encoded);\n      }\n    }\n  }\n\n  @return $string;\n}\n\n// Color contrast\n// See https://github.com/twbs/bootstrap/pull/30168\n\n// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)\n// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern\n$_luminance-list: 0.0008 0.001 0.0011 0.0013 0.0015 0.0017 0.002 0.0022 0.0025 0.0027 0.003 0.0033\n  0.0037 0.004 0.0044 0.0048 0.0052 0.0056 0.006 0.0065 0.007 0.0075 0.008 0.0086 0.0091 0.0097\n  0.0103 0.011 0.0116 0.0123 0.013 0.0137 0.0144 0.0152 0.016 0.0168 0.0176 0.0185 0.0194 0.0203\n  0.0212 0.0222 0.0232 0.0242 0.0252 0.0262 0.0273 0.0284 0.0296 0.0307 0.0319 0.0331 0.0343 0.0356\n  0.0369 0.0382 0.0395 0.0409 0.0423 0.0437 0.0452 0.0467 0.0482 0.0497 0.0513 0.0529 0.0545 0.0561\n  0.0578 0.0595 0.0612 0.063 0.0648 0.0666 0.0685 0.0704 0.0723 0.0742 0.0762 0.0782 0.0802 0.0823\n  0.0844 0.0865 0.0887 0.0908 0.0931 0.0953 0.0976 0.0999 0.1022 0.1046 0.107 0.1095 0.1119 0.1144\n  0.117 0.1195 0.1221 0.1248 0.1274 0.1301 0.1329 0.1356 0.1384 0.1413 0.1441 0.147 0.15 0.1529\n  0.1559 0.159 0.162 0.1651 0.1683 0.1714 0.1746 0.1779 0.1812 0.1845 0.1878 0.1912 0.1946 0.1981\n  0.2016 0.2051 0.2086 0.2122 0.2159 0.2195 0.2232 0.227 0.2307 0.2346 0.2384 0.2423 0.2462 0.2502\n  0.2542 0.2582 0.2623 0.2664 0.2705 0.2747 0.2789 0.2831 0.2874 0.2918 0.2961 0.3005 0.305 0.3095\n  0.314 0.3185 0.3231 0.3278 0.3325 0.3372 0.3419 0.3467 0.3515 0.3564 0.3613 0.3663 0.3712 0.3763\n  0.3813 0.3864 0.3916 0.3968 0.402 0.4072 0.4125 0.4179 0.4233 0.4287 0.4342 0.4397 0.4452 0.4508\n  0.4564 0.4621 0.4678 0.4735 0.4793 0.4851 0.491 0.4969 0.5029 0.5089 0.5149 0.521 0.5271 0.5333\n  0.5395 0.5457 0.552 0.5583 0.5647 0.5711 0.5776 0.5841 0.5906 0.5972 0.6038 0.6105 0.6172 0.624\n  0.6308 0.6376 0.6445 0.6514 0.6584 0.6654 0.6724 0.6795 0.6867 0.6939 0.7011 0.7084 0.7157 0.7231\n  0.7305 0.7379 0.7454 0.7529 0.7605 0.7682 0.7758 0.7835 0.7913 0.7991 0.807 0.8148 0.8228 0.8308\n  0.8388 0.8469 0.855 0.8632 0.8714 0.8796 0.8879 0.8963 0.9047 0.9131 0.9216 0.9301 0.9387 0.9473\n  0.956 0.9647 0.9734 0.9823 0.9911 1;\n\n@function color-contrast(\n  $background,\n  $color-contrast-dark: $color-contrast-dark,\n  $color-contrast-light: $color-contrast-light,\n  $min-contrast-ratio: $min-contrast-ratio\n) {\n  $foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black;\n  $max-ratio: 0;\n  $max-ratio-color: null;\n\n  @each $color in $foregrounds {\n    $contrast-ratio: contrast-ratio($background, $color);\n    @if $contrast-ratio > $min-contrast-ratio {\n      @return $color;\n    } @else if $contrast-ratio > $max-ratio {\n      $max-ratio: $contrast-ratio;\n      $max-ratio-color: $color;\n    }\n  }\n\n  @warn \"Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}...\";\n\n  @return $max-ratio-color;\n}\n\n@function contrast-ratio($background, $foreground: $color-contrast-light) {\n  $l1: luminance($background);\n  $l2: luminance(opaque($background, $foreground));\n\n  @return if($l1 > $l2, divide($l1 + 0.05, $l2 + 0.05), divide($l2 + 0.05, $l1 + 0.05));\n}\n\n// Return WCAG2.1 relative luminance\n// See https://www.w3.org/TR/WCAG/#dfn-relative-luminance\n// See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio\n@function luminance($color) {\n  $rgb: (\n    'r': red($color),\n    'g': green($color),\n    'b': blue($color),\n  );\n\n  @each $name, $value in $rgb {\n    $value: if(\n      divide($value, 255) < 0.04045,\n      divide(divide($value, 255), 12.92),\n      nth($_luminance-list, $value + 1)\n    );\n    $rgb: map-merge(\n      $rgb,\n      (\n        $name: $value,\n      )\n    );\n  }\n\n  @return (map-get($rgb, 'r') * 0.2126) + (map-get($rgb, 'g') * 0.7152) +\n    (map-get($rgb, 'b') * 0.0722);\n}\n\n// Return opaque color\n// opaque(#fff, rgba(0, 0, 0, .5)) => #808080\n@function opaque($background, $foreground) {\n  @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);\n}\n\n// scss-docs-start color-functions\n// Tint a color: mix a color with white\n@function tint-color($color, $weight) {\n  @return mix(white, $color, $weight);\n}\n\n// Shade a color: mix a color with black\n@function shade-color($color, $weight) {\n  @return mix(black, $color, $weight);\n}\n\n// Shade the color if the weight is positive, else tint it\n@function shift-color($color, $weight) {\n  @return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));\n}\n// scss-docs-end color-functions\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n  @if $value1 == null {\n    @return $value2;\n  }\n\n  @if $value2 == null {\n    @return $value1;\n  }\n\n  @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n    @return $value1 + $value2;\n  }\n\n  @return if(\n    $return-calc == true,\n    calc(#{$value1} + #{$value2}),\n    $value1 + unquote(' + ') + $value2\n  );\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n  @if $value1 == null and $value2 == null {\n    @return null;\n  }\n\n  @if $value1 == null {\n    @return -$value2;\n  }\n\n  @if $value2 == null {\n    @return $value1;\n  }\n\n  @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n    @return $value1 - $value2;\n  }\n\n  @if type-of($value2) != number {\n    $value2: unquote('(') + $value2 + unquote(')');\n  }\n\n  @return if(\n    $return-calc == true,\n    calc(#{$value1} - #{$value2}),\n    $value1 + unquote(' - ') + $value2\n  );\n}\n\n@function divide($dividend, $divisor, $precision: 10) {\n  $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n  $dividend: abs($dividend);\n  $divisor: abs($divisor);\n  @if $dividend == 0 {\n    @return 0;\n  }\n  @if $divisor == 0 {\n    @error \"Cannot divide by 0\";\n  }\n  $remainder: $dividend;\n  $result: 0;\n  $factor: 10;\n  @while ($remainder > 0 and $precision >= 0) {\n    $quotient: 0;\n    @while ($remainder >= $divisor) {\n      $remainder: $remainder - $divisor;\n      $quotient: $quotient + 1;\n    }\n    $result: $result * 10 + $quotient;\n    $factor: $factor * 0.1;\n    $remainder: $remainder * 10;\n    $precision: $precision - 1;\n    @if ($precision < 0 and $remainder >= $divisor * 5) {\n      $result: $result + 1;\n    }\n  }\n  $result: $result * $factor * $sign;\n  $dividend-unit: unit($dividend);\n  $divisor-unit: unit($divisor);\n  $unit-map: (\n    'px': 1px,\n    'rem': 1rem,\n    'em': 1em,\n    '%': 1%,\n  );\n  @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n    $result: $result * map-get($unit-map, $dividend-unit);\n  }\n  @return $result;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_grid.scss",
    "content": "// Row\n//\n// Rows contain your columns.\n\n:root {\n  @each $name, $value in $grid-breakpoints {\n    --#{$prefix}breakpoint-#{$name}: #{$value};\n  }\n}\n\n@if $enable-grid-classes {\n  .row {\n    @include make-row();\n\n    > * {\n      @include make-col-ready();\n    }\n  }\n}\n\n@if $enable-cssgrid {\n  .grid {\n    display: grid;\n    grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n    grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n    gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n    @include make-cssgrid();\n  }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n  @include make-grid-columns();\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_helpers.scss",
    "content": "@import 'helpers/clearfix';\n@import 'helpers/color-bg';\n@import 'helpers/colored-links';\n@import 'helpers/focus-ring';\n@import 'helpers/icon-link';\n@import 'helpers/ratio';\n@import 'helpers/position';\n@import 'helpers/stacks';\n@import 'helpers/visually-hidden';\n@import 'helpers/stretched-link';\n@import 'helpers/text-truncation';\n@import 'helpers/vr';\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_images.scss",
    "content": "// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n  @include img-fluid();\n}\n\n// Image thumbnails\n.img-thumbnail {\n  padding: $thumbnail-padding;\n  background-color: $thumbnail-bg;\n  border: $thumbnail-border-width solid $thumbnail-border-color;\n  @include border-radius($thumbnail-border-radius);\n  @include box-shadow($thumbnail-box-shadow);\n\n  // Keep them at most 100% wide\n  @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n  // Ensures the caption's text aligns with the image.\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: $spacer * 0.5;\n  line-height: 1;\n}\n\n.figure-caption {\n  @include font-size($figure-caption-font-size);\n  color: $figure-caption-color;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_list-group.scss",
    "content": "// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // scss-docs-start list-group-css-vars\n  --#{$prefix}list-group-color: #{$list-group-color};\n  --#{$prefix}list-group-bg: #{$list-group-bg};\n  --#{$prefix}list-group-border-color: #{$list-group-border-color};\n  --#{$prefix}list-group-border-width: #{$list-group-border-width};\n  --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n  --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n  --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n  --#{$prefix}list-group-action-color: #{$list-group-action-color};\n  --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n  --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n  --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n  --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n  --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n  --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n  --#{$prefix}list-group-active-color: #{$list-group-active-color};\n  --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n  --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n  // scss-docs-end list-group-css-vars\n\n  display: flex;\n  flex-direction: column;\n\n  // No need to set list-style: none; since .list-group-item is block level\n  padding-left: 0; // reset padding because ul and ol\n  margin-bottom: 0;\n  @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n\n  > .list-group-item::before {\n    // Increments only this instance of the section counter\n    content: counters(section, '.') '. ';\n    counter-increment: section;\n  }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n  width: 100%; // For `<button>`s (anchors become 100% by default though)\n  color: var(--#{$prefix}list-group-action-color);\n  text-align: inherit; // For `<button>`s (anchors inherit)\n\n  // Hover state\n  &:hover,\n  &:focus {\n    z-index: 1; // Place hover/focus items above their siblings for proper border styling\n    color: var(--#{$prefix}list-group-action-hover-color);\n    text-decoration: none;\n    background-color: var(--#{$prefix}list-group-action-hover-bg);\n  }\n\n  &:active {\n    color: var(--#{$prefix}list-group-action-active-color);\n    background-color: var(--#{$prefix}list-group-action-active-bg);\n  }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n  color: var(--#{$prefix}list-group-color);\n  text-decoration: if($link-decoration == none, null, none);\n  background-color: var(--#{$prefix}list-group-bg);\n  border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n  &:first-child {\n    @include border-top-radius(inherit);\n  }\n\n  &:last-child {\n    @include border-bottom-radius(inherit);\n  }\n\n  &.disabled,\n  &:disabled {\n    color: var(--#{$prefix}list-group-disabled-color);\n    pointer-events: none;\n    background-color: var(--#{$prefix}list-group-disabled-bg);\n  }\n\n  // Include both here for `<a>`s and `<button>`s\n  &.active {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: var(--#{$prefix}list-group-active-color);\n    background-color: var(--#{$prefix}list-group-active-bg);\n    border-color: var(--#{$prefix}list-group-active-border-color);\n  }\n\n  // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n  & + .list-group-item {\n    border-top-width: 0;\n\n    &.active {\n      margin-top: calc(\n        -1 * var(--#{$prefix}list-group-border-width)\n      ); // stylelint-disable-line function-disallowed-list\n      border-top-width: var(--#{$prefix}list-group-border-width);\n    }\n  }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    .list-group-horizontal#{$infix} {\n      flex-direction: row;\n\n      > .list-group-item {\n        &:first-child:not(:last-child) {\n          @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n          @include border-top-end-radius(0);\n        }\n\n        &:last-child:not(:first-child) {\n          @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n          @include border-bottom-start-radius(0);\n        }\n\n        &.active {\n          margin-top: 0;\n        }\n\n        + .list-group-item {\n          border-top-width: var(--#{$prefix}list-group-border-width);\n          border-left-width: 0;\n\n          &.active {\n            margin-left: calc(\n              -1 * var(--#{$prefix}list-group-border-width)\n            ); // stylelint-disable-line function-disallowed-list\n            border-left-width: var(--#{$prefix}list-group-border-width);\n          }\n        }\n      }\n    }\n  }\n}\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n  @include border-radius(0);\n\n  > .list-group-item {\n    border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n    &:last-child {\n      border-bottom-width: 0;\n    }\n  }\n}\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state in map-keys($theme-colors) {\n  .list-group-item-#{$state} {\n    --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text-emphasis);\n    --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);\n    --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);\n    --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}list-group-action-active-color: var(--#{$prefix}emphasis-color);\n    --#{$prefix}list-group-action-active-bg: var(--#{$prefix}#{$state}-border-subtle);\n    --#{$prefix}list-group-active-color: var(--#{$prefix}#{$state}-bg-subtle);\n    --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text-emphasis);\n    --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text-emphasis);\n  }\n}\n// scss-docs-end list-group-modifiers\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_maps.scss",
    "content": "// Re-assigned maps\n//\n// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, '$value') !default;\n// scss-docs-end theme-colors-rgb\n\n// scss-docs-start theme-text-map\n$theme-colors-text: (\n  'primary': $primary-text-emphasis,\n  'secondary': $secondary-text-emphasis,\n  'success': $success-text-emphasis,\n  'info': $info-text-emphasis,\n  'warning': $warning-text-emphasis,\n  'danger': $danger-text-emphasis,\n  'light': $light-text-emphasis,\n  'dark': $dark-text-emphasis,\n) !default;\n// scss-docs-end theme-text-map\n\n// scss-docs-start theme-bg-subtle-map\n$theme-colors-bg-subtle: (\n  'primary': $primary-bg-subtle,\n  'secondary': $secondary-bg-subtle,\n  'success': $success-bg-subtle,\n  'info': $info-bg-subtle,\n  'warning': $warning-bg-subtle,\n  'danger': $danger-bg-subtle,\n  'light': $light-bg-subtle,\n  'dark': $dark-bg-subtle,\n) !default;\n// scss-docs-end theme-bg-subtle-map\n\n// scss-docs-start theme-border-subtle-map\n$theme-colors-border-subtle: (\n  'primary': $primary-border-subtle,\n  'secondary': $secondary-border-subtle,\n  'success': $success-border-subtle,\n  'info': $info-border-subtle,\n  'warning': $warning-border-subtle,\n  'danger': $danger-border-subtle,\n  'light': $light-border-subtle,\n  'dark': $dark-border-subtle,\n) !default;\n// scss-docs-end theme-border-subtle-map\n\n$theme-colors-text-dark: null !default;\n$theme-colors-bg-subtle-dark: null !default;\n$theme-colors-border-subtle-dark: null !default;\n\n@if $enable-dark-mode {\n  // scss-docs-start theme-text-dark-map\n  $theme-colors-text-dark: (\n    'primary': $primary-text-emphasis-dark,\n    'secondary': $secondary-text-emphasis-dark,\n    'success': $success-text-emphasis-dark,\n    'info': $info-text-emphasis-dark,\n    'warning': $warning-text-emphasis-dark,\n    'danger': $danger-text-emphasis-dark,\n    'light': $light-text-emphasis-dark,\n    'dark': $dark-text-emphasis-dark,\n  ) !default;\n  // scss-docs-end theme-text-dark-map\n\n  // scss-docs-start theme-bg-subtle-dark-map\n  $theme-colors-bg-subtle-dark: (\n    'primary': $primary-bg-subtle-dark,\n    'secondary': $secondary-bg-subtle-dark,\n    'success': $success-bg-subtle-dark,\n    'info': $info-bg-subtle-dark,\n    'warning': $warning-bg-subtle-dark,\n    'danger': $danger-bg-subtle-dark,\n    'light': $light-bg-subtle-dark,\n    'dark': $dark-bg-subtle-dark,\n  ) !default;\n  // scss-docs-end theme-bg-subtle-dark-map\n\n  // scss-docs-start theme-border-subtle-dark-map\n  $theme-colors-border-subtle-dark: (\n    'primary': $primary-border-subtle-dark,\n    'secondary': $secondary-border-subtle-dark,\n    'success': $success-border-subtle-dark,\n    'info': $info-border-subtle-dark,\n    'warning': $warning-border-subtle-dark,\n    'danger': $danger-border-subtle-dark,\n    'light': $light-border-subtle-dark,\n    'dark': $dark-border-subtle-dark,\n  ) !default;\n  // scss-docs-end theme-border-subtle-dark-map\n}\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n  $utilities-colors,\n  (\n    'black': to-rgb($black),\n    'white': to-rgb($white),\n    'body': to-rgb($body-color),\n  )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, '$key', 'text') !default;\n\n$utilities-text-emphasis-colors: (\n  'primary-emphasis': var(--#{$prefix}primary-text-emphasis),\n  'secondary-emphasis': var(--#{$prefix}secondary-text-emphasis),\n  'success-emphasis': var(--#{$prefix}success-text-emphasis),\n  'info-emphasis': var(--#{$prefix}info-text-emphasis),\n  'warning-emphasis': var(--#{$prefix}warning-text-emphasis),\n  'danger-emphasis': var(--#{$prefix}danger-text-emphasis),\n  'light-emphasis': var(--#{$prefix}light-text-emphasis),\n  'dark-emphasis': var(--#{$prefix}dark-text-emphasis),\n) !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n  $utilities-colors,\n  (\n    'black': to-rgb($black),\n    'white': to-rgb($white),\n    'body': to-rgb($body-bg),\n  )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, '$key', 'bg') !default;\n\n$utilities-bg-subtle: (\n  'primary-subtle': var(--#{$prefix}primary-bg-subtle),\n  'secondary-subtle': var(--#{$prefix}secondary-bg-subtle),\n  'success-subtle': var(--#{$prefix}success-bg-subtle),\n  'info-subtle': var(--#{$prefix}info-bg-subtle),\n  'warning-subtle': var(--#{$prefix}warning-bg-subtle),\n  'danger-subtle': var(--#{$prefix}danger-bg-subtle),\n  'light-subtle': var(--#{$prefix}light-bg-subtle),\n  'dark-subtle': var(--#{$prefix}dark-bg-subtle),\n) !default;\n// scss-docs-end utilities-bg-colors\n\n// scss-docs-start utilities-border-colors\n$utilities-border: map-merge(\n  $utilities-colors,\n  (\n    'black': to-rgb($black),\n    'white': to-rgb($white),\n  )\n) !default;\n$utilities-border-colors: map-loop($utilities-border, rgba-css-var, '$key', 'border') !default;\n\n$utilities-border-subtle: (\n  'primary-subtle': var(--#{$prefix}primary-border-subtle),\n  'secondary-subtle': var(--#{$prefix}secondary-border-subtle),\n  'success-subtle': var(--#{$prefix}success-border-subtle),\n  'info-subtle': var(--#{$prefix}info-border-subtle),\n  'warning-subtle': var(--#{$prefix}warning-border-subtle),\n  'danger-subtle': var(--#{$prefix}danger-border-subtle),\n  'light-subtle': var(--#{$prefix}light-border-subtle),\n  'dark-subtle': var(--#{$prefix}dark-border-subtle),\n) !default;\n// scss-docs-end utilities-border-colors\n\n$utilities-links-underline: map-loop(\n  $utilities-colors,\n  rgba-css-var,\n  '$key',\n  'link-underline'\n) !default;\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n\n$gutters: $spacers !default;\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_mixins.scss",
    "content": "// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Vendor\n@import 'vendor/rfs';\n\n// Deprecate\n@import 'mixins/deprecate';\n\n// Helpers\n@import 'mixins/breakpoints';\n@import 'mixins/color-mode';\n@import 'mixins/color-scheme';\n@import 'mixins/image';\n@import 'mixins/resize';\n@import 'mixins/visually-hidden';\n@import 'mixins/reset-text';\n@import 'mixins/text-truncate';\n\n// Utilities\n@import 'mixins/utilities';\n\n// Components\n@import 'mixins/backdrop';\n@import 'mixins/buttons';\n@import 'mixins/caret';\n@import 'mixins/pagination';\n@import 'mixins/lists';\n@import 'mixins/forms';\n@import 'mixins/table-variants';\n\n// Skins\n@import 'mixins/border-radius';\n@import 'mixins/box-shadow';\n@import 'mixins/gradients';\n@import 'mixins/transition';\n\n// Layout\n@import 'mixins/clearfix';\n@import 'mixins/container';\n@import 'mixins/grid';\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_modal.scss",
    "content": "// stylelint-disable function-disallowed-list\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and stuff\n\n// Container that the modal scrolls within\n.modal {\n  // scss-docs-start modal-css-vars\n  --#{$prefix}modal-zindex: #{$zindex-modal};\n  --#{$prefix}modal-width: #{$modal-md};\n  --#{$prefix}modal-padding: #{$modal-inner-padding};\n  --#{$prefix}modal-margin: #{$modal-dialog-margin};\n  --#{$prefix}modal-color: #{$modal-content-color};\n  --#{$prefix}modal-bg: #{$modal-content-bg};\n  --#{$prefix}modal-border-color: #{$modal-content-border-color};\n  --#{$prefix}modal-border-width: #{$modal-content-border-width};\n  --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n  --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n  --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n  --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n  --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n  --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n  --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n  --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n  --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n  --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n  --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n  --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n  --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n  // scss-docs-end modal-css-vars\n\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--#{$prefix}modal-zindex);\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n  // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n  // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n  // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: var(--#{$prefix}modal-margin);\n  // allow clicks to pass through for custom click handling to close modal\n  pointer-events: none;\n\n  // When fading in the modal, animate it to slide down\n  .modal.fade & {\n    @include transition($modal-transition);\n    transform: $modal-fade-transform;\n  }\n  .modal.show & {\n    transform: $modal-show-transform;\n  }\n\n  // When trying to close, animate focus to scale\n  .modal.modal-static & {\n    transform: $modal-scale-transform;\n  }\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n  .modal-content {\n    max-height: 100%;\n    overflow: hidden;\n  }\n\n  .modal-body {\n    overflow-y: auto;\n  }\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n  // counteract the pointer-events: none; in the .modal-dialog\n  color: var(--#{$prefix}modal-color);\n  pointer-events: auto;\n  background-color: var(--#{$prefix}modal-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n  @include border-radius(var(--#{$prefix}modal-border-radius));\n  @include box-shadow(var(--#{$prefix}modal-box-shadow));\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  // scss-docs-start modal-backdrop-css-vars\n  --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n  --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n  --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n  // scss-docs-end modal-backdrop-css-vars\n\n  @include overlay-backdrop(\n    var(--#{$prefix}backdrop-zindex),\n    var(--#{$prefix}backdrop-bg),\n    var(--#{$prefix}backdrop-opacity)\n  );\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  padding: var(--#{$prefix}modal-header-padding);\n  border-bottom: var(--#{$prefix}modal-header-border-width) solid\n    var(--#{$prefix}modal-header-border-color);\n  @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n  .btn-close {\n    padding: calc(var(--#{$prefix}modal-header-padding-y) * 0.5)\n      calc(var(--#{$prefix}modal-header-padding-x) * 0.5);\n    margin: calc(-0.5 * var(--#{$prefix}modal-header-padding-y))\n      calc(-0.5 * var(--#{$prefix}modal-header-padding-x))\n      calc(-0.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n  }\n}\n\n// Title text within header\n.modal-title {\n  margin-bottom: 0;\n  line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  // Enable `flex-grow: 1` so that the body take up as much space as possible\n  // when there should be a fixed height on `.modal-dialog`.\n  flex: 1 1 auto;\n  padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  align-items: center; // vertically center\n  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n  padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * 0.5);\n  background-color: var(--#{$prefix}modal-footer-bg);\n  border-top: var(--#{$prefix}modal-footer-border-width) solid\n    var(--#{$prefix}modal-footer-border-color);\n  @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n  // Place margin between footer elements\n  // This solution is far from ideal because of the universal selector usage,\n  // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n  > * {\n    margin: calc(\n      var(--#{$prefix}modal-footer-gap) * 0.5\n    ); // Todo in v6: replace with gap on parent class\n  }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n  .modal {\n    --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n    --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n  }\n\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    max-width: var(--#{$prefix}modal-width);\n    margin-right: auto;\n    margin-left: auto;\n  }\n\n  .modal-sm {\n    --#{$prefix}modal-width: #{$modal-sm};\n  }\n}\n\n@include media-breakpoint-up(lg) {\n  .modal-lg,\n  .modal-xl {\n    --#{$prefix}modal-width: #{$modal-lg};\n  }\n}\n\n@include media-breakpoint-up(xl) {\n  .modal-xl {\n    --#{$prefix}modal-width: #{$modal-xl};\n  }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n  $postfix: if($infix != '', $infix + '-down', '');\n\n  @include media-breakpoint-down($breakpoint) {\n    .modal-fullscreen#{$postfix} {\n      width: 100vw;\n      max-width: none;\n      height: 100%;\n      margin: 0;\n\n      .modal-content {\n        height: 100%;\n        border: 0;\n        @include border-radius(0);\n      }\n\n      .modal-header,\n      .modal-footer {\n        @include border-radius(0);\n      }\n\n      .modal-body {\n        overflow-y: auto;\n      }\n    }\n  }\n}\n// scss-docs-end modal-fullscreen-loop\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_nav.scss",
    "content": "// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n  // scss-docs-start nav-css-vars\n  --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n  @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n  --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n  --#{$prefix}nav-link-color: #{$nav-link-color};\n  --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n  --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n  // scss-docs-end nav-css-vars\n\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n  @include font-size(var(--#{$prefix}nav-link-font-size));\n  font-weight: var(--#{$prefix}nav-link-font-weight);\n  color: var(--#{$prefix}nav-link-color);\n  text-decoration: if($link-decoration == none, null, none);\n  background: none;\n  border: 0;\n  @include transition($nav-link-transition);\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}nav-link-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n  }\n\n  &:focus-visible {\n    outline: 0;\n    box-shadow: $nav-link-focus-box-shadow;\n  }\n\n  // Disabled state lightens text\n  &.disabled,\n  &:disabled {\n    color: var(--#{$prefix}nav-link-disabled-color);\n    pointer-events: none;\n    cursor: default;\n  }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n  // scss-docs-start nav-tabs-css-vars\n  --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n  --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n  --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n  --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n  --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n  --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n  --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n  // scss-docs-end nav-tabs-css-vars\n\n  border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n  .nav-link {\n    margin-bottom: calc(\n      -1 * var(--#{$prefix}nav-tabs-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n    @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n    &:hover,\n    &:focus {\n      // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n      isolation: isolate;\n      border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n    }\n  }\n\n  .nav-link.active,\n  .nav-item.show .nav-link {\n    color: var(--#{$prefix}nav-tabs-link-active-color);\n    background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n    border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n  }\n\n  .dropdown-menu {\n    // Make dropdown border overlap tab border\n    margin-top: calc(\n      -1 * var(--#{$prefix}nav-tabs-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    // Remove the top rounded corners here since there is a hard edge above the menu\n    @include border-top-radius(0);\n  }\n}\n\n//\n// Pills\n//\n\n.nav-pills {\n  // scss-docs-start nav-pills-css-vars\n  --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n  --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n  --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n  // scss-docs-end nav-pills-css-vars\n\n  .nav-link {\n    @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n  }\n\n  .nav-link.active,\n  .show > .nav-link {\n    color: var(--#{$prefix}nav-pills-link-active-color);\n    @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n  }\n}\n\n//\n// Underline\n//\n\n.nav-underline {\n  // scss-docs-start nav-underline-css-vars\n  --#{$prefix}nav-underline-gap: #{$nav-underline-gap};\n  --#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};\n  --#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};\n  // scss-docs-end nav-underline-css-vars\n\n  gap: var(--#{$prefix}nav-underline-gap);\n\n  .nav-link {\n    padding-right: 0;\n    padding-left: 0;\n    border-bottom: var(--#{$prefix}nav-underline-border-width) solid transparent;\n\n    &:hover,\n    &:focus {\n      border-bottom-color: currentcolor;\n    }\n  }\n\n  .nav-link.active,\n  .show > .nav-link {\n    font-weight: $font-weight-bold;\n    color: var(--#{$prefix}nav-underline-link-active-color);\n    border-bottom-color: currentcolor;\n  }\n}\n\n//\n// Justified variants\n//\n\n.nav-fill {\n  > .nav-link,\n  .nav-item {\n    flex: 1 1 auto;\n    text-align: center;\n  }\n}\n\n.nav-justified {\n  > .nav-link,\n  .nav-item {\n    flex-basis: 0;\n    flex-grow: 1;\n    text-align: center;\n  }\n}\n\n.nav-fill,\n.nav-justified {\n  .nav-item .nav-link {\n    width: 100%; // Make sure button will grow\n  }\n}\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_navbar.scss",
    "content": "// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  // scss-docs-start navbar-css-vars\n  --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n  --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n  --#{$prefix}navbar-color: #{$navbar-light-color};\n  --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n  --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n  --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n  --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n  --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n  --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n  --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n  --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n  --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n  --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n  --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n  --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n  --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n  --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n  --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n  --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n  --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n  // scss-docs-end navbar-css-vars\n\n  position: relative;\n  display: flex;\n  flex-wrap: wrap; // allow us to do the line break for collapsing content\n  align-items: center;\n  justify-content: space-between; // space out brand from logo\n  padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n  @include gradient-bg();\n\n  // Because flex properties aren't inherited, we need to redeclare these first\n  // few properties so that content nested within behave properly.\n  // The `flex-wrap` property is inherited to simplify the expanded navbars\n  %container-flex-properties {\n    display: flex;\n    flex-wrap: inherit;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  > .container,\n  > .container-fluid {\n    @extend %container-flex-properties;\n  }\n\n  @each $breakpoint, $container-max-width in $container-max-widths {\n    > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n      @extend %container-flex-properties;\n    }\n  }\n}\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n  padding-top: var(--#{$prefix}navbar-brand-padding-y);\n  padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n  margin-right: var(--#{$prefix}navbar-brand-margin-end);\n  @include font-size(var(--#{$prefix}navbar-brand-font-size));\n  color: var(--#{$prefix}navbar-brand-color);\n  text-decoration: if($link-decoration == none, null, none);\n  white-space: nowrap;\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}navbar-brand-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n  }\n}\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n  // scss-docs-start navbar-nav-css-vars\n  --#{$prefix}nav-link-padding-x: 0;\n  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n  @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n  --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n  --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n  --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n  --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n  // scss-docs-end navbar-nav-css-vars\n\n  display: flex;\n  flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n\n  .nav-link {\n    &.active,\n    &.show {\n      color: var(--#{$prefix}navbar-active-color);\n    }\n  }\n\n  .dropdown-menu {\n    position: static;\n  }\n}\n\n// Navbar text\n//\n//\n\n.navbar-text {\n  padding-top: $nav-link-padding-y;\n  padding-bottom: $nav-link-padding-y;\n  color: var(--#{$prefix}navbar-color);\n\n  a,\n  a:hover,\n  a:focus {\n    color: var(--#{$prefix}navbar-active-color);\n  }\n}\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  // For always expanded or extra full navbars, ensure content aligns itself\n  // properly vertically. Can be easily overridden with flex utilities.\n  align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n  padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n  @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n  line-height: 1;\n  color: var(--#{$prefix}navbar-color);\n  background-color: transparent; // remove default button style\n  border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n  @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n  @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n  &:hover {\n    text-decoration: none;\n  }\n\n  &:focus {\n    text-decoration: none;\n    outline: 0;\n    box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n  }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--#{$prefix}scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n  @each $breakpoint in map-keys($grid-breakpoints) {\n    $next: breakpoint-next($breakpoint, $grid-breakpoints);\n    $infix: breakpoint-infix($next, $grid-breakpoints);\n\n    // stylelint-disable-next-line scss/selector-no-union-class-name\n    &#{$infix} {\n      @include media-breakpoint-up($next) {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n\n        .navbar-nav {\n          flex-direction: row;\n\n          .dropdown-menu {\n            position: absolute;\n          }\n\n          .nav-link {\n            padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n            padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n          }\n        }\n\n        .navbar-nav-scroll {\n          overflow: visible;\n        }\n\n        .navbar-collapse {\n          display: flex !important; // stylelint-disable-line declaration-no-important\n          flex-basis: auto;\n        }\n\n        .navbar-toggler {\n          display: none;\n        }\n\n        .offcanvas {\n          // stylelint-disable declaration-no-important\n          position: static;\n          z-index: auto;\n          flex-grow: 1;\n          width: auto !important;\n          height: auto !important;\n          visibility: visible !important;\n          background-color: transparent !important;\n          border: 0 !important;\n          transform: none !important;\n          @include box-shadow(none);\n          @include transition(none);\n          // stylelint-enable declaration-no-important\n\n          .offcanvas-header {\n            display: none;\n          }\n\n          .offcanvas-body {\n            display: flex;\n            flex-grow: 0;\n            padding: 0;\n            overflow-y: visible;\n          }\n        }\n      }\n    }\n  }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n  @include deprecate('`.navbar-light`', 'v5.2.0', 'v6.0.0', true);\n}\n\n.navbar-dark,\n.navbar[data-mdb-theme='dark'] {\n  // scss-docs-start navbar-dark-css-vars\n  --#{$prefix}navbar-color: #{$navbar-dark-color};\n  --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n  --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n  --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n  --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n  --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n  --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n  --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n  // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .navbar-toggler-icon {\n      --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_offcanvas.scss",
    "content": "// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n  // scss-docs-start offcanvas-css-vars\n  --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n  --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n  --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n  --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n  --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n  --#{$prefix}offcanvas-color: #{$offcanvas-color};\n  --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n  --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n  --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n  --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n  --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};\n  --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};\n  // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $next: breakpoint-next($breakpoint, $grid-breakpoints);\n  $infix: breakpoint-infix($next, $grid-breakpoints);\n\n  .offcanvas#{$infix} {\n    @extend %offcanvas-css-vars;\n  }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $next: breakpoint-next($breakpoint, $grid-breakpoints);\n  $infix: breakpoint-infix($next, $grid-breakpoints);\n\n  .offcanvas#{$infix} {\n    @include media-breakpoint-down($next) {\n      position: fixed;\n      bottom: 0;\n      z-index: var(--#{$prefix}offcanvas-zindex);\n      display: flex;\n      flex-direction: column;\n      max-width: 100%;\n      color: var(--#{$prefix}offcanvas-color);\n      visibility: hidden;\n      background-color: var(--#{$prefix}offcanvas-bg);\n      background-clip: padding-box;\n      outline: 0;\n      @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n      @include transition(var(--#{$prefix}offcanvas-transition));\n\n      &.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--#{$prefix}offcanvas-width);\n        border-right: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateX(-100%);\n      }\n\n      &.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--#{$prefix}offcanvas-width);\n        border-left: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateX(100%);\n      }\n\n      &.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--#{$prefix}offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateY(-100%);\n      }\n\n      &.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--#{$prefix}offcanvas-height);\n        max-height: 100%;\n        border-top: var(--#{$prefix}offcanvas-border-width) solid\n          var(--#{$prefix}offcanvas-border-color);\n        transform: translateY(100%);\n      }\n\n      &.showing,\n      &.show:not(.hiding) {\n        transform: none;\n      }\n\n      &.showing,\n      &.hiding,\n      &.show {\n        visibility: visible;\n      }\n    }\n\n    @if not($infix == '') {\n      @include media-breakpoint-up($next) {\n        --#{$prefix}offcanvas-height: auto;\n        --#{$prefix}offcanvas-border-width: 0;\n        background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n        .offcanvas-header {\n          display: none;\n        }\n\n        .offcanvas-body {\n          display: flex;\n          flex-grow: 0;\n          padding: 0;\n          overflow-y: visible;\n          // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n          background-color: transparent !important; // stylelint-disable-line declaration-no-important\n        }\n      }\n    }\n  }\n}\n\n.offcanvas-backdrop {\n  @include overlay-backdrop(\n    $zindex-offcanvas-backdrop,\n    $offcanvas-backdrop-bg,\n    $offcanvas-backdrop-opacity\n  );\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n  .btn-close {\n    padding: calc(var(--#{$prefix}offcanvas-padding-y) * 0.5)\n      calc(var(--#{$prefix}offcanvas-padding-x) * 0.5);\n    margin: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y))\n      calc(-0.5 * var(--#{$prefix}offcanvas-padding-x))\n      calc(-0.5 * var(--#{$prefix}offcanvas-padding-y)) auto;\n  }\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: var(--#{$prefix}offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n  overflow-y: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_pagination.scss",
    "content": ".pagination {\n  // scss-docs-start pagination-css-vars\n  --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n  --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n  @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n  --#{$prefix}pagination-color: #{$pagination-color};\n  --#{$prefix}pagination-bg: #{$pagination-bg};\n  --#{$prefix}pagination-border-width: #{$pagination-border-width};\n  --#{$prefix}pagination-border-color: #{$pagination-border-color};\n  --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n  --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n  --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n  --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n  --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n  --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n  --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n  --#{$prefix}pagination-active-color: #{$pagination-active-color};\n  --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n  --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n  --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n  --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n  --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n  // scss-docs-end pagination-css-vars\n\n  display: flex;\n  @include list-unstyled();\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n  @include font-size(var(--#{$prefix}pagination-font-size));\n  color: var(--#{$prefix}pagination-color);\n  text-decoration: if($link-decoration == none, null, none);\n  background-color: var(--#{$prefix}pagination-bg);\n  border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n  @include transition($pagination-transition);\n\n  &:hover {\n    z-index: 2;\n    color: var(--#{$prefix}pagination-hover-color);\n    text-decoration: if($link-hover-decoration == underline, none, null);\n    background-color: var(--#{$prefix}pagination-hover-bg);\n    border-color: var(--#{$prefix}pagination-hover-border-color);\n  }\n\n  &:focus {\n    z-index: 3;\n    color: var(--#{$prefix}pagination-focus-color);\n    background-color: var(--#{$prefix}pagination-focus-bg);\n    outline: $pagination-focus-outline;\n    box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n  }\n\n  &.active,\n  .active > & {\n    z-index: 3;\n    color: var(--#{$prefix}pagination-active-color);\n    @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n    border-color: var(--#{$prefix}pagination-active-border-color);\n  }\n\n  &.disabled,\n  .disabled > & {\n    color: var(--#{$prefix}pagination-disabled-color);\n    pointer-events: none;\n    background-color: var(--#{$prefix}pagination-disabled-bg);\n    border-color: var(--#{$prefix}pagination-disabled-border-color);\n  }\n}\n\n.page-item {\n  &:not(:first-child) .page-link {\n    margin-left: $pagination-margin-start;\n  }\n\n  @if $pagination-margin-start == calc(#{$pagination-border-width} * -1) {\n    &:first-child {\n      .page-link {\n        @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n      }\n    }\n\n    &:last-child {\n      .page-link {\n        @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n      }\n    }\n  } @else {\n    // Add border-radius to all pageLinks in case they have left margin\n    .page-link {\n      @include border-radius(var(--#{$prefix}pagination-border-radius));\n    }\n  }\n}\n\n//\n// Sizing\n//\n\n.pagination-lg {\n  @include pagination-size(\n    $pagination-padding-y-lg,\n    $pagination-padding-x-lg,\n    $font-size-lg,\n    $pagination-border-radius-lg\n  );\n}\n\n.pagination-sm {\n  @include pagination-size(\n    $pagination-padding-y-sm,\n    $pagination-padding-x-sm,\n    $font-size-sm,\n    $pagination-border-radius-sm\n  );\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_placeholders.scss",
    "content": ".placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentcolor;\n  opacity: $placeholder-opacity-max;\n\n  &.btn::before {\n    display: inline-block;\n    content: '';\n  }\n}\n\n// Sizing\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n  .placeholder {\n    animation: placeholder-glow 2s ease-in-out infinite;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: $placeholder-opacity-min;\n  }\n}\n\n.placeholder-wave {\n  mask-image: linear-gradient(\n    130deg,\n    $black 55%,\n    rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%,\n    $black 95%\n  );\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    mask-position: -200% 0%;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_popover.scss",
    "content": ".popover {\n  // scss-docs-start popover-css-vars\n  --#{$prefix}popover-zindex: #{$zindex-popover};\n  --#{$prefix}popover-max-width: #{$popover-max-width};\n  @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n  --#{$prefix}popover-bg: #{$popover-bg};\n  --#{$prefix}popover-border-width: #{$popover-border-width};\n  --#{$prefix}popover-border-color: #{$popover-border-color};\n  --#{$prefix}popover-border-radius: #{$popover-border-radius};\n  --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n  --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n  --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n  --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n  @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n  --#{$prefix}popover-header-color: #{$popover-header-color};\n  --#{$prefix}popover-header-bg: #{$popover-header-bg};\n  --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n  --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n  --#{$prefix}popover-body-color: #{$popover-body-color};\n  --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n  --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n  --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n  // scss-docs-end popover-css-vars\n\n  z-index: var(--#{$prefix}popover-zindex);\n  display: block;\n  max-width: var(--#{$prefix}popover-max-width);\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  @include reset-text();\n  @include font-size(var(--#{$prefix}popover-font-size));\n  // Allow breaking very long words so they don't overflow the popover's bounds\n  word-wrap: break-word;\n  background-color: var(--#{$prefix}popover-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n  @include border-radius(var(--#{$prefix}popover-border-radius));\n  @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n  .popover-arrow {\n    display: block;\n    width: var(--#{$prefix}popover-arrow-width);\n    height: var(--#{$prefix}popover-arrow-height);\n\n    &::before,\n    &::after {\n      position: absolute;\n      display: block;\n      content: '';\n      border-color: transparent;\n      border-style: solid;\n      border-width: 0;\n    }\n  }\n}\n\n.bs-popover-top {\n  > .popover-arrow {\n    bottom: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n\n    &::before,\n    &::after {\n      border-width: var(--#{$prefix}popover-arrow-height)\n        calc(var(--#{$prefix}popover-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      bottom: 0;\n      border-top-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      bottom: var(--#{$prefix}popover-border-width);\n      border-top-color: var(--#{$prefix}popover-bg);\n    }\n  }\n}\n\n/*!rtl:begin:ignore*/\n.bs-popover-end {\n  > .popover-arrow {\n    left: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    width: var(--#{$prefix}popover-arrow-height);\n    height: var(--#{$prefix}popover-arrow-width);\n\n    &::before,\n    &::after {\n      border-width: calc(var(--#{$prefix}popover-arrow-width) * 0.5)\n        var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      left: 0;\n      border-right-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      left: var(--#{$prefix}popover-border-width);\n      border-right-color: var(--#{$prefix}popover-bg);\n    }\n  }\n}\n\n/*!rtl:end:ignore*/\n\n.bs-popover-bottom {\n  > .popover-arrow {\n    top: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n\n    &::before,\n    &::after {\n      border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * 0.5)\n        var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      top: 0;\n      border-bottom-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      top: var(--#{$prefix}popover-border-width);\n      border-bottom-color: var(--#{$prefix}popover-bg);\n    }\n  }\n\n  // This will remove the popover-header's border just below the arrow\n  .popover-header::before {\n    position: absolute;\n    top: 0;\n    left: 50%;\n    display: block;\n    width: var(--#{$prefix}popover-arrow-width);\n    margin-left: calc(\n      -0.5 * var(--#{$prefix}popover-arrow-width)\n    ); // stylelint-disable-line function-disallowed-list\n    content: '';\n    border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n  }\n}\n\n/*!rtl:begin:ignore*/\n.bs-popover-start {\n  > .popover-arrow {\n    right: calc(\n      -1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)\n    ); // stylelint-disable-line function-disallowed-list\n    width: var(--#{$prefix}popover-arrow-height);\n    height: var(--#{$prefix}popover-arrow-width);\n\n    &::before,\n    &::after {\n      border-width: calc(var(--#{$prefix}popover-arrow-width) * 0.5) 0\n        calc(var(--#{$prefix}popover-arrow-width) * 0.5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n    }\n\n    &::before {\n      right: 0;\n      border-left-color: var(--#{$prefix}popover-arrow-border);\n    }\n\n    &::after {\n      right: var(--#{$prefix}popover-border-width);\n      border-left-color: var(--#{$prefix}popover-bg);\n    }\n  }\n}\n\n/*!rtl:end:ignore*/\n\n.bs-popover-auto {\n  &[data-popper-placement^='top'] {\n    @extend .bs-popover-top;\n  }\n  &[data-popper-placement^='right'] {\n    @extend .bs-popover-end;\n  }\n  &[data-popper-placement^='bottom'] {\n    @extend .bs-popover-bottom;\n  }\n  &[data-popper-placement^='left'] {\n    @extend .bs-popover-start;\n  }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n  padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n  margin-bottom: 0; // Reset the default from Reboot\n  @include font-size(var(--#{$prefix}popover-header-font-size));\n  color: var(--#{$prefix}popover-header-color);\n  background-color: var(--#{$prefix}popover-header-bg);\n  border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n  @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n  &:empty {\n    display: none;\n  }\n}\n\n.popover-body {\n  padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n  color: var(--#{$prefix}popover-body-color);\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_progress.scss",
    "content": "// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n  @keyframes progress-bar-stripes {\n    0% {\n      background-position-x: $progress-height;\n    }\n  }\n}\n// scss-docs-end progress-keyframes\n\n.progress,\n.progress-stacked {\n  // scss-docs-start progress-css-vars\n  --#{$prefix}progress-height: #{$progress-height};\n  @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n  --#{$prefix}progress-bg: #{$progress-bg};\n  --#{$prefix}progress-border-radius: #{$progress-border-radius};\n  --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n  --#{$prefix}progress-bar-color: #{$progress-bar-color};\n  --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n  --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n  // scss-docs-end progress-css-vars\n\n  display: flex;\n  height: var(--#{$prefix}progress-height);\n  overflow: hidden; // force rounded corners by cropping it\n  @include font-size(var(--#{$prefix}progress-font-size));\n  background-color: var(--#{$prefix}progress-bg);\n  @include border-radius(var(--#{$prefix}progress-border-radius));\n  @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: var(--#{$prefix}progress-bar-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--#{$prefix}progress-bar-bg);\n  @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n  @include gradient-striped();\n  background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n.progress-stacked > .progress {\n  overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n  width: 100%;\n}\n\n@if $enable-transitions {\n  .progress-bar-animated {\n    animation: $progress-bar-animation-timing progress-bar-stripes;\n\n    @if $enable-reduced-motion {\n      @media (prefers-reduced-motion: reduce) {\n        animation: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_reboot.scss",
    "content": "// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n  @if $font-size-root != null {\n    @include font-size(var(--#{$prefix}root-font-size));\n  }\n\n  @if $enable-smooth-scroll {\n    @media (prefers-reduced-motion: no-preference) {\n      scroll-behavior: smooth;\n    }\n  }\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n  margin: 0; // 1\n  font-family: var(--#{$prefix}body-font-family);\n  @include font-size(var(--#{$prefix}body-font-size));\n  font-weight: var(--#{$prefix}body-font-weight);\n  line-height: var(--#{$prefix}body-line-height);\n  color: var(--#{$prefix}body-color);\n  text-align: var(--#{$prefix}body-text-align);\n  background-color: var(--#{$prefix}body-bg); // 2\n  -webkit-text-size-adjust: 100%; // 3\n  -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n  margin: $hr-margin-y 0;\n  color: $hr-color; // 1\n  border: 0;\n  border-top: $hr-border-width solid $hr-border-color;\n  opacity: $hr-opacity;\n}\n\n// Typography\n//\n// 1. Remove top margins from headings\n//    By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n//    margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n  margin-top: 0; // 1\n  margin-bottom: $headings-margin-bottom;\n  font-family: $headings-font-family;\n  font-style: $headings-font-style;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n  @extend %heading;\n  @include font-size($h1-font-size);\n}\n\nh2 {\n  @extend %heading;\n  @include font-size($h2-font-size);\n}\n\nh3 {\n  @extend %heading;\n  @include font-size($h3-font-size);\n}\n\nh4 {\n  @extend %heading;\n  @include font-size($h4-font-size);\n}\n\nh5 {\n  @extend %heading;\n  @include font-size($h5-font-size);\n}\n\nh6 {\n  @extend %heading;\n  @include font-size($h6-font-size);\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n  margin-top: 0;\n  margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n  text-decoration: underline dotted; // 1\n  cursor: help; // 2\n  text-decoration-skip-ink: none; // 3\n}\n\n// Address\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\n// Lists\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0; // 1\n}\n\n// Blockquote\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n  font-weight: $font-weight-bolder;\n}\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n  @include font-size($small-font-size);\n}\n\n// Mark\n\nmark {\n  padding: $mark-padding;\n  color: var(--#{$prefix}highlight-color);\n  background-color: var(--#{$prefix}highlight-bg);\n}\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n  position: relative;\n  @include font-size($sub-sup-font-size);\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\n\n// Links\n\na {\n  color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n  text-decoration: $link-decoration;\n\n  &:hover {\n    --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n    text-decoration: $link-hover-decoration;\n  }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n  &,\n  &:hover {\n    color: inherit;\n    text-decoration: none;\n  }\n}\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: $font-family-code;\n  @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n  display: block;\n  margin-top: 0; // 1\n  margin-bottom: 1rem; // 2\n  overflow: auto; // 3\n  @include font-size($code-font-size);\n  color: $pre-color;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    @include font-size(inherit);\n    color: inherit;\n    word-break: normal;\n  }\n}\n\ncode {\n  @include font-size($code-font-size);\n  color: var(--#{$prefix}code-color);\n  word-wrap: break-word;\n\n  // Streamline the style when inside anchors to avoid broken underline and more\n  a > & {\n    color: inherit;\n  }\n}\n\nkbd {\n  padding: $kbd-padding-y $kbd-padding-x;\n  @include font-size($kbd-font-size);\n  color: $kbd-color;\n  background-color: $kbd-bg;\n  @include border-radius($border-radius-sm);\n\n  kbd {\n    padding: 0;\n    @include font-size(1em);\n    font-weight: $nested-kbd-font-weight;\n  }\n}\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n  margin: 0 0 1rem;\n}\n\n// Images and content\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: $table-cell-padding-y;\n  padding-bottom: $table-cell-padding-y;\n  color: $table-caption-color;\n  text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n  font-weight: $table-th-font-weight; // 1\n  text-align: inherit; // 2\n  text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n  display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n  // stylelint-disable-next-line property-disallowed-list\n  border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0; // 1\n  font-family: inherit;\n  @include font-size(inherit);\n  line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n  text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role='button'] {\n  cursor: pointer;\n}\n\nselect {\n  // Remove the inheritance of word-wrap in Safari.\n  // See https://github.com/twbs/bootstrap/issues/24990\n  word-wrap: normal;\n\n  // Undo the opacity change from Chrome\n  &:disabled {\n    opacity: 1;\n  }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type='date']):not([type='datetime-local']):not([type='month']):not([type='week']):not(\n    [type='time']\n  )::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n//    controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n\n  @if $enable-button-pointers {\n    &:not(:disabled) {\n      cursor: pointer; // 3\n    }\n  }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n  resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n//    unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n//    So we reset that to ensure fieldsets behave more like a standard block element.\n//    See https://github.com/twbs/bootstrap/issues/12359\n//    and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n  min-width: 0; // 1\n  padding: 0; // 2\n  margin: 0; // 2\n  border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n//    This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n//    See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n  float: left; // 1\n  width: 100%;\n  padding: 0;\n  margin-bottom: $legend-margin-bottom;\n  @include font-size($legend-font-size);\n  font-weight: $legend-font-weight;\n  line-height: inherit;\n\n  + * {\n    clear: left; // 2\n  }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n// 1. This overrides the extra rounded corners on search inputs in iOS so that our\n//    `.form-control` class can properly style them. Note that this cannot simply\n//    be added to `.form-control` as it's not specific enough. For details, see\n//    https://github.com/twbs/bootstrap/issues/11586.\n// 2. Correct the outline style in Safari.\n\n[type='search'] {\n  -webkit-appearance: textfield; // 1\n  outline-offset: -2px; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n  font: inherit; // 1\n  -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n  display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n  border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n  display: list-item; // 1\n  cursor: pointer;\n}\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n  vertical-align: baseline;\n}\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n  display: none !important;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_root.scss",
    "content": ":root,\n[data-mdb-theme='light'] {\n  // Note: Custom variable values only support SassScript inside `#{}`.\n\n  // Colors\n  //\n  // Generate palettes for full colors, grays, and theme colors.\n\n  @each $color, $value in $colors {\n    --#{$prefix}#{$color}: #{$value};\n  }\n\n  @each $color, $value in $grays {\n    --#{$prefix}gray-#{$color}: #{$value};\n  }\n\n  @each $color, $value in $theme-colors {\n    --#{$prefix}#{$color}: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-rgb {\n    --#{$prefix}#{$color}-rgb: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-text {\n    --#{$prefix}#{$color}-text-emphasis: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-bg-subtle {\n    --#{$prefix}#{$color}-bg-subtle: #{$value};\n  }\n\n  @each $color, $value in $theme-colors-border-subtle {\n    --#{$prefix}#{$color}-border-subtle: #{$value};\n  }\n\n  --#{$prefix}white-rgb: #{to-rgb($white)};\n  --#{$prefix}black-rgb: #{to-rgb($black)};\n\n  // Fonts\n\n  // Note: Use `inspect` for lists so that quoted items keep the quotes.\n  // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n  --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n  --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n  --#{$prefix}gradient: #{$gradient};\n\n  // Root and body\n  // scss-docs-start root-body-variables\n  @if $font-size-root != null {\n    --#{$prefix}root-font-size: #{$font-size-root};\n  }\n  --#{$prefix}body-font-family: #{inspect($font-family-base)};\n  @include rfs($font-size-base, --#{$prefix}body-font-size);\n  --#{$prefix}body-font-weight: #{$font-weight-base};\n  --#{$prefix}body-line-height: #{$line-height-base};\n  @if $body-text-align != null {\n    --#{$prefix}body-text-align: #{$body-text-align};\n  }\n\n  --#{$prefix}body-color: #{$body-color};\n  --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n  --#{$prefix}body-bg: #{$body-bg};\n  --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n  --#{$prefix}emphasis-color: #{$body-emphasis-color};\n  --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n  --#{$prefix}secondary-color: #{$body-secondary-color};\n  --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n  --#{$prefix}secondary-bg: #{$body-secondary-bg};\n  --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n  --#{$prefix}tertiary-color: #{$body-tertiary-color};\n  --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n  --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n  --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n  // scss-docs-end root-body-variables\n\n  --#{$prefix}heading-color: #{$headings-color};\n\n  --#{$prefix}link-color: #{$link-color};\n  --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n  --#{$prefix}link-decoration: #{$link-decoration};\n\n  --#{$prefix}link-hover-color: #{$link-hover-color};\n  --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n  @if $link-hover-decoration != null {\n    --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n  }\n\n  --#{$prefix}code-color: #{$code-color};\n  --#{$prefix}highlight-color: #{$mark-color};\n  --#{$prefix}highlight-bg: #{$mark-bg};\n\n  // scss-docs-start root-border-var\n  --#{$prefix}border-width: #{$border-width};\n  --#{$prefix}border-style: #{$border-style};\n  --#{$prefix}border-color: #{$border-color};\n  --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n  --#{$prefix}border-radius: #{$border-radius};\n  --#{$prefix}border-radius-sm: #{$border-radius-sm};\n  --#{$prefix}border-radius-lg: #{$border-radius-lg};\n  --#{$prefix}border-radius-xl: #{$border-radius-xl};\n  --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n  --#{$prefix}border-radius-2xl: var(\n    --#{$prefix}border-radius-xxl\n  ); // Deprecated in v5.3.0 for consistency\n  --#{$prefix}border-radius-pill: #{$border-radius-pill};\n  // scss-docs-end root-border-var\n\n  --#{$prefix}box-shadow: #{$box-shadow};\n  --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n  --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n  --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n  // Focus styles\n  // scss-docs-start root-focus-variables\n  --#{$prefix}focus-ring-width: #{$focus-ring-width};\n  --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n  --#{$prefix}focus-ring-color: #{$focus-ring-color};\n  // scss-docs-end root-focus-variables\n\n  // scss-docs-start root-form-validation-variables\n  --#{$prefix}form-valid-color: #{$form-valid-color};\n  --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n  --#{$prefix}form-invalid-color: #{$form-invalid-color};\n  --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n  // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark, true) {\n    color-scheme: dark;\n\n    // scss-docs-start root-dark-mode-vars\n    --#{$prefix}body-color: #{$body-color-dark};\n    --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n    --#{$prefix}body-bg: #{$body-bg-dark};\n    --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n    --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n    --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n    --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n    --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n    --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n    --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n    --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n    --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n    --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n    --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n    @each $color, $value in $theme-colors-text-dark {\n      --#{$prefix}#{$color}-text-emphasis: #{$value};\n    }\n\n    @each $color, $value in $theme-colors-bg-subtle-dark {\n      --#{$prefix}#{$color}-bg-subtle: #{$value};\n    }\n\n    @each $color, $value in $theme-colors-border-subtle-dark {\n      --#{$prefix}#{$color}-border-subtle: #{$value};\n    }\n\n    --#{$prefix}heading-color: #{$headings-color-dark};\n\n    --#{$prefix}link-color: #{$link-color-dark};\n    --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n    --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n    --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n    --#{$prefix}code-color: #{$code-color-dark};\n    --#{$prefix}highlight-color: #{$mark-color-dark};\n    --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n    --#{$prefix}border-color: #{$border-color-dark};\n    --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n    --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n    --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n    --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n    --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n    // scss-docs-end root-dark-mode-vars\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_spinners.scss",
    "content": "//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n  display: inline-block;\n  width: var(--#{$prefix}spinner-width);\n  height: var(--#{$prefix}spinner-height);\n  vertical-align: var(--#{$prefix}spinner-vertical-align);\n  // stylelint-disable-next-line property-disallowed-list\n  border-radius: 50%;\n  animation: var(--#{$prefix}spinner-animation-speed) linear infinite\n    var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) #{'/*!rtl:ignore*/'};\n  }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n  // scss-docs-start spinner-border-css-vars\n  --#{$prefix}spinner-width: #{$spinner-width};\n  --#{$prefix}spinner-height: #{$spinner-height};\n  --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n  --#{$prefix}spinner-border-width: #{$spinner-border-width};\n  --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n  --#{$prefix}spinner-animation-name: spinner-border;\n  // scss-docs-end spinner-border-css-vars\n\n  border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n  border-right-color: transparent;\n}\n\n.spinner-border-sm {\n  // scss-docs-start spinner-border-sm-css-vars\n  --#{$prefix}spinner-width: #{$spinner-width-sm};\n  --#{$prefix}spinner-height: #{$spinner-height-sm};\n  --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n  // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n  // scss-docs-start spinner-grow-css-vars\n  --#{$prefix}spinner-width: #{$spinner-width};\n  --#{$prefix}spinner-height: #{$spinner-height};\n  --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n  --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n  --#{$prefix}spinner-animation-name: spinner-grow;\n  // scss-docs-end spinner-grow-css-vars\n\n  background-color: currentcolor;\n  opacity: 0;\n}\n\n.spinner-grow-sm {\n  --#{$prefix}spinner-width: #{$spinner-width-sm};\n  --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n  @media (prefers-reduced-motion: reduce) {\n    .spinner-border,\n    .spinner-grow {\n      --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_tables.scss",
    "content": "//\n// Basic Bootstrap table\n//\n\n.table {\n  // Reset needed for nesting tables\n  --#{$prefix}table-color-type: initial;\n  --#{$prefix}table-bg-type: initial;\n  --#{$prefix}table-color-state: initial;\n  --#{$prefix}table-bg-state: initial;\n  // End of reset\n  --#{$prefix}table-color: #{$table-color};\n  --#{$prefix}table-bg: #{$table-bg};\n  --#{$prefix}table-border-color: #{$table-border-color};\n  --#{$prefix}table-accent-bg: #{$table-accent-bg};\n  --#{$prefix}table-striped-color: #{$table-striped-color};\n  --#{$prefix}table-striped-bg: #{$table-striped-bg};\n  --#{$prefix}table-active-color: #{$table-active-color};\n  --#{$prefix}table-active-bg: #{$table-active-bg};\n  --#{$prefix}table-hover-color: #{$table-hover-color};\n  --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n  width: 100%;\n  margin-bottom: $spacer;\n  vertical-align: $table-cell-vertical-align;\n  border-color: var(--#{$prefix}table-border-color);\n\n  // Target th & td\n  // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n  // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n  // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n  // stylelint-disable-next-line selector-max-universal\n  > :not(caption) > * > * {\n    padding: $table-cell-padding-y $table-cell-padding-x;\n    // Following the precept of cascades: https://codepen.io/miriamsuzanne/full/vYNgodb\n    color: var(\n      --#{$prefix}table-color-state,\n      var(--#{$prefix}table-color-type, var(--#{$prefix}table-color))\n    );\n    background-color: var(--#{$prefix}table-bg);\n    border-bottom-width: $table-border-width;\n    box-shadow: inset 0 0 0 9999px\n      var(\n        --#{$prefix}table-bg-state,\n        var(--#{$prefix}table-bg-type, var(--#{$prefix}table-accent-bg))\n      );\n  }\n\n  > tbody {\n    vertical-align: inherit;\n  }\n\n  > thead {\n    vertical-align: bottom;\n  }\n}\n\n.table-group-divider {\n  border-top: calc(#{$table-border-width} * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n  caption-side: top;\n}\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n  // stylelint-disable-next-line selector-max-universal\n  > :not(caption) > * > * {\n    padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n  }\n}\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefore we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n  > :not(caption) > * {\n    border-width: $table-border-width 0;\n\n    // stylelint-disable-next-line selector-max-universal\n    > * {\n      border-width: 0 $table-border-width;\n    }\n  }\n}\n\n.table-borderless {\n  // stylelint-disable-next-line selector-max-universal\n  > :not(caption) > * > * {\n    border-bottom-width: 0;\n  }\n\n  > :not(:first-child) {\n    border-top-width: 0;\n  }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n  > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n    --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n    --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n  }\n}\n\n// For columns\n.table-striped-columns {\n  > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n    --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n    --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n  }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n  --#{$prefix}table-color-state: var(--#{$prefix}table-active-color);\n  --#{$prefix}table-bg-state: var(--#{$prefix}table-active-bg);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover > * {\n    --#{$prefix}table-color-state: var(--#{$prefix}table-hover-color);\n    --#{$prefix}table-bg-state: var(--#{$prefix}table-hover-bg);\n  }\n}\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n  @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n  @include media-breakpoint-down($breakpoint) {\n    .table-responsive#{$infix} {\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_toasts.scss",
    "content": ".toast {\n  // scss-docs-start toast-css-vars\n  --#{$prefix}toast-zindex: #{$zindex-toast};\n  --#{$prefix}toast-padding-x: #{$toast-padding-x};\n  --#{$prefix}toast-padding-y: #{$toast-padding-y};\n  --#{$prefix}toast-spacing: #{$toast-spacing};\n  --#{$prefix}toast-max-width: #{$toast-max-width};\n  @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n  --#{$prefix}toast-color: #{$toast-color};\n  --#{$prefix}toast-bg: #{$toast-background-color};\n  --#{$prefix}toast-border-width: #{$toast-border-width};\n  --#{$prefix}toast-border-color: #{$toast-border-color};\n  --#{$prefix}toast-border-radius: #{$toast-border-radius};\n  --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n  --#{$prefix}toast-header-color: #{$toast-header-color};\n  --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n  --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n  // scss-docs-end toast-css-vars\n\n  width: var(--#{$prefix}toast-max-width);\n  max-width: 100%;\n  @include font-size(var(--#{$prefix}toast-font-size));\n  color: var(--#{$prefix}toast-color);\n  pointer-events: auto;\n  background-color: var(--#{$prefix}toast-bg);\n  background-clip: padding-box;\n  border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n  box-shadow: var(--#{$prefix}toast-box-shadow);\n  @include border-radius(var(--#{$prefix}toast-border-radius));\n\n  &.showing {\n    opacity: 0;\n  }\n\n  &:not(.show) {\n    display: none;\n  }\n}\n\n.toast-container {\n  --#{$prefix}toast-zindex: #{$zindex-toast};\n\n  position: absolute;\n  z-index: var(--#{$prefix}toast-zindex);\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n\n  > :not(:last-child) {\n    margin-bottom: var(--#{$prefix}toast-spacing);\n  }\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n  color: var(--#{$prefix}toast-header-color);\n  background-color: var(--#{$prefix}toast-header-bg);\n  background-clip: padding-box;\n  border-bottom: var(--#{$prefix}toast-border-width) solid\n    var(--#{$prefix}toast-header-border-color);\n  @include border-top-radius(\n    calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width))\n  );\n\n  .btn-close {\n    margin-right: calc(\n      -0.5 * var(--#{$prefix}toast-padding-x)\n    ); // stylelint-disable-line function-disallowed-list\n    margin-left: var(--#{$prefix}toast-padding-x);\n  }\n}\n\n.toast-body {\n  padding: var(--#{$prefix}toast-padding-x);\n  word-wrap: break-word;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_tooltip.scss",
    "content": "// Base class\n.tooltip {\n  // scss-docs-start tooltip-css-vars\n  --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n  --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n  --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n  --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n  --#{$prefix}tooltip-margin: #{$tooltip-margin};\n  @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n  --#{$prefix}tooltip-color: #{$tooltip-color};\n  --#{$prefix}tooltip-bg: #{$tooltip-bg};\n  --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n  --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n  --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n  --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n  // scss-docs-end tooltip-css-vars\n\n  z-index: var(--#{$prefix}tooltip-zindex);\n  display: block;\n  margin: var(--#{$prefix}tooltip-margin);\n  @include deprecate('`$tooltip-margin`', 'v5', 'v5.x', true);\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  @include reset-text();\n  @include font-size(var(--#{$prefix}tooltip-font-size));\n  // Allow breaking very long words so they don't overflow the tooltip's bounds\n  word-wrap: break-word;\n  opacity: 0;\n\n  &.show {\n    opacity: var(--#{$prefix}tooltip-opacity);\n  }\n\n  .tooltip-arrow {\n    display: block;\n    width: var(--#{$prefix}tooltip-arrow-width);\n    height: var(--#{$prefix}tooltip-arrow-height);\n\n    &::before {\n      position: absolute;\n      content: '';\n      border-color: transparent;\n      border-style: solid;\n    }\n  }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n  bottom: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n\n  &::before {\n    top: -1px;\n    border-width: var(--#{$prefix}tooltip-arrow-height)\n      calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    border-top-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/*!rtl:begin:ignore*/\n.bs-tooltip-end .tooltip-arrow {\n  left: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n  width: var(--#{$prefix}tooltip-arrow-height);\n  height: var(--#{$prefix}tooltip-arrow-width);\n\n  &::before {\n    right: -1px;\n    border-width: calc(var(--#{$prefix}tooltip-arrow-width) * 0.5)\n      var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) 0; // stylelint-disable-line function-disallowed-list\n    border-right-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/*!rtl:end:ignore*/\n\n.bs-tooltip-bottom .tooltip-arrow {\n  top: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n\n  &::before {\n    bottom: -1px;\n    border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * 0.5)\n      var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n    border-bottom-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/*!rtl:begin:ignore*/\n.bs-tooltip-start .tooltip-arrow {\n  right: calc(\n    -1 * var(--#{$prefix}tooltip-arrow-height)\n  ); // stylelint-disable-line function-disallowed-list\n  width: var(--#{$prefix}tooltip-arrow-height);\n  height: var(--#{$prefix}tooltip-arrow-width);\n\n  &::before {\n    left: -1px;\n    border-width: calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) 0\n      calc(var(--#{$prefix}tooltip-arrow-width) * 0.5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n    border-left-color: var(--#{$prefix}tooltip-bg);\n  }\n}\n\n/*!rtl:end:ignore*/\n\n.bs-tooltip-auto {\n  &[data-popper-placement^='top'] {\n    @extend .bs-tooltip-top;\n  }\n  &[data-popper-placement^='right'] {\n    @extend .bs-tooltip-end;\n  }\n  &[data-popper-placement^='bottom'] {\n    @extend .bs-tooltip-bottom;\n  }\n  &[data-popper-placement^='left'] {\n    @extend .bs-tooltip-start;\n  }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: var(--#{$prefix}tooltip-max-width);\n  padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n  color: var(--#{$prefix}tooltip-color);\n  text-align: center;\n  background-color: var(--#{$prefix}tooltip-bg);\n  @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_transitions.scss",
    "content": ".fade {\n  @include transition($transition-fade);\n\n  &:not(.show) {\n    opacity: 0;\n  }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n  &:not(.show) {\n    display: none;\n  }\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  @include transition($transition-collapse);\n\n  &.collapse-horizontal {\n    width: 0;\n    height: auto;\n    @include transition($transition-collapse-width);\n  }\n}\n// scss-docs-end collapse-classes\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_type.scss",
    "content": "//\n// Headings\n//\n.h1 {\n  @extend h1;\n}\n\n.h2 {\n  @extend h2;\n}\n\n.h3 {\n  @extend h3;\n}\n\n.h4 {\n  @extend h4;\n}\n\n.h5 {\n  @extend h5;\n}\n\n.h6 {\n  @extend h6;\n}\n\n.lead {\n  @include font-size($lead-font-size);\n  font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n  .display-#{$display} {\n    @include font-size($font-size);\n    font-family: $display-font-family;\n    font-style: $display-font-style;\n    font-weight: $display-font-weight;\n    line-height: $display-line-height;\n  }\n}\n\n//\n// Emphasis\n//\n.small {\n  @extend small;\n}\n\n.mark {\n  @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n  @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  @include list-unstyled();\n}\n.list-inline-item {\n  display: inline-block;\n\n  &:not(:last-child) {\n    margin-right: $list-inline-padding;\n  }\n}\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n  @include font-size($initialism-font-size);\n  text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n  margin-bottom: $blockquote-margin-y;\n  @include font-size($blockquote-font-size);\n\n  > :last-child {\n    margin-bottom: 0;\n  }\n}\n\n.blockquote-footer {\n  margin-top: -$blockquote-margin-y;\n  margin-bottom: $blockquote-margin-y;\n  @include font-size($blockquote-footer-font-size);\n  color: $blockquote-footer-color;\n\n  &::before {\n    content: '\\2014\\00A0'; // em dash, nbsp\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_utilities.scss",
    "content": "// Utilities\n\n$utilities: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-merge(\n  (\n    // scss-docs-start utils-vertical-align\n    'align':\n      (\n        property: vertical-align,\n        class: align,\n        values: baseline top middle bottom text-bottom text-top,\n      ),\n    // scss-docs-end utils-vertical-align\n    // scss-docs-start utils-float\n    'float':\n      (\n        responsive: true,\n        property: float,\n        values: (\n          start: left,\n          end: right,\n          none: none,\n        ),\n      ),\n    // scss-docs-end utils-float\n    // Object Fit utilities\n    // scss-docs-start utils-object-fit\n    'object-fit':\n      (\n        responsive: true,\n        property: object-fit,\n        values: (\n          contain: contain,\n          cover: cover,\n          fill: fill,\n          scale: scale-down,\n          none: none,\n        ),\n      ),\n    // scss-docs-end utils-object-fit\n    // Opacity utilities\n    // scss-docs-start utils-opacity\n    'opacity':\n      (\n        property: opacity,\n        values: (\n          0: 0,\n          25: 0.25,\n          50: 0.5,\n          75: 0.75,\n          100: 1,\n        ),\n      ),\n    // scss-docs-end utils-opacity\n    // scss-docs-start utils-overflow\n    'overflow':\n      (\n        property: overflow,\n        values: auto hidden visible scroll,\n      ),\n    'overflow-x': (\n      property: overflow-x,\n      values: auto hidden visible scroll,\n    ),\n    'overflow-y': (\n      property: overflow-y,\n      values: auto hidden visible scroll,\n    ),\n    // scss-docs-end utils-overflow\n    // scss-docs-start utils-display\n    'display':\n      (\n        responsive: true,\n        print: true,\n        property: display,\n        class: d,\n        values: inline inline-block block grid inline-grid table table-row table-cell flex\n          inline-flex none,\n      ),\n    // scss-docs-end utils-display\n    // scss-docs-start utils-shadow\n    'shadow':\n      (\n        property: box-shadow,\n        class: shadow,\n        values: (\n          null: var(--#{$prefix}box-shadow),\n          sm: var(--#{$prefix}box-shadow-sm),\n          lg: var(--#{$prefix}box-shadow-lg),\n          none: none,\n        ),\n      ),\n    // scss-docs-end utils-shadow\n    // scss-docs-start utils-focus-ring\n    'focus-ring':\n      (\n        css-var: true,\n        css-variable-name: focus-ring-color,\n        class: focus-ring,\n        values: map-loop($theme-colors-rgb, rgba-css-var, '$key', 'focus-ring'),\n      ),\n    // scss-docs-end utils-focus-ring\n    // scss-docs-start utils-position\n    'position':\n      (\n        property: position,\n        values: static relative absolute fixed sticky,\n      ),\n    'top': (\n      property: top,\n      values: $position-values,\n    ),\n    'bottom': (\n      property: bottom,\n      values: $position-values,\n    ),\n    'start': (\n      property: left,\n      class: start,\n      values: $position-values,\n    ),\n    'end': (\n      property: right,\n      class: end,\n      values: $position-values,\n    ),\n    'translate-middle': (\n      property: transform,\n      class: translate-middle,\n      values: (\n        null: translate(-50%, -50%),\n        x: translateX(-50%),\n        y: translateY(-50%),\n      ),\n    ),\n    // scss-docs-end utils-position\n    // scss-docs-start utils-borders\n    'border':\n      (\n        property: border,\n        values: (\n          null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n            var(--#{$prefix}border-color),\n          0: 0,\n        ),\n      ),\n    'border-top': (\n      property: border-top,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-end': (\n      property: border-right,\n      class: border-end,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-bottom': (\n      property: border-bottom,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-start': (\n      property: border-left,\n      class: border-start,\n      values: (\n        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)\n          var(--#{$prefix}border-color),\n        0: 0,\n      ),\n    ),\n    'border-color': (\n      property: border-color,\n      class: border,\n      local-vars: (\n        'border-opacity': 1,\n      ),\n      values: $utilities-border-colors,\n    ),\n    'subtle-border-color': (\n      property: border-color,\n      class: border,\n      values: $utilities-border-subtle,\n    ),\n    'border-width': (\n      property: border-width,\n      class: border,\n      values: $border-widths,\n    ),\n    'border-opacity': (\n      css-var: true,\n      class: border-opacity,\n      values: (\n        10: 0.1,\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    // scss-docs-end utils-borders\n    // Sizing utilities\n    // scss-docs-start utils-sizing\n    'width':\n      (\n        property: width,\n        class: w,\n        values: (\n          25: 25%,\n          50: 50%,\n          75: 75%,\n          100: 100%,\n          auto: auto,\n        ),\n      ),\n    'max-width': (\n      property: max-width,\n      class: mw,\n      values: (\n        100: 100%,\n      ),\n    ),\n    'viewport-width': (\n      property: width,\n      class: vw,\n      values: (\n        100: 100vw,\n      ),\n    ),\n    'min-viewport-width': (\n      property: min-width,\n      class: min-vw,\n      values: (\n        100: 100vw,\n      ),\n    ),\n    'height': (\n      property: height,\n      class: h,\n      values: (\n        25: 25%,\n        50: 50%,\n        75: 75%,\n        100: 100%,\n        auto: auto,\n      ),\n    ),\n    'max-height': (\n      property: max-height,\n      class: mh,\n      values: (\n        100: 100%,\n      ),\n    ),\n    'viewport-height': (\n      property: height,\n      class: vh,\n      values: (\n        100: 100vh,\n      ),\n    ),\n    'min-viewport-height': (\n      property: min-height,\n      class: min-vh,\n      values: (\n        100: 100vh,\n      ),\n    ),\n    // scss-docs-end utils-sizing\n    // Flex utilities\n    // scss-docs-start utils-flex\n    'flex':\n      (\n        responsive: true,\n        property: flex,\n        values: (\n          fill: 1 1 auto,\n        ),\n      ),\n    'flex-direction': (\n      responsive: true,\n      property: flex-direction,\n      class: flex,\n      values: row column row-reverse column-reverse,\n    ),\n    'flex-grow': (\n      responsive: true,\n      property: flex-grow,\n      class: flex,\n      values: (\n        grow-0: 0,\n        grow-1: 1,\n      ),\n    ),\n    'flex-shrink': (\n      responsive: true,\n      property: flex-shrink,\n      class: flex,\n      values: (\n        shrink-0: 0,\n        shrink-1: 1,\n      ),\n    ),\n    'flex-wrap': (\n      responsive: true,\n      property: flex-wrap,\n      class: flex,\n      values: wrap nowrap wrap-reverse,\n    ),\n    'justify-content': (\n      responsive: true,\n      property: justify-content,\n      values: (\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        between: space-between,\n        around: space-around,\n        evenly: space-evenly,\n      ),\n    ),\n    'align-items': (\n      responsive: true,\n      property: align-items,\n      values: (\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        baseline: baseline,\n        stretch: stretch,\n      ),\n    ),\n    'align-content': (\n      responsive: true,\n      property: align-content,\n      values: (\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        between: space-between,\n        around: space-around,\n        stretch: stretch,\n      ),\n    ),\n    'align-self': (\n      responsive: true,\n      property: align-self,\n      values: (\n        auto: auto,\n        start: flex-start,\n        end: flex-end,\n        center: center,\n        baseline: baseline,\n        stretch: stretch,\n      ),\n    ),\n    'order': (\n      responsive: true,\n      property: order,\n      values: (\n        first: -1,\n        0: 0,\n        1: 1,\n        2: 2,\n        3: 3,\n        4: 4,\n        5: 5,\n        last: 6,\n      ),\n    ),\n    // scss-docs-end utils-flex\n    // Margin utilities\n    // scss-docs-start utils-spacing\n    'margin':\n      (\n        responsive: true,\n        property: margin,\n        class: m,\n        values:\n          map-merge(\n            $spacers,\n            (\n              auto: auto,\n            )\n          ),\n      ),\n    'margin-x': (\n      responsive: true,\n      property: margin-right margin-left,\n      class: mx,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-y': (\n      responsive: true,\n      property: margin-top margin-bottom,\n      class: my,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-top': (\n      responsive: true,\n      property: margin-top,\n      class: mt,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-end': (\n      responsive: true,\n      property: margin-right,\n      class: me,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-bottom': (\n      responsive: true,\n      property: margin-bottom,\n      class: mb,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    'margin-start': (\n      responsive: true,\n      property: margin-left,\n      class: ms,\n      values:\n        map-merge(\n          $spacers,\n          (\n            auto: auto,\n          )\n        ),\n    ),\n    // Negative margin utilities\n    'negative-margin':\n      (\n        responsive: true,\n        property: margin,\n        class: m,\n        values: $negative-spacers,\n      ),\n    'negative-margin-x': (\n      responsive: true,\n      property: margin-right margin-left,\n      class: mx,\n      values: $negative-spacers,\n    ),\n    'negative-margin-y': (\n      responsive: true,\n      property: margin-top margin-bottom,\n      class: my,\n      values: $negative-spacers,\n    ),\n    'negative-margin-top': (\n      responsive: true,\n      property: margin-top,\n      class: mt,\n      values: $negative-spacers,\n    ),\n    'negative-margin-end': (\n      responsive: true,\n      property: margin-right,\n      class: me,\n      values: $negative-spacers,\n    ),\n    'negative-margin-bottom': (\n      responsive: true,\n      property: margin-bottom,\n      class: mb,\n      values: $negative-spacers,\n    ),\n    'negative-margin-start': (\n      responsive: true,\n      property: margin-left,\n      class: ms,\n      values: $negative-spacers,\n    ),\n    // Padding utilities\n    'padding':\n      (\n        responsive: true,\n        property: padding,\n        class: p,\n        values: $spacers,\n      ),\n    'padding-x': (\n      responsive: true,\n      property: padding-right padding-left,\n      class: px,\n      values: $spacers,\n    ),\n    'padding-y': (\n      responsive: true,\n      property: padding-top padding-bottom,\n      class: py,\n      values: $spacers,\n    ),\n    'padding-top': (\n      responsive: true,\n      property: padding-top,\n      class: pt,\n      values: $spacers,\n    ),\n    'padding-end': (\n      responsive: true,\n      property: padding-right,\n      class: pe,\n      values: $spacers,\n    ),\n    'padding-bottom': (\n      responsive: true,\n      property: padding-bottom,\n      class: pb,\n      values: $spacers,\n    ),\n    'padding-start': (\n      responsive: true,\n      property: padding-left,\n      class: ps,\n      values: $spacers,\n    ),\n    // Gap utility\n    'gap':\n      (\n        responsive: true,\n        property: gap,\n        class: gap,\n        values: $spacers,\n      ),\n    'row-gap': (\n      responsive: true,\n      property: row-gap,\n      class: row-gap,\n      values: $spacers,\n    ),\n    'column-gap': (\n      responsive: true,\n      property: column-gap,\n      class: column-gap,\n      values: $spacers,\n    ),\n    // scss-docs-end utils-spacing\n    // Text\n    // scss-docs-start utils-text\n    'font-family':\n      (\n        property: font-family,\n        class: font,\n        values: (\n          monospace: var(--#{$prefix}font-monospace),\n        ),\n      ),\n    'font-size': (\n      rfs: true,\n      property: font-size,\n      class: fs,\n      values: $font-sizes,\n    ),\n    'font-style': (\n      property: font-style,\n      class: fst,\n      values: italic normal,\n    ),\n    'font-weight': (\n      property: font-weight,\n      class: fw,\n      values: (\n        lighter: $font-weight-lighter,\n        light: $font-weight-light,\n        normal: $font-weight-normal,\n        medium: $font-weight-medium,\n        semibold: $font-weight-semibold,\n        bold: $font-weight-bold,\n        bolder: $font-weight-bolder,\n      ),\n    ),\n    'line-height': (\n      property: line-height,\n      class: lh,\n      values: (\n        1: 1,\n        sm: $line-height-sm,\n        base: $line-height-base,\n        lg: $line-height-lg,\n      ),\n    ),\n    'text-align': (\n      responsive: true,\n      property: text-align,\n      class: text,\n      values: (\n        start: left,\n        end: right,\n        center: center,\n      ),\n    ),\n    'text-decoration': (\n      property: text-decoration,\n      values: none underline line-through,\n    ),\n    'text-transform': (\n      property: text-transform,\n      class: text,\n      values: lowercase uppercase capitalize,\n    ),\n    'white-space': (\n      property: white-space,\n      class: text,\n      values: (\n        wrap: normal,\n        nowrap: nowrap,\n      ),\n    ),\n    'word-wrap': (\n      property: word-wrap word-break,\n      class: text,\n      values: (\n        break: break-word,\n      ),\n      rtl: false,\n    ),\n    // scss-docs-end utils-text\n    // scss-docs-start utils-color\n    'color':\n      (\n        property: color,\n        class: text,\n        local-vars: (\n          'text-opacity': 1,\n        ),\n        values:\n          map-merge(\n            $utilities-text-colors,\n            (\n              'muted': var(--#{$prefix}secondary-color),\n              // deprecated\n              'black-50': rgba($black, 0.5),\n              // deprecated\n              'white-50': rgba($white, 0.5),\n              // deprecated\n              'body-secondary': var(--#{$prefix}secondary-color),\n              'body-tertiary': var(--#{$prefix}tertiary-color),\n              'body-emphasis': var(--#{$prefix}emphasis-color),\n              'reset': inherit,\n            )\n          ),\n      ),\n    'text-opacity': (\n      css-var: true,\n      class: text-opacity,\n      values: (\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    'text-color': (\n      property: color,\n      class: text,\n      values: $utilities-text-emphasis-colors,\n    ),\n    // scss-docs-end utils-color\n    // scss-docs-start utils-links\n    'link-opacity':\n      (\n        css-var: true,\n        class: link-opacity,\n        state: hover,\n        values: (\n          10: 0.1,\n          25: 0.25,\n          50: 0.5,\n          75: 0.75,\n          100: 1,\n        ),\n      ),\n    'link-offset': (\n      property: text-underline-offset,\n      class: link-offset,\n      state: hover,\n      values: (\n        1: 0.125em,\n        2: 0.25em,\n        3: 0.375em,\n      ),\n    ),\n    'link-underline': (\n      property: text-decoration-color,\n      class: link-underline,\n      local-vars: (\n        'link-underline-opacity': 1,\n      ),\n      values:\n        map-merge(\n          $utilities-links-underline,\n          (\n            null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)),\n          )\n        ),\n    ),\n    'link-underline-opacity': (\n      css-var: true,\n      class: link-underline-opacity,\n      state: hover,\n      values: (\n        0: 0,\n        10: 0.1,\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    // scss-docs-end utils-links\n    // scss-docs-start utils-bg-color\n    'background-color':\n      (\n        property: background-color,\n        class: bg,\n        local-vars: (\n          'bg-opacity': 1,\n        ),\n        values:\n          map-merge(\n            $utilities-bg-colors,\n            (\n              'transparent': transparent,\n              'body-secondary': rgba(var(--#{$prefix}secondary-bg-rgb), var(--#{$prefix}bg-opacity)),\n              'body-tertiary': rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity)),\n            )\n          ),\n      ),\n    'bg-opacity': (\n      css-var: true,\n      class: bg-opacity,\n      values: (\n        10: 0.1,\n        25: 0.25,\n        50: 0.5,\n        75: 0.75,\n        100: 1,\n      ),\n    ),\n    'subtle-background-color': (\n      property: background-color,\n      class: bg,\n      values: $utilities-bg-subtle,\n    ),\n    // scss-docs-end utils-bg-color\n    'gradient':\n      (\n        property: background-image,\n        class: bg,\n        values: (\n          gradient: var(--#{$prefix}gradient),\n        ),\n      ),\n    // scss-docs-start utils-interaction\n    'user-select':\n      (\n        property: user-select,\n        values: all auto none,\n      ),\n    'pointer-events': (\n      property: pointer-events,\n      class: pe,\n      values: none auto,\n    ),\n    // scss-docs-end utils-interaction\n    // scss-docs-start utils-border-radius\n    'rounded':\n      (\n        property: border-radius,\n        class: rounded,\n        values: (\n          null: var(--#{$prefix}border-radius),\n          0: 0,\n          1: var(--#{$prefix}border-radius-sm),\n          2: var(--#{$prefix}border-radius),\n          3: var(--#{$prefix}border-radius-lg),\n          4: var(--#{$prefix}border-radius-xl),\n          5: var(--#{$prefix}border-radius-xxl),\n          circle: 50%,\n          pill: var(--#{$prefix}border-radius-pill),\n        ),\n      ),\n    'rounded-top': (\n      property: border-top-left-radius border-top-right-radius,\n      class: rounded-top,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    'rounded-end': (\n      property: border-top-right-radius border-bottom-right-radius,\n      class: rounded-end,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    'rounded-bottom': (\n      property: border-bottom-right-radius border-bottom-left-radius,\n      class: rounded-bottom,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    'rounded-start': (\n      property: border-bottom-left-radius border-top-left-radius,\n      class: rounded-start,\n      values: (\n        null: var(--#{$prefix}border-radius),\n        0: 0,\n        1: var(--#{$prefix}border-radius-sm),\n        2: var(--#{$prefix}border-radius),\n        3: var(--#{$prefix}border-radius-lg),\n        4: var(--#{$prefix}border-radius-xl),\n        5: var(--#{$prefix}border-radius-xxl),\n        circle: 50%,\n        pill: var(--#{$prefix}border-radius-pill),\n      ),\n    ),\n    // scss-docs-end utils-border-radius\n    // scss-docs-start utils-visibility\n    'visibility':\n      (\n        property: visibility,\n        class: null,\n        values: (\n          visible: visible,\n          invisible: hidden,\n        ),\n      ),\n    // scss-docs-end utils-visibility\n    // scss-docs-start utils-zindex\n    'z-index':\n      (\n        property: z-index,\n        class: z,\n        values: $zindex-levels,\n      )\n      // scss-docs-end utils-zindex\n  ),\n  $utilities\n);\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_variables-dark.scss",
    "content": "// Dark color mode variables\n//\n// Custom variables for the `[data-mdb-theme=\"dark\"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need.\n\n//\n// Global colors\n//\n\n// scss-docs-start sass-dark-mode-vars\n// scss-docs-start theme-text-dark-variables\n$primary-text-emphasis-dark: tint-color($primary, 40%) !default;\n$secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;\n$success-text-emphasis-dark: tint-color($success, 40%) !default;\n$info-text-emphasis-dark: tint-color($info, 40%) !default;\n$warning-text-emphasis-dark: tint-color($warning, 40%) !default;\n$danger-text-emphasis-dark: tint-color($danger, 40%) !default;\n$light-text-emphasis-dark: $gray-100 !default;\n$dark-text-emphasis-dark: $gray-300 !default;\n// scss-docs-end theme-text-dark-variables\n\n// scss-docs-start theme-bg-subtle-dark-variables\n$primary-bg-subtle-dark: shade-color($primary, 80%) !default;\n$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;\n$success-bg-subtle-dark: shade-color($success, 80%) !default;\n$info-bg-subtle-dark: shade-color($info, 80%) !default;\n$warning-bg-subtle-dark: shade-color($warning, 80%) !default;\n$danger-bg-subtle-dark: shade-color($danger, 80%) !default;\n$light-bg-subtle-dark: $gray-800 !default;\n$dark-bg-subtle-dark: mix($gray-800, $black) !default;\n// scss-docs-end theme-bg-subtle-dark-variables\n\n// scss-docs-start theme-border-subtle-dark-variables\n$primary-border-subtle-dark: shade-color($primary, 40%) !default;\n$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;\n$success-border-subtle-dark: shade-color($success, 40%) !default;\n$info-border-subtle-dark: shade-color($info, 40%) !default;\n$warning-border-subtle-dark: shade-color($warning, 40%) !default;\n$danger-border-subtle-dark: shade-color($danger, 40%) !default;\n$light-border-subtle-dark: $gray-700 !default;\n$dark-border-subtle-dark: $gray-800 !default;\n// scss-docs-end theme-border-subtle-dark-variables\n\n$body-color-dark: $gray-300 !default;\n$body-bg-dark: $gray-900 !default;\n$body-secondary-color-dark: rgba($body-color-dark, 0.75) !default;\n$body-secondary-bg-dark: $gray-800 !default;\n$body-tertiary-color-dark: rgba($body-color-dark, 0.5) !default;\n$body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%) !default;\n$body-emphasis-color-dark: $white !default;\n$border-color-dark: $gray-700 !default;\n$border-color-translucent-dark: rgba($white, 0.15) !default;\n$headings-color-dark: inherit !default;\n$link-color-dark: tint-color($primary, 40%) !default;\n$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;\n$code-color-dark: tint-color($code-color, 40%) !default;\n$mark-color-dark: $body-color-dark !default;\n$mark-bg-dark: $yellow-800 !default;\n\n//\n// Forms\n//\n\n$form-select-indicator-color-dark: $body-color-dark !default;\n$form-select-indicator-dark: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-switch-color-dark: rgba($white, 0.25) !default;\n$form-switch-bg-image-dark: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>\") !default;\n\n// scss-docs-start form-validation-colors-dark\n$form-valid-color-dark: $green-300 !default;\n$form-valid-border-color-dark: $green-300 !default;\n$form-invalid-color-dark: $red-300 !default;\n$form-invalid-border-color-dark: $red-300 !default;\n// scss-docs-end form-validation-colors-dark\n\n//\n// Accordion\n//\n\n$accordion-icon-color-dark: $primary-text-emphasis-dark !default;\n$accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;\n\n$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;\n$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;\n// scss-docs-end sass-dark-mode-vars\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/_variables.scss",
    "content": "// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n  '100': $gray-100,\n  '200': $gray-200,\n  '300': $gray-300,\n  '400': $gray-400,\n  '500': $gray-500,\n  '600': $gray-600,\n  '700': $gray-700,\n  '800': $gray-800,\n  '900': $gray-900,\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n  'blue': $blue,\n  'indigo': $indigo,\n  'purple': $purple,\n  'pink': $pink,\n  'red': $red,\n  'orange': $orange,\n  'yellow': $yellow,\n  'green': $green,\n  'teal': $teal,\n  'cyan': $cyan,\n  'black': $black,\n  'white': $white,\n  'gray': $gray-600,\n  'gray-dark': $gray-800,\n) !default;\n// scss-docs-end colors-map\n\n// 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.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n  'blue-100': $blue-100,\n  'blue-200': $blue-200,\n  'blue-300': $blue-300,\n  'blue-400': $blue-400,\n  'blue-500': $blue-500,\n  'blue-600': $blue-600,\n  'blue-700': $blue-700,\n  'blue-800': $blue-800,\n  'blue-900': $blue-900,\n) !default;\n\n$indigos: (\n  'indigo-100': $indigo-100,\n  'indigo-200': $indigo-200,\n  'indigo-300': $indigo-300,\n  'indigo-400': $indigo-400,\n  'indigo-500': $indigo-500,\n  'indigo-600': $indigo-600,\n  'indigo-700': $indigo-700,\n  'indigo-800': $indigo-800,\n  'indigo-900': $indigo-900,\n) !default;\n\n$purples: (\n  'purple-100': $purple-100,\n  'purple-200': $purple-200,\n  'purple-300': $purple-300,\n  'purple-400': $purple-400,\n  'purple-500': $purple-500,\n  'purple-600': $purple-600,\n  'purple-700': $purple-700,\n  'purple-800': $purple-800,\n  'purple-900': $purple-900,\n) !default;\n\n$pinks: (\n  'pink-100': $pink-100,\n  'pink-200': $pink-200,\n  'pink-300': $pink-300,\n  'pink-400': $pink-400,\n  'pink-500': $pink-500,\n  'pink-600': $pink-600,\n  'pink-700': $pink-700,\n  'pink-800': $pink-800,\n  'pink-900': $pink-900,\n) !default;\n\n$reds: (\n  'red-100': $red-100,\n  'red-200': $red-200,\n  'red-300': $red-300,\n  'red-400': $red-400,\n  'red-500': $red-500,\n  'red-600': $red-600,\n  'red-700': $red-700,\n  'red-800': $red-800,\n  'red-900': $red-900,\n) !default;\n\n$oranges: (\n  'orange-100': $orange-100,\n  'orange-200': $orange-200,\n  'orange-300': $orange-300,\n  'orange-400': $orange-400,\n  'orange-500': $orange-500,\n  'orange-600': $orange-600,\n  'orange-700': $orange-700,\n  'orange-800': $orange-800,\n  'orange-900': $orange-900,\n) !default;\n\n$yellows: (\n  'yellow-100': $yellow-100,\n  'yellow-200': $yellow-200,\n  'yellow-300': $yellow-300,\n  'yellow-400': $yellow-400,\n  'yellow-500': $yellow-500,\n  'yellow-600': $yellow-600,\n  'yellow-700': $yellow-700,\n  'yellow-800': $yellow-800,\n  'yellow-900': $yellow-900,\n) !default;\n\n$greens: (\n  'green-100': $green-100,\n  'green-200': $green-200,\n  'green-300': $green-300,\n  'green-400': $green-400,\n  'green-500': $green-500,\n  'green-600': $green-600,\n  'green-700': $green-700,\n  'green-800': $green-800,\n  'green-900': $green-900,\n) !default;\n\n$teals: (\n  'teal-100': $teal-100,\n  'teal-200': $teal-200,\n  'teal-300': $teal-300,\n  'teal-400': $teal-400,\n  'teal-500': $teal-500,\n  'teal-600': $teal-600,\n  'teal-700': $teal-700,\n  'teal-800': $teal-800,\n  'teal-900': $teal-900,\n) !default;\n\n$cyans: (\n  'cyan-100': $cyan-100,\n  'cyan-200': $cyan-200,\n  'cyan-300': $cyan-300,\n  'cyan-400': $cyan-400,\n  'cyan-500': $cyan-500,\n  'cyan-600': $cyan-600,\n  'cyan-700': $cyan-700,\n  'cyan-800': $cyan-800,\n  'cyan-900': $cyan-900,\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n  'primary': $primary,\n  'secondary': $secondary,\n  'success': $success,\n  'info': $info,\n  'warning': $warning,\n  'danger': $danger,\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n  ('<', '%3c'),\n  ('>', '%3e'),\n  ('#', '%23'),\n  ('(', '%28'),\n  (')', '%29')\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, 0.15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n  0: 0,\n  1: $spacer * 0.25,\n  2: $spacer * 0.5,\n  3: $spacer,\n  4: $spacer * 1.5,\n  5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n  0: 0,\n  50: 50%,\n  100: 100%,\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, 0.75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, 0.5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: 0.375rem !default;\n$icon-link-underline-offset: 0.25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: 0.2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(0.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n  xs: 0,\n  sm: 576px,\n  md: 768px,\n  lg: 992px,\n  xl: 1200px,\n  xxl: 1400px,\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, '$grid-breakpoints');\n@include _assert-starts-at-zero($grid-breakpoints, '$grid-breakpoints');\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n  sm: 540px,\n  md: 720px,\n  lg: 960px,\n  xl: 1140px,\n  xxl: 1320px,\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, '$container-max-widths');\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n  1: 1px,\n  2: 2px,\n  3: 3px,\n  4: 4px,\n  5: 5px,\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, 0.175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: 0.375rem !default;\n$border-radius-sm: 0.25rem !default;\n$border-radius-lg: 0.5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default;\n$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, 0.175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, 0.075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start focus-ring-variables\n$focus-ring-width: 0.25rem !default;\n$focus-ring-opacity: 0.25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\n\n// scss-docs-start caret-variables\n$caret-width: 0.3em !default;\n$caret-vertical-align: $caret-width * 0.85 !default;\n$caret-spacing: $caret-width * 0.85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all 0.2s ease-in-out !default;\n$transition-fade: opacity 0.15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height 0.35s ease !default;\n$transition-collapse-width: width 0.35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n  '1x1': 100%,\n  '4x3': calc(3 / 4 * 100%),\n  '16x9': calc(9 / 16 * 100%),\n  '21x9': calc(9 / 21 * 100%),\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans',\n  'Liberation Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n  'Noto Color Emoji' !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n  monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * 0.875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n  1: $h1-font-size,\n  2: $h2-font-size,\n  3: $h3-font-size,\n  4: $h4-font-size,\n  5: $h5-font-size,\n  6: $h6-font-size,\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * 0.5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n  1: 5rem,\n  2: 4.5rem,\n  3: 4rem,\n  4: 3.5rem,\n  5: 3rem,\n  6: 2.5rem,\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 0.875em !default;\n\n$sub-sup-font-size: 0.75em !default;\n\n// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: 0.25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: 0.5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: 0.5rem !default;\n\n$mark-padding: 0.1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: 0.5rem !default;\n$table-cell-padding-x: 0.5rem !default;\n$table-cell-padding-y-sm: 0.25rem !default;\n$table-cell-padding-x-sm: 0.25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: 0.05 !default;\n$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: 0.1 !default;\n$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: 0.075 !default;\n$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: 0.2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n  'primary': shift-color($primary, $table-bg-scale),\n  'secondary': shift-color($secondary, $table-bg-scale),\n  'success': shift-color($success, $table-bg-scale),\n  'info': shift-color($info, $table-bg-scale),\n  'warning': shift-color($warning, $table-bg-scale),\n  'danger': shift-color($danger, $table-bg-scale),\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end table-loop\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: 0.375rem !default;\n$input-btn-padding-x: 0.75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$input-btn-padding-y-sm: 0.25rem !default;\n$input-btn-padding-x-sm: 0.5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: 0.5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-color: var(--#{$prefix}body-color) !default;\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, 0.15), 0 1px 1px rgba($black, 0.075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: 0.65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, 0.125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$btn-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: 0.25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: 0.5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(\n  #{$input-border-width} * 2\n) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * 0.5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * 0.25em, $input-padding-y * 0.5) !default;\n\n$input-height: add(\n  $input-line-height * 1em,\n  add($input-padding-y * 2, $input-height-border, false)\n) !default;\n$input-height-sm: add(\n  $input-line-height * 1em,\n  add($input-padding-y-sm * 2, $input-height-border, false)\n) !default;\n$input-height-lg: add(\n  $input-line-height * 1em,\n  add($input-padding-y-lg * 2, $input-height-border, false)\n) !default;\n\n$input-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + 0.5em !default;\n$form-check-margin-bottom: 0.125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: 0.25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: 0.5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, 0.25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + 0.5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position 0.15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 +\n  $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: 0.5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 0.1rem 0.25rem rgba($black, 0.1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out,\n  box-shadow 0.15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: 0.625rem !default;\n$form-floating-label-height: 1.5em !default;\n$form-floating-label-opacity: 0.65 !default;\n$form-floating-label-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$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;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$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;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n  'valid': (\n    'color': var(--#{$prefix}form-valid-color),\n    'icon': $form-feedback-icon-valid,\n    'tooltip-color': #fff,\n    'tooltip-bg-color': var(--#{$prefix}success),\n    'focus-box-shadow': 0 0 $input-btn-focus-blur $input-focus-width\n      rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n    'border-color': var(--#{$prefix}form-valid-border-color),\n  ),\n  'invalid': (\n    'color': var(--#{$prefix}form-invalid-color),\n    'icon': $form-feedback-icon-invalid,\n    'tooltip-color': #fff,\n    'tooltip-bg-color': var(--#{$prefix}danger),\n    'focus-box-shadow': 0 0 $input-btn-focus-blur $input-focus-width\n      rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n    'border-color': var(--#{$prefix}form-invalid-border-color),\n  ),\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n  n1: -1,\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n) !default;\n// scss-docs-end zindex-levels-map\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: 0.5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg)\n  $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color)\n  $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: 0.125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !default;\n// scss-docs-end nav-variables\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * 0.5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: 0.5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * 0.5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: 0.25rem !default;\n$navbar-toggler-padding-x: 0.75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow 0.15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.3) !default;\n$navbar-light-icon-color: rgba($body-color, 0.75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-icon-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, 0.55) !default;\n$navbar-dark-hover-color: rgba($white, 0.75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, 0.25) !default;\n$navbar-dark-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-icon-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, 0.1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: 0.5rem !default;\n$dropdown-spacer: 0.125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(\n  #{$dropdown-border-radius} - #{$dropdown-border-width}\n) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * 0.5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color) !default;\n\n$dropdown-item-padding-y: $spacer * 0.25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, 0.15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: 0.375rem !default;\n$pagination-padding-x: 0.75rem !default;\n$pagination-padding-y-sm: 0.25rem !default;\n$pagination-padding-x-sm: 0.5rem !default;\n$pagination-padding-y-lg: 0.75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(\n  #{$pagination-border-width} * -1\n) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n\n$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n// scss-docs-end pagination-variables\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: 0.5 !default;\n$placeholder-opacity-min: 0.2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * 0.5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * 0.5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), 0.03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * 0.5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract(\n  $accordion-border-radius,\n  $accordion-border-width\n) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius 0.15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n// fusv-disable\n$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3\n// fusv-enable\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !default;\n$accordion-icon-transition: transform 0.2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$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;\n$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;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: 0.9 !default;\n$tooltip-padding-y: $spacer * 0.25 !default;\n$tooltip-padding-x: $spacer * 0.5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: 0.8rem !default;\n$tooltip-arrow-height: 0.4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(\n  #{$popover-border-radius} - #{$popover-border-width}\n) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: 0.5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: 0.5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: 0.75rem !default;\n$toast-padding-y: 0.5rem !default;\n$toast-font-size: 0.875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), 0.85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), 0.85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: 0.75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: 0.35em !default;\n$badge-padding-x: 0.65em !default;\n$badge-border-radius: var(--#{$prefix}border-radius) !default;\n// scss-docs-end badge-variables\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: 0.5rem !default;\n\n$modal-dialog-margin: 0.5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract(\n  $modal-content-border-radius,\n  $modal-content-border-width\n) !default;\n$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: 0.5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform 0.3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * 0.75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width 0.6s ease !default;\n// scss-docs-end progress-variables\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * 0.5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: 0.25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: 0.5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote('/') !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: 0.5 !default;\n$carousel-control-hover-opacity: 0.9 !default;\n$carousel-control-transition: opacity 0.15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: 0.5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity 0.6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$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;\n$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;\n\n$carousel-transition-duration: 0.6s !default;\n$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`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -0.125em !default;\n$spinner-border-width: 0.25em !default;\n$spinner-animation-speed: 0.75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: 0.2em !default;\n// scss-docs-end spinner-variables\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: 0.25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$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;\n$btn-close-focus-shadow: $focus-ring-box-shadow !default;\n$btn-close-opacity: 0.5 !default;\n$btn-close-hover-opacity: 0.75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: 0.25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: 0.3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: 0.1875rem !default;\n$kbd-padding-x: 0.375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n\n@import 'variables-dark'; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/bootstrap-grid.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner(Grid);\n\n$include-column-box-sizing: true !default;\n\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n\n@import 'mixins/breakpoints';\n@import 'mixins/container';\n@import 'mixins/grid';\n@import 'mixins/utilities';\n\n@import 'vendor/rfs';\n\n@import 'containers';\n@import 'grid';\n\n@import 'utilities';\n// Only use the utilities we need\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-get-multiple(\n  $utilities,\n  (\n    'display',\n    'order',\n    'flex',\n    'flex-direction',\n    'flex-grow',\n    'flex-shrink',\n    'flex-wrap',\n    'justify-content',\n    'align-items',\n    'align-content',\n    'align-self',\n    'margin',\n    'margin-x',\n    'margin-y',\n    'margin-top',\n    'margin-end',\n    'margin-bottom',\n    'margin-start',\n    'negative-margin',\n    'negative-margin-x',\n    'negative-margin-y',\n    'negative-margin-top',\n    'negative-margin-end',\n    'negative-margin-bottom',\n    'negative-margin-start',\n    'padding',\n    'padding-x',\n    'padding-y',\n    'padding-top',\n    'padding-end',\n    'padding-bottom',\n    'padding-start'\n  )\n);\n\n@import 'utilities/api';\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/bootstrap-reboot.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner(Reboot);\n\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n@import 'mixins';\n@import 'root';\n@import 'reboot';\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/bootstrap-utilities.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner(Utilities);\n\n// Configuration\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n@import 'mixins';\n@import 'utilities';\n\n// Layout & components\n@import 'root';\n\n// Helpers\n@import 'helpers';\n\n// Utilities\n@import 'utilities/api';\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/bootstrap.scss",
    "content": "@import 'mixins/banner';\n@include bsBanner('');\n\n// scss-docs-start import-stack\n// Configuration\n@import 'functions';\n@import 'variables';\n@import 'variables-dark';\n@import 'maps';\n@import 'mixins';\n@import 'utilities';\n\n// Layout & components\n@import 'root';\n@import 'reboot';\n@import 'type';\n@import 'images';\n@import 'containers';\n@import 'grid';\n@import 'tables';\n@import 'forms';\n@import 'buttons';\n@import 'transitions';\n@import 'dropdown';\n@import 'button-group';\n@import 'nav';\n@import 'navbar';\n@import 'card';\n@import 'accordion';\n@import 'breadcrumb';\n@import 'pagination';\n@import 'badge';\n@import 'alert';\n@import 'progress';\n@import 'list-group';\n@import 'close';\n@import 'toasts';\n@import 'modal';\n@import 'tooltip';\n@import 'popover';\n@import 'carousel';\n@import 'spinners';\n@import 'offcanvas';\n@import 'placeholders';\n\n// Helpers\n@import 'helpers';\n\n// Utilities\n@import 'utilities/api';\n// scss-docs-end import-stack\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_floating-labels.scss",
    "content": ".form-floating {\n  position: relative;\n\n  > .form-control,\n  > .form-control-plaintext,\n  > .form-select {\n    height: $form-floating-height;\n    min-height: $form-floating-height;\n    line-height: $form-floating-line-height;\n  }\n\n  > label {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    height: 100%; // allow textareas\n    padding: $form-floating-padding-y $form-floating-padding-x;\n    overflow: hidden;\n    text-align: start;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    pointer-events: none;\n    border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n    transform-origin: 0 0;\n    @include transition($form-floating-transition);\n  }\n\n  > .form-control,\n  > .form-control-plaintext {\n    padding: $form-floating-padding-y $form-floating-padding-x;\n\n    &::placeholder {\n      color: transparent;\n    }\n\n    &:focus,\n    &:not(:placeholder-shown) {\n      padding-top: $form-floating-input-padding-t;\n      padding-bottom: $form-floating-input-padding-b;\n    }\n    // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n    &:-webkit-autofill {\n      padding-top: $form-floating-input-padding-t;\n      padding-bottom: $form-floating-input-padding-b;\n    }\n  }\n\n  > .form-select {\n    padding-top: $form-floating-input-padding-t;\n    padding-bottom: $form-floating-input-padding-b;\n  }\n\n  > .form-control:focus,\n  > .form-control:not(:placeholder-shown),\n  > .form-control-plaintext,\n  > .form-select {\n    ~ label {\n      color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n      transform: $form-floating-label-transform;\n\n      &::after {\n        position: absolute;\n        inset: $form-floating-padding-y ($form-floating-padding-x * 0.5);\n        z-index: -1;\n        height: $form-floating-label-height;\n        content: '';\n        background-color: $input-bg;\n        @include border-radius($input-border-radius);\n      }\n    }\n  }\n  // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n  > .form-control:-webkit-autofill {\n    ~ label {\n      color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n      transform: $form-floating-label-transform;\n    }\n  }\n\n  > .form-control-plaintext {\n    ~ label {\n      border-width: $input-border-width 0; // Required to properly position label text - as explained above\n    }\n  }\n\n  > :disabled ~ label,\n  > .form-control:disabled ~ label {\n    // Required for `.form-control`s because of specificity\n    color: $form-floating-label-disabled-color;\n\n    &::after {\n      background-color: $input-disabled-bg;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_form-check.scss",
    "content": "//\n// Check/radio\n//\n\n.form-check {\n  display: block;\n  min-height: $form-check-min-height;\n  padding-left: $form-check-padding-start;\n  margin-bottom: $form-check-margin-bottom;\n\n  .form-check-input {\n    float: left;\n    margin-left: $form-check-padding-start * -1;\n  }\n}\n\n.form-check-reverse {\n  padding-right: $form-check-padding-start;\n  padding-left: 0;\n  text-align: right;\n\n  .form-check-input {\n    float: right;\n    margin-right: $form-check-padding-start * -1;\n    margin-left: 0;\n  }\n}\n\n.form-check-input {\n  --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n  flex-shrink: 0;\n  width: $form-check-input-width;\n  height: $form-check-input-width;\n  margin-top: ($line-height-base - $form-check-input-width) * 0.5; // line-height minus check height\n  vertical-align: top;\n  appearance: none;\n  background-color: var(--#{$prefix}form-check-bg);\n  background-image: var(--#{$prefix}form-check-bg-image);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: $form-check-input-border;\n  print-color-adjust: exact; // Keep themed appearance for print\n  @include transition($form-check-transition);\n\n  &[type='checkbox'] {\n    @include border-radius($form-check-input-border-radius);\n  }\n\n  &[type='radio'] {\n    // stylelint-disable-next-line property-disallowed-list\n    border-radius: $form-check-radio-border-radius;\n  }\n\n  &:active {\n    filter: $form-check-input-active-filter;\n  }\n\n  &:focus {\n    border-color: $form-check-input-focus-border;\n    outline: 0;\n    box-shadow: $form-check-input-focus-box-shadow;\n  }\n\n  &:checked {\n    background-color: $form-check-input-checked-bg-color;\n    border-color: $form-check-input-checked-border-color;\n\n    &[type='checkbox'] {\n      @if $enable-gradients {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)},\n          var(--#{$prefix}gradient);\n      } @else {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n      }\n    }\n\n    &[type='radio'] {\n      @if $enable-gradients {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)},\n          var(--#{$prefix}gradient);\n      } @else {\n        --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n      }\n    }\n  }\n\n  &[type='checkbox']:indeterminate {\n    background-color: $form-check-input-indeterminate-bg-color;\n    border-color: $form-check-input-indeterminate-border-color;\n\n    @if $enable-gradients {\n      --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)},\n        var(--#{$prefix}gradient);\n    } @else {\n      --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n    }\n  }\n\n  &:disabled {\n    pointer-events: none;\n    filter: none;\n    opacity: $form-check-input-disabled-opacity;\n  }\n\n  // Use disabled attribute in addition of :disabled pseudo-class\n  // See: https://github.com/twbs/bootstrap/issues/28247\n  &[disabled],\n  &:disabled {\n    ~ .form-check-label {\n      cursor: default;\n      opacity: $form-check-label-disabled-opacity;\n    }\n  }\n}\n\n.form-check-label {\n  color: $form-check-label-color;\n  cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n  padding-left: $form-switch-padding-start;\n\n  .form-check-input {\n    --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n    width: $form-switch-width;\n    margin-left: $form-switch-padding-start * -1;\n    background-image: var(--#{$prefix}form-switch-bg);\n    background-position: left center;\n    @include border-radius($form-switch-border-radius, 0);\n    @include transition($form-switch-transition);\n\n    &:focus {\n      --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n    }\n\n    &:checked {\n      background-position: $form-switch-checked-bg-position;\n\n      @if $enable-gradients {\n        --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)},\n          var(--#{$prefix}gradient);\n      } @else {\n        --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n      }\n    }\n  }\n\n  &.form-check-reverse {\n    padding-right: $form-switch-padding-start;\n    padding-left: 0;\n\n    .form-check-input {\n      margin-right: $form-switch-padding-start * -1;\n      margin-left: 0;\n    }\n  }\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n\n  &[disabled],\n  &:disabled {\n    + .btn {\n      pointer-events: none;\n      filter: none;\n      opacity: $form-check-btn-check-disabled-opacity;\n    }\n  }\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .form-switch .form-check-input:not(:checked):not(:focus) {\n      --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_form-control.scss",
    "content": "//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: $input-padding-y $input-padding-x;\n  font-family: $input-font-family;\n  @include font-size($input-font-size);\n  font-weight: $input-font-weight;\n  line-height: $input-line-height;\n  color: $input-color;\n  appearance: none; // Fix appearance for date inputs in Safari\n  background-color: $input-bg;\n  background-clip: padding-box;\n  border: $input-border-width solid $input-border-color;\n\n  // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n  @include border-radius($input-border-radius, 0);\n\n  @include box-shadow($input-box-shadow);\n  @include transition($input-transition);\n\n  &[type='file'] {\n    overflow: hidden; // prevent pseudo element button overlap\n\n    &:not(:disabled):not([readonly]) {\n      cursor: pointer;\n    }\n  }\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  &:focus {\n    color: $input-focus-color;\n    background-color: $input-focus-bg;\n    border-color: $input-focus-border-color;\n    outline: 0;\n    @if $enable-shadows {\n      @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n    } @else {\n      // Avoid using mixin so we can pass custom focus shadow properly\n      box-shadow: $input-focus-box-shadow;\n    }\n  }\n\n  &::-webkit-date-and-time-value {\n    // On Android Chrome, form-control's \"width: 100%\" makes the input width too small\n    // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n    //\n    // On iOS Safari, form-control's \"appearance: none\" + \"width: 100%\" makes the input width too small\n    // Tested under iOS 16.2 / Safari 16.2\n    min-width: 85px; // Seems to be a good minimum safe width\n\n    // Add some height to date inputs on iOS\n    // https://github.com/twbs/bootstrap/issues/23307\n    // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n    // Multiply line-height by 1em if it has no unit\n    height: if(unit($input-line-height) == '', $input-line-height * 1em, $input-line-height);\n\n    // Android Chrome type=\"date\" is taller than the other inputs\n    // because of \"margin: 1px 24px 1px 4px\" inside the shadow DOM\n    // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n    margin: 0;\n  }\n\n  // Prevent excessive date input height in Webkit\n  // https://github.com/twbs/bootstrap/issues/34433\n  &::-webkit-datetime-edit {\n    display: block;\n    padding: 0;\n  }\n\n  // Placeholder\n  &::placeholder {\n    color: $input-placeholder-color;\n    // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n    opacity: 1;\n  }\n\n  // Disabled inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &:disabled {\n    color: $input-disabled-color;\n    background-color: $input-disabled-bg;\n    border-color: $input-disabled-border-color;\n    // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n    opacity: 1;\n  }\n\n  // File input buttons theming\n  &::file-selector-button {\n    padding: $input-padding-y $input-padding-x;\n    margin: (-$input-padding-y) (-$input-padding-x);\n    margin-inline-end: $input-padding-x;\n    color: $form-file-button-color;\n    @include gradient-bg($form-file-button-bg);\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: $input-border-width;\n    border-radius: 0; // stylelint-disable-line property-disallowed-list\n    @include transition($btn-transition);\n  }\n\n  &:hover:not(:disabled):not([readonly])::file-selector-button {\n    background-color: $form-file-button-hover-bg;\n  }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: $input-padding-y 0;\n  margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n  line-height: $input-line-height;\n  color: $input-plaintext-color;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: $input-border-width 0;\n\n  &:focus {\n    outline: 0;\n  }\n\n  &.form-control-sm,\n  &.form-control-lg {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n  min-height: $input-height-sm;\n  padding: $input-padding-y-sm $input-padding-x-sm;\n  @include font-size($input-font-size-sm);\n  @include border-radius($input-border-radius-sm);\n\n  &::file-selector-button {\n    padding: $input-padding-y-sm $input-padding-x-sm;\n    margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n    margin-inline-end: $input-padding-x-sm;\n  }\n}\n\n.form-control-lg {\n  min-height: $input-height-lg;\n  padding: $input-padding-y-lg $input-padding-x-lg;\n  @include font-size($input-font-size-lg);\n  @include border-radius($input-border-radius-lg);\n\n  &::file-selector-button {\n    padding: $input-padding-y-lg $input-padding-x-lg;\n    margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n    margin-inline-end: $input-padding-x-lg;\n  }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n  &.form-control {\n    min-height: $input-height;\n  }\n\n  &.form-control-sm {\n    min-height: $input-height-sm;\n  }\n\n  &.form-control-lg {\n    min-height: $input-height-lg;\n  }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n  width: $form-color-width;\n  height: $input-height;\n  padding: $input-padding-y;\n\n  &:not(:disabled):not([readonly]) {\n    cursor: pointer;\n  }\n\n  &::-moz-color-swatch {\n    border: 0 !important; // stylelint-disable-line declaration-no-important\n    @include border-radius($input-border-radius);\n  }\n\n  &::-webkit-color-swatch {\n    border: 0 !important; // stylelint-disable-line declaration-no-important\n    @include border-radius($input-border-radius);\n  }\n\n  &.form-control-sm {\n    height: $input-height-sm;\n  }\n  &.form-control-lg {\n    height: $input-height-lg;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_form-range.scss",
    "content": "// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n  width: 100%;\n  height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n  padding: 0; // Need to reset padding\n  appearance: none;\n  background-color: transparent;\n\n  &:focus {\n    outline: 0;\n\n    // Pseudo-elements must be split across multiple rulesets to have an effect.\n    // No box-shadow() mixin for focus accessibility.\n    &::-webkit-slider-thumb {\n      box-shadow: $form-range-thumb-focus-box-shadow;\n    }\n    &::-moz-range-thumb {\n      box-shadow: $form-range-thumb-focus-box-shadow;\n    }\n  }\n\n  &::-moz-focus-outer {\n    border: 0;\n  }\n\n  &::-webkit-slider-thumb {\n    width: $form-range-thumb-width;\n    height: $form-range-thumb-height;\n    margin-top: ($form-range-track-height - $form-range-thumb-height) * 0.5; // Webkit specific\n    appearance: none;\n    @include gradient-bg($form-range-thumb-bg);\n    border: $form-range-thumb-border;\n    @include border-radius($form-range-thumb-border-radius);\n    @include box-shadow($form-range-thumb-box-shadow);\n    @include transition($form-range-thumb-transition);\n\n    &:active {\n      @include gradient-bg($form-range-thumb-active-bg);\n    }\n  }\n\n  &::-webkit-slider-runnable-track {\n    width: $form-range-track-width;\n    height: $form-range-track-height;\n    color: transparent; // Why?\n    cursor: $form-range-track-cursor;\n    background-color: $form-range-track-bg;\n    border-color: transparent;\n    @include border-radius($form-range-track-border-radius);\n    @include box-shadow($form-range-track-box-shadow);\n  }\n\n  &::-moz-range-thumb {\n    width: $form-range-thumb-width;\n    height: $form-range-thumb-height;\n    appearance: none;\n    @include gradient-bg($form-range-thumb-bg);\n    border: $form-range-thumb-border;\n    @include border-radius($form-range-thumb-border-radius);\n    @include box-shadow($form-range-thumb-box-shadow);\n    @include transition($form-range-thumb-transition);\n\n    &:active {\n      @include gradient-bg($form-range-thumb-active-bg);\n    }\n  }\n\n  &::-moz-range-track {\n    width: $form-range-track-width;\n    height: $form-range-track-height;\n    color: transparent;\n    cursor: $form-range-track-cursor;\n    background-color: $form-range-track-bg;\n    border-color: transparent; // Firefox specific?\n    @include border-radius($form-range-track-border-radius);\n    @include box-shadow($form-range-track-box-shadow);\n  }\n\n  &:disabled {\n    pointer-events: none;\n\n    &::-webkit-slider-thumb {\n      background-color: $form-range-thumb-disabled-bg;\n    }\n\n    &::-moz-range-thumb {\n      background-color: $form-range-thumb-disabled-bg;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_form-select.scss",
    "content": "// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n  --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n  display: block;\n  width: 100%;\n  padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y\n    $form-select-padding-x;\n  font-family: $form-select-font-family;\n  @include font-size($form-select-font-size);\n  font-weight: $form-select-font-weight;\n  line-height: $form-select-line-height;\n  color: $form-select-color;\n  appearance: none;\n  background-color: $form-select-bg;\n  background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n  background-repeat: no-repeat;\n  background-position: $form-select-bg-position;\n  background-size: $form-select-bg-size;\n  border: $form-select-border-width solid $form-select-border-color;\n  @include border-radius($form-select-border-radius, 0);\n  @include box-shadow($form-select-box-shadow);\n  @include transition($form-select-transition);\n\n  &:focus {\n    border-color: $form-select-focus-border-color;\n    outline: 0;\n    @if $enable-shadows {\n      @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n    } @else {\n      // Avoid using mixin so we can pass custom focus shadow properly\n      box-shadow: $form-select-focus-box-shadow;\n    }\n  }\n\n  &[multiple],\n  &[size]:not([size='1']) {\n    padding-right: $form-select-padding-x;\n    background-image: none;\n  }\n\n  &:disabled {\n    color: $form-select-disabled-color;\n    background-color: $form-select-disabled-bg;\n    border-color: $form-select-disabled-border-color;\n  }\n\n  // Remove outline from select box in FF\n  &:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 $form-select-color;\n  }\n}\n\n.form-select-sm {\n  padding-top: $form-select-padding-y-sm;\n  padding-bottom: $form-select-padding-y-sm;\n  padding-left: $form-select-padding-x-sm;\n  @include font-size($form-select-font-size-sm);\n  @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n  padding-top: $form-select-padding-y-lg;\n  padding-bottom: $form-select-padding-y-lg;\n  padding-left: $form-select-padding-x-lg;\n  @include font-size($form-select-font-size-lg);\n  @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark) {\n    .form-select {\n      --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_form-text.scss",
    "content": "//\n// Form text\n//\n\n.form-text {\n  margin-top: $form-text-margin-top;\n  @include font-size($form-text-font-size);\n  font-style: $form-text-font-style;\n  font-weight: $form-text-font-weight;\n  color: $form-text-color;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_input-group.scss",
    "content": "//\n// Base styles\n//\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap; // For form validation feedback\n  align-items: stretch;\n  width: 100%;\n\n  > .form-control,\n  > .form-select,\n  > .form-floating {\n    position: relative; // For focus state's z-index\n    flex: 1 1 auto;\n    width: 1%;\n    min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n  }\n\n  // Bring the \"active\" form control to the top of surrounding elements\n  > .form-control:focus,\n  > .form-select:focus,\n  > .form-floating:focus-within {\n    z-index: 5;\n  }\n\n  // Ensure buttons are always above inputs for more visually pleasing borders.\n  // This isn't needed for `.input-group-text` since it shares the same border-color\n  // as our inputs.\n  .btn {\n    position: relative;\n    z-index: 2;\n\n    &:focus {\n      z-index: 5;\n    }\n  }\n}\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n  @include font-size($input-font-size); // Match inputs\n  font-weight: $input-group-addon-font-weight;\n  line-height: $input-line-height;\n  color: $input-group-addon-color;\n  text-align: center;\n  white-space: nowrap;\n  background-color: $input-group-addon-bg;\n  border: $input-border-width solid $input-group-addon-border-color;\n  @include border-radius($input-border-radius);\n}\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: $input-padding-y-lg $input-padding-x-lg;\n  @include font-size($input-font-size-lg);\n  @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: $input-padding-y-sm $input-padding-x-sm;\n  @include font-size($input-font-size-sm);\n  @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n  &:not(.has-validation) {\n    > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n    > .dropdown-toggle:nth-last-child(n + 3),\n    > .form-floating:not(:last-child) > .form-control,\n    > .form-floating:not(:last-child) > .form-select {\n      @include border-end-radius(0);\n    }\n  }\n\n  &.has-validation {\n    > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n    > .dropdown-toggle:nth-last-child(n + 4),\n    > .form-floating:nth-last-child(n + 3) > .form-control,\n    > .form-floating:nth-last-child(n + 3) > .form-select {\n      @include border-end-radius(0);\n    }\n  }\n\n  $validation-messages: '';\n  @each $state in map-keys($form-validation-states) {\n    $validation-messages: $validation-messages +\n      ':not(.' +\n      unquote($state) +\n      '-tooltip)' +\n      ':not(.' +\n      unquote($state) +\n      '-feedback)';\n  }\n\n  > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n    margin-left: calc(\n      #{$input-border-width} * -1\n    ); // stylelint-disable-line function-disallowed-list\n    @include border-start-radius(0);\n  }\n\n  > .form-floating:not(:first-child) > .form-control,\n  > .form-floating:not(:first-child) > .form-select {\n    @include border-start-radius(0);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_labels.scss",
    "content": "//\n// Labels\n//\n\n.form-label {\n  margin-bottom: $form-label-margin-bottom;\n  @include font-size($form-label-font-size);\n  font-style: $form-label-font-style;\n  font-weight: $form-label-font-weight;\n  color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n  padding-top: add($input-padding-y, $input-border-width);\n  padding-bottom: add($input-padding-y, $input-border-width);\n  margin-bottom: 0; // Override the `<legend>` default\n  @include font-size(inherit); // Override the `<legend>` default\n  font-style: $form-label-font-style;\n  font-weight: $form-label-font-weight;\n  line-height: $input-line-height;\n  color: $form-label-color;\n}\n\n.col-form-label-lg {\n  padding-top: add($input-padding-y-lg, $input-border-width);\n  padding-bottom: add($input-padding-y-lg, $input-border-width);\n  @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n  padding-top: add($input-padding-y-sm, $input-border-width);\n  padding-bottom: add($input-padding-y-sm, $input-border-width);\n  @include font-size($input-font-size-sm);\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/forms/_validation.scss",
    "content": "// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server-side validation.\n\n// scss-docs-start form-validation-states-loop\n@each $state, $data in $form-validation-states {\n  @include form-validation-state($state, $data...);\n}\n// scss-docs-end form-validation-states-loop\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_clearfix.scss",
    "content": ".clearfix {\n  @include clearfix();\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_color-bg.scss",
    "content": "// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n  .text-bg-#{$color} {\n    color: color-contrast($value) if($enable-important-utilities, !important, null);\n    background-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1))\n      if($enable-important-utilities, !important, null);\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_colored-links.scss",
    "content": "// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n  .link-#{$color} {\n    color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-opacity, 1))\n      if($enable-important-utilities, !important, null);\n    text-decoration-color: RGBA(\n        var(--#{$prefix}#{$color}-rgb),\n        var(--#{$prefix}link-underline-opacity, 1)\n      )\n      if($enable-important-utilities, !important, null);\n\n    @if $link-shade-percentage != 0 {\n      &:hover,\n      &:focus {\n        $hover-color: if(\n          color-contrast($value) == $color-contrast-light,\n          shade-color($value, $link-shade-percentage),\n          tint-color($value, $link-shade-percentage)\n        );\n        color: RGBA(#{to-rgb($hover-color)}, var(--#{$prefix}link-opacity, 1))\n          if($enable-important-utilities, !important, null);\n        text-decoration-color: RGBA(\n            to-rgb($hover-color),\n            var(--#{$prefix}link-underline-opacity, 1)\n          )\n          if($enable-important-utilities, !important, null);\n      }\n    }\n  }\n}\n\n// One-off special link helper as a bridge until v6\n.link-body-emphasis {\n  color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 1))\n    if($enable-important-utilities, !important, null);\n  text-decoration-color: RGBA(\n      var(--#{$prefix}emphasis-color-rgb),\n      var(--#{$prefix}link-underline-opacity, 1)\n    )\n    if($enable-important-utilities, !important, null);\n\n  @if $link-shade-percentage != 0 {\n    &:hover,\n    &:focus {\n      color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 0.75))\n        if($enable-important-utilities, !important, null);\n      text-decoration-color: RGBA(\n          var(--#{$prefix}emphasis-color-rgb),\n          var(--#{$prefix}link-underline-opacity, 0.75)\n        )\n        if($enable-important-utilities, !important, null);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_focus-ring.scss",
    "content": ".focus-ring:focus {\n  outline: 0;\n  // By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values\n  box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0)\n    var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width)\n    var(--#{$prefix}focus-ring-color);\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_icon-link.scss",
    "content": ".icon-link {\n  display: inline-flex;\n  gap: $icon-link-gap;\n  align-items: center;\n  text-decoration-color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 0.5));\n  text-underline-offset: $icon-link-underline-offset;\n  backface-visibility: hidden;\n\n  > .bi {\n    flex-shrink: 0;\n    width: $icon-link-icon-size;\n    height: $icon-link-icon-size;\n    fill: currentcolor;\n    @include transition($icon-link-icon-transition);\n  }\n}\n\n.icon-link-hover {\n  &:hover,\n  &:focus-visible {\n    > .bi {\n      transform: var(--#{$prefix}icon-link-transform, $icon-link-icon-transform);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_position.scss",
    "content": "// Shorthand\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    .sticky#{$infix}-top {\n      position: sticky;\n      top: 0;\n      z-index: $zindex-sticky;\n    }\n\n    .sticky#{$infix}-bottom {\n      position: sticky;\n      bottom: 0;\n      z-index: $zindex-sticky;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_ratio.scss",
    "content": "// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n  position: relative;\n  width: 100%;\n\n  &::before {\n    display: block;\n    padding-top: var(--#{$prefix}aspect-ratio);\n    content: '';\n  }\n\n  > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n  }\n}\n\n@each $key, $ratio in $aspect-ratios {\n  .ratio-#{$key} {\n    --#{$prefix}aspect-ratio: #{$ratio};\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_stacks.scss",
    "content": "// scss-docs-start stacks\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n// scss-docs-end stacks\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_stretched-link.scss",
    "content": "//\n// Stretched link\n//\n\n.stretched-link {\n  &::#{$stretched-link-pseudo-element} {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: $stretched-link-z-index;\n    content: '';\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_text-truncation.scss",
    "content": "//\n// Text truncation\n//\n\n.text-truncate {\n  @include text-truncate();\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_visually-hidden.scss",
    "content": "//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  @include visually-hidden();\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/helpers/_vr.scss",
    "content": ".vr {\n  display: inline-block;\n  align-self: stretch;\n  width: $vr-border-width;\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: $hr-opacity;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_alert.scss",
    "content": "@include deprecate('`alert-variant()`', 'v5.3.0', 'v6.0.0');\n\n// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n  --#{$prefix}alert-color: #{$color};\n  --#{$prefix}alert-bg: #{$background};\n  --#{$prefix}alert-border-color: #{$border};\n  --#{$prefix}alert-link-color: #{shade-color($color, 20%)};\n\n  @if $enable-gradients {\n    background-image: var(--#{$prefix}gradient);\n  }\n\n  .alert-link {\n    color: var(--#{$prefix}alert-link-color);\n  }\n}\n// scss-docs-end alert-variant-mixin\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_backdrop.scss",
    "content": "// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: $zindex;\n  width: 100vw;\n  height: 100vh;\n  background-color: $backdrop-bg;\n\n  // Fade for backdrop\n  &.fade {\n    opacity: 0;\n  }\n  &.show {\n    opacity: $backdrop-opacity;\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_banner.scss",
    "content": "@mixin bsBanner($file) {\n  /*!\n   * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n   * Copyright 2011-2024 The Bootstrap Authors\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   */\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_border-radius.scss",
    "content": "// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n  $return: ();\n  @each $value in $radius {\n    @if type-of($value) == number {\n      $return: append($return, max($value, 0));\n    } @else {\n      $return: append($return, $value);\n    }\n  }\n  @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n  @if $enable-rounded {\n    border-radius: valid-radius($radius);\n  } @else if $fallback-border-radius != false {\n    border-radius: $fallback-border-radius;\n  }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n    border-top-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-right-radius: valid-radius($radius);\n    border-bottom-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: valid-radius($radius);\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-top-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n  @if $enable-rounded {\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n// scss-docs-end border-radius-mixins\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_box-shadow.scss",
    "content": "@mixin box-shadow($shadow...) {\n  @if $enable-shadows {\n    $result: ();\n\n    @each $value in $shadow {\n      @if $value != null {\n        $result: append($result, $value, 'comma');\n      }\n      @if $value == none and length($shadow) > 1 {\n        @warn \"The keyword 'none' must be used as a single argument.\";\n      }\n    }\n\n    @if (length($result) > 0) {\n      box-shadow: $result;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_breakpoints.scss",
    "content": "// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n//    (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n//    >> breakpoint-next(sm)\n//    md\n//    >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    md\n//    >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n//    md\n@function breakpoint-next(\n  $name,\n  $breakpoints: $grid-breakpoints,\n  $breakpoint-names: map-keys($breakpoints)\n) {\n  $n: index($breakpoint-names, $name);\n  @if not $n {\n    @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n  }\n  @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n//    >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n  $min: map-get($breakpoints, $name);\n  @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n//    >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n  $max: map-get($breakpoints, $name);\n  @return if($max and $max > 0, $max - 0.02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n//    >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    \"\"  (Returns a blank string)\n//    >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n//    \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n  @return if(breakpoint-min($name, $breakpoints) == null, '', '-#{$name}');\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  @if $min {\n    @media (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n  $max: breakpoint-max($name, $breakpoints);\n  @if $max {\n    @media (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($lower, $breakpoints);\n  $max: breakpoint-max($upper, $breakpoints);\n\n  @if $min != null and $max != null {\n    @media (min-width: $min) and (max-width: $max) {\n      @content;\n    }\n  } @else if $max == null {\n    @include media-breakpoint-up($lower, $breakpoints) {\n      @content;\n    }\n  } @else if $min == null {\n    @include media-breakpoint-down($upper, $breakpoints) {\n      @content;\n    }\n  }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  $next: breakpoint-next($name, $breakpoints);\n  $max: breakpoint-max($next, $breakpoints);\n\n  @if $min != null and $max != null {\n    @media (min-width: $min) and (max-width: $max) {\n      @content;\n    }\n  } @else if $max == null {\n    @include media-breakpoint-up($name, $breakpoints) {\n      @content;\n    }\n  } @else if $min == null {\n    @include media-breakpoint-down($next, $breakpoints) {\n      @content;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_buttons.scss",
    "content": "// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n  $background,\n  $border,\n  $color: color-contrast($background),\n  $hover-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-hover-bg-shade-amount),\n      tint-color($background, $btn-hover-bg-tint-amount)\n    ),\n  $hover-border:\n    if(\n      $color == $color-contrast-light,\n      shade-color($border, $btn-hover-border-shade-amount),\n      tint-color($border, $btn-hover-border-tint-amount)\n    ),\n  $hover-color: color-contrast($hover-background),\n  $active-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-active-bg-shade-amount),\n      tint-color($background, $btn-active-bg-tint-amount)\n    ),\n  $active-border:\n    if(\n      $color == $color-contrast-light,\n      shade-color($border, $btn-active-border-shade-amount),\n      tint-color($border, $btn-active-border-tint-amount)\n    ),\n  $active-color: color-contrast($active-background),\n  $disabled-background: $background,\n  $disabled-border: $border,\n  $disabled-color: color-contrast($disabled-background)\n) {\n  --#{$prefix}btn-color: #{$color};\n  --#{$prefix}btn-bg: #{$background};\n  --#{$prefix}btn-border-color: #{$border};\n  --#{$prefix}btn-hover-color: #{$hover-color};\n  --#{$prefix}btn-hover-bg: #{$hover-background};\n  --#{$prefix}btn-hover-border-color: #{$hover-border};\n  --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n  --#{$prefix}btn-active-color: #{$active-color};\n  --#{$prefix}btn-active-bg: #{$active-background};\n  --#{$prefix}btn-active-border-color: #{$active-border};\n  --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n  --#{$prefix}btn-disabled-color: #{$disabled-color};\n  --#{$prefix}btn-disabled-bg: #{$disabled-background};\n  --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n  $color,\n  $color-hover: color-contrast($color),\n  $active-background: $color,\n  $active-border: $color,\n  $active-color: color-contrast($active-background)\n) {\n  --#{$prefix}btn-color: #{$color};\n  --#{$prefix}btn-border-color: #{$color};\n  --#{$prefix}btn-hover-color: #{$color-hover};\n  --#{$prefix}btn-hover-bg: #{$active-background};\n  --#{$prefix}btn-hover-border-color: #{$active-border};\n  --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n  --#{$prefix}btn-active-color: #{$active-color};\n  --#{$prefix}btn-active-bg: #{$active-background};\n  --#{$prefix}btn-active-border-color: #{$active-border};\n  --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n  --#{$prefix}btn-disabled-color: #{$color};\n  --#{$prefix}btn-disabled-bg: transparent;\n  --#{$prefix}btn-disabled-border-color: #{$color};\n  --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n  --#{$prefix}btn-padding-y: #{$padding-y};\n  --#{$prefix}btn-padding-x: #{$padding-x};\n  @include rfs($font-size, --#{$prefix}btn-font-size);\n  --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_caret.scss",
    "content": "// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n  border-top: $width solid;\n  border-right: $width solid transparent;\n  border-bottom: 0;\n  border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n  border-top: 0;\n  border-right: $width solid transparent;\n  border-bottom: $width solid;\n  border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n  border-top: $width solid transparent;\n  border-right: 0;\n  border-bottom: $width solid transparent;\n  border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n  border-top: $width solid transparent;\n  border-right: $width solid;\n  border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n  $direction: down,\n  $width: $caret-width,\n  $spacing: $caret-spacing,\n  $vertical-align: $caret-vertical-align\n) {\n  @if $enable-caret {\n    &::after {\n      display: inline-block;\n      margin-left: $spacing;\n      vertical-align: $vertical-align;\n      content: '';\n      @if $direction == down {\n        @include caret-down($width);\n      } @else if $direction == up {\n        @include caret-up($width);\n      } @else if $direction == end {\n        @include caret-end($width);\n      }\n    }\n\n    @if $direction == start {\n      &::after {\n        display: none;\n      }\n\n      &::before {\n        display: inline-block;\n        margin-right: $spacing;\n        vertical-align: $vertical-align;\n        content: '';\n        @include caret-start($width);\n      }\n    }\n\n    &:empty::after {\n      margin-left: 0;\n    }\n  }\n}\n// scss-docs-end caret-mixins\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_clearfix.scss",
    "content": "// scss-docs-start clearfix\n@mixin clearfix() {\n  &::after {\n    display: block;\n    clear: both;\n    content: '';\n  }\n}\n// scss-docs-end clearfix\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_color-mode.scss",
    "content": "// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n  @if $color-mode-type == 'media-query' {\n    @if $root == true {\n      @media (prefers-color-scheme: $mode) {\n        :root {\n          @content;\n        }\n      }\n    } @else {\n      @media (prefers-color-scheme: $mode) {\n        @content;\n      }\n    }\n  } @else {\n    [data-mdb-theme='#{$mode}'] {\n      @content;\n    }\n  }\n}\n// scss-docs-end color-mode-mixin\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_color-scheme.scss",
    "content": "// scss-docs-start mixin-color-scheme\n@mixin color-scheme($name) {\n  @media (prefers-color-scheme: #{$name}) {\n    @content;\n  }\n}\n// scss-docs-end mixin-color-scheme\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_container.scss",
    "content": "// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n  --#{$prefix}gutter-x: #{$gutter};\n  --#{$prefix}gutter-y: 0;\n  width: 100%;\n  padding-right: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  padding-left: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  margin-right: auto;\n  margin-left: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_deprecate.scss",
    "content": "// Deprecate mixin\n//\n// This mixin can be used to deprecate mixins or functions.\n// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to\n// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)\n@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {\n  @if ($enable-deprecation-messages != false and $ignore-warning != true) {\n    @warn \"#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.\";\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_forms.scss",
    "content": "// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n  @if ($state == 'valid' or $state == 'invalid') {\n    .was-validated #{if(&, \"&\", \"\")}:#{$state},\n    #{if(&, \"&\", \"\")}.is-#{$state} {\n      @content;\n    }\n  } @else {\n    #{if(&, \"&\", \"\")}.is-#{$state} {\n      @content;\n    }\n  }\n}\n\n@mixin form-validation-state(\n  $state,\n  $color,\n  $icon,\n  $tooltip-color: color-contrast($color),\n  $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n  $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width\n    rgba($color, $input-btn-focus-color-opacity),\n  $border-color: $color\n) {\n  .#{$state}-feedback {\n    display: none;\n    width: 100%;\n    margin-top: $form-feedback-margin-top;\n    @include font-size($form-feedback-font-size);\n    font-style: $form-feedback-font-style;\n    color: $color;\n  }\n\n  .#{$state}-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%; // Contain to parent when possible\n    padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n    margin-top: 0.1rem;\n    @include font-size($form-feedback-tooltip-font-size);\n    line-height: $form-feedback-tooltip-line-height;\n    color: $tooltip-color;\n    background-color: $tooltip-bg-color;\n    @include border-radius($form-feedback-tooltip-border-radius);\n  }\n\n  @include form-validation-state-selector($state) {\n    ~ .#{$state}-feedback,\n    ~ .#{$state}-tooltip {\n      display: block;\n    }\n  }\n\n  .form-control {\n    @include form-validation-state-selector($state) {\n      border-color: $border-color;\n\n      @if $enable-validation-icons {\n        padding-right: $input-height-inner;\n        background-image: escape-svg($icon);\n        background-repeat: no-repeat;\n        background-position: right $input-height-inner-quarter center;\n        background-size: $input-height-inner-half $input-height-inner-half;\n      }\n\n      &:focus {\n        border-color: $border-color;\n        @if $enable-shadows {\n          @include box-shadow($input-box-shadow, $focus-box-shadow);\n        } @else {\n          // Avoid using mixin so we can pass custom focus shadow properly\n          box-shadow: $focus-box-shadow;\n        }\n      }\n    }\n  }\n\n  // stylelint-disable-next-line selector-no-qualifying-type\n  textarea.form-control {\n    @include form-validation-state-selector($state) {\n      @if $enable-validation-icons {\n        padding-right: $input-height-inner;\n        background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n      }\n    }\n  }\n\n  .form-select {\n    @include form-validation-state-selector($state) {\n      border-color: $border-color;\n\n      @if $enable-validation-icons {\n        &:not([multiple]):not([size]),\n        &:not([multiple])[size='1'] {\n          --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n          padding-right: $form-select-feedback-icon-padding-end;\n          background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n          background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n        }\n      }\n\n      &:focus {\n        border-color: $border-color;\n        @if $enable-shadows {\n          @include box-shadow($form-select-box-shadow, $focus-box-shadow);\n        } @else {\n          // Avoid using mixin so we can pass custom focus shadow properly\n          box-shadow: $focus-box-shadow;\n        }\n      }\n    }\n  }\n\n  .form-control-color {\n    @include form-validation-state-selector($state) {\n      @if $enable-validation-icons {\n        width: add($form-color-width, $input-height-inner);\n      }\n    }\n  }\n\n  .form-check-input {\n    @include form-validation-state-selector($state) {\n      border-color: $border-color;\n\n      &:checked {\n        background-color: $color;\n      }\n\n      &:focus {\n        box-shadow: $focus-box-shadow;\n      }\n\n      ~ .form-check-label {\n        color: $color;\n      }\n    }\n  }\n  .form-check-inline .form-check-input {\n    ~ .#{$state}-feedback {\n      margin-left: 0.5em;\n    }\n  }\n\n  .input-group {\n    > .form-control:not(:focus),\n    > .form-select:not(:focus),\n    > .form-floating:not(:focus-within) {\n      @include form-validation-state-selector($state) {\n        @if $state == 'valid' {\n          z-index: 3;\n        } @else if $state == 'invalid' {\n          z-index: 4;\n        }\n      }\n    }\n  }\n}\n// scss-docs-end form-validation-mixins\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_gradients.scss",
    "content": "// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n  background-color: $color;\n\n  @if $enable-gradients {\n    background-image: var(--#{$prefix}gradient);\n  }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x(\n  $start-color: $gray-700,\n  $end-color: $gray-800,\n  $start-percent: 0%,\n  $end-percent: 100%\n) {\n  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y(\n  $start-color: $gray-700,\n  $end-color: $gray-800,\n  $start-percent: null,\n  $end-percent: null\n) {\n  background-image: linear-gradient(\n    to bottom,\n    $start-color $start-percent,\n    $end-color $end-percent\n  );\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n  background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors(\n  $start-color: $blue,\n  $mid-color: $purple,\n  $color-stop: 50%,\n  $end-color: $red\n) {\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors(\n  $start-color: $blue,\n  $mid-color: $purple,\n  $color-stop: 50%,\n  $end-color: $red\n) {\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, 0.15), $angle: 45deg) {\n  background-image: linear-gradient(\n    $angle,\n    $color 25%,\n    transparent 25%,\n    transparent 50%,\n    $color 50%,\n    $color 75%,\n    transparent 75%,\n    transparent\n  );\n}\n// scss-docs-end gradient-mixins\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_grid.scss",
    "content": "// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n  --#{$prefix}gutter-x: #{$gutter};\n  --#{$prefix}gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n  margin-top: calc(\n    -1 * var(--#{$prefix}gutter-y)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-right: calc(\n    -0.5 * var(--#{$prefix}gutter-x)\n  ); // stylelint-disable-line function-disallowed-list\n  margin-left: calc(\n    -0.5 * var(--#{$prefix}gutter-x)\n  ); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n  // Add box sizing if only the grid is loaded\n  box-sizing: if(\n    variable-exists(include-column-box-sizing) and $include-column-box-sizing,\n    border-box,\n    null\n  );\n  // Prevent columns from becoming too narrow when at smaller grid tiers by\n  // always setting `width: 100%;`. This works because we set the width\n  // later on to override this initial width.\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n  padding-right: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  padding-left: calc(\n    var(--#{$prefix}gutter-x) * 0.5\n  ); // stylelint-disable-line function-disallowed-list\n  margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n  @if $size {\n    flex: 0 0 auto;\n    width: percentage(divide($size, $columns));\n  } @else {\n    flex: 1 1 0;\n    max-width: 100%;\n  }\n}\n\n@mixin make-col-auto() {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n  $num: divide($size, $columns);\n  margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n  > * {\n    flex: 0 0 auto;\n    width: percentage(divide(1, $count));\n  }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns(\n  $columns: $grid-columns,\n  $gutter: $grid-gutter-width,\n  $breakpoints: $grid-breakpoints\n) {\n  @each $breakpoint in map-keys($breakpoints) {\n    $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n      .col#{$infix} {\n        flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n      }\n\n      .row-cols#{$infix}-auto > * {\n        @include make-col-auto();\n      }\n\n      @if $grid-row-columns > 0 {\n        @for $i from 1 through $grid-row-columns {\n          .row-cols#{$infix}-#{$i} {\n            @include row-cols($i);\n          }\n        }\n      }\n\n      .col#{$infix}-auto {\n        @include make-col-auto();\n      }\n\n      @if $columns > 0 {\n        @for $i from 1 through $columns {\n          .col#{$infix}-#{$i} {\n            @include make-col($i, $columns);\n          }\n        }\n\n        // `$columns - 1` because offsetting by the width of an entire row isn't possible\n        @for $i from 0 through ($columns - 1) {\n          @if not($infix == '' and $i == 0) {\n            // Avoid emitting useless .offset-0\n            .offset#{$infix}-#{$i} {\n              @include make-col-offset($i, $columns);\n            }\n          }\n        }\n      }\n\n      // Gutters\n      //\n      // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n      @each $key, $value in $gutters {\n        .g#{$infix}-#{$key},\n        .gx#{$infix}-#{$key} {\n          --#{$prefix}gutter-x: #{$value};\n        }\n\n        .g#{$infix}-#{$key},\n        .gy#{$infix}-#{$key} {\n          --#{$prefix}gutter-y: #{$value};\n        }\n      }\n    }\n  }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n  @each $breakpoint in map-keys($breakpoints) {\n    $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      @if $columns > 0 {\n        @for $i from 1 through $columns {\n          .g-col#{$infix}-#{$i} {\n            grid-column: auto / span $i;\n          }\n        }\n\n        // Start with `1` because `0` is an invalid value.\n        // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n        @for $i from 1 through ($columns - 1) {\n          .g-start#{$infix}-#{$i} {\n            grid-column-start: $i;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_image.scss",
    "content": "// Image Mixins\n// - Responsive image\n// - Retina image\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n  // Part 1: Set a maximum relative to the parent\n  max-width: 100%;\n  // Part 2: Override the height to auto, otherwise images will be stretched\n  // when setting a width and height attribute on the img element.\n  height: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_list-group.scss",
    "content": "@include deprecate('`list-group-item-variant()`', 'v5.3.0', 'v6.0.0');\n\n// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n  .list-group-item-#{$state} {\n    color: $color;\n    background-color: $background;\n\n    &.list-group-item-action {\n      &:hover,\n      &:focus {\n        color: $color;\n        background-color: shade-color($background, 10%);\n      }\n\n      &.active {\n        color: $white;\n        background-color: $color;\n        border-color: $color;\n      }\n    }\n  }\n}\n// scss-docs-end list-group-mixin\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_lists.scss",
    "content": "// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_pagination.scss",
    "content": "// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n  --#{$prefix}pagination-padding-x: #{$padding-x};\n  --#{$prefix}pagination-padding-y: #{$padding-y};\n  @include rfs($font-size, --#{$prefix}pagination-font-size);\n  --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_reset-text.scss",
    "content": "@mixin reset-text {\n  font-family: $font-family-base;\n  // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n  font-style: normal;\n  font-weight: $font-weight-normal;\n  line-height: $line-height-base;\n  text-align: left; // Fallback for where `start` is not supported\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_resize.scss",
    "content": "// Resize anything\n\n@mixin resizable($direction) {\n  overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n  resize: $direction; // Options: horizontal, vertical, both\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_table-variants.scss",
    "content": "// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n  .table-#{$state} {\n    $color: color-contrast(opaque($body-bg, $background));\n    $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n    $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n    $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n    $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n    --#{$prefix}table-color: #{$color};\n    --#{$prefix}table-bg: #{$background};\n    --#{$prefix}table-border-color: #{$table-border-color};\n    --#{$prefix}table-striped-bg: #{$striped-bg};\n    --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n    --#{$prefix}table-active-bg: #{$active-bg};\n    --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n    --#{$prefix}table-hover-bg: #{$hover-bg};\n    --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n    color: var(--#{$prefix}table-color);\n    border-color: var(--#{$prefix}table-border-color);\n  }\n}\n// scss-docs-end table-variant\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_text-truncate.scss",
    "content": "// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_transition.scss",
    "content": "// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n  @if length($transition) == 0 {\n    $transition: $transition-base;\n  }\n\n  @if length($transition) > 1 {\n    @each $value in $transition {\n      @if $value == null or $value == none {\n        @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n      }\n    }\n  }\n\n  @if $enable-transitions {\n    @if nth($transition, 1) != null {\n      transition: $transition;\n    }\n\n    @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n      @media (prefers-reduced-motion: reduce) {\n        transition: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_utilities.scss",
    "content": "// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix: '', $is-rfs-media-query: false) {\n  $values: map-get($utility, values);\n\n  // If the values are a list or string, convert it into a map\n  @if type-of($values) == 'string' or type-of(nth($values, 1)) != 'list' {\n    $values: zip($values, $values);\n  }\n\n  @each $key, $value in $values {\n    $properties: map-get($utility, property);\n\n    // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n    @if type-of($properties) == 'string' {\n      $properties: append((), $properties);\n    }\n\n    // Use custom class if present\n    $property-class: if(\n      map-has-key($utility, class),\n      map-get($utility, class),\n      nth($properties, 1)\n    );\n    $property-class: if($property-class == null, '', $property-class);\n\n    // Use custom CSS variable name if present, otherwise default to `class`\n    $css-variable-name: if(\n      map-has-key($utility, css-variable-name),\n      map-get($utility, css-variable-name),\n      map-get($utility, class)\n    );\n\n    // State params to generate pseudo-classes\n    $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n    $infix: if(\n      $property-class == '' and str-slice($infix, 1, 1) == '-',\n      str-slice($infix, 2),\n      $infix\n    );\n\n    // Don't prefix if value key is null (e.g. with shadow class)\n    $property-class-modifier: if(\n      $key,\n      if($property-class == '' and $infix == '', '', '-') + $key,\n      ''\n    );\n\n    @if map-get($utility, rfs) {\n      // Inside the media query\n      @if $is-rfs-media-query {\n        $val: rfs-value($value);\n\n        // Do not render anything if fluid and non fluid values are the same\n        $value: if($val == rfs-fluid-value($value), null, $val);\n      } @else {\n        $value: rfs-fluid-value($value);\n      }\n    }\n\n    $is-css-var: map-get($utility, css-var);\n    $is-local-vars: map-get($utility, local-vars);\n    $is-rtl: map-get($utility, rtl);\n\n    @if $value != null {\n      @if $is-rtl == false {\n        /*!rtl:begin:remove*/\n      }\n\n      @if $is-css-var {\n        .#{$property-class + $infix + $property-class-modifier} {\n          --#{$prefix}#{$css-variable-name}: #{$value};\n        }\n\n        @each $pseudo in $state {\n          .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n            --#{$prefix}#{$css-variable-name}: #{$value};\n          }\n        }\n      } @else {\n        .#{$property-class + $infix + $property-class-modifier} {\n          @each $property in $properties {\n            @if $is-local-vars {\n              @each $local-var, $variable in $is-local-vars {\n                --#{$prefix}#{$local-var}: #{$variable};\n              }\n            }\n            #{$property}: $value if($enable-important-utilities, !important, null);\n          }\n        }\n\n        @each $pseudo in $state {\n          .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n            @each $property in $properties {\n              @if $is-local-vars {\n                @each $local-var, $variable in $is-local-vars {\n                  --#{$prefix}#{$local-var}: #{$variable};\n                }\n              }\n              #{$property}: $value if($enable-important-utilities, !important, null);\n            }\n          }\n        }\n      }\n\n      @if $is-rtl == false {\n        /*!rtl:end:remove*/\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/mixins/_visually-hidden.scss",
    "content": "// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n\n  // Fix for positioned table caption that could become anonymous cells\n  &:not(caption) {\n    position: absolute !important;\n  }\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n  &:not(:focus):not(:focus-within) {\n    @include visually-hidden();\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/utilities/_api.scss",
    "content": "// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n  // Generate media query if needed\n  @include media-breakpoint-up($breakpoint) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    // Loop over each utility property\n    @each $key, $utility in $utilities {\n      // The utility can be disabled with `false`, thus check if the utility is a map first\n      // Only proceed if responsive media queries are enabled or if it's the base media query\n      @if type-of($utility) == 'map' and (map-get($utility, responsive) or $infix == '') {\n        @include generate-utility($utility, $infix);\n      }\n    }\n  }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n  @each $breakpoint in map-keys($grid-breakpoints) {\n    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n    @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n      // Loop over each utility property\n      @each $key, $utility in $utilities {\n        // The utility can be disabled with `false`, thus check if the utility is a map first\n        // Only proceed if responsive media queries are enabled or if it's the base media query\n        @if type-of($utility) ==\n          'map' and\n          map-get($utility, rfs) and\n          (map-get($utility, responsive) or $infix == '')\n        {\n          @include generate-utility($utility, $infix, true);\n        }\n      }\n    }\n  }\n}\n\n// Print utilities\n@media print {\n  @each $key, $utility in $utilities {\n    // The utility can be disabled with `false`, thus check if the utility is a map first\n    // Then check if the utility needs print styles\n    @if type-of($utility) == 'map' and map-get($utility, print) == true {\n      @include generate-utility($utility, '-print');\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/bootstrap-rtl-fix/vendor/_rfs.scss",
    "content": "// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n  @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n  @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n  @error \"`#{$rfs-factor}` is not a valid  $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n  $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n  $dividend: abs($dividend);\n  $divisor: abs($divisor);\n  @if $dividend == 0 {\n    @return 0;\n  }\n  @if $divisor == 0 {\n    @error \"Cannot divide by 0\";\n  }\n  $remainder: $dividend;\n  $result: 0;\n  $factor: 10;\n  @while ($remainder > 0 and $precision >= 0) {\n    $quotient: 0;\n    @while ($remainder >= $divisor) {\n      $remainder: $remainder - $divisor;\n      $quotient: $quotient + 1;\n    }\n    $result: $result * 10 + $quotient;\n    $factor: $factor * 0.1;\n    $remainder: $remainder * 10;\n    $precision: $precision - 1;\n    @if ($precision < 0 and $remainder >= $divisor * 5) {\n      $result: $result + 1;\n    }\n  }\n  $result: $result * $factor * $sign;\n  $dividend-unit: unit($dividend);\n  $divisor-unit: unit($divisor);\n  $unit-map: (\n    'px': 1px,\n    'rem': 1rem,\n    'em': 1em,\n    '%': 1%,\n  );\n  @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n    $result: $result * map-get($unit-map, $dividend-unit);\n  }\n  @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n  $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n} @else if $rfs-base-value-unit == rem {\n  $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n  $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n} @else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == 'em' {\n  $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if(\n  $rfs-breakpoint-unit == px,\n  #{$rfs-breakpoint}px,\n  #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit}\n);\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n  @if $rfs-two-dimensional {\n    @if $rfs-mode == max-media-query {\n      @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n        @content;\n      }\n    } @else {\n      @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n        @content;\n      }\n    }\n  } @else {\n    @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n      @content;\n    }\n  }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n  @if $rfs-class == disable and $rfs-mode == max-media-query {\n    // Adding an extra class increases specificity, which prevents the media query to override the property\n    &,\n    .disable-rfs &,\n    &.disable-rfs {\n      @content;\n    }\n  } @else if $rfs-class == enable and $rfs-mode == min-media-query {\n    .enable-rfs &,\n    &.enable-rfs {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n  @if $rfs-class == enable {\n    @if $rfs-mode == min-media-query {\n      @content;\n    }\n\n    @include _rfs-media-query() {\n      .enable-rfs &,\n      &.enable-rfs {\n        @content;\n      }\n    }\n  } @else {\n    @if $rfs-class == disable and $rfs-mode == min-media-query {\n      .disable-rfs &,\n      &.disable-rfs {\n        @content;\n      }\n    }\n    @include _rfs-media-query() {\n      @content;\n    }\n  }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n  // Convert to list\n  $values: if(type-of($values) != list, ($values), $values);\n\n  $val: '';\n\n  // Loop over each value and calculate value\n  @each $value in $values {\n    @if $value == 0 {\n      $val: $val + ' 0';\n    } @else {\n      // Cache $value unit\n      $unit: if(type-of($value) == 'number', unit($value), false);\n\n      @if $unit == px {\n        // Convert to rem if needed\n        $val: $val +\n          ' ' +\n          if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n      } @else if $unit == rem {\n        // Convert to px if needed\n        $val: $val +\n          ' ' +\n          if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n      } @else {\n        // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n        $val: $val + ' ' + $value;\n      }\n    }\n  }\n\n  // Remove first space\n  @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n  // Convert to list\n  $values: if(type-of($values) != list, ($values), $values);\n\n  $val: '';\n\n  // Loop over each value and calculate value\n  @each $value in $values {\n    @if $value == 0 {\n      $val: $val + ' 0';\n    } @else {\n      // Cache $value unit\n      $unit: if(type-of($value) == 'number', unit($value), false);\n\n      // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n      @if not $unit or $unit != px and $unit != rem {\n        $val: $val + ' ' + $value;\n      } @else {\n        // Remove unit from $value for calculations\n        $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n        // Only add the media query if the value is greater than the minimum value\n        @if abs($value) <= $rfs-base-value or not $enable-rfs {\n          $val: $val +\n            ' ' +\n            if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n        } @else {\n          // Calculate the minimum value\n          $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n          // Calculate difference between $value and the minimum value\n          $value-diff: abs($value) - $value-min;\n\n          // Base value formatting\n          $min-width: if(\n            $rfs-unit == rem,\n            #{divide($value-min, $rfs-rem-value)}rem,\n            #{$value-min}px\n          );\n\n          // Use negative value if needed\n          $min-width: if($value < 0, -$min-width, $min-width);\n\n          // Use `vmin` if two-dimensional is enabled\n          $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n          // Calculate the variable width between 0 and $rfs-breakpoint\n          $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n          // Return the calculated value\n          $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n        }\n      }\n    }\n  }\n\n  // Remove first space\n  @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n  @if $values != null {\n    $val: rfs-value($values);\n    $fluid-val: rfs-fluid-value($values);\n\n    // Do not print the media query if responsive & non-responsive values are the same\n    @if $val == $fluid-val {\n      #{$property}: $val;\n    } @else {\n      @include _rfs-rule() {\n        #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n        // Include safari iframe resize fix if needed\n        min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n      }\n\n      @include _rfs-media-query-rule() {\n        #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n      }\n    }\n  }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n  @include rfs($value);\n}\n\n@mixin padding($value) {\n  @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n  @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n  @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n  @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n  @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n  @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n  @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n  @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n  @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n  @include rfs($value, margin-left);\n}\n"
  },
  {
    "path": "src/scss/custom/_styles.scss",
    "content": "// Your custom styles\n"
  },
  {
    "path": "src/scss/custom/_variables.scss",
    "content": "// Your custom variables\n"
  },
  {
    "path": "src/scss/free/_accordion.scss",
    "content": "// Accordion\n\n.accordion-button {\n  &:not(.collapsed) {\n    &:focus {\n      box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n    }\n  }\n\n  &:focus {\n    border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n    outline: 0;\n    box-shadow: none;\n  }\n}\n\n.accordion-flush {\n  --#{$prefix}accordion-flush-btn-box-shadow: #{$accordion-flush-button-box-shadow};\n  --#{$prefix}accordion-flush-border-bottom: #{$accordion-flush-item-border-bottom};\n\n  .accordion-button:not(.collapsed) {\n    box-shadow: var(--#{$prefix}accordion-flush-btn-box-shadow);\n  }\n  .accordion-item {\n    border-bottom: var(--#{$prefix}accordion-flush-border-bottom);\n  }\n}\n\n.accordion-borderless {\n  --#{$prefix}accordion-borderless-btn-border-radius: #{$accordion-borderless-button-border-radius};\n  --#{$prefix}accordion-borderless-btn-bg: #{$accordion-borderless-button-bgc};\n  --#{$prefix}accordion-borderless-btn-color: #{$accordion-borderless-button-color};\n\n  .accordion-item {\n    border: 0;\n    .accordion-button {\n      border-radius: var(--#{$prefix}accordion-borderless-btn-border-radius);\n      &:not(.collapsed) {\n        background-color: var(--#{$prefix}accordion-borderless-btn-bg);\n        color: var(--#{$prefix}accordion-borderless-btn-color);\n        box-shadow: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_alert.scss",
    "content": "// Alert\n\n.alert {\n  border: 0;\n}\n\n.alert-absolute {\n  position: absolute;\n}\n\n.alert-fixed {\n  --#{$prefix}alert-fixed-z-index: #{$alert-zindex};\n\n  position: fixed;\n  z-index: var(--#{$prefix}alert-fixed-z-index);\n}\n\n.parent-alert-relative {\n  position: relative;\n}\n\n@each $color, $value in $theme-colors {\n  .alert-#{$color} {\n    background-color: var(--#{$prefix}#{$color}-bg-subtle);\n    color: var(--#{$prefix}#{$color}-text-emphasis);\n\n    i {\n      color: var(--#{$prefix}#{$color}-text-emphasis);\n    }\n\n    .alert-link {\n      color: var(--#{$prefix}#{$color}-text-emphasis);\n\n      &:hover {\n        color: rgba(var(--#{$prefix}#{$color}-text-emphasis), var(--#{$prefix}text-hover-opacity));\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_badge.scss",
    "content": "//\n// Badge styles\n//\n// Additional badge options tailored to the MDB style\n\n// A \"dot\" badge, which is useful, for example, for icons\n.badge-dot {\n  --#{$prefix}badge-border-radius: #{$badge-dot-border-radius};\n  --#{$prefix}badge-height: #{$badge-dot-height};\n  --#{$prefix}badge-width: #{$badge-dot-width};\n  --#{$prefix}badge-margin-left: #{$badge-dot-margin-left};\n\n  position: absolute;\n  min-width: 0;\n  width: var(--#{$prefix}badge-width);\n  height: var(--#{$prefix}badge-height);\n  border-radius: var(--#{$prefix}badge-border-radius);\n  padding: 0;\n  margin-left: var(--#{$prefix}badge-margin-left);\n\n  &:empty {\n    display: inline-block;\n  }\n}\n\n// \"Notification\" badge that shows the number of notifications, e.g. the number of unread messages\n.badge-notification {\n  --#{$prefix}badge-font-size: #{$badge-notification-font-size};\n  --#{$prefix}badge-padding-x: #{$badge-notification-padding-x};\n  --#{$prefix}badge-padding-y: #{$badge-notification-padding-y};\n  --#{$prefix}badge-margin-top: #{$badge-notification-margin-top};\n  --#{$prefix}badge-margin-left: #{$badge-notification-margin-left};\n\n  position: absolute;\n  font-size: var(--#{$prefix}badge-font-size);\n  padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n  margin-top: var(--#{$prefix}badge-margin-top);\n  margin-left: var(--#{$prefix}badge-margin-left);\n}\n\n// Contextual colors options\n@each $color, $value in $theme-colors {\n  .badge-#{$color} {\n    background-color: var(--#{$prefix}#{$color}-bg-subtle);\n    color: var(--#{$prefix}#{$color}-text-emphasis);\n\n    i {\n      color: var(--#{$prefix}#{$color}-text-emphasis);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_breadcrumb.scss",
    "content": "//\n// Breadcrumb styles\n//\n\n.navbar {\n  .breadcrumb {\n    // scss-docs-start breadcrumb-css-vars\n    --#{$prefix}breadcrumb-item-color: #{$breadcrumb-item-color};\n    --#{$prefix}breadcrumb-item-hover-color: #{$breadcrumb-item-hover-color};\n    --#{$prefix}breadcrumb-item-before-color: #{$breadcrumb-item-before-color};\n    --#{$prefix}breadcrumb-item-transition: #{$breadcrumb-item-transition};\n    // scss-docs-end breadcrumb-css-vars\n\n    background-color: transparent;\n    margin-bottom: 0;\n\n    .breadcrumb-item {\n      a {\n        color: var(--#{$prefix}breadcrumb-item-color);\n        transition: var(--#{$prefix}breadcrumb-item-transition);\n\n        &:hover,\n        &:focus {\n          color: var(--#{$prefix}breadcrumb-item-hover-color);\n        }\n      }\n\n      + .breadcrumb-item {\n        &:before {\n          color: var(--#{$prefix}breadcrumb-item-before-color);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_button-group.scss",
    "content": "//\n// Button group styles\n//\n\n.btn-group,\n.btn-group-vertical {\n  --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n  --#{$prefix}btn-hover-box-shadow: #{$btn-hover-box-shadow};\n  --#{$prefix}btn-focus-box-shadow: #{$btn-focus-box-shadow};\n  --#{$prefix}btn-active-box-shadow: #{$btn-active-box-shadow};\n  --#{$prefix}btn-group-transition: #{$btn-group-transition};\n\n  box-shadow: var(--#{$prefix}btn-box-shadow);\n  transition: var(--#{$prefix}btn-group-transition);\n\n  &:hover {\n    box-shadow: var(--#{$prefix}btn-hover-box-shadow);\n  }\n\n  &:focus,\n  &.focus {\n    box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n  }\n\n  &:active,\n  &.active {\n    box-shadow: var(--#{$prefix}btn-active-box-shadow);\n\n    &:focus {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n    border: 0;\n  }\n\n  > .btn {\n    box-shadow: none;\n\n    :not(.btn-check) + &:hover,\n    &:first-child:hover,\n    &:focus-visible,\n    &:hover {\n      box-shadow: none !important;\n    }\n\n    .btn-check:focus-visible + &,\n    .btn-check:focus + &,\n    &:focus {\n      box-shadow: none;\n    }\n\n    .btn-check:checked + &,\n    .btn-check:active + &,\n    &:active,\n    &.active,\n    &.show {\n      box-shadow: none;\n\n      &:focus {\n        box-shadow: none;\n      }\n    }\n\n    &:disabled,\n    &.disabled,\n    fieldset:disabled & {\n      box-shadow: none;\n    }\n  }\n\n  > .btn-group {\n    box-shadow: none;\n  }\n\n  > .btn-link,\n  > .btn-tertiary {\n    &:first-child {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n    }\n\n    &:last-child {\n      border-top-right-radius: 0;\n      border-bottom-right-radius: 0;\n    }\n  }\n}\n\n.btn-group,\n.btn-group-lg > .btn,\n.btn-group-sm > .btn {\n  --#{$prefix}btn-border-radius: #{$btn-border-radius};\n\n  border-radius: var(--#{$prefix}btn-border-radius);\n}\n"
  },
  {
    "path": "src/scss/free/_buttons.scss",
    "content": "//\n// Button base styles\n//\n\n.btn {\n  // scss-docs-start btn-css-vars\n  --#{$prefix}btn-padding-top: #{$btn-padding-top};\n  --#{$prefix}btn-padding-bottom: #{$btn-padding-bottom};\n  --#{$prefix}btn-border-width: 0;\n  --#{$prefix}btn-border-color: none;\n  --#{$prefix}btn-border-radius: #{$btn-border-radius};\n  --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n  --#{$prefix}btn-hover-box-shadow: #{$btn-hover-box-shadow};\n  --#{$prefix}btn-focus-box-shadow: #{$btn-focus-box-shadow};\n  --#{$prefix}btn-active-box-shadow: #{$btn-active-box-shadow};\n  // scss-docs-end btn-css-vars\n\n  padding-top: var(--#{$prefix}btn-padding-top);\n  padding-bottom: var(--#{$prefix}btn-padding-bottom);\n  text-transform: uppercase;\n  vertical-align: bottom;\n  border: 0;\n  @include border-radius(var(--#{$prefix}btn-border-radius));\n  box-shadow: var(--#{$prefix}btn-box-shadow);\n\n  :not(.btn-check) + &:hover,\n  &:first-child:hover,\n  &:focus-visible,\n  &:hover {\n    box-shadow: var(--#{$prefix}btn-hover-box-shadow);\n  }\n\n  .btn-check:focus-visible + &,\n  .btn-check:focus + &,\n  &:focus {\n    box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n  }\n\n  .btn-check:checked + &,\n  .btn-check:active + &,\n  &:active,\n  &.active,\n  &.show {\n    box-shadow: var(--#{$prefix}btn-active-box-shadow);\n\n    &:focus {\n      box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n}\n\n//\n// Outline styles\n//\n\n[class*='btn-outline-'] {\n  // scss-docs-start btn-outline-css-vars\n  --#{$prefix}btn-padding-top: #{$btn-outline-padding-top};\n  --#{$prefix}btn-padding-bottom: #{$btn-outline-padding-bottom};\n  --#{$prefix}btn-padding-x: #{$btn-outline-padding-x};\n  --#{$prefix}btn-border-width: #{$btn-outline-border-width};\n  --#{$prefix}btn-line-height: #{$btn-line-height};\n  // scss-docs-end btn-outline-css-vars\n\n  padding: var(--#{$prefix}btn-padding-top) var(--#{$prefix}btn-padding-x)\n    var(--#{$prefix}btn-padding-bottom);\n  border-width: var(--#{$prefix}btn-border-width);\n  border-style: solid;\n  box-shadow: none;\n\n  :not(.btn-check) + &:hover,\n  &:first-child:hover,\n  &:focus-visible,\n  &:hover {\n    box-shadow: none;\n  }\n\n  .btn-check:focus-visible + &,\n  .btn-check:focus + &,\n  &:focus {\n    box-shadow: none;\n  }\n\n  .btn-check:checked + &,\n  .btn-check:active + &,\n  &:active,\n  &.active,\n  &.show {\n    box-shadow: none;\n\n    &:focus {\n      box-shadow: none;\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    box-shadow: none;\n  }\n\n  &.btn-lg {\n    @include button-outline-size(\n      $btn-outline-padding-top-lg,\n      $btn-outline-padding-bottom-lg,\n      $btn-outline-padding-x-lg,\n      $btn-outline-font-size-lg,\n      $btn-outline-line-height-lg\n    );\n  }\n\n  &.btn-sm {\n    @include button-outline-size(\n      $btn-outline-padding-top-sm,\n      $btn-outline-padding-bottom-sm,\n      $btn-outline-padding-x-sm,\n      $btn-outline-font-size-sm,\n      $btn-outline-line-height-sm\n    );\n  }\n}\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-secondary\n.btn-secondary {\n  box-shadow: none;\n\n  :not(.btn-check) + &:hover,\n  &:first-child:hover,\n  &:focus-visible,\n  &:hover {\n    box-shadow: none !important;\n  }\n\n  .btn-check:focus-visible + &,\n  .btn-check:focus + &,\n  &:focus {\n    box-shadow: none;\n  }\n\n  .btn-check:checked + &,\n  .btn-check:active + &,\n  &:active,\n  &.active,\n  &.show {\n    box-shadow: none;\n\n    &:focus {\n      box-shadow: none;\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    box-shadow: none;\n  }\n}\n// scss-docs-end btn-secondary\n\n// scss-docs-start btn-variant-loop\n@each $color, $value in $theme-colors {\n  .btn-#{$color} {\n    @if $color == 'secondary' {\n      @include button-variant(\n        tint-color($primary, $btn-secondary-bg-tint-amount),\n        $value,\n        $color: shade-color($primary, $btn-secondary-color-shade-amount),\n        $hover-background:\n          shade-color(\n            tint-color($primary, $btn-secondary-bg-tint-amount),\n            $btn-hover-bg-shade-amount\n          ),\n        $focus-background:\n          shade-color(\n            tint-color($primary, $btn-secondary-bg-tint-amount),\n            $btn-hover-bg-shade-amount\n          ),\n        $active-background:\n          shade-color(\n            tint-color($primary, $btn-secondary-bg-tint-amount),\n            $btn-hover-bg-shade-amount\n          )\n      );\n    } @else if $color == 'light' {\n      @include button-variant(\n        $light-bg-subtle,\n        $light-border-subtle,\n        $color: $light-text-emphasis,\n        $hover-background: shade-color($light-bg-subtle, $btn-hover-bg-shade-amount),\n        $hover-border: shade-color($light-border-subtle, $btn-hover-border-shade-amount),\n        $active-background: shade-color($light-bg-subtle, $btn-active-bg-shade-amount),\n        $active-border: shade-color($light-border-subtle, $btn-active-border-shade-amount)\n      );\n    } @else if $color == 'dark' {\n      @include button-variant(\n        $dark-bg-subtle,\n        $dark-border-subtle,\n        $color: $dark-text-emphasis,\n        $hover-background: tint-color($dark-bg-subtle, $btn-hover-bg-tint-amount),\n        $hover-border: tint-color($dark-border-subtle, $btn-hover-border-tint-amount),\n        $active-background: tint-color($dark-bg-subtle, $btn-active-bg-tint-amount),\n        $active-border: tint-color($dark-border-subtle, $btn-active-border-tint-amount)\n      );\n    } @else {\n      @include button-variant($value, $value);\n    }\n\n    @if $color == 'secondary' {\n      --#{$prefix}btn-box-shadow-state: transparent;\n    } @else {\n      --#{$prefix}btn-box-shadow-state: #{$btn-contextual-box-shadow-state-first-part\n          rgba(shade-color($value, $btn-hover-bg-shade-amount), 0.3),\n        $btn-contextual-box-shadow-state-second-part\n          rgba(shade-color($value, $btn-hover-bg-shade-amount), 0.2)};\n    }\n\n    :not(.btn-check) + &:hover,\n    &:first-child:hover,\n    &:focus-visible,\n    &:hover {\n      box-shadow: var(--#{$prefix}btn-box-shadow-state);\n    }\n\n    .btn-check:focus-visible + &,\n    .btn-check:focus + &,\n    &:focus {\n      box-shadow: var(--#{$prefix}btn-box-shadow-state);\n      background-color: var(--#{$prefix}btn-focus-bg);\n    }\n\n    .btn-check:checked + &,\n    .btn-check:active + &,\n    &:active,\n    &.active,\n    &.show {\n      box-shadow: var(--#{$prefix}btn-box-shadow-state);\n\n      &:focus {\n        box-shadow: var(--#{$prefix}btn-box-shadow-state);\n      }\n\n      &:hover {\n        background-color: var(--#{$prefix}btn-active-bg);\n      }\n    }\n\n    &:disabled,\n    &.disabled,\n    fieldset:disabled & {\n      box-shadow: var(--#{$prefix}btn-box-shadow);\n    }\n  }\n\n  [data-mdb-theme='dark'] .btn-#{$color} {\n    @if $color != 'secondary' {\n      box-shadow: 0 4px 9px -4px rgba($black, 0.35);\n      &:hover,\n      &:active,\n      &:focus {\n        box-shadow: 0 4px 18px -2px rgba($black, 0.7);\n      }\n    }\n  }\n}\n\n// scss-docs-end btn-variant-loop\n\n// scss-docs-start btn-outline-variant-loop\n@each $color, $value in $theme-colors {\n  .btn-outline-#{$color} {\n    @if $color == 'secondary' {\n      @include button-outline-variant(\n        shade-color($primary, $btn-secondary-color-shade-amount),\n        shade-color($primary, $btn-secondary-color-shade-amount),\n        shade-color($primary, $btn-secondary-color-shade-amount),\n        shade-color($primary, $btn-secondary-color-shade-amount)\n      );\n\n      --#{$prefix}btn-outline-border-color: #{tint-color($primary, $btn-secondary-bg-tint-amount)};\n      --#{$prefix}btn-outline-focus-border-color: #{shade-color(\n          tint-color($primary, $btn-secondary-bg-tint-amount),\n          $btn-focus-bg-shade-amount\n        )};\n      --#{$prefix}btn-outline-hover-border-color: #{shade-color(\n          tint-color($primary, $btn-secondary-bg-tint-amount),\n          $btn-hover-bg-shade-amount\n        )};\n\n      border-color: var(--#{$prefix}btn-outline-border-color);\n    } @else {\n      @include button-outline-variant(\n        $value,\n        shade-color($value, $btn-hover-bg-shade-amount),\n        shade-color($value, $btn-focus-bg-shade-amount),\n        shade-color($value, $btn-active-bg-shade-amount)\n      );\n\n      --#{$prefix}btn-outline-border-color: #{$value};\n      --#{$prefix}btn-outline-focus-border-color: #{shade-color(\n          $value,\n          $btn-outline-focus-bg-shade-amount\n        )};\n      --#{$prefix}btn-outline-hover-border-color: #{shade-color(\n          $value,\n          $btn-outline-hover-bg-shade-amount\n        )};\n\n      border-color: var(--#{$prefix}btn-outline-border-color);\n    }\n\n    :not(.btn-check) + &:hover,\n    &:first-child:hover,\n    &:focus-visible,\n    &:hover {\n      border-color: var(--#{$prefix}btn-outline-hover-border-color);\n    }\n\n    .btn-check:focus-visible + &,\n    .btn-check:focus + &,\n    &:focus {\n      border-color: var(--#{$prefix}btn-outline-focus-border-color);\n    }\n\n    .btn-check:checked + &,\n    .btn-check:active + &,\n    &:active,\n    &.active,\n    &.show {\n      border-color: var(--#{$prefix}btn-outline-active-border-color);\n\n      &:focus {\n        border-color: var(--#{$prefix}btn-outline-focus-border-color);\n      }\n    }\n\n    &:disabled,\n    &.disabled,\n    fieldset:disabled & {\n      border-color: var(--#{$prefix}btn-outline-border-color);\n    }\n  }\n\n  [data-mdb-theme='dark'] .btn-outline-#{$color} {\n    @if $color == 'secondary' {\n      @include button-outline-variant(\n        tint-color($primary, 70%),\n        tint-color($primary, 60%),\n        tint-color($primary, 60%),\n        tint-color($primary, 60%),\n        shade-color($primary, 60%),\n        shade-color($primary, 60%),\n        shade-color($primary, 60%)\n      );\n\n      --#{$prefix}btn-outline-border-color: #{tint-color($primary, 50%)};\n      --#{$prefix}btn-outline-focus-border-color: #{shade-color(\n          tint-color($primary, 50%),\n          $btn-focus-bg-shade-amount\n        )};\n      --#{$prefix}btn-outline-hover-border-color: #{shade-color(\n          tint-color($primary, 50%),\n          $btn-hover-bg-shade-amount\n        )};\n\n      border-color: var(--#{$prefix}btn-outline-border-color);\n    } @else {\n      @include button-outline-variant(\n        tint-color($value, 20%),\n        shade-color($value, $btn-hover-bg-shade-amount),\n        shade-color($value, $btn-focus-bg-shade-amount),\n        shade-color($value, $btn-active-bg-shade-amount),\n        shade-color($value, 70%),\n        shade-color($value, 70%),\n        shade-color($value, 70%)\n      );\n    }\n  }\n}\n\n// scss-docs-end btn-outline-variant-loop\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n  --#{$prefix}btn-font-weight: #{$font-weight-medium};\n  --#{$prefix}btn-color: #{$btn-link-color};\n  --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n  --#{$prefix}btn-hover-bg: #{$btn-link-hover-bg};\n  --#{$prefix}btn-focus-color: #{$btn-link-focus-color};\n  --#{$prefix}btn-active-color: #{$btn-link-active-color};\n  --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n  --#{$prefix}btn-box-shadow: none;\n\n  text-decoration: $link-decoration;\n  box-shadow: var(--#{$prefix}btn-box-shadow);\n\n  :not(.btn-check) + &:hover,\n  &:first-child:hover,\n  &:focus-visible,\n  &:hover {\n    text-decoration: $link-hover-decoration;\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n\n  .btn-check:focus-visible + &,\n  .btn-check:focus + &,\n  &:focus {\n    color: var(--#{$prefix}btn-focus-color);\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n\n  .btn-check:checked + &,\n  .btn-check:active + &,\n  &:active,\n  &.active,\n  &.show {\n    color: var(--#{$prefix}btn-active-color);\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n\n    &:focus {\n      color: var(--#{$prefix}btn-focus-color);\n      box-shadow: var(--#{$prefix}btn-box-shadow);\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n}\n\n.btn-tertiary {\n  --#{$prefix}btn-font-weight: #{$font-weight-medium};\n  --#{$prefix}btn-color: #{$btn-link-color};\n  --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n  --#{$prefix}btn-hover-bg: transparent;\n  --#{$prefix}btn-focus-color: #{$btn-link-focus-color};\n  --#{$prefix}btn-active-color: #{$btn-link-active-color};\n  --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n  --#{$prefix}btn-box-shadow: none;\n\n  padding-left: 0px;\n  padding-right: 0px;\n  text-decoration: $link-decoration;\n  box-shadow: var(--#{$prefix}btn-box-shadow);\n\n  :not(.btn-check) + &:hover,\n  &:first-child:hover,\n  &:focus-visible,\n  &:hover {\n    text-decoration: $link-hover-decoration;\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n\n  .btn-check:focus-visible + &,\n  .btn-check:focus + &,\n  &:focus {\n    color: var(--#{$prefix}btn-focus-color);\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n\n  .btn-check:checked + &,\n  .btn-check:active + &,\n  &:active,\n  &.active,\n  &.show {\n    color: var(--#{$prefix}btn-active-color);\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n\n    &:focus {\n      color: var(--#{$prefix}btn-focus-color);\n      box-shadow: var(--#{$prefix}btn-box-shadow);\n    }\n  }\n\n  &:disabled,\n  &.disabled,\n  fieldset:disabled & {\n    box-shadow: var(--#{$prefix}btn-box-shadow);\n  }\n}\n\n[data-mdb-theme='dark'] .btn-secondary {\n  --#{$prefix}btn-bg: #{tint-color($primary, 60%)};\n  --#{$prefix}btn-hover-bg: #{tint-color($primary, 50%)};\n  --#{$prefix}btn-focus-bg: #{tint-color($primary, 50%)};\n  --#{$prefix}btn-active-bg: #{tint-color($primary, 50%)};\n}\n\n[data-mdb-theme='dark'] .btn-link {\n  --#{$prefix}btn-color: #{$secondary};\n  --#{$prefix}btn-hover-color: #{tint-color($secondary, 30%)};\n  --#{$prefix}btn-hover-bg: #{shade-color($secondary, 60%)};\n  --#{$prefix}btn-focus-color: #{tint-color($secondary, 30%)};\n  --#{$prefix}btn-active-color: #{tint-color($secondary, 30%)};\n}\n\n[data-mdb-theme='dark'] .btn-tertiary {\n  --#{$prefix}btn-color: #{$secondary};\n  --#{$prefix}btn-hover-color: #{tint-color($secondary, 30%)};\n  --#{$prefix}btn-focus-color: #{tint-color($secondary, 30%)};\n  --#{$prefix}btn-active-color: #{tint-color($secondary, 30%)};\n}\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n  @include button-size(\n    $btn-padding-top-lg,\n    $btn-padding-bottom-lg,\n    $btn-padding-x-lg,\n    $btn-font-size-lg,\n    $btn-line-height-lg\n  );\n}\n\n.btn-sm {\n  @include button-size(\n    $btn-padding-top-sm,\n    $btn-padding-bottom-sm,\n    $btn-padding-x-sm,\n    $btn-font-size-sm,\n    $btn-line-height-sm\n  );\n}\n\n//\n// Rounded option\n//\n\n.btn-rounded {\n  --#{$prefix}btn-border-radius: #{$btn-rounded-border-radius};\n\n  border-radius: var(--#{$prefix}btn-border-radius);\n}\n\n//\n// Floating option\n//\n\n.btn-floating,\n[class*='btn-outline-'].btn-floating {\n  --#{$prefix}btn-border-radius: #{$btn-floating-border-radius};\n\n  border-radius: var(--#{$prefix}btn-border-radius);\n  padding: 0;\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.btn-floating {\n  --#{$prefix}btn-width: #{$btn-floating-width};\n  --#{$prefix}btn-height: #{$btn-floating-height};\n  --#{$prefix}btn-icon-width: #{$btn-floating-icon-width};\n  --#{$prefix}btn-icon-line-height: #{$btn-floating-icon-line-height};\n  --#{$prefix}btn-width-lg: #{$btn-floating-width-lg};\n  --#{$prefix}btn-height-lg: #{$btn-floating-height-lg};\n  --#{$prefix}btn-icon-width-lg: #{$btn-floating-icon-width-lg};\n  --#{$prefix}btn-icon-line-height-lg: #{$btn-floating-icon-line-height-lg};\n  --#{$prefix}btn-width-sm: #{$btn-floating-width-sm};\n  --#{$prefix}btn-height-sm: #{$btn-floating-height-sm};\n  --#{$prefix}btn-icon-width-sm: #{$btn-floating-icon-width-sm};\n  --#{$prefix}btn-icon-line-height-sm: #{$btn-floating-icon-line-height-sm};\n\n  width: var(--#{$prefix}btn-width);\n  height: var(--#{$prefix}btn-height);\n\n  .fas,\n  .far,\n  .fab {\n    width: var(--#{$prefix}btn-icon-width);\n    line-height: var(--#{$prefix}btn-icon-line-height);\n  }\n\n  &.btn-lg {\n    width: var(--#{$prefix}btn-width-lg);\n    height: var(--#{$prefix}btn-height-lg);\n\n    .fas,\n    .far,\n    .fab {\n      width: var(--#{$prefix}btn-icon-width-lg);\n      line-height: var(--#{$prefix}btn-icon-line-height-lg);\n    }\n  }\n\n  &.btn-sm {\n    width: var(--#{$prefix}btn-width-sm);\n    height: var(--#{$prefix}btn-height-sm);\n\n    .fas,\n    .far,\n    .fab {\n      width: var(--#{$prefix}btn-icon-width-sm);\n      line-height: var(--#{$prefix}btn-icon-line-height-sm);\n    }\n  }\n}\n\n[class*='btn-outline-'].btn-floating {\n  --#{$prefix}btn-icon-width: #{$btn-outline-floating-icon-width};\n  --#{$prefix}btn-icon-width-lg: #{$btn-outline-floating-icon-width-lg};\n  --#{$prefix}btn-icon-width-sm: #{$btn-outline-floating-icon-width-sm};\n  --#{$prefix}btn-icon-line-height: #{$btn-outline-floating-icon-line-height};\n  --#{$prefix}btn-icon-line-height-lg: #{$btn-outline-floating-icon-line-height-lg};\n  --#{$prefix}btn-icon-line-height-sm: #{$btn-outline-floating-icon-line-height-sm};\n\n  .fas,\n  .far,\n  .fab {\n    width: var(--#{$prefix}btn-icon-width);\n    line-height: var(--#{$prefix}btn-icon-line-height);\n  }\n\n  &.btn-lg {\n    .fas,\n    .far,\n    .fab {\n      width: var(--#{$prefix}btn-icon-width-lg);\n      line-height: var(--#{$prefix}btn-icon-line-height-lg);\n    }\n  }\n\n  &.btn-sm {\n    .fas,\n    .far,\n    .fab {\n      width: var(--#{$prefix}btn-icon-width-sm);\n      line-height: var(--#{$prefix}btn-icon-line-height-sm);\n    }\n  }\n}\n\n//\n// Fixed option\n//\n\n.fixed-action-btn {\n  --#{$prefix}btn-right: #{$fixed-action-btn-right};\n  --#{$prefix}btn-bottom: #{$fixed-action-btn-bottom};\n  --#{$prefix}btn-zindex: #{$fixed-action-button-zindex};\n  --#{$prefix}btn-padding-top: #{$fixed-action-btn-padding-top};\n  --#{$prefix}btn-padding-bottom: #{$fixed-action-btn-padding-bottom};\n  --#{$prefix}btn-padding-x: #{$fixed-action-btn-padding-x};\n  --#{$prefix}btn-margin-bottom: #{$fixed-action-btn-li-margin-bottom};\n\n  position: fixed;\n  right: var(--#{$prefix}btn-right);\n  bottom: var(--#{$prefix}btn-bottom);\n  z-index: var(--#{$prefix}btn-zindex);\n  display: flex;\n  flex-flow: column-reverse nowrap;\n  align-items: center;\n  padding: var(--#{$prefix}btn-padding-top) var(--#{$prefix}btn-padding-x)\n    var(--#{$prefix}btn-padding-bottom);\n  margin-bottom: 0;\n  height: auto;\n  overflow: hidden;\n\n  & > .btn-floating {\n    position: relative;\n    transform: scale(1.2);\n    z-index: 10;\n  }\n\n  ul {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    display: flex;\n    flex-direction: column;\n    padding: 0;\n    margin: 0;\n    margin-bottom: 0;\n    text-align: center;\n    opacity: 0;\n    transition: transform 0.4s, opacity 0.4s;\n    z-index: -1;\n\n    li {\n      z-index: 0;\n      display: flex;\n      margin-right: auto;\n      margin-bottom: var(--#{$prefix}btn-margin-bottom);\n      margin-left: auto;\n\n      &:first-of-type {\n        margin-top: calc(var(--#{$prefix}btn-margin-bottom) * 0.5);\n      }\n    }\n\n    a {\n      &.btn {\n        opacity: 0;\n        transition: opacity 0.4s ease-in;\n\n        &.shown {\n          opacity: 1;\n        }\n      }\n    }\n  }\n\n  &.active ul {\n    opacity: 1;\n  }\n}\n\n//\n// Button block\n//\n\n.btn-block {\n  --#{$prefix}btn-margin-top: #{$btn-block-margin-top};\n\n  display: block;\n  width: 100%;\n\n  // Vertically space out multiple block buttons\n  + .btn-block {\n    margin-top: var(--#{$prefix}btn-margin-top);\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_card.scss",
    "content": "//\n// Card styles\n//\n\n.card {\n  border: 0;\n\n  .bg-image {\n    border-top-left-radius: var(--#{$prefix}card-border-radius);\n    border-top-right-radius: var(--#{$prefix}card-border-radius);\n  }\n\n  &[class*='bg-'] {\n    .card-header {\n      --#{$prefix}card-header-border-bottom-color: #{$card-border-color};\n\n      border-bottom-color: var(--#{$prefix}card-header-border-bottom-color);\n    }\n    .card-footer {\n      --#{$prefix}card-footer-border-top-color: #{$card-border-color};\n\n      border-top-color: var(--#{$prefix}card-footer-border-top-color);\n    }\n  }\n}\n\n.card-header {\n  --#{$prefix}card-header-border-width: #{$card-header-border-width};\n  --#{$prefix}card-header-border-color: #{$card-header-border-color};\n\n  border-bottom: var(--#{$prefix}card-header-border-width) solid\n    var(--#{$prefix}card-header-border-color);\n}\n\n.card-body {\n  &[class*='bg-'] {\n    border-bottom-left-radius: var(--#{$prefix}card-border-radius);\n    border-bottom-right-radius: var(--#{$prefix}card-border-radius);\n  }\n}\n\n.card-footer {\n  --#{$prefix}card-footer-border-color: #{$card-footer-border-color};\n  --#{$prefix}card-footer-border-width: #{$card-footer-border-width};\n\n  border-top: var(--#{$prefix}card-footer-border-width) solid\n    var(--#{$prefix}card-footer-border-color);\n}\n\n.card-img-left {\n  border-top-left-radius: var(--#{$prefix}card-border-radius);\n  border-bottom-left-radius: var(--#{$prefix}card-border-radius);\n}\n"
  },
  {
    "path": "src/scss/free/_carousel.scss",
    "content": "//\n// Carousel styles\n//\n\n.carousel-control-prev-icon {\n  &::after {\n    content: '\\f053';\n    --#{$prefix}carousel-control-icon-font-size: #{$carousel-control-icon-font-size};\n    --#{$prefix}carousel-control-icon-font-weight: #{$font-weight-bold};\n\n    font-weight: var(--#{$prefix}carousel-control-icon-font-weight);\n    font-size: var(--#{$prefix}carousel-control-icon-font-size);\n    font-family: 'Font Awesome 6 Pro', 'Font Awesome 6 Free';\n  }\n}\n.carousel-control-next-icon {\n  &::after {\n    content: '\\f054';\n    --#{$prefix}carousel-control-icon-font-size: #{$carousel-control-icon-font-size};\n    --#{$prefix}carousel-control-icon-font-weight: #{$font-weight-bold};\n\n    font-weight: var(--#{$prefix}carousel-control-icon-font-weight);\n    font-size: var(--#{$prefix}carousel-control-icon-font-size);\n    font-family: 'Font Awesome 6 Pro', 'Font Awesome 6 Free';\n  }\n}\n.carousel-indicators {\n  [data-mdb-target] {\n    @extend [data-bs-target] !optional;\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_close.scss",
    "content": "// transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n  &:focus {\n    box-shadow: none;\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_colors.scss",
    "content": "//\n// Color styles\n//\n\n@each $color, $value in $theme-colors {\n  .bg-#{$color} {\n    --#{$prefix}-bg-opacity: 1;\n\n    background-color: rgba($value, var(--#{$prefix}-bg-opacity));\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_deprecated.scss",
    "content": "// To be removed\n\nhr.divider-horizontal:not([size]) {\n  height: 2px;\n}\n\n.divider-horizontal {\n  opacity: 1;\n  background-color: #f5f5f5;\n  height: 2px;\n}\n\n.divider-vertical {\n  opacity: 1;\n  background-color: #f5f5f5;\n  display: inline-block;\n  width: 2px;\n  margin: 0 1rem;\n}\n\nhr.divider-horizontal-blurry {\n  background-image: linear-gradient(90deg, transparent, hsl(0, 0%, 40%), transparent);\n  background-color: transparent;\n}\n\nhr.divider-vertical-blurry {\n  background-image: linear-gradient(180deg, transparent, hsl(0, 0%, 40%), transparent);\n  background-color: transparent;\n  width: 1px;\n  top: 0;\n  right: 0;\n}\n"
  },
  {
    "path": "src/scss/free/_dropdown.scss",
    "content": "//\n// Dropdown styles\n//\n\n.dropdown-menu {\n  --#{$prefix}dropdown-item-border-radius: #{$dropdown-item-border-radius};\n\n  color: var(--#{$prefix}dropdown-color);\n  margin: 0;\n  padding-top: 0;\n  padding-bottom: 0;\n  border: 0;\n  box-shadow: var(--#{$prefix}dropdown-box-shadow);\n  font-size: var(--#{$prefix}dropdown-font-size);\n  top: 100%;\n  left: 0;\n  margin-top: var(--#{$prefix}dropdown-spacer);\n\n  > li {\n    border-radius: 0;\n    &:first-child {\n      border-top-left-radius: var(--#{$prefix}dropdown-item-border-radius);\n      border-top-right-radius: var(--#{$prefix}dropdown-item-border-radius);\n      border-bottom-left-radius: 0;\n      border-bottom-right-radius: 0;\n      .dropdown-item {\n        border-top-left-radius: var(--#{$prefix}dropdown-item-border-radius);\n        border-top-right-radius: var(--#{$prefix}dropdown-item-border-radius);\n        border-bottom-left-radius: 0;\n        border-bottom-right-radius: 0;\n      }\n    }\n\n    &:not(:first-child):not(:last-child) {\n      .dropdown-item {\n        border-radius: 0;\n      }\n    }\n\n    &:last-child {\n      border-top-left-radius: 0;\n      border-top-right-radius: 0;\n      border-bottom-left-radius: var(--#{$prefix}dropdown-item-border-radius);\n      border-bottom-right-radius: var(--#{$prefix}dropdown-item-border-radius);\n      .dropdown-item {\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n        border-bottom-left-radius: var(--#{$prefix}dropdown-item-border-radius);\n        border-bottom-right-radius: var(--#{$prefix}dropdown-item-border-radius);\n      }\n    }\n  }\n\n  &.animation {\n    --#{$prefix}dropdown-menu-animated-animation-duration: #{$dropdown-menu-animated-animation-duration};\n    --#{$prefix}dropdown-menu-animated-animation-timing-function: #{$dropdown-menu-animated-animation-timing-function};\n\n    display: block;\n    /* Speed up animations */\n    animation-duration: var(--#{$prefix}dropdown-menu-animated-animation-duration);\n    animation-timing-function: var(--#{$prefix}dropdown-menu-animated-animation-timing-function);\n  }\n}\n\n.dropdown-item {\n  --#{$prefix}dropdown-state-color: #{$dropdown-state-color};\n  --#{$prefix}dropdown-state-background-color: #{$dropdown-state-background-color};\n\n  padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n  color: var(--#{$prefix}dropdown-color);\n  border-radius: 0;\n\n  &:hover,\n  &:focus {\n    color: var(--#{$prefix}dropdown-state-color);\n    background-color: var(--#{$prefix}dropdown-state-background-color);\n  }\n\n  &.active,\n  &:active {\n    color: var(--#{$prefix}dropdown-state-color);\n    background-color: var(--#{$prefix}dropdown-state-background-color);\n  }\n\n  &:focus {\n    outline: none;\n  }\n}\n\n.hidden-arrow {\n  &.dropdown-toggle:after {\n    display: none;\n  }\n}\n\n.animation {\n  animation-duration: 1s;\n  animation-fill-mode: both;\n  padding: auto;\n}\n\n@media (prefers-reduced-motion) {\n  .animation {\n    transition: none !important;\n    animation: unset !important;\n  }\n}\n\n@keyframes fade-in {\n  from {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n.fade-in {\n  animation-name: fade-in;\n}\n\n@keyframes fade-out {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n  }\n}\n\n.fade-out {\n  animation-name: fade-out;\n}\n\n.dropdown-divider {\n  --#{$prefix}dropdown-divider-border-top-width: #{$dropdown-divider-border-top-width};\n  --#{$prefix}dropdown-divider-border-top-bg: #{$dropdown-divider-bg};\n\n  border-top: var(--#{$prefix}dropdown-divider-border-top-width) solid\n    var(--#{$prefix}dropdown-divider-border-top-bg);\n  opacity: 1;\n}\n\n.dropdown-menu {\n  INPUT:not(:-webkit-autofill),\n  SELECT:not(:-webkit-autofill),\n  TEXTAREA:not(:-webkit-autofill) {\n    animation-name: none !important;\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_flag.scss",
    "content": "/*******************************\n             Flag\n*******************************/\n#mdb-table-flag tr {\n  cursor: pointer;\n}\n.mdb-flag-selected {\n  border-top-left-radius: 5px;\n  border-top-right-radius: 5px;\n  text-align: center;\n  max-width: 150px;\n  margin: 0 auto;\n  margin-top: 10px;\n}\n.mdb-selected-flag-text {\n  margin: 0 auto;\n  max-width: 150px;\n}\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  margin: 0 0.5em 0 0;\n  line-height: 11px;\n  text-decoration: inherit;\n  vertical-align: baseline;\n  backface-visibility: hidden;\n}\n\n/* Sprite */\ni.flag {\n  &::before {\n    display: inline-block;\n    width: 16px;\n    height: 11px;\n    content: '';\n    background: url('https://mdbootstrap.com/img/svg/flags.png') no-repeat -108px -1976px;\n  }\n\n  /* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n  /*******************************\n         Theme Overrides\n*******************************/\n\n  &-ad:before,\n  &-andorra:before {\n    background-position: 0 0 !important;\n  }\n\n  &-ae:before,\n  &-united-arab-emirates:before,\n  &-uae:before {\n    background-position: 0 -26px !important;\n  }\n  &-af:before,\n  &-afghanistan:before {\n    background-position: 0 -52px !important;\n  }\n  &-ag:before,\n  &-antigua:before {\n    background-position: 0 -78px !important;\n  }\n  &-ai:before,\n  &-anguilla:before {\n    background-position: 0 -104px !important;\n  }\n  &-al:before,\n  &-albania:before {\n    background-position: 0 -130px !important;\n  }\n  &-am:before,\n  &-armenia:before {\n    background-position: 0 -156px !important;\n  }\n  &-an:before,\n  &-netherlands-antilles:before {\n    background-position: 0 -182px !important;\n  }\n  &-ao:before,\n  &-angola:before {\n    background-position: 0 -208px !important;\n  }\n  &-ar:before,\n  &-argentina:before {\n    background-position: 0 -234px !important;\n  }\n  &-as:before,\n  &-american-samoa:before {\n    background-position: 0 -260px !important;\n  }\n  &-at:before,\n  &-austria:before {\n    background-position: 0 -286px !important;\n  }\n  &-au:before,\n  &-australia:before {\n    background-position: 0 -312px !important;\n  }\n  &-aw:before,\n  &-aruba:before {\n    background-position: 0 -338px !important;\n  }\n  &-ax:before,\n  &-aland-islands:before {\n    background-position: 0 -364px !important;\n  }\n  &-az:before,\n  &-azerbaijan:before {\n    background-position: 0 -390px !important;\n  }\n  &-ba:before,\n  &-bosnia:before {\n    background-position: 0 -416px !important;\n  }\n  &-bb:before,\n  &-barbados:before {\n    background-position: 0 -442px !important;\n  }\n  &-bd:before,\n  &-bangladesh:before {\n    background-position: 0 -468px !important;\n  }\n  &-be:before,\n  &-belgium:before {\n    background-position: 0 -494px !important;\n  }\n  &-bf:before,\n  &-burkina-faso:before {\n    background-position: 0 -520px !important;\n  }\n  &-bg:before,\n  &-bulgaria:before {\n    background-position: 0 -546px !important;\n  }\n  &-bh:before,\n  &-bahrain:before {\n    background-position: 0 -572px !important;\n  }\n  &-bi:before,\n  &-burundi:before {\n    background-position: 0 -598px !important;\n  }\n  &-bj:before,\n  &-benin:before {\n    background-position: 0 -624px !important;\n  }\n  &-bm:before,\n  &-bermuda:before {\n    background-position: 0 -650px !important;\n  }\n  &-bn:before,\n  &-brunei:before {\n    background-position: 0 -676px !important;\n  }\n  &-bo:before,\n  &-bolivia:before {\n    background-position: 0 -702px !important;\n  }\n  &-br:before,\n  &-brazil:before {\n    background-position: 0 -728px !important;\n  }\n  &-bs:before,\n  &-bahamas:before {\n    background-position: 0 -754px !important;\n  }\n  &-bt:before,\n  &-bhutan:before {\n    background-position: 0 -780px !important;\n  }\n  &-bv:before,\n  &-bouvet-island:before {\n    background-position: 0 -806px !important;\n  }\n  &-bw:before,\n  &-botswana:before {\n    background-position: 0 -832px !important;\n  }\n  &-by:before,\n  &-belarus:before {\n    background-position: 0 -858px !important;\n  }\n  &-bz:before,\n  &-belize:before {\n    background-position: 0 -884px !important;\n  }\n  &-ca:before,\n  &-canada:before {\n    background-position: 0 -910px !important;\n  }\n  &-cc:before,\n  &-cocos-islands:before {\n    background-position: 0 -962px !important;\n  }\n  &-cd:before,\n  &-congo:before {\n    background-position: 0 -988px !important;\n  }\n  &-cf:before,\n  &-central-african-republic:before {\n    background-position: 0 -1014px !important;\n  }\n  &-cg:before,\n  &-congo-brazzaville:before {\n    background-position: 0 -1040px !important;\n  }\n  &-ch:before,\n  &-switzerland:before {\n    background-position: 0 -1066px !important;\n  }\n  &-ci:before,\n  &-cote-divoire:before {\n    background-position: 0 -1092px !important;\n  }\n  &-ck:before,\n  &-cook-islands:before {\n    background-position: 0 -1118px !important;\n  }\n  &-cl:before,\n  &-chile:before {\n    background-position: 0 -1144px !important;\n  }\n  &-cm:before,\n  &-cameroon:before {\n    background-position: 0 -1170px !important;\n  }\n  &-cn:before,\n  &-china:before {\n    background-position: 0 -1196px !important;\n  }\n  &-co:before,\n  &-colombia:before {\n    background-position: 0 -1222px !important;\n  }\n  &-cr:before,\n  &-costa-rica:before {\n    background-position: 0 -1248px !important;\n  }\n  &-cs:before,\n  &-serbia:before {\n    background-position: 0 -1274px !important;\n  }\n  &-cu:before,\n  &-cuba:before {\n    background-position: 0 -1300px !important;\n  }\n  &-cv:before,\n  &-cape-verde:before {\n    background-position: 0 -1326px !important;\n  }\n  &-cx:before,\n  &-christmas-island:before {\n    background-position: 0 -1352px !important;\n  }\n  &-cy:before,\n  &-cyprus:before {\n    background-position: 0 -1378px !important;\n  }\n  &-cz:before,\n  &-czech-republic:before {\n    background-position: 0 -1404px !important;\n  }\n  &-de:before,\n  &-germany:before {\n    background-position: 0 -1430px !important;\n  }\n  &-dj:before,\n  &-djibouti:before {\n    background-position: 0 -1456px !important;\n  }\n  &-dk:before,\n  &-denmark:before {\n    background-position: 0 -1482px !important;\n  }\n  &-dm:before,\n  &-dominica:before {\n    background-position: 0 -1508px !important;\n  }\n  &-do:before,\n  &-dominican-republic:before {\n    background-position: 0 -1534px !important;\n  }\n  &-dz:before,\n  &-algeria:before {\n    background-position: 0 -1560px !important;\n  }\n  &-ec:before,\n  &-ecuador:before {\n    background-position: 0 -1586px !important;\n  }\n  &-ee:before,\n  &-estonia:before {\n    background-position: 0 -1612px !important;\n  }\n  &-eg:before,\n  &-egypt:before {\n    background-position: 0 -1638px !important;\n  }\n  &-eh:before,\n  &-western-sahara:before {\n    background-position: 0 -1664px !important;\n  }\n  &-gb-eng:before,\n  &-england:before {\n    background-position: 0 -1690px !important;\n  }\n  &-er:before,\n  &-eritrea:before {\n    background-position: 0 -1716px !important;\n  }\n  &-es:before,\n  &-spain:before {\n    background-position: 0 -1742px !important;\n  }\n  &-et:before,\n  &-ethiopia:before {\n    background-position: 0 -1768px !important;\n  }\n  &-eu:before,\n  &-european-union:before {\n    background-position: 0 -1794px !important;\n  }\n  &-fi:before,\n  &-finland:before {\n    background-position: 0 -1846px !important;\n  }\n  &-fj:before,\n  &-fiji:before {\n    background-position: 0 -1872px !important;\n  }\n  &-fk:before,\n  &-falkland-islands:before {\n    background-position: 0 -1898px !important;\n  }\n  &-fm:before,\n  &-micronesia:before {\n    background-position: 0 -1924px !important;\n  }\n  &-fo:before,\n  &-faroe-islands:before {\n    background-position: 0 -1950px !important;\n  }\n  &-fr:before,\n  &-france:before {\n    background-position: 0 -1976px !important;\n  }\n  &-ga:before,\n  &-gabon:before {\n    background-position: -36px 0 !important;\n  }\n  &-gb:before,\n  &-uk:before,\n  &-united-kingdom:before {\n    background-position: -36px -26px !important;\n  }\n  &-gd:before,\n  &-grenada:before {\n    background-position: -36px -52px !important;\n  }\n  &-ge:before,\n  &-georgia:before {\n    background-position: -36px -78px !important;\n  }\n  &-gf:before,\n  &-french-guiana:before {\n    background-position: -36px -104px !important;\n  }\n  &-gh:before,\n  &-ghana:before {\n    background-position: -36px -130px !important;\n  }\n  &-gi:before,\n  &-gibraltar:before {\n    background-position: -36px -156px !important;\n  }\n  &-gl:before,\n  &-greenland:before {\n    background-position: -36px -182px !important;\n  }\n  &-gm:before,\n  &-gambia:before {\n    background-position: -36px -208px !important;\n  }\n  &-gn:before,\n  &-guinea:before {\n    background-position: -36px -234px !important;\n  }\n  &-gp:before,\n  &-guadeloupe:before {\n    background-position: -36px -260px !important;\n  }\n  &-gq:before,\n  &-equatorial-guinea:before {\n    background-position: -36px -286px !important;\n  }\n  &-gr:before,\n  &-greece:before {\n    background-position: -36px -312px !important;\n  }\n  &-gs:before,\n  &-sandwich-islands:before {\n    background-position: -36px -338px !important;\n  }\n  &-gt:before,\n  &-guatemala:before {\n    background-position: -36px -364px !important;\n  }\n  &-gu:before,\n  &-guam:before {\n    background-position: -36px -390px !important;\n  }\n  &-gw:before,\n  &-guinea-bissau:before {\n    background-position: -36px -416px !important;\n  }\n  &-gy:before,\n  &-guyana:before {\n    background-position: -36px -442px !important;\n  }\n  &-hk:before,\n  &-hong-kong:before {\n    background-position: -36px -468px !important;\n  }\n  &-hm:before,\n  &-heard-island:before {\n    background-position: -36px -494px !important;\n  }\n  &-hn:before,\n  &-honduras:before {\n    background-position: -36px -520px !important;\n  }\n  &-hr:before,\n  &-croatia:before {\n    background-position: -36px -546px !important;\n  }\n  &-ht:before,\n  &-haiti:before {\n    background-position: -36px -572px !important;\n  }\n  &-hu:before,\n  &-hungary:before {\n    background-position: -36px -598px !important;\n  }\n  &-id:before,\n  &-indonesia:before {\n    background-position: -36px -624px !important;\n  }\n  &-ie:before,\n  &-ireland:before {\n    background-position: -36px -650px !important;\n  }\n  &-il:before,\n  &-israel:before {\n    background-position: -36px -676px !important;\n  }\n  &-in:before,\n  &-india:before {\n    background-position: -36px -702px !important;\n  }\n  &-io:before,\n  &-indian-ocean-territory:before {\n    background-position: -36px -728px !important;\n  }\n  &-iq:before,\n  &-iraq:before {\n    background-position: -36px -754px !important;\n  }\n  &-ir:before,\n  &-iran:before {\n    background-position: -36px -780px !important;\n  }\n  &-is:before,\n  &-iceland:before {\n    background-position: -36px -806px !important;\n  }\n  &-it:before,\n  &-italy:before {\n    background-position: -36px -832px !important;\n  }\n  &-jm:before,\n  &-jamaica:before {\n    background-position: -36px -858px !important;\n  }\n  &-jo:before,\n  &-jordan:before {\n    background-position: -36px -884px !important;\n  }\n  &-jp:before,\n  &-japan:before {\n    background-position: -36px -910px !important;\n  }\n  &-ke:before,\n  &-kenya:before {\n    background-position: -36px -936px !important;\n  }\n  &-kg:before,\n  &-kyrgyzstan:before {\n    background-position: -36px -962px !important;\n  }\n  &-kh:before,\n  &-cambodia:before {\n    background-position: -36px -988px !important;\n  }\n  &-ki:before,\n  &-kiribati:before {\n    background-position: -36px -1014px !important;\n  }\n  &-km:before,\n  &-comoros:before {\n    background-position: -36px -1040px !important;\n  }\n  &-kn:before,\n  &-saint-kitts-and-nevis:before {\n    background-position: -36px -1066px !important;\n  }\n  &-kp:before,\n  &-north-korea:before {\n    background-position: -36px -1092px !important;\n  }\n  &-kr:before,\n  &-south-korea:before {\n    background-position: -36px -1118px !important;\n  }\n  &-kw:before,\n  &-kuwait:before {\n    background-position: -36px -1144px !important;\n  }\n  &-ky:before,\n  &-cayman-islands:before {\n    background-position: -36px -1170px !important;\n  }\n  &-kz:before,\n  &-kazakhstan:before {\n    background-position: -36px -1196px !important;\n  }\n  &-la:before,\n  &-laos:before {\n    background-position: -36px -1222px !important;\n  }\n  &-lb:before,\n  &-lebanon:before {\n    background-position: -36px -1248px !important;\n  }\n  &-lc:before,\n  &-saint-lucia:before {\n    background-position: -36px -1274px !important;\n  }\n  &-li:before,\n  &-liechtenstein:before {\n    background-position: -36px -1300px !important;\n  }\n  &-lk:before,\n  &-sri-lanka:before {\n    background-position: -36px -1326px !important;\n  }\n  &-lr:before,\n  &-liberia:before {\n    background-position: -36px -1352px !important;\n  }\n  &-ls:before,\n  &-lesotho:before {\n    background-position: -36px -1378px !important;\n  }\n  &-lt:before,\n  &-lithuania:before {\n    background-position: -36px -1404px !important;\n  }\n  &-lu:before,\n  &-luxembourg:before {\n    background-position: -36px -1430px !important;\n  }\n  &-lv:before,\n  &-latvia:before {\n    background-position: -36px -1456px !important;\n  }\n  &-ly:before,\n  &-libya:before {\n    background-position: -36px -1482px !important;\n  }\n  &-ma:before,\n  &-morocco:before {\n    background-position: -36px -1508px !important;\n  }\n  &-mc:before,\n  &-monaco:before {\n    background-position: -36px -1534px !important;\n  }\n  &-md:before,\n  &-moldova:before {\n    background-position: -36px -1560px !important;\n  }\n  &-me:before,\n  &-montenegro:before {\n    background-position: -36px -1586px !important;\n  }\n  &-mg:before,\n  &-madagascar:before {\n    background-position: -36px -1613px !important;\n  }\n  &-mh:before,\n  &-marshall-islands:before {\n    background-position: -36px -1639px !important;\n  }\n  &-mk:before,\n  &-macedonia:before {\n    background-position: -36px -1665px !important;\n  }\n  &-ml:before,\n  &-mali:before {\n    background-position: -36px -1691px !important;\n  }\n  &-mm:before,\n  &-myanmar:before,\n  &-burma:before {\n    background-position: -73px -1821px !important;\n  }\n  &-mn:before,\n  &-mongolia:before {\n    background-position: -36px -1743px !important;\n  }\n  &-mo:before,\n  &-macau:before {\n    background-position: -36px -1769px !important;\n  }\n  &-mp:before,\n  &-northern-mariana-islands:before {\n    background-position: -36px -1795px !important;\n  }\n  &-mq:before,\n  &-martinique:before {\n    background-position: -36px -1821px !important;\n  }\n  &-mr:before,\n  &-mauritania:before {\n    background-position: -36px -1847px !important;\n  }\n  &-ms:before,\n  &-montserrat:before {\n    background-position: -36px -1873px !important;\n  }\n  &-mt:before,\n  &-malta:before {\n    background-position: -36px -1899px !important;\n  }\n  &-mu:before,\n  &-mauritius:before {\n    background-position: -36px -1925px !important;\n  }\n  &-mv:before,\n  &-maldives:before {\n    background-position: -36px -1951px !important;\n  }\n  &-mw:before,\n  &-malawi:before {\n    background-position: -36px -1977px !important;\n  }\n  &-mx:before,\n  &-mexico:before {\n    background-position: -72px 0 !important;\n  }\n  &-my:before,\n  &-malaysia:before {\n    background-position: -72px -26px !important;\n  }\n  &-mz:before,\n  &-mozambique:before {\n    background-position: -72px -52px !important;\n  }\n  &-na:before,\n  &-namibia:before {\n    background-position: -72px -78px !important;\n  }\n  &-nc:before,\n  &-new-caledonia:before {\n    background-position: -72px -104px !important;\n  }\n  &-ne:before,\n  &-niger:before {\n    background-position: -72px -130px !important;\n  }\n  &-nf:before,\n  &-norfolk-island:before {\n    background-position: -72px -156px !important;\n  }\n  &-ng:before,\n  &-nigeria:before {\n    background-position: -72px -182px !important;\n  }\n  &-ni:before,\n  &-nicaragua:before {\n    background-position: -72px -208px !important;\n  }\n  &-nl:before,\n  &-netherlands:before {\n    background-position: -72px -234px !important;\n  }\n  &-no:before,\n  &-norway:before {\n    background-position: -72px -260px !important;\n  }\n  &-np:before,\n  &-nepal:before {\n    background-position: -72px -286px !important;\n  }\n  &-nr:before,\n  &-nauru:before {\n    background-position: -72px -312px !important;\n  }\n  &-nu:before,\n  &-niue:before {\n    background-position: -72px -338px !important;\n  }\n  &-nz:before,\n  &-new-zealand:before {\n    background-position: -72px -364px !important;\n  }\n  &-om:before,\n  &-oman:before {\n    background-position: -72px -390px !important;\n  }\n  &-pa:before,\n  &-panama:before {\n    background-position: -72px -416px !important;\n  }\n  &-pe:before,\n  &-peru:before {\n    background-position: -72px -442px !important;\n  }\n  &-pf:before,\n  &-french-polynesia:before {\n    background-position: -72px -468px !important;\n  }\n  &-pg:before,\n  &-new-guinea:before {\n    background-position: -72px -494px !important;\n  }\n  &-ph:before,\n  &-philippines:before {\n    background-position: -72px -520px !important;\n  }\n  &-pk:before,\n  &-pakistan:before {\n    background-position: -72px -546px !important;\n  }\n  &-pl:before,\n  &-poland:before {\n    background-position: -72px -572px !important;\n  }\n  &-pm:before,\n  &-saint-pierre:before {\n    background-position: -72px -598px !important;\n  }\n  &-pn:before,\n  &-pitcairn-islands:before {\n    background-position: -72px -624px !important;\n  }\n  &-pr:before,\n  &-puerto-rico:before {\n    background-position: -72px -650px !important;\n  }\n  &-ps:before,\n  &-palestine:before {\n    background-position: -72px -676px !important;\n  }\n  &-pt:before,\n  &-portugal:before {\n    background-position: -72px -702px !important;\n  }\n  &-pw:before,\n  &-palau:before {\n    background-position: -72px -728px !important;\n  }\n  &-py:before,\n  &-paraguay:before {\n    background-position: -72px -754px !important;\n  }\n  &-qa:before,\n  &-qatar:before {\n    background-position: -72px -780px !important;\n  }\n  &-re:before,\n  &-reunion:before {\n    background-position: -72px -806px !important;\n  }\n  &-ro:before,\n  &-romania:before {\n    background-position: -72px -832px !important;\n  }\n  &-rs:before,\n  &-serbia:before {\n    background-position: -72px -858px !important;\n  }\n  &-ru:before,\n  &-russia:before {\n    background-position: -72px -884px !important;\n  }\n  &-rw:before,\n  &-rwanda:before {\n    background-position: -72px -910px !important;\n  }\n  &-sa:before,\n  &-saudi-arabia:before {\n    background-position: -72px -936px !important;\n  }\n  &-sb:before,\n  &-solomon-islands:before {\n    background-position: -72px -962px !important;\n  }\n  &-sc:before,\n  &-seychelles:before {\n    background-position: -72px -988px !important;\n  }\n  &-gb-sct:before,\n  &-scotland:before {\n    background-position: -72px -1014px !important;\n  }\n  &-sd:before,\n  &-sudan:before {\n    background-position: -72px -1040px !important;\n  }\n  &-se:before,\n  &-sweden:before {\n    background-position: -72px -1066px !important;\n  }\n  &-sg:before,\n  &-singapore:before {\n    background-position: -72px -1092px !important;\n  }\n  &-sh:before,\n  &-saint-helena:before {\n    background-position: -72px -1118px !important;\n  }\n  &-si:before,\n  &-slovenia:before {\n    background-position: -72px -1144px !important;\n  }\n  &-sj:before,\n  &-svalbard:before,\n  &-jan-mayen:before {\n    background-position: -72px -1170px !important;\n  }\n  &-sk:before,\n  &-slovakia:before {\n    background-position: -72px -1196px !important;\n  }\n  &-sl:before,\n  &-sierra-leone:before {\n    background-position: -72px -1222px !important;\n  }\n  &-sm:before,\n  &-san-marino:before {\n    background-position: -72px -1248px !important;\n  }\n  &-sn:before,\n  &-senegal:before {\n    background-position: -72px -1274px !important;\n  }\n  &-so:before,\n  &-somalia:before {\n    background-position: -72px -1300px !important;\n  }\n  &-sr:before,\n  &-suriname:before {\n    background-position: -72px -1326px !important;\n  }\n  &-st:before,\n  &-sao-tome:before {\n    background-position: -72px -1352px !important;\n  }\n  &-sv:before,\n  &-el-salvador:before {\n    background-position: -72px -1378px !important;\n  }\n  &-sy:before,\n  &-syria:before {\n    background-position: -72px -1404px !important;\n  }\n  &-sz:before,\n  &-swaziland:before {\n    background-position: -72px -1430px !important;\n  }\n  &-tc:before,\n  &-caicos-islands:before {\n    background-position: -72px -1456px !important;\n  }\n  &-td:before,\n  &-chad:before {\n    background-position: -72px -1482px !important;\n  }\n  &-tf:before,\n  &-french-territories:before {\n    background-position: -72px -1508px !important;\n  }\n  &-tg:before,\n  &-togo:before {\n    background-position: -72px -1534px !important;\n  }\n  &-th:before,\n  &-thailand:before {\n    background-position: -72px -1560px !important;\n  }\n  &-tj:before,\n  &-tajikistan:before {\n    background-position: -72px -1586px !important;\n  }\n  &-tk:before,\n  &-tokelau:before {\n    background-position: -72px -1612px !important;\n  }\n  &-tl:before,\n  &-timorleste:before {\n    background-position: -72px -1638px !important;\n  }\n  &-tm:before,\n  &-turkmenistan:before {\n    background-position: -72px -1664px !important;\n  }\n  &-tn:before,\n  &-tunisia:before {\n    background-position: -72px -1690px !important;\n  }\n  &-to:before,\n  &-tonga:before {\n    background-position: -72px -1716px !important;\n  }\n  &-tr:before,\n  &-turkey:before {\n    background-position: -72px -1742px !important;\n  }\n  &-tt:before,\n  &-trinidad:before {\n    background-position: -72px -1768px !important;\n  }\n  &-tv:before,\n  &-tuvalu:before {\n    background-position: -72px -1794px !important;\n  }\n  &-tw:before,\n  &-taiwan:before {\n    background-position: -72px -1820px !important;\n  }\n  &-tz:before,\n  &-tanzania:before {\n    background-position: -72px -1846px !important;\n  }\n  &-ua:before,\n  &-ukraine:before {\n    background-position: -72px -1872px !important;\n  }\n  &-ug:before,\n  &-uganda:before {\n    background-position: -72px -1898px !important;\n  }\n  &-um:before,\n  &-us-minor-islands:before {\n    background-position: -72px -1924px !important;\n  }\n  &-us:before,\n  &-america:before,\n  &-united-states:before {\n    background-position: -72px -1950px !important;\n  }\n  &-uy:before,\n  &-uruguay:before {\n    background-position: -72px -1976px !important;\n  }\n  &-uz:before,\n  &-uzbekistan:before {\n    background-position: -108px 0 !important;\n  }\n  &-va:before,\n  &-vatican-city:before {\n    background-position: -108px -26px !important;\n  }\n  &-vc:before,\n  &-saint-vincent:before {\n    background-position: -108px -52px !important;\n  }\n  &-ve:before,\n  &-venezuela:before {\n    background-position: -108px -78px !important;\n  }\n  &-vg:before,\n  &-british-virgin-islands:before {\n    background-position: -108px -104px !important;\n  }\n  &-vi:before,\n  &-us-virgin-islands:before {\n    background-position: -108px -130px !important;\n  }\n  &-vn:before,\n  &-vietnam:before {\n    background-position: -108px -156px !important;\n  }\n  &-vu:before,\n  &-vanuatu:before {\n    background-position: -108px -182px !important;\n  }\n  &-gb-wls:before,\n  &-wales:before {\n    background-position: -108px -208px !important;\n  }\n  &-wf:before,\n  &-wallis-and-futuna:before {\n    background-position: -108px -234px !important;\n  }\n  &-ws:before,\n  &-samoa:before {\n    background-position: -108px -260px !important;\n  }\n  &-ye:before,\n  &-yemen:before {\n    background-position: -108px -286px !important;\n  }\n  &-yt:before,\n  &-mayotte:before {\n    background-position: -108px -312px !important;\n  }\n  &-za:before,\n  &-south-africa:before {\n    background-position: -108px -338px !important;\n  }\n  &-zm:before,\n  &-zambia:before {\n    background-position: -108px -364px !important;\n  }\n  &-zw:before,\n  &-zimbabwe:before {\n    background-position: -108px -390px !important;\n  }\n}\n/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "src/scss/free/_functions.scss",
    "content": "// Functions\n\n// Dynamically change text color based on background color\n\n@function set-notification-text-color($color) {\n  @if (lightness($color) > 70) {\n    @return $gray-800;\n  } @else {\n    @return $white;\n  }\n}\n\n@function color-level($color: $primary, $level: 0) {\n  $color-base: if($level > 0, $black, $white);\n  $level: abs($level);\n\n  @return mix($color-base, $color, $level);\n}\n"
  },
  {
    "path": "src/scss/free/_images.scss",
    "content": "//\n// Image styles\n//\n\n.bg-fixed {\n  background-attachment: fixed;\n}\n\n.bg-image {\n  position: relative;\n  overflow: hidden;\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center center;\n}\n\n.mask {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  background-attachment: fixed;\n}\n\n.hover-overlay {\n  .mask {\n    --#{$prefix}image-hover-transition: #{$image-hover-overlay-transition};\n\n    opacity: 0;\n    transition: var(--#{$prefix}image-hover-transition);\n    &:hover {\n      opacity: 1;\n    }\n  }\n}\n\n.hover-zoom {\n  --#{$prefix}image-hover-zoom-transition: #{$image-hover-zoom-transition};\n  --#{$prefix}image-hover-zoom-transform: #{$image-hover-zoom-transform};\n\n  img,\n  video {\n    transition: var(--#{$prefix}image-hover-zoom-transition);\n  }\n  &:hover {\n    img,\n    video {\n      transform: var(--#{$prefix}image-hover-zoom-transform);\n    }\n  }\n}\n\n.hover-shadow,\n.card.hover-shadow,\n.hover-shadow-soft,\n.card.hover-shadow-soft {\n  --#{$prefix}image-hover-shadow-transition: #{$image-hover-shadow-transition};\n\n  transition: var(--#{$prefix}image-hover-shadow-transition);\n  &:hover {\n    transition: var(--#{$prefix}image-hover-shadow-transition);\n  }\n}\n\n.hover-shadow,\n.card.hover-shadow {\n  --#{$prefix}image-hover-shadow-box-shadow: #{$image-hover-shadow-box-shadow};\n\n  box-shadow: none;\n  &:hover {\n    box-shadow: var(--#{$prefix}image-hover-shadow-box-shadow);\n  }\n}\n\n.hover-shadow-soft,\n.card.hover-shadow-soft {\n  --#{$prefix}image-hover-shadow-box-shadow-soft: #{$image-hover-shadow-box-shadow-soft};\n\n  box-shadow: none;\n  &:hover {\n    box-shadow: var(--#{$prefix}image-hover-shadow-box-shadow-soft);\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_list-group.scss",
    "content": "//\n// List group styles\n//\n\n.list-group {\n  --#{$prefix}list-group-item-transition-time: #{$list-group-item-transition-time};\n}\n\n.list-group-item {\n  --#{$prefix}list-group-item-active-margin-top: #{$list-group-active-margin-top};\n\n  & + .list-group-item {\n    &.active {\n      margin-top: var(--#{$prefix}list-group-item-active-margin-top);\n    }\n  }\n}\n\n.list-group-item-action {\n  transition: var(--#{$prefix}list-group-item-transition-time);\n\n  // Hover state\n  &:hover {\n    transition: var(--#{$prefix}list-group-item-transition-time);\n  }\n}\n\n.list-group-light {\n  --#{$prefix}list-group-light-item-py: #{$list-group-light-item-py};\n  --#{$prefix}list-group-light-item-border: #{$list-group-light-item-border};\n  --#{$prefix}list-group-light-item-border-width: #{$list-group-light-item-border-width};\n  --#{$prefix}list-group-light-active-border-radius: #{$list-group-light-active-border-radius};\n  --#{$prefix}list-group-light-active-bg: #{$list-group-light-active-bg};\n  --#{$prefix}list-group-light-active-color: #{$list-group-light-active-color};\n\n  .list-group-item {\n    padding: var(--#{$prefix}list-group-light-item-py) 0;\n    border: var(--#{$prefix}list-group-light-item-border);\n  }\n  > .list-group-item {\n    border-width: 0 0 var(--#{$prefix}list-group-light-item-border-width);\n    &:last-of-type {\n      border: none;\n    }\n  }\n  .active {\n    border: none;\n    border-radius: var(--#{$prefix}list-group-light-active-border-radius);\n    background-color: var(--#{$prefix}list-group-light-active-bg);\n    color: var(--#{$prefix}list-group-light-active-color);\n  }\n  .list-group-item-action {\n    &:hover {\n      border-radius: var(--#{$prefix}list-group-light-active-border-radius);\n    }\n    &:focus {\n      border-radius: var(--#{$prefix}list-group-light-active-border-radius);\n    }\n  }\n}\n\n.list-group-small {\n  --#{$prefix}list-group-small-item-py: #{$list-group-small-item-py};\n  .list-group-item {\n    padding: var(--#{$prefix}list-group-small-item-py) 0;\n  }\n}\n\n@each $color, $value in $theme-colors {\n  .list-group-item-#{$color} {\n    background-color: var(--#{$prefix}#{$color}-bg-subtle);\n    color: var(--#{$prefix}#{$color}-text-emphasis);\n\n    i {\n      color: var(--#{$prefix}#{$color}-link-emphasis);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_mixins.scss",
    "content": "// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Components\n@import './mixins/buttons';\n@import './mixins/ripple';\n@import './mixins/table-variants';\n"
  },
  {
    "path": "src/scss/free/_modal.scss",
    "content": "//\n// Modal styles\n//\n\n.modal-content {\n  // scss-docs-start modal-css-vars\n  --#{$prefix}modal-box-shadow: #{$modal-box-shadow};\n  // scss-docs-end modal-css-vars\n\n  border: 0;\n  box-shadow: var(--#{$prefix}modal-box-shadow);\n}\n"
  },
  {
    "path": "src/scss/free/_nav.scss",
    "content": "//\n// Navs styles\n//\n\n//\n// Tabs styles\n//\n\n.nav-tabs {\n  border-bottom: 0;\n\n  .nav-link {\n    --#{$prefix}nav-tabs-link-font-weight: #{$nav-tabs-link-font-weight};\n    --#{$prefix}nav-tabs-link-font-size: #{$nav-tabs-link-font-size};\n    --#{$prefix}nav-tabs-link-color: #{$nav-tabs-link-color};\n    --#{$prefix}nav-tabs-link-padding-top: #{$nav-tabs-link-padding-top};\n    --#{$prefix}nav-tabs-link-padding-bottom: #{$nav-tabs-link-padding-bottom};\n    --#{$prefix}nav-tabs-link-padding-x: #{$nav-tabs-link-padding-x};\n    --#{$prefix}nav-tabs-link-hover-bgc: #{$nav-tabs-link-hover-bgc};\n    --#{$prefix}nav-tabs-link-border-bottom-width: #{$nav-tabs-link-border-bottom-width};\n    --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n    --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n    border-width: 0;\n    border-bottom: var(--#{$prefix}nav-tabs-link-border-bottom-width) solid transparent;\n    border-radius: 0;\n    text-transform: uppercase;\n    line-height: 1;\n    font-weight: var(--#{$prefix}nav-tabs-link-font-weight);\n    font-size: var(--#{$prefix}nav-tabs-link-font-size);\n    color: var(--#{$prefix}nav-tabs-link-color);\n    padding: var(--#{$prefix}nav-tabs-link-padding-top) var(--#{$prefix}nav-tabs-link-padding-x)\n      var(--#{$prefix}nav-tabs-link-padding-bottom) var(--#{$prefix}nav-tabs-link-padding-x);\n\n    &:hover {\n      background-color: var(--#{$prefix}nav-tabs-link-hover-bgc);\n      border-color: transparent;\n    }\n\n    &:focus {\n      border-color: transparent;\n    }\n  }\n\n  .nav-link.active,\n  .nav-item.show .nav-link {\n    color: var(--#{$prefix}nav-tabs-link-active-color);\n    border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n  }\n}\n\n//\n// Pills styles\n//\n\n.nav-pills {\n  margin-left: -$nav-pills-margin;\n  margin-right: -$nav-pills-margin;\n\n  .nav-link {\n    --#{$prefix}nav-pills-link-border-radius: #{$nav-pills-link-border-radius};\n    --#{$prefix}nav-pills-link-font-size: #{$nav-pills-link-font-size};\n    --#{$prefix}nav-pills-link-padding-top: #{$nav-pills-link-padding-top};\n    --#{$prefix}nav-pills-link-padding-bottom: #{$nav-pills-link-padding-bottom};\n    --#{$prefix}nav-pills-link-padding-x: #{$nav-pills-link-padding-x};\n    --#{$prefix}nav-pills-link-line-height: #{$nav-pills-link-line-height};\n    --#{$prefix}nav-pills-link-hover-bg: #{$nav-pills-link-hover-bg};\n    --#{$prefix}nav-pills-link-font-weight: #{$nav-pills-link-font-weight};\n    --#{$prefix}nav-pills-link-color: #{$nav-pills-link-color};\n    --#{$prefix}nav-pills-margin: #{$nav-pills-margin};\n\n    border-radius: var(--#{$prefix}nav-pills-link-border-radius);\n    font-size: var(--#{$prefix}nav-pills-link-font-size);\n    text-transform: uppercase;\n    padding: var(--#{$prefix}nav-pills-link-padding-top) var(--#{$prefix}nav-pills-link-padding-x)\n      var(--#{$prefix}nav-pills-link-padding-bottom) var(--#{$prefix}nav-pills-link-padding-x);\n    line-height: var(--#{$prefix}nav-pills-link-line-height);\n    background-color: var(--#{$prefix}nav-pills-link-hover-bg);\n    font-weight: var(--#{$prefix}nav-pills-link-font-weight);\n    color: var(--#{$prefix}nav-pills-link-color);\n    margin: var(--#{$prefix}nav-pills-margin);\n  }\n\n  .nav-link.active,\n  .show > .nav-link {\n    --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n    --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n\n    background-color: var(--#{$prefix}nav-pills-link-active-bg);\n    color: var(--#{$prefix}nav-pills-link-active-color);\n  }\n}\n\n// Fix for keeping margins of pills\n.nav-fill,\n.nav-justified {\n  .nav-item {\n    .nav-link {\n      width: auto;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_navbar.scss",
    "content": "//\n// Navbar styles\n//\n\n.navbar {\n  --#{$prefix}navbar-box-shadow: #{$navbar-box-shadow};\n  --#{$prefix}navbar-padding-top: #{$navbar-padding-top};\n  --#{$prefix}navbar-brand-img-margin-right: #{$navbar-brand-img-margin-right};\n\n  box-shadow: var(--#{$prefix}navbar-box-shadow);\n  padding-top: var(--#{$prefix}navbar-padding-top);\n}\n\n.navbar-toggler {\n  border: 0;\n\n  &:focus {\n    box-shadow: none;\n  }\n}\n\n.navbar-dark .navbar-toggler,\n.navbar-light .navbar-toggler {\n  border: 0;\n}\n\n.navbar-brand {\n  display: flex;\n  align-items: center;\n  img {\n    margin-right: var(--#{$prefix}navbar-brand-img-margin-right);\n  }\n}\n\n.navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n// Navbar themes\n.navbar-light {\n  .navbar-toggler-icon {\n    background-image: none;\n  }\n}\n\n.navbar-dark {\n  .navbar-toggler-icon {\n    background-image: none;\n  }\n}\n\n.navbar-dark,\n.navbar[data-mdb-theme='dark'] {\n  // scss-docs-start navbar-dark-css-vars\n  --#{$prefix}navbar-color: #{$navbar-dark-color};\n  --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n  --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n  --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n  --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n  --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n  --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n  --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n  // scss-docs-end navbar-dark-css-vars\n}\n"
  },
  {
    "path": "src/scss/free/_pagination.scss",
    "content": "//\n// Pagination styles\n//\n\n.pagination {\n  // scss-docs-start pagination-css-vars\n  --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n  --#{$prefix}pagination-active-transition: #{$pagination-active-transition};\n  --#{$prefix}pagination-active-font-weight: #{$pagination-active-font-weight};\n  --#{$prefix}pagination-circle-border-radius: #{$pagination-circle-border-radius};\n  --#{$prefix}pagination-circle-padding-x: #{$pagination-circle-padding-x};\n  --#{$prefix}pagination-circle-padding-l-lg: #{$pagination-circle-lg-padding-left};\n  --#{$prefix}pagination-circle-padding-r-lg: #{$pagination-circle-lg-padding-right};\n  --#{$prefix}pagination-circle-padding-l-sm: #{$pagination-circle-sm-padding-left};\n  --#{$prefix}pagination-circle-padding-r-sm: #{$pagination-circle-sm-padding-right};\n  // scss-docs-end pagination-css-vars\n}\n\n.page-link {\n  background-color: transparent;\n  border: 0;\n  outline: 0;\n  border-radius: var(--#{$prefix}pagination-border-radius);\n\n  &:focus {\n    box-shadow: none;\n  }\n\n  &.active,\n  .active > & {\n    border: 0;\n    transition: var(--#{$prefix}pagination-active-transition);\n    font-weight: var(--#{$prefix}pagination-active-font-weight);\n  }\n}\n\n.page-item {\n  &:not(:first-child) {\n    .page-link {\n      margin-left: 0;\n    }\n  }\n\n  &:first-child {\n    .page-link {\n      border-top-left-radius: var(--#{$prefix}pagination-border-radius);\n      border-bottom-left-radius: var(--#{$prefix}pagination-border-radius);\n    }\n  }\n\n  &:last-child {\n    .page-link {\n      border-top-right-radius: var(--#{$prefix}pagination-border-radius);\n      border-bottom-right-radius: var(--#{$prefix}pagination-border-radius);\n    }\n  }\n}\n\n//\n// Pagination circle option\n//\n\n.pagination-circle {\n  .page-item {\n    &:first-child {\n      .page-link {\n        border-radius: var(--#{$prefix}pagination-circle-border-radius);\n      }\n    }\n\n    &:last-child {\n      .page-link {\n        border-radius: var(--#{$prefix}pagination-circle-border-radius);\n      }\n    }\n  }\n\n  .page-link {\n    border-radius: var(--#{$prefix}pagination-circle-border-radius);\n    padding-left: var(--#{$prefix}pagination-circle-padding-x);\n    padding-right: var(--#{$prefix}pagination-circle-padding-x);\n  }\n\n  &.pagination-lg {\n    .page-link {\n      padding-left: var(--#{$prefix}pagination-circle-padding-l-lg);\n      padding-right: var(--#{$prefix}pagination-circle-padding-r-lg);\n    }\n  }\n\n  &.pagination-sm {\n    .page-link {\n      padding-left: var(--#{$prefix}pagination-circle-padding-l-sm);\n      padding-right: var(--#{$prefix}pagination-circle-padding-r-sm);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_popover.scss",
    "content": "//\n// Popover styles\n//\n\n.popover {\n  // scss-docs-start popover-css-vars\n  --#{$prefix}popover-border-bottom-width: #{$popover-border-bottom-width};\n  // scss-docs-end popover-css-vars\n\n  .popover-arrow {\n    display: none;\n  }\n}\n\n.popover-header {\n  border-bottom: var(--#{$prefix}popover-border-bottom-width) solid\n    var(--#{$prefix}popover-border-color);\n}\n"
  },
  {
    "path": "src/scss/free/_progress.scss",
    "content": "// Progress\n\n.progress {\n  border-radius: 0;\n  box-shadow: none;\n}\n\n.progress-circular {\n  --#{$prefix}progress-circular-size: #{$progress-circular-size};\n  --#{$prefix}progress-circular-bar-width: #{$progress-circular-bar-width};\n  --#{$prefix}progress-circular-color: var(--#{$prefix}emphasis-color);\n\n  position: relative;\n  width: var(--#{$prefix}progress-circular-size);\n  height: var(--#{$prefix}progress-circular-size);\n  background-color: transparent;\n  display: inline-block;\n\n  .progress-bar {\n    background-color: var(--#{$prefix}progress-bar-bg);\n  }\n\n  .progress-bar::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%;\n    box-sizing: border-box;\n\n    background: conic-gradient(\n      transparent calc(var(--percentage) * 1%),\n      var(--#{$prefix}progress-bg) 0%\n    );\n    -webkit-mask: radial-gradient(\n      farthest-side,\n      transparent calc(100% - var(--#{$prefix}progress-circular-bar-width)),\n      black calc(100% - var(--#{$prefix}progress-circular-bar-width) + 1px)\n    );\n    mask: radial-gradient(\n      farthest-side,\n      transparent calc(100% - var(--#{$prefix}progress-circular-bar-width)),\n      black calc(100% - var(--#{$prefix}progress-circular-bar-width) + 1px)\n    );\n    background-color: inherit;\n  }\n\n  .progress-label {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    color: var(--#{$prefix}progress-circular-color);\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_range.scss",
    "content": "// range\n.range {\n  --#{$prefix}range-thumb-height: #{$range-thumb-height};\n  --#{$prefix}range-thumb-width: #{$range-thumb-width};\n  --#{$prefix}range-thumb-top: #{$range-thumb-top};\n  --#{$prefix}range-thumb-margin-left: #{$range-thumb-margin-left};\n  --#{$prefix}range-thumb-border-radius: #{$range-thumb-border-radius};\n  --#{$prefix}range-thumb-transform: #{$range-thumb-transform};\n  --#{$prefix}range-thumb-transition: #{$range-thumb-transition};\n  --#{$prefix}range-thumb-value-font-size: #{$range-thumb-value-font-size};\n  --#{$prefix}range-thumb-value-line-height: #{$range-thumb-value-line-height};\n  --#{$prefix}range-thumb-value-color: #{$range-thumb-value-color};\n  --#{$prefix}range-thumb-value-font-weight: #{$range-thumb-value-font-weight};\n  --#{$prefix}range-thumb-background: #{$range-thumb-background};\n\n  position: relative;\n\n  .thumb {\n    position: absolute;\n    display: block;\n    height: var(--#{$prefix}range-thumb-height);\n    width: var(--#{$prefix}range-thumb-width);\n    top: var(--#{$prefix}range-thumb-top);\n    margin-left: var(--#{$prefix}range-thumb-margin-left);\n    text-align: center;\n    border-radius: var(--#{$prefix}range-thumb-border-radius);\n    transform: var(--#{$prefix}range-thumb-transform);\n    transform-origin: bottom;\n    transition: var(--#{$prefix}range-thumb-transition);\n\n    &:after {\n      position: absolute;\n      display: block;\n      content: '';\n      transform: translateX(-50%);\n      width: 100%;\n      height: 100%;\n      top: 0;\n      border-radius: var(--#{$prefix}range-thumb-border-radius);\n      transform: rotate(-45deg);\n      background: var(--#{$prefix}range-thumb-background);\n      z-index: -1;\n    }\n\n    .thumb-value {\n      display: block;\n      font-size: var(--#{$prefix}range-thumb-value-font-size);\n      line-height: var(--#{$prefix}range-thumb-value-line-height);\n      color: var(--#{$prefix}range-thumb-value-color);\n      font-weight: var(--#{$prefix}range-thumb-value-font-weight);\n      z-index: 2;\n    }\n\n    &.thumb-active {\n      transform: scale(1);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_reboot.scss",
    "content": "// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n\n// Dividers\n\nhr:not([size]) {\n  &.hr {\n    --#{$prefix}divider-height: #{$divider-height};\n    --#{$prefix}divider-bg: #{$divider-bg};\n    --#{$prefix}divider-opacity: #{$divider-opacity};\n    --#{$prefix}divider-blurry-bg: transparent;\n    --#{$prefix}divider-blurry-bg-image: #{$divider-blurry-bg-image};\n    --#{$prefix}divider-blurry-height: #{$divider-blurry-height};\n    --#{$prefix}divider-blurry-opacity: #{$divider-blurry-opacity};\n\n    height: var(--#{$prefix}divider-height);\n    background-color: var(--#{$prefix}divider-bg);\n    opacity: var(--#{$prefix}divider-opacity);\n\n    &.hr-blurry {\n      background-color: var(--#{$prefix}divider-blurry-bg);\n      background-image: var(--#{$prefix}divider-blurry-bg-image);\n      height: var(--#{$prefix}divider-blurry-height);\n      opacity: var(--#{$prefix}divider-blurry-opacity);\n    }\n  }\n\n  &.vr {\n    height: auto;\n  }\n}\n\nhr.hr,\nhr.vr {\n  border-top: none !important;\n}\n\n.vr {\n  --#{$prefix}divider-width: #{$divider-width};\n  --#{$prefix}divider-bg: #{$divider-bg};\n  --#{$prefix}divider-opacity: #{$divider-opacity};\n\n  width: var(--#{$prefix}divider-width);\n  background-color: var(--#{$prefix}divider-bg);\n  opacity: var(--#{$prefix}divider-opacity);\n}\n\n.vr-blurry {\n  --#{$prefix}divider-blurry-vr-bg-image: #{$divider-blurry-vr-bg-image};\n  --#{$prefix}divider-blurry-vr-width: #{$divider-blurry-vr-width};\n  --#{$prefix}divider-blurry-opacity: #{$divider-blurry-opacity};\n\n  background-image: var(--#{$prefix}divider-blurry-vr-bg-image);\n  width: var(--#{$prefix}divider-blurry-vr-width);\n  opacity: var(--#{$prefix}divider-blurry-opacity);\n}\n\n// Links\n\na {\n  --#{$prefix}link-decoration: #{$link-decoration};\n\n  text-decoration: var(--#{$prefix}link-decoration);\n}\n"
  },
  {
    "path": "src/scss/free/_ripple.scss",
    "content": ".ripple-surface {\n  position: relative;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n.ripple-surface-unbound {\n  overflow: visible;\n}\n\n.ripple-wave {\n  --#{$prefix}ripple-wave-cubicBezier: #{$ripple-wave-cubicBezier};\n  --#{$prefix}ripple-wave-border-radius: #{$ripple-wave-border-radius};\n  --#{$prefix}ripple-wave-opacity: #{$ripple-wave-opacity};\n  --#{$prefix}ripple-wave-transform: #{$ripple-wave-transform};\n  --#{$prefix}ripple-wave-z-index: #{$ripple-wave-z-index};\n  --#{$prefix}ripple-wave-active-transform: #{$ripple-wave-active-transform};\n\n  @include ripple-variant(black);\n  border-radius: var(--#{$prefix}ripple-wave-border-radius);\n  opacity: var(--#{$prefix}ripple-wave-opacity);\n  pointer-events: none;\n  position: absolute;\n  touch-action: none;\n  transform: var(--#{$prefix}ripple-wave-transform);\n  transition-property: transform, opacity;\n  transition-timing-function: var(--#{$prefix}ripple-wave-cubicBezier),\n    var(--#{$prefix}ripple-wave-cubicBezier);\n  z-index: var(--#{$prefix}ripple-wave-z-index);\n  &.active {\n    transform: var(--#{$prefix}ripple-wave-active-transform);\n    opacity: 0;\n  }\n}\n\n.btn .ripple-wave {\n  @include ripple-variant(white);\n}\n\n.input-wrapper .ripple-wave {\n  @include ripple-variant(white);\n}\n\n@each $color, $value in $ripple {\n  .ripple-surface-#{$color} {\n    .ripple-wave {\n      @include ripple-variant($value);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_root.scss",
    "content": "//\n// Root and body\n//\n\n:root,\n[data-mdb-theme='light'] {\n  --mdb-font-roboto: #{inspect($font-family-roboto)};\n  --mdb-bg-opacity: 1;\n  --mdb-text-hover-opacity: 0.8;\n\n  --#{$prefix}surface-color: #{$surface-color};\n  --#{$prefix}surface-color-rgb: #{to-rgb($surface-color)};\n  --#{$prefix}surface-bg: #{$surface-bg};\n  --#{$prefix}surface-inverted-color: #{$surface-inverted-color};\n  --#{$prefix}surface-inverted-color-rgb: #{to-rgb($surface-inverted-color)};\n  --#{$prefix}surface-inverted-bg: #{$surface-inverted-bg};\n  --#{$prefix}divider-color: #{$divider-color};\n  --#{$prefix}divider-blurry-color: #{$divider-blurry-color};\n  --#{$prefix}highlight-bg-color: #{$highlight-bg-color};\n  --#{$prefix}scrollbar-rail-bg: #{$scrollbar-rail-bg};\n  --#{$prefix}scrollbar-thumb-bg: #{$scrollbar-thumb-bg};\n  --#{$prefix}picker-header-bg: #{$picker-header-bg};\n  --#{$prefix}timepicker-clock-face-bg: #{$timepicker-clock-face-bg};\n  --#{$prefix}sidenav-backdrop-opacity: #{$sidenav-backdrop-opacity};\n  --#{$prefix}input-focus-border-color: var(--#{$prefix}primary);\n  --#{$prefix}input-focus-label-color: var(--#{$prefix}primary);\n  --#{$prefix}form-control-border-color: #{$form-control-border-color};\n  --#{$prefix}form-control-label-color: #{$form-control-label-color};\n  --#{$prefix}form-control-disabled-bg: #{$form-control-disabled-bg};\n  --#{$prefix}box-shadow-color: #{$box-shadow-color};\n  --#{$prefix}box-shadow-color-rgb: #{to-rgb($box-shadow-color)};\n  --#{$prefix}stepper-mobile-bg: #{$stepper-mobile-bg};\n  --#{$prefix}datepicker-cell-in-range-background-color: #{$datepicker-cell-in-range-background-color};\n}\n\n@if $enable-dark-mode {\n  @include color-mode(dark, true) {\n    color-scheme: dark;\n\n    // scss-docs-start root-dark-mode-vars\n    --#{$prefix}surface-color: #{$surface-color-dark};\n    --#{$prefix}surface-color-rgb: #{to-rgb($surface-color-dark)};\n    --#{$prefix}surface-bg: #{$surface-bg-dark};\n    --#{$prefix}surface-inverted-color: #{$surface-inverted-color-dark};\n    --#{$prefix}surface-inverted-color-rgb: #{to-rgb($surface-inverted-color-dark)};\n    --#{$prefix}surface-inverted-bg: #{$surface-inverted-bg-dark};\n    --#{$prefix}divider-color: #{$divider-color-dark};\n    --#{$prefix}divider-blurry-color: #{$divider-blurry-color-dark};\n    --#{$prefix}highlight-bg-color: #{$highlight-bg-color-dark};\n    --#{$prefix}scrollbar-rail-bg: #{$scrollbar-rail-bg-dark};\n    --#{$prefix}scrollbar-thumb-bg: #{$scrollbar-thumb-bg-dark};\n    --#{$prefix}picker-header-bg: #{$picker-header-bg-dark};\n    --#{$prefix}timepicker-clock-face-bg: #{$timepicker-clock-face-bg-dark};\n    --#{$prefix}sidenav-backdrop-opacity: #{$sidenav-backdrop-opacity-dark};\n    --#{$prefix}form-control-border-color: #{$form-control-border-color-dark};\n    --#{$prefix}form-control-label-color: #{$form-control-label-color-dark};\n    --#{$prefix}form-control-disabled-bg: #{$form-control-disabled-bg-dark};\n    --#{$prefix}box-shadow-color: #{$box-shadow-color-dark};\n    --#{$prefix}box-shadow-color-rgb: #{to-rgb($box-shadow-color-dark)};\n    --#{$prefix}stepper-mobile-bg: #{$stepper-mobile-bg-dark};\n    --#{$prefix}datepicker-cell-in-range-background-color: #{$datepicker-cell-in-range-bg-dark};\n    // scss-docs-end root-dark-mode-vars\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_scrollspy.scss",
    "content": "// Scrollspy\n\n.nav-pills {\n  &.menu-sidebar {\n    .nav-link {\n      --#{$prefix}scrollspy-menu-sidebar-font-size: #{$scrollspy-menu-sidebar-font-size};\n      --#{$prefix}scrollspy-menu-sidebar-color: #{$scrollspy-menu-sidebar-color};\n      --#{$prefix}scrollspy-menu-sidebar-line-height: #{$scrollspy-menu-sidebar-line-height};\n      --#{$prefix}scrollspy-menu-sidebar-padding-x: #{$scrollspy-menu-sidebar-padding-x};\n      --#{$prefix}scrollspy-menu-sidebar-font-weight: #{$scrollspy-menu-sidebar-font-weight};\n      --#{$prefix}scrollspy-menu-sidebar-transition: #{$scrollspy-menu-sidebar-transition};\n      --#{$prefix}scrollspy-menu-sidebar-margin-y: #{$scrollspy-menu-sidebar-margin-y};\n\n      font-size: var(--#{$prefix}scrollspy-menu-sidebar-font-size);\n      background-color: transparent;\n      color: var(--#{$prefix}scrollspy-menu-sidebar-color);\n      line-height: var(--#{$prefix}scrollspy-menu-sidebar-line-height);\n      padding: 0 var(--#{$prefix}scrollspy-menu-sidebar-padding-x);\n      font-weight: var(--#{$prefix}scrollspy-menu-sidebar-font-weight);\n      transition: var(--#{$prefix}scrollspy-menu-sidebar-transition);\n      text-transform: initial;\n      margin-top: var(--#{$prefix}scrollspy-menu-sidebar-margin-y);\n      margin-bottom: var(--#{$prefix}scrollspy-menu-sidebar-margin-y);\n    }\n\n    .nav-link.active,\n    .show > .nav-link {\n      --#{$prefix}scrollspy-menu-sidebar-active-color: #{$scrollspy-menu-sidebar-active-color};\n      --#{$prefix}scrollspy-menu-sidebar-active-font-weight: #{$scrollspy-menu-sidebar-active-font-weight};\n      --#{$prefix}scrollspy-menu-sidebar-active-border-width: #{$scrollspy-menu-sidebar-active-border-width};\n      --#{$prefix}scrollspy-menu-sidebar-active-border-color: #{$scrollspy-menu-sidebar-active-border-color};\n\n      background-color: transparent;\n      box-shadow: none;\n      color: var(--#{$prefix}scrollspy-menu-sidebar-active-color);\n      font-weight: var(--#{$prefix}scrollspy-menu-sidebar-active-font-weight);\n      border-left: var(--#{$prefix}scrollspy-menu-sidebar-active-border-width) solid\n        var(--#{$prefix}scrollspy-menu-sidebar-active-border-color);\n      border-radius: 0;\n    }\n\n    .collapsible-scrollspy ~ .nav {\n      --#{$prefix}scrollspy-collapsible-nav-transition-time: #{$scrollspy-collapsible-nav-transition-time};\n\n      transition: height var(--#{$prefix}scrollspy-collapsible-nav-transition-time) ease;\n      flex-wrap: nowrap;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_shadows.scss",
    "content": "// Shadows\n"
  },
  {
    "path": "src/scss/free/_tables.scss",
    "content": "//\n// Basic MDB table\n//\n\n.table {\n  --#{$prefix}table-font-size: #{$table-font-size};\n  --#{$prefix}table-divider-color: #{$table-divider-color};\n\n  font-size: var(--#{$prefix}table-font-size);\n\n  th {\n    font-weight: $font-weight-medium;\n  }\n\n  tbody {\n    font-weight: $font-weight-normal;\n  }\n\n  > :not(:last-child) > :last-child > * {\n    border-bottom-color: $table-group-separator-color;\n  }\n}\n\n@each $color, $value in $table-variants {\n  @include table-variant($color, $value);\n}\n\n.table-hover {\n  > tbody > tr {\n    transition: $table-hover-transition;\n  }\n  > tbody > tr:hover {\n    --#{$prefix}table-accent-bg: transparent;\n    background-color: var(--#{$prefix}table-hover-bg);\n  }\n}\n\n.table-group-divider {\n  border-top: calc(2 * $table-border-width) solid;\n  border-top-color: inherit;\n}\n\n.table-divider-color {\n  border-top-color: var(--#{$prefix}table-divider-color);\n}\n"
  },
  {
    "path": "src/scss/free/_toasts.scss",
    "content": "//\n// Toast styles\n//\n\n.toast {\n  // scss-docs-start toast-css-vars\n  --#{$prefix}toast-border-bottom-width: #{$toast-border-bottom-width};\n  --#{$prefix}toast-btn-close-width: #{$toast-btn-close-width};\n  --#{$prefix}toast-btn-close-mr: #{$toast-btn-close-mr};\n  --#{$prefix}toast-btn-close-ml: #{$toast-btn-close-ml};\n  --#{$prefix}toast-bg: #{$toast-background-color};\n  --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n  // scss-docs-end toast-css-vars\n\n  border: 0;\n\n  .btn-close {\n    width: var(--#{$prefix}toast-btn-close-width);\n  }\n}\n\n.toast-header {\n  border-bottom-width: var(--#{$prefix}toast-border-bottom-width);\n\n  .btn-close {\n    margin-right: var(--#{$prefix}toast-btn-close-mr);\n    margin-left: var(--#{$prefix}toast-btn-close-ml);\n  }\n}\n\n.parent-toast-relative {\n  position: relative;\n}\n\n.toast-absolute {\n  position: absolute;\n}\n\n.toast-fixed {\n  position: fixed;\n  z-index: var(--#{$prefix}toast-zindex);\n}\n\n@each $color, $value in $theme-colors {\n  .toast-#{$color} {\n    background-color: var(--#{$prefix}#{$color}-bg-subtle);\n    color: var(--#{$prefix}#{$color}-text-emphasis);\n    border-color: var(--#{$prefix}#{$color}-border-subtle);\n\n    i {\n      color: var(--#{$prefix}#{$color}-text-emphasis);\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_tooltip.scss",
    "content": "// Tooltip\n\n.tooltip {\n  --#{$prefix}tooltip-font-size: #{$tooltip-font-size};\n\n  &.show {\n    opacity: 1;\n  }\n\n  .tooltip-arrow {\n    display: none;\n  }\n}\n\n.tooltip-inner {\n  font-size: var(--#{$prefix}tooltip-font-size);\n}\n"
  },
  {
    "path": "src/scss/free/_type.scss",
    "content": "// Type\n.note {\n  --#{$prefix}note-padding: #{$note-padding};\n  --#{$prefix}note-border-width: #{$note-border-width};\n  --#{$prefix}note-border-radius: #{$note-border-radius};\n  --#{$prefix}note-strong-font-weight: #{$note-strong-font-weight};\n\n  padding: var(--#{$prefix}note-padding);\n  border-left: var(--#{$prefix}note-border-width) solid;\n  border-radius: var(--#{$prefix}note-border-radius);\n  strong {\n    font-weight: var(--#{$prefix}note-strong-font-weight);\n  }\n}\n\n@each $color, $value in $theme-colors {\n  .note-#{$color} {\n    background-color: var(--#{$prefix}#{$color}-bg-subtle);\n    color: var(--#{$prefix}#{$color}-text-emphasis);\n  }\n}\n\n.w-responsive {\n  @media (min-width: 1199px) {\n    width: 75%;\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_utilities.scss",
    "content": "//\n// Utilities\n//\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'margin-bottom':\n      map-merge(\n        map-get($utilities, 'margin-bottom'),\n        (\n          values:\n            map-merge(\n              map-get(map-get($utilities, 'margin-bottom'), 'values'),\n              (\n                6: 3.5rem,\n                7: 4rem,\n                8: 5rem,\n                9: 6rem,\n                10: 8rem,\n                11: 10rem,\n                12: 12rem,\n                13: 14rem,\n                14: 16rem,\n              )\n            ),\n        )\n      ),\n  )\n);\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'rounded':\n      map-merge(\n        map-get($utilities, 'rounded'),\n        (\n          values:\n            map-merge(\n              map-get(map-get($utilities, 'rounded'), 'values'),\n              (\n                4: 0.375rem,\n                5: 0.5rem,\n                6: 0.75rem,\n                7: 1rem,\n                8: 1.25rem,\n                9: 1.5rem,\n              )\n            ),\n        )\n      ),\n  )\n);\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'opacity': (\n      property: opacity,\n      values: (\n        0: 0,\n        5: 0.05,\n        10: 0.1,\n        15: 0.15,\n        20: 0.2,\n        25: 0.25,\n        30: 0.3,\n        35: 0.35,\n        40: 0.4,\n        45: 0.45,\n        50: 0.5,\n        55: 0.55,\n        60: 0.6,\n        65: 0.65,\n        70: 0.7,\n        75: 0.75,\n        80: 0.8,\n        85: 0.85,\n        90: 0.9,\n        95: 0.95,\n        100: 1,\n      ),\n    ),\n  )\n);\n\n/* Numeric */\n.diagonal-fractions {\n  font-variant-numeric: diagonal-fractions;\n}\n\n/* Background colors */\n.bg-super-light {\n  --#{$prefix}bg-super-light: #fbfbfb;\n\n  background-color: var(--#{$prefix}bg-super-light);\n}\n\n/* Background attachment */\n.bg-fixed {\n  background-attachment: fixed;\n}\n.bg-local {\n  background-attachment: local;\n}\n.bg-scroll {\n  background-attachment: scroll;\n}\n\n/* Overflow */\n.overflow-y-scroll {\n  overflow-y: scroll;\n}\n\n.overflow-x-scroll {\n  overflow-x: scroll;\n}\n\n/* Tables */\n.table-fixed {\n  table-layout: fixed;\n}\n.table-auto {\n  table-layout: auto;\n}\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'shadow':\n      map-merge(\n        map-get($utilities, 'shadow'),\n        (\n          values:\n            map-merge(\n              map-get(map-get($utilities, 'shadow'), 'values'),\n              (\n                0: $box-shadow-0,\n                1: $box-shadow-1,\n                2: $box-shadow-2,\n                3: $box-shadow-3,\n                4: $box-shadow-4,\n                5: $box-shadow-5,\n                6: $box-shadow-6,\n                1-soft: $box-shadow-1-soft,\n                2-soft: $box-shadow-2-soft,\n                3-soft: $box-shadow-3-soft,\n                4-soft: $box-shadow-4-soft,\n                5-soft: $box-shadow-5-soft,\n                6-soft: $box-shadow-6-soft,\n                1-strong: $box-shadow-1-strong,\n                2-strong: $box-shadow-2-strong,\n                3-strong: $box-shadow-3-strong,\n                4-strong: $box-shadow-4-strong,\n                5-strong: $box-shadow-5-strong,\n                6-strong: $box-shadow-6-strong,\n                inner: $box-shadow-inner,\n              )\n            ),\n        )\n      ),\n  )\n);\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'letter-spacing': (\n      property: letter-spacing,\n      class: ls,\n      values: (\n        tighter: -0.05em,\n        tight: -0.025em,\n        normal: 0em,\n        wide: 0.025em,\n        wider: 0.05em,\n        widest: 0.1em,\n      ),\n    ),\n  )\n);\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'object-fit': (\n      property: object-fit,\n      class: object,\n      values: (\n        cover: cover,\n      ),\n    ),\n  )\n);\n\n$utilities: map-merge(\n  $utilities,\n  (\n    'object-position': (\n      property: object-position,\n      class: object,\n      values: (\n        top: top,\n        center: center,\n        bottom: bottom,\n      ),\n    ),\n  )\n);\n\n@each $name, $color in $theme-colors {\n  .link-#{$name} {\n    transition: color 0.15s;\n  }\n}\n"
  },
  {
    "path": "src/scss/free/_variables-dark.scss",
    "content": "// Dark color mode variables\n//\n// Custom variables for the `[data-bs-theme=\"dark\"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need.\n\n//\n// Global colors\n//\n\n// scss-docs-start sass-dark-mode-vars\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis-dark: tint-color($primary, 20%) !default;\n$secondary-text-emphasis-dark: tint-color($secondary, 60%) !default;\n$success-text-emphasis-dark: tint-color($success, 40%) !default;\n$info-text-emphasis-dark: tint-color($info, 30%) !default;\n$warning-text-emphasis-dark: tint-color($warning, 40%) !default;\n$danger-text-emphasis-dark: tint-color($danger, 20%) !default;\n$light-text-emphasis-dark: $gray-100 !default;\n$dark-text-emphasis-dark: $gray-200 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle-dark: shade-color($primary, 80%) !default;\n$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;\n$success-bg-subtle-dark: shade-color($success, 80%) !default;\n$info-bg-subtle-dark: shade-color($info, 80%) !default;\n$warning-bg-subtle-dark: shade-color($warning, 80%) !default;\n$danger-bg-subtle-dark: shade-color($danger, 80%) !default;\n$light-bg-subtle-dark: $gray-800 !default;\n$dark-bg-subtle-dark: $gray-900 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle-dark: shade-color($primary, 40%) !default;\n$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;\n$success-border-subtle-dark: shade-color($success, 40%) !default;\n$info-border-subtle-dark: shade-color($info, 40%) !default;\n$warning-border-subtle-dark: shade-color($warning, 40%) !default;\n$danger-border-subtle-dark: shade-color($danger, 40%) !default;\n$light-border-subtle-dark: $gray-700 !default;\n$dark-border-subtle-dark: $gray-800 !default;\n// scss-docs-end theme-border-subtle-variables\n\n$body-color-dark: $white !default;\n$body-bg-dark: #303030 !default;\n$body-secondary-bg-dark: $gray-800 !default;\n$body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%) !default;\n$border-color-dark: rgba(255, 255, 255, 0.12) !default;\n$border-color-translucent-dark: rgba($white, 0.15) !default;\n\n// Global MDB dark theme variables\n\n// scss-docs-start mdb-global-dark-theme-variables\n$surface-color-dark: $white !default;\n$surface-bg-dark: #424242 !default;\n$surface-inverted-color-dark: $white !default;\n$surface-inverted-bg-dark: #757575 !default;\n$divider-color-dark: rgba(255, 255, 255, 0.12) !default;\n$divider-blurry-color-dark: hsl(0, 0%, 70%) !default;\n$highlight-bg-color-dark: tint-color($gray-900, 10%) !default;\n$scrollbar-rail-bg-dark: $gray-500 !default;\n$scrollbar-thumb-bg-dark: $gray-200 !default;\n$picker-header-bg-dark: #323232 !default;\n$timepicker-clock-face-bg-dark: $gray-700 !default;\n$sidenav-backdrop-opacity-dark: 0.5 !default;\n$form-control-border-color-dark: rgba(255, 255, 255, 0.7) !default;\n$form-control-label-color-dark: $gray-400 !default;\n$form-control-disabled-bg-dark: $gray-700 !default;\n$box-shadow-color-dark: $black !default;\n$stepper-mobile-bg-dark: $body-tertiary-bg-dark !default;\n$datepicker-cell-in-range-bg-dark: $gray-700 !default;\n// scss-docs-start mdb-global-dark-theme-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-icon-color-dark: $surface-color-dark !default;\n$accordion-icon-active-color-dark: $primary !default;\n// scss-docs-end accordion-variables\n"
  },
  {
    "path": "src/scss/free/_variables.scss",
    "content": "// Variables\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-50: #fbfbfb !default;\n$gray-100: #f5f5f5 !default;\n$gray-200: #eeeeee !default;\n$gray-300: #e0e0e0 !default;\n$gray-400: #bdbdbd !default;\n$gray-500: #9e9e9e !default;\n$gray-600: #757575 !default;\n$gray-700: #616161 !default;\n$gray-800: #4f4f4f !default;\n$gray-900: #262626 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// scss-docs-start gray-colors-map\n$grays: (\n  '50': $gray-50,\n  '100': $gray-100,\n  '200': $gray-200,\n  '300': $gray-300,\n  '400': $gray-400,\n  '500': $gray-500,\n  '600': $gray-600,\n  '700': $gray-700,\n  '800': $gray-800,\n  '900': $gray-900,\n) !default;\n// scss-docs-end gray-colors-map\n\n// scss-docs-start material-design-color-system-variables\n$red-50: #ffebee !default;\n$red-100: #ffcdd2 !default;\n$red-200: #ef9a9a !default;\n$red-300: #e57373 !default;\n$red-400: #ef5350 !default;\n$red-500: #f44336 !default;\n$red-600: #e53935 !default;\n$red-700: #d32f2f !default;\n$red-800: #c62828 !default;\n$red-900: #b71c1c !default;\n$red-accent-100: #ff8a80 !default;\n$red-accent-200: #ff5252 !default;\n$red-accent-400: #ff1744 !default;\n$red-accent-700: #d50000 !default;\n\n$pink-50: #fce4ec !default;\n$pink-100: #f8bbd0 !default;\n$pink-200: #f48fb1 !default;\n$pink-300: #f06292 !default;\n$pink-400: #ec407a !default;\n$pink-500: #e91e63 !default;\n$pink-600: #d81b60 !default;\n$pink-700: #c2185b !default;\n$pink-800: #ad1457 !default;\n$pink-900: #880e4f !default;\n$pink-accent-100: #ff80ab !default;\n$pink-accent-200: #ff4081 !default;\n$pink-accent-400: #f50057 !default;\n$pink-accent-700: #c51162 !default;\n\n$purple-50: #f3e5f5 !default;\n$purple-100: #e1bee7 !default;\n$purple-200: #ce93d8 !default;\n$purple-300: #ba68c8 !default;\n$purple-400: #ab47bc !default;\n$purple-500: #9c27b0 !default;\n$purple-600: #8e24aa !default;\n$purple-700: #7b1fa2 !default;\n$purple-800: #6a1b9a !default;\n$purple-900: #4a148c !default;\n$purple-accent-100: #ea80fc !default;\n$purple-accent-200: #e040fb !default;\n$purple-accent-400: #d500f9 !default;\n$purple-accent-700: #aa00ff !default;\n\n$deep-purple-50: #ede7f6 !default;\n$deep-purple-100: #d1c4e9 !default;\n$deep-purple-200: #b39ddb !default;\n$deep-purple-300: #9575cd !default;\n$deep-purple-400: #7e57c2 !default;\n$deep-purple-500: #673ab7 !default;\n$deep-purple-600: #5e35b1 !default;\n$deep-purple-700: #512da8 !default;\n$deep-purple-800: #4527a0 !default;\n$deep-purple-900: #311b92 !default;\n$deep-purple-accent-100: #b388ff !default;\n$deep-purple-accent-200: #7c4dff !default;\n$deep-purple-accent-400: #651fff !default;\n$deep-purple-accent-700: #6200ea !default;\n\n$indigo-50: #e8eaf6 !default;\n$indigo-100: #c5cae9 !default;\n$indigo-200: #9fa8da !default;\n$indigo-300: #7986cb !default;\n$indigo-400: #5c6bc0 !default;\n$indigo-500: #3f51b5 !default;\n$indigo-600: #3949ab !default;\n$indigo-700: #303f9f !default;\n$indigo-800: #283593 !default;\n$indigo-900: #1a237e !default;\n$indigo-accent-100: #8c9eff !default;\n$indigo-accent-200: #536dfe !default;\n$indigo-accent-400: #3d5afe !default;\n$indigo-accent-700: #304ffe !default;\n\n$blue-50: #e3f2fd !default;\n$blue-100: #bbdefb !default;\n$blue-200: #90caf9 !default;\n$blue-300: #64b5f6 !default;\n$blue-400: #42a5f5 !default;\n$blue-500: #2196f3 !default;\n$blue-600: #1e88e5 !default;\n$blue-700: #1976d2 !default;\n$blue-800: #1565c0 !default;\n$blue-900: #0d47a1 !default;\n$blue-accent-100: #82b1ff !default;\n$blue-accent-200: #448aff !default;\n$blue-accent-400: #2979ff !default;\n$blue-accent-700: #2962ff !default;\n\n$light-blue-50: #e1f5fe !default;\n$light-blue-100: #b3e5fc !default;\n$light-blue-200: #81d4fa !default;\n$light-blue-300: #4fc3f7 !default;\n$light-blue-400: #29b6f6 !default;\n$light-blue-500: #03a9f4 !default;\n$light-blue-600: #039be5 !default;\n$light-blue-700: #0288d1 !default;\n$light-blue-800: #0277bd !default;\n$light-blue-900: #01579b !default;\n$light-blue-accent-100: #80d8ff !default;\n$light-blue-accent-200: #40c4ff !default;\n$light-blue-accent-400: #00b0ff !default;\n$light-blue-accent-700: #0091ea !default;\n\n$cyan-50: #e0f7fa !default;\n$cyan-100: #b2ebf2 !default;\n$cyan-200: #80deea !default;\n$cyan-300: #4dd0e1 !default;\n$cyan-400: #26c6da !default;\n$cyan-500: #00bcd4 !default;\n$cyan-600: #00acc1 !default;\n$cyan-700: #0097a7 !default;\n$cyan-800: #00838f !default;\n$cyan-900: #006064 !default;\n$cyan-accent-100: #84ffff !default;\n$cyan-accent-200: #18ffff !default;\n$cyan-accent-400: #00e5ff !default;\n$cyan-accent-700: #00b8d4 !default;\n\n$teal-50: #e0f2f1 !default;\n$teal-100: #b2dfdb !default;\n$teal-200: #80cbc4 !default;\n$teal-300: #4db6ac !default;\n$teal-400: #26a69a !default;\n$teal-500: #009688 !default;\n$teal-600: #00897b !default;\n$teal-700: #00796b !default;\n$teal-800: #00695c !default;\n$teal-900: #004d40 !default;\n$teal-accent-100: #a7ffeb !default;\n$teal-accent-200: #64ffda !default;\n$teal-accent-400: #1de9b6 !default;\n$teal-accent-700: #00bfa5 !default;\n\n$green-50: #e8f5e9 !default;\n$green-100: #c8e6c9 !default;\n$green-200: #a5d6a7 !default;\n$green-300: #81c784 !default;\n$green-400: #66bb6a !default;\n$green-500: #4caf50 !default;\n$green-600: #43a047 !default;\n$green-700: #388e3c !default;\n$green-800: #2e7d32 !default;\n$green-900: #1b5e20 !default;\n$green-accent-100: #b9f6ca !default;\n$green-accent-200: #69f0ae !default;\n$green-accent-400: #00e676 !default;\n$green-accent-700: #00c853 !default;\n\n$light-green-50: #f1f8e9 !default;\n$light-green-100: #dcedc8 !default;\n$light-green-200: #c5e1a5 !default;\n$light-green-300: #aed581 !default;\n$light-green-400: #9ccc65 !default;\n$light-green-500: #8bc34a !default;\n$light-green-600: #7cb342 !default;\n$light-green-700: #689f38 !default;\n$light-green-800: #558b2f !default;\n$light-green-900: #33691e !default;\n$light-green-accent-100: #ccff90 !default;\n$light-green-accent-200: #b2ff59 !default;\n$light-green-accent-400: #76ff03 !default;\n$light-green-accent-700: #64dd17 !default;\n\n$lime-50: #f9fbe7 !default;\n$lime-100: #f0f4c3 !default;\n$lime-200: #e6ee9c !default;\n$lime-300: #dce775 !default;\n$lime-400: #d4e157 !default;\n$lime-500: #cddc39 !default;\n$lime-600: #c0ca33 !default;\n$lime-700: #afb42b !default;\n$lime-800: #9e9d24 !default;\n$lime-900: #827717 !default;\n$lime-accent-100: #f4ff81 !default;\n$lime-accent-200: #eeff41 !default;\n$lime-accent-400: #c6ff00 !default;\n$lime-accent-700: #aeea00 !default;\n\n$yellow-50: #fffde7 !default;\n$yellow-100: #fff9c4 !default;\n$yellow-200: #fff59d !default;\n$yellow-300: #fff176 !default;\n$yellow-400: #ffee58 !default;\n$yellow-500: #ffeb3b !default;\n$yellow-600: #fdd835 !default;\n$yellow-700: #fbc02d !default;\n$yellow-800: #f9a825 !default;\n$yellow-900: #f57f17 !default;\n$yellow-accent-100: #ffff8d !default;\n$yellow-accent-200: #ffff00 !default;\n$yellow-accent-400: #ffea00 !default;\n$yellow-accent-700: #ffd600 !default;\n\n$amber-50: #fff8e1 !default;\n$amber-100: #ffecb3 !default;\n$amber-200: #ffe082 !default;\n$amber-300: #ffd54f !default;\n$amber-400: #ffca28 !default;\n$amber-500: #ffc107 !default;\n$amber-600: #ffb300 !default;\n$amber-700: #ffa000 !default;\n$amber-800: #ff8f00 !default;\n$amber-900: #ff6f00 !default;\n$amber-accent-100: #ffe57f !default;\n$amber-accent-200: #ffd740 !default;\n$amber-accent-400: #ffc400 !default;\n$amber-accent-700: #ffab00 !default;\n\n$orange-50: #fff3e0 !default;\n$orange-100: #ffe0b2 !default;\n$orange-200: #ffcc80 !default;\n$orange-300: #ffb74d !default;\n$orange-400: #ffa726 !default;\n$orange-500: #ff9800 !default;\n$orange-600: #fb8c00 !default;\n$orange-700: #f57c00 !default;\n$orange-800: #ef6c00 !default;\n$orange-900: #e65100 !default;\n$orange-accent-100: #ffd180 !default;\n$orange-accent-200: #ffab40 !default;\n$orange-accent-400: #ff9100 !default;\n$orange-accent-700: #ff6d00 !default;\n\n$deep-orange-50: #fbe9e7 !default;\n$deep-orange-100: #ffccbc !default;\n$deep-orange-200: #ffab91 !default;\n$deep-orange-300: #ff8a65 !default;\n$deep-orange-400: #ff7043 !default;\n$deep-orange-500: #ff5722 !default;\n$deep-orange-600: #f4511e !default;\n$deep-orange-700: #e64a19 !default;\n$deep-orange-800: #d84315 !default;\n$deep-orange-900: #bf360c !default;\n$deep-orange-accent-100: #ff9e80 !default;\n$deep-orange-accent-200: #ff6e40 !default;\n$deep-orange-accent-400: #ff3d00 !default;\n$deep-orange-accent-700: #dd2c00 !default;\n\n$brown-50: #efebe9 !default;\n$brown-100: #d7ccc8 !default;\n$brown-200: #bcaaa4 !default;\n$brown-300: #a1887f !default;\n$brown-400: #8d6e63 !default;\n$brown-500: #795548 !default;\n$brown-600: #6d4c41 !default;\n$brown-700: #5d4037 !default;\n$brown-800: #4e342e !default;\n$brown-900: #3e2723 !default;\n\n$blue-gray-50: #eceff1 !default;\n$blue-gray-100: #cfd8dc !default;\n$blue-gray-200: #b0bec5 !default;\n$blue-gray-300: #90a4ae !default;\n$blue-gray-400: #78909c !default;\n$blue-gray-500: #607d8b !default;\n$blue-gray-600: #546e7a !default;\n$blue-gray-700: #455a64 !default;\n$blue-gray-800: #37474f !default;\n$blue-gray-900: #263238 !default;\n// scss-docs-end material-design-color-system-variables\n\n// scss-docs-start material-design-color-system-map\n$reds: (\n  'red-50': $red-50,\n  'red-100': $red-100,\n  'red-200': $red-200,\n  'red-300': $red-300,\n  'red-400': $red-400,\n  'red-500': $red-500,\n  'red-600': $red-600,\n  'red-700': $red-700,\n  'red-800': $red-800,\n  'red-900': $red-900,\n  'red-accent-100': $red-accent-100,\n  'red-accent-200': $red-accent-200,\n  'red-accent-400': $red-accent-400,\n  'red-accent-700': $red-accent-700,\n) !default;\n\n$pinks: (\n  'pink-50': $pink-50,\n  'pink-100': $pink-100,\n  'pink-200': $pink-200,\n  'pink-300': $pink-300,\n  'pink-400': $pink-400,\n  'pink-500': $pink-500,\n  'pink-600': $pink-600,\n  'pink-700': $pink-700,\n  'pink-800': $pink-800,\n  'pink-900': $pink-900,\n  'pink-accent-100': $pink-accent-100,\n  'pink-accent-200': $pink-accent-200,\n  'pink-accent-400': $pink-accent-400,\n  'pink-accent-700': $pink-accent-700,\n) !default;\n\n$purples: (\n  'purple-50': $purple-50,\n  'purple-100': $purple-100,\n  'purple-200': $purple-200,\n  'purple-300': $purple-300,\n  'purple-400': $purple-400,\n  'purple-500': $purple-500,\n  'purple-600': $purple-600,\n  'purple-700': $purple-700,\n  'purple-800': $purple-800,\n  'purple-900': $purple-900,\n  'purple-accent-100': $purple-accent-100,\n  'purple-accent-200': $purple-accent-200,\n  'purple-accent-400': $purple-accent-400,\n  'purple-accent-700': $purple-accent-700,\n) !default;\n\n$deep-purples: (\n  'deep-purple-50': $deep-purple-50,\n  'deep-purple-100': $deep-purple-100,\n  'deep-purple-200': $deep-purple-200,\n  'deep-purple-300': $deep-purple-300,\n  'deep-purple-400': $deep-purple-400,\n  'deep-purple-500': $deep-purple-500,\n  'deep-purple-600': $deep-purple-600,\n  'deep-purple-700': $deep-purple-700,\n  'deep-purple-800': $deep-purple-800,\n  'deep-purple-900': $deep-purple-900,\n  'deep-purple-accent-100': $deep-purple-accent-100,\n  'deep-purple-accent-200': $deep-purple-accent-200,\n  'deep-purple-accent-400': $deep-purple-accent-400,\n  'deep-purple-accent-700': $deep-purple-accent-700,\n) !default;\n\n$indigos: (\n  'indigo-50': $indigo-50,\n  'indigo-100': $indigo-100,\n  'indigo-200': $indigo-200,\n  'indigo-300': $indigo-300,\n  'indigo-400': $indigo-400,\n  'indigo-500': $indigo-500,\n  'indigo-600': $indigo-600,\n  'indigo-700': $indigo-700,\n  'indigo-800': $indigo-800,\n  'indigo-900': $indigo-900,\n  'indigo-accent-100': $indigo-accent-100,\n  'indigo-accent-200': $indigo-accent-200,\n  'indigo-accent-400': $indigo-accent-400,\n  'indigo-accent-700': $indigo-accent-700,\n) !default;\n\n$blues: (\n  'blue-50': $blue-50,\n  'blue-100': $blue-100,\n  'blue-200': $blue-200,\n  'blue-300': $blue-300,\n  'blue-400': $blue-400,\n  'blue-500': $blue-500,\n  'blue-600': $blue-600,\n  'blue-700': $blue-700,\n  'blue-800': $blue-800,\n  'blue-900': $blue-900,\n  'blue-accent-100': $blue-accent-100,\n  'blue-accent-200': $blue-accent-200,\n  'blue-accent-400': $blue-accent-400,\n  'blue-accent-700': $blue-accent-700,\n) !default;\n\n$light-blues: (\n  'light-blue-50': $light-blue-50,\n  'light-blue-100': $light-blue-100,\n  'light-blue-200': $light-blue-200,\n  'light-blue-300': $light-blue-300,\n  'light-blue-400': $light-blue-400,\n  'light-blue-500': $light-blue-500,\n  'light-blue-600': $light-blue-600,\n  'light-blue-700': $light-blue-700,\n  'light-blue-800': $light-blue-800,\n  'light-blue-900': $light-blue-900,\n  'light-blue-accent-100': $light-blue-accent-100,\n  'light-blue-accent-200': $light-blue-accent-200,\n  'light-blue-accent-400': $light-blue-accent-400,\n  'light-blue-accent-700': $light-blue-accent-700,\n) !default;\n\n$cyans: (\n  'cyan-50': $cyan-50,\n  'cyan-100': $cyan-100,\n  'cyan-200': $cyan-200,\n  'cyan-300': $cyan-300,\n  'cyan-400': $cyan-400,\n  'cyan-500': $cyan-500,\n  'cyan-600': $cyan-600,\n  'cyan-700': $cyan-700,\n  'cyan-800': $cyan-800,\n  'cyan-900': $cyan-900,\n  'cyan-accent-100': $cyan-accent-100,\n  'cyan-accent-200': $cyan-accent-200,\n  'cyan-accent-400': $cyan-accent-400,\n  'cyan-accent-700': $cyan-accent-700,\n) !default;\n\n$teals: (\n  'teal-50': $teal-50,\n  'teal-100': $teal-100,\n  'teal-200': $teal-200,\n  'teal-300': $teal-300,\n  'teal-400': $teal-400,\n  'teal-500': $teal-500,\n  'teal-600': $teal-600,\n  'teal-700': $teal-700,\n  'teal-800': $teal-800,\n  'teal-900': $teal-900,\n  'teal-accent-100': $teal-accent-100,\n  'teal-accent-200': $teal-accent-200,\n  'teal-accent-400': $teal-accent-400,\n  'teal-accent-700': $teal-accent-700,\n) !default;\n\n$greens: (\n  'green-50': $green-50,\n  'green-100': $green-100,\n  'green-200': $green-200,\n  'green-300': $green-300,\n  'green-400': $green-400,\n  'green-500': $green-500,\n  'green-600': $green-600,\n  'green-700': $green-700,\n  'green-800': $green-800,\n  'green-900': $green-900,\n  'green-accent-100': $green-accent-100,\n  'green-accent-200': $green-accent-200,\n  'green-accent-400': $green-accent-400,\n  'green-accent-700': $green-accent-700,\n) !default;\n\n$light-greens: (\n  'light-green-50': $light-green-50,\n  'light-green-100': $light-green-100,\n  'light-green-200': $light-green-200,\n  'light-green-300': $light-green-300,\n  'light-green-400': $light-green-400,\n  'light-green-500': $light-green-500,\n  'light-green-600': $light-green-600,\n  'light-green-700': $light-green-700,\n  'light-green-800': $light-green-800,\n  'light-green-900': $light-green-900,\n  'light-green-accent-100': $light-green-accent-100,\n  'light-green-accent-200': $light-green-accent-200,\n  'light-green-accent-400': $light-green-accent-400,\n  'light-green-accent-700': $light-green-accent-700,\n) !default;\n\n$limes: (\n  'lime-50': $lime-50,\n  'lime-100': $lime-100,\n  'lime-200': $lime-200,\n  'lime-300': $lime-300,\n  'lime-400': $lime-400,\n  'lime-500': $lime-500,\n  'lime-600': $lime-600,\n  'lime-700': $lime-700,\n  'lime-800': $lime-800,\n  'lime-900': $lime-900,\n  'lime-accent-100': $lime-accent-100,\n  'lime-accent-200': $lime-accent-200,\n  'lime-accent-400': $lime-accent-400,\n  'lime-accent-700': $lime-accent-700,\n) !default;\n\n$yellows: (\n  'yellow-50': $yellow-50,\n  'yellow-100': $yellow-100,\n  'yellow-200': $yellow-200,\n  'yellow-300': $yellow-300,\n  'yellow-400': $yellow-400,\n  'yellow-500': $yellow-500,\n  'yellow-600': $yellow-600,\n  'yellow-700': $yellow-700,\n  'yellow-800': $yellow-800,\n  'yellow-900': $yellow-900,\n  'yellow-accent-100': $yellow-accent-100,\n  'yellow-accent-200': $yellow-accent-200,\n  'yellow-accent-400': $yellow-accent-400,\n  'yellow-accent-700': $yellow-accent-700,\n) !default;\n\n$ambers: (\n  'amber-50': $amber-50,\n  'amber-100': $amber-100,\n  'amber-200': $amber-200,\n  'amber-300': $amber-300,\n  'amber-400': $amber-400,\n  'amber-500': $amber-500,\n  'amber-600': $amber-600,\n  'amber-700': $amber-700,\n  'amber-800': $amber-800,\n  'amber-900': $amber-900,\n  'amber-accent-100': $amber-accent-100,\n  'amber-accent-200': $amber-accent-200,\n  'amber-accent-400': $amber-accent-400,\n  'amber-accent-700': $amber-accent-700,\n) !default;\n\n$oranges: (\n  'orange-50': $orange-50,\n  'orange-100': $orange-100,\n  'orange-200': $orange-200,\n  'orange-300': $orange-300,\n  'orange-400': $orange-400,\n  'orange-500': $orange-500,\n  'orange-600': $orange-600,\n  'orange-700': $orange-700,\n  'orange-800': $orange-800,\n  'orange-900': $orange-900,\n  'orange-accent-100': $orange-accent-100,\n  'orange-accent-200': $orange-accent-200,\n  'orange-accent-400': $orange-accent-400,\n  'orange-accent-700': $orange-accent-700,\n) !default;\n\n$deep-oranges: (\n  'deep-orange-50': $deep-orange-50,\n  'deep-orange-100': $deep-orange-100,\n  'deep-orange-200': $deep-orange-200,\n  'deep-orange-300': $deep-orange-300,\n  'deep-orange-400': $deep-orange-400,\n  'deep-orange-500': $deep-orange-500,\n  'deep-orange-600': $deep-orange-600,\n  'deep-orange-700': $deep-orange-700,\n  'deep-orange-800': $deep-orange-800,\n  'deep-orange-900': $deep-orange-900,\n  'deep-orange-accent-100': $deep-orange-accent-100,\n  'deep-orange-accent-200': $deep-orange-accent-200,\n  'deep-orange-accent-400': $deep-orange-accent-400,\n  'deep-orange-accent-700': $deep-orange-accent-700,\n) !default;\n\n$browns: (\n  'brown-50': $brown-50,\n  'brown-100': $brown-100,\n  'brown-200': $brown-200,\n  'brown-300': $brown-300,\n  'brown-400': $brown-400,\n  'brown-500': $brown-500,\n  'brown-600': $brown-600,\n  'brown-700': $brown-700,\n  'brown-800': $brown-800,\n  'brown-900': $brown-900,\n) !default;\n\n$blue-grays: (\n  'blue-gray-50': $blue-gray-50,\n  'blue-gray-100': $blue-gray-100,\n  'blue-gray-200': $blue-gray-200,\n  'blue-gray-300': $blue-gray-300,\n  'blue-gray-400': $blue-gray-400,\n  'blue-gray-500': $blue-gray-500,\n  'blue-gray-600': $blue-gray-600,\n  'blue-gray-700': $blue-gray-700,\n  'blue-gray-800': $blue-gray-800,\n  'blue-gray-900': $blue-gray-900,\n) !default;\n// scss-docs-end material-design-color-system-map\n\n// scss-docs-start color-variables\n$red: $red-500 !default;\n$pink: $pink-500 !default;\n$purple: $purple-500 !default;\n$indigo: $indigo-500 !default;\n$blue: $blue-500 !default;\n$cyan: $cyan-500 !default;\n$teal: $teal-500 !default;\n$green: $green-500 !default;\n$yellow: $yellow-500 !default;\n$orange: $orange-500 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n  'red': $red,\n  'pink': $pink,\n  'purple': $purple,\n  'indigo': $indigo,\n  'blue': $blue,\n  'cyan': $cyan,\n  'teal': $teal,\n  'green': $green,\n  'yellow': $yellow,\n  'orange': $orange,\n  'white': $white,\n  'black': $black,\n  'gray': $gray-600,\n  'gray-dark': $gray-800,\n) !default;\n// scss-docs-end colors-map\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n$min-contrast-ratio: 2 !default;\n\n// scss-docs-start theme-color-variables\n$primary: #3b71ca !default;\n$secondary: #9fa6b2 !default;\n$success: #14a44d !default;\n$danger: #dc4c64 !default;\n$warning: #e4a11b !default;\n$info: #54b4d3 !default;\n$light: #fbfbfb !default;\n$dark: #332d2d !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n  'primary': $primary,\n  'secondary': $secondary,\n  'success': $success,\n  'danger': $danger,\n  'warning': $warning,\n  'info': $info,\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis: shade-color($primary, 20%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 40%) !default;\n$info-text-emphasis: shade-color($info, 30%) !default;\n$warning-text-emphasis: shade-color($warning, 40%) !default;\n$danger-text-emphasis: shade-color($danger, 20%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-200 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 85%) !default;\n$secondary-bg-subtle: tint-color($secondary, 85%) !default;\n$success-bg-subtle: tint-color($success, 85%) !default;\n$info-bg-subtle: tint-color($info, 85%) !default;\n$warning-bg-subtle: tint-color($warning, 85%) !default;\n$danger-bg-subtle: tint-color($danger, 85%) !default;\n$light-bg-subtle: $gray-100 !default;\n$dark-bg-subtle: $gray-900 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-shadows: true !default;\n$enable-negative-margins: true !default;\n\n// Prefix for :root CSS variables.\n\n$variable-prefix: mdb- !default;\n$prefix: $variable-prefix !default;\n\n// Global MDB light theme variables\n\n// scss-docs-start mdb-global-light-theme-variables\n$surface-color: $gray-800 !default;\n$surface-bg: $white !default;\n$surface-inverted-color: $white !default;\n$surface-inverted-bg: #6d6d6d !default;\n$divider-color: $gray-100 !default;\n$divider-blurry-color: hsl(0, 0%, 40%) !default;\n$highlight-bg-color: $gray-200 !default;\n$scrollbar-rail-bg: $gray-200 !default;\n$scrollbar-thumb-bg: $gray-500 !default;\n$picker-header-bg: $primary !default;\n$timepicker-clock-face-bg: var(--#{$prefix}secondary-bg) !default;\n$sidenav-backdrop-opacity: 0.1 !default;\n$form-control-border-color: $gray-400 !default;\n$form-control-label-color: $gray-600 !default;\n$form-control-disabled-bg: $gray-300 !default;\n$box-shadow-color: $black !default;\n$stepper-mobile-bg: $gray-50 !default;\n$datepicker-cell-in-range-background-color: $primary-border-subtle !default;\n// scss-docs-start mdb-global-light-theme-variables\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-color: $gray-800 !default;\n$body-tertiary-bg: #fbfbfb !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: none !default;\n$link-shade-percentage: 5% !default;\n$link-shade-focus-percentage: 10% !default;\n$link-shade-active-percentage: 15% !default;\n$link-hover-decoration: none !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-focus-color: shift-color($link-color, $link-shade-focus-percentage) !default;\n$link-active-color: shift-color($link-color, $link-shade-active-percentage) !default;\n// Components\n//\n// Define common box shadow and border and more.\n\n// scss-docs-start border-variables\n$border-width-alternate: 2px !default;\n$border-style-alternate: solid !default;\n$border-color-alternate: hsl(0, 0%, 96%) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: 0.25rem !default;\n$border-radius-xs: 0.2rem !default;\n$border-radius-md: 0.3rem !default;\n$border-radius-lg: 0.5rem !default;\n// scss-docs-end border-radius-variables\n\n// Shadows\n//\n// Shadows offset, blur, spread and color.\n\n// scss-docs-start box-shadow-variables\n$box-shadow-0: none !default;\n\n$box-shadow-1: 0 0px 2px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.07),\n  0 1px 1px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.04) !default;\n$box-shadow-2: 0 0px 3px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.07),\n  0 2px 2px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.04) !default;\n$box-shadow-3: 0 2px 6px -1px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.07),\n  0 6px 18px -1px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.04) !default;\n$box-shadow-4: 0 2px 15px -3px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.07),\n  0 10px 20px -2px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.04) !default;\n$box-shadow-5: 0 2px 25px -5px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.07),\n  0 25px 21px -5px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.04) !default;\n$box-shadow-6: 0 2px 35px -12px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.21),\n  0 50px 40px -5px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.04) !default;\n\n$box-shadow-1-soft: 0 1px 5px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$box-shadow-2-soft: 0 2px 10px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$box-shadow-3-soft: 0 5px 15px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$box-shadow-4-soft: 0 10px 20px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$box-shadow-5-soft: 0 15px 30px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$box-shadow-6-soft: 0 20px 40px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n\n$box-shadow-1-strong: 0 0px 2px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.16),\n  0 1px 1px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n$box-shadow-2-strong: 0 0px 3px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.16),\n  0 2px 2px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n$box-shadow-3-strong: 0 2px 6px -1px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.16),\n  0 6px 18px -1px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n$box-shadow-4-strong: 0 2px 15px -3px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.16),\n  0 10px 20px -2px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n$box-shadow-5-strong: 0 2px 25px -5px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.16),\n  0 25px 21px -5px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n$box-shadow-6-strong: 0 2px 35px -12px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.26),\n  0 50px 40px -5px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n\n$box-shadow-3-top: 0 -10px 20px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$box-shadow-inner: inset 0 2px 4px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.06) !default;\n// scss-docs-end box-shadow-variables\n\n// scss-docs-start standard-shadows-map\n$shadows: (\n  '0': $box-shadow-0,\n  '1': $box-shadow-1,\n  '2': $box-shadow-2,\n  '3': $box-shadow-3,\n  '4': $box-shadow-4,\n  '5': $box-shadow-5,\n  '6': $box-shadow-6,\n) !default;\n// scss-docs-end standard-shadows-map\n\n// scss-docs-start soft-shadows-map\n$shadows-soft: (\n  '1': $box-shadow-1-soft,\n  '2': $box-shadow-2-soft,\n  '3': $box-shadow-3-soft,\n  '4': $box-shadow-4-soft,\n  '5': $box-shadow-5-soft,\n  '6': $box-shadow-6-soft,\n) !default;\n// scss-docs-end soft-shadows-map\n\n// scss-docs-start strong-shadows-map\n$shadows-strong: (\n  '1': $box-shadow-1-strong,\n  '2': $box-shadow-2-strong,\n  '3': $box-shadow-3-strong,\n  '4': $box-shadow-4-strong,\n  '5': $box-shadow-5-strong,\n  '6': $box-shadow-6-strong,\n) !default;\n// scss-docs-end strong-shadows-map\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-roboto: 'Roboto', sans-serif !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-roboto) !default;\n\n// $font-size-base affects the font size of the body text\n$font-size-base: 1rem !default;\n$font-weight-medium: 500 !default;\n$line-height-base: 1.6 !default;\n// scss-docs-end font-variables\n\n// scss-docs-start note-variables\n$note-padding: 10px !default;\n$note-border-width: 6px !default;\n$note-border-radius: 5px !default;\n$note-strong-font-weight: 600 !default;\n// scss-docs-end note-variables\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: 1rem !default;\n$table-cell-padding-x: 1.4rem !default;\n$table-cell-padding-y-sm: 0.5rem !default;\n$table-cell-padding-x-sm: 0.5rem !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-font-size: 0.9rem !default;\n$table-striped-bg: rgba(0, 0, 0, 0.02) !default;\n$table-hover-transition: 0.5s !default;\n$table-hover-bg: rgba(0, 0, 0, 0.025) !default;\n$table-group-separator-color: inherit !default;\n$table-divider-color: currentcolor !default;\n$table-bg-scale: -80% !default;\n$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), 0.1) !default;\n$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), 0.025) !default;\n$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), 0.02) !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n  'primary': shift-color($primary, $table-bg-scale),\n  'secondary': shift-color($secondary, $table-bg-scale),\n  'success': shift-color($success, $table-bg-scale),\n  'info': shift-color($info, $table-bg-scale),\n  'warning': shift-color($warning, $table-bg-scale),\n  'danger': shift-color($danger, $table-bg-scale),\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end table-loop\n\n// Buttons\n//\n// For each of MDB's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-top: 0.625rem !default;\n$btn-padding-bottom: 0.5rem !default;\n$btn-padding-x: 1.5rem !default;\n$btn-font-size: 0.75rem !default;\n$btn-line-height: 1.5 !default;\n\n$btn-padding-top-lg: 0.75rem !default;\n$btn-padding-bottom-lg: 0.6875rem !default;\n$btn-padding-x-lg: 1.6875rem !default;\n$btn-font-size-lg: 0.875rem !default;\n$btn-line-height-lg: 1.6 !default;\n\n$btn-padding-top-sm: 0.375rem !default;\n$btn-padding-bottom-sm: 0.3125rem !default;\n$btn-padding-x-sm: 1rem !default;\n$btn-font-size-sm: 0.75rem !default;\n$btn-line-height-sm: 1.5 !default;\n\n$btn-border-width: $border-width-alternate !default;\n\n$btn-font-weight: $font-weight-medium !default;\n$btn-box-shadow: 0 4px 9px -4px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.35) !default;\n$btn-hover-box-shadow: 0 8px 9px -4px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.15),\n  0 4px 18px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.1) !default;\n$btn-focus-box-shadow: $btn-hover-box-shadow !default;\n$btn-active-box-shadow: $btn-focus-box-shadow !default;\n\n$btn-link-color: $link-color !default;\n$btn-link-hover-color: $link-hover-color !default;\n$btn-link-focus-color: $link-focus-color !default;\n$btn-link-active-color: $link-active-color !default;\n$btn-link-disabled-color: $gray-500 !default;\n$btn-link-hover-bg: hsl(0, 0%, 96%) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n\n$btn-hover-bg-shade-amount: 5% !default;\n$btn-focus-bg-shade-amount: 5% !default;\n$btn-active-bg-shade-amount: 10% !default;\n\n$btn-hover-bg-tint-amount: 5% !default;\n$btn-focus-bg-tint-amount: 5% !default;\n$btn-active-bg-tint-amount: 10% !default;\n\n$btn-secondary-bg-tint-amount: 85% !default;\n$btn-secondary-color-shade-amount: 30% !default;\n$btn-light-color-tint-amount: 30% !default;\n\n$btn-outline-hover-bg-tint-amount: 95% !default;\n$btn-outline-focus-bg-tint-amount: 95% !default;\n$btn-outline-active-bg-tint-amount: 95% !default;\n\n$btn-outline-hover-bg-shade-amount: 20% !default;\n$btn-outline-focus-bg-shade-amount: 20% !default;\n$btn-outline-active-bg-shade-amount: 20% !default;\n\n$btn-contextual-box-shadow: 0 4px 9px -4px !default;\n$btn-contextual-box-shadow-state-first-part: 0 8px 9px -4px !default;\n$btn-contextual-box-shadow-state-second-part: 0 4px 18px 0 !default;\n\n$btn-outline-padding-top: 0.5rem !default;\n$btn-outline-padding-bottom: 0.375rem !default;\n$btn-outline-padding-x: 1.375rem !default;\n$btn-outline-border-width: $border-width-alternate !default;\n$btn-outline-line-height: 1.5 !default;\n\n$btn-outline-padding-top-lg: 0.625rem !default;\n$btn-outline-padding-bottom-lg: 0.5625rem !default;\n$btn-outline-padding-x-lg: 1.5625rem !default;\n$btn-outline-font-size-lg: 0.875rem !default;\n$btn-outline-line-height-lg: 1.6 !default;\n\n$btn-outline-padding-top-sm: 0.25rem !default;\n$btn-outline-padding-bottom-sm: 0.1875rem !default;\n$btn-outline-padding-x-sm: 0.875rem !default;\n$btn-outline-font-size-sm: 0.75rem !default;\n$btn-outline-line-height-sm: 1.5 !default;\n\n$btn-rounded-border-radius: 10rem !default;\n\n$btn-floating-border-radius: 50% !default;\n\n$btn-floating-width: 2.3125rem !default;\n$btn-floating-height: 2.3125rem !default;\n$btn-floating-icon-width: 2.3125rem !default;\n\n$btn-floating-width-lg: 2.8125rem !default;\n$btn-floating-height-lg: 2.8125rem !default;\n$btn-floating-icon-width-lg: 2.8125rem !default;\n\n$btn-floating-width-sm: 1.8125rem !default;\n$btn-floating-height-sm: 1.8125rem !default;\n$btn-floating-icon-width-sm: 1.8125rem !default;\n\n$btn-outline-floating-icon-width: 2.0625rem !default;\n$btn-outline-floating-icon-width-lg: 2.5625rem !default;\n$btn-outline-floating-icon-width-sm: 1.5625rem !default;\n\n$btn-floating-icon-line-height: 2.3125rem !default;\n$btn-floating-icon-line-height-lg: 2.8125rem !default;\n$btn-floating-icon-line-height-sm: 1.8125rem !default;\n\n$btn-outline-floating-icon-line-height: 2.0625rem !default;\n$btn-outline-floating-icon-line-height-lg: 2.5625rem !default;\n$btn-outline-floating-icon-line-height-sm: 1.5625rem !default;\n\n$fixed-action-btn-right: 2.1875rem !default;\n$fixed-action-btn-bottom: 2.1875rem !default;\n$fixed-action-btn-padding-top: 0.9375rem !default;\n$fixed-action-btn-padding-bottom: 1.25rem !default;\n$fixed-action-btn-padding-x: 1.25rem !default;\n$fixed-action-btn-li-margin-bottom: 1.5rem !default;\n\n$btn-block-margin-top: 0.5rem !default;\n// scss-docs-end btn-variables\n\n// Ripple\n\n// scss-docs-start ripple-variables\n$ripple-wave-cubicBezier: cubic-bezier(0, 0, 0.15, 1) !default;\n$ripple-wave-border-radius: 50% !default;\n$ripple-wave-opacity: 0.5 !default;\n$ripple-wave-transform: scale(0) !default;\n$ripple-wave-z-index: 999 !default;\n$ripple-wave-active-transform: scale(1) !default;\n// scss-docs-end ripple-variables\n\n// scss-docs-start ripple-colors-map\n$ripple: (\n  'primary': $primary,\n  'secondary': #e3ebf7,\n  'success': $success,\n  'danger': $danger,\n  'warning': $warning,\n  'info': $info,\n  'light': $light,\n  'dark': $dark,\n) !default;\n// scss-docs-end ripple-colors-map\n\n// Button group\n//\n// Material styling for group of buttons\n\n// scss-docs-start btn-group-variables\n$btn-group-border-radius: calc(4px - 1px) !default;\n$btn-group-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n  border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !default;\n// scss-docs-end btn-group-variables\n\n// Forms\n//\n// Material styling for outline forms border, label, size\n\n// scss-docs-start input-variables\n$input-padding-top: 0.32rem !default;\n$input-padding-bottom: $input-padding-top !default;\n$input-padding-left: 0.75rem !default;\n$input-padding-right: $input-padding-left !default;\n$input-transition: all 0.2s linear !default;\n$input-color: var(--#{$prefix}surface-color) !default;\n$input-placeholder-color: rgba(var(--#{$prefix}surface-color-rgb), 0.8) !default;\n\n$form-label-left: 0.75rem !default;\n$form-label-padding-top: 0.37rem !default;\n$form-label-transition: all 0.2s ease-out !default;\n$form-label-color: var(--#{$prefix}form-control-label-color) !default;\n\n$input-focus-active-label-transform: translateY(-1rem) translateY(0.1rem) scale(0.8) !default;\n$input-focus-label-color: var(--#{$prefix}input-focus-label-color) !default;\n$input-focus-border-width: 0.125rem !default;\n$input-focus-border-color: var(--#{$prefix}input-focus-border-color) !default;\n$input-disabled-background-color: var(--#{$prefix}form-control-disabled-bg) !default;\n\n$input-font-size-lg: 1rem !default;\n$input-line-height-lg: 2.15 !default;\n$input-focus-active-label-transform-lg: translateY(-1.25rem) translateY(0.1rem) scale(0.8) !default;\n\n$input-padding-top-sm: 0.32rem !default;\n$input-padding-bottom-sm: 0.32rem !default;\n$input-font-size-sm: 0.775rem !default;\n$input-line-height-sm: 1.5 !default;\n$input-focus-active-label-transform-sm: translateY(-0.85rem) translateY(0.1rem) scale(0.8) !default;\n\n$form-notch-div-border-color: var(--#{$prefix}form-control-border-color) !default;\n$form-notch-leading-width: 0.5rem !default;\n$form-notch-leading-border-radius: 0.25rem !default;\n$form-notch-middle-max-width: 1rem !default;\n$form-notch-trailing-border-radius: $form-notch-leading-border-radius !default;\n\n$form-label-padding-top-lg: 0.7rem !default;\n$form-label-padding-top-sm: 0.33rem !default;\n$form-label-font-size-sm: 0.775rem !default;\n\n$form-white-input-color: $white !default;\n$form-white-label-color: $gray-50 !default;\n$form-white-notch-div-border-color: $gray-50 !default;\n$form-white-input-focus-label-color: $white !default;\n$form-white-input-focus-border-color: $white !default;\n$form-white-placeholder-color: rgba(255, 255, 255, 0.7) !default;\n$form-white-disabled-bgc: rgba(255, 255, 255, 0.45) !default;\n\n$form-check-input-margin-left: 1.79rem !default;\n$form-check-input-radio-margin-left: 1.85rem !default;\n$form-check-input-width-md: 1.125rem !default;\n$form-check-input-height: $form-check-input-width-md !default;\n$form-check-input-background-color: var(--#{$prefix}body-bg) !default;\n$form-check-input-border-width: 0.125rem !default;\n$form-check-input-border-color: var(--#{$prefix}form-control-border-color) !default;\n\n$form-check-input-before-box-shadow: 0px 0px 0px 13px transparent !default;\n$form-check-input-before-border-radius: 50% !default;\n$form-check-input-before-width: 0.875rem !default;\n$form-check-input-before-height: $form-check-input-before-width !default;\n$form-check-input-before-transform: scale(0) !default;\n\n$form-check-input-hover-before-opacity: 0.04 !default;\n$form-check-input-hover-before-box-shadow: 0px 0px 0px 13px\n  rgba(var(--#{$prefix}box-shadow-color-rgb), 0.6) !default;\n\n$form-check-input-focus-border-color: $form-check-input-border-color !default;\n$form-check-input-focus-transition: border-color 0.2s !default;\n\n$form-check-input-focus-before-opacity: 0.12 !default;\n$form-check-input-focus-before-box-shadow: $form-check-input-hover-before-box-shadow !default;\n$form-check-input-focus-before-transform: scale(1) !default;\n$form-check-input-focus-before-transition: box-shadow 0.2s, transform 0.2s !default;\n\n$form-check-input-checked-border-color: $primary !default;\n$form-check-input-checked-before-opacity: 0.16 !default;\n$form-check-input-checked-focus-border-color: $primary !default;\n$form-check-input-checked-focus-before-box-shadow: 0px 0px 0px 13px $primary !default;\n$form-check-input-checked-focus-before-transform: $form-check-input-focus-before-transform !default;\n$form-check-input-checked-focus-before-transition: $form-check-input-focus-before-transition !default;\n\n$form-check-input-checkbox-border-radius: 0.25rem !default;\n$form-check-input-checkbox-focus-after-width: 0.875rem !default;\n$form-check-input-checkbox-focus-after-height: $form-check-input-checkbox-focus-after-width !default;\n$form-check-input-checkbox-focus-after-background-color: var(--#{$prefix}body-bg) !default;\n$form-check-input-checkbox-checked-background-color: $primary !default;\n$form-check-input-checkbox-checked-focus-background-color: $primary !default;\n\n$form-check-input-checkbox-checked-after-transform: rotate(45deg) !default;\n$form-check-input-checkbox-checked-after-border-width: 0.125rem !default;\n$form-check-input-checkbox-checked-after-border-color: $white !default;\n$form-check-input-checkbox-checked-after-width: 0.375rem !default;\n$form-check-input-checkbox-checked-after-height: 0.8125rem !default;\n$form-check-input-checkbox-checked-after-margin-left: 0.25rem !default;\n$form-check-input-checkbox-checked-after-margin-top: -1px !default;\n\n$form-check-input-indeterminate-focus-before-box-shadow: 0px 0px 0px 13px $primary !default;\n$form-check-input-indeterminate-checked-background-color: $primary !default;\n$form-check-input-indeterminate-checked-after-transform: rotate(90deg) !default;\n$form-check-input-indeterminate-checked-after-border-width: 0.125rem !default;\n$form-check-input-indeterminate-checked-after-border-color: $white !default;\n$form-check-input-indeterminate-checked-after-width: 0.125rem !default;\n$form-check-input-indeterminate-checked-after-height: 0.875rem !default;\n$form-check-input-indeterminate-checked-after-margin-left: 0.375rem !default;\n$form-check-input-indeterminate-focus-background-color: $primary !default;\n$form-check-input-indeterminate-focus-border-color: $primary !default;\n$form-check-input-indeterminate-border-color: $gray-600 !default;\n\n$form-check-input-radio-border-radius: 50% !default;\n$form-check-input-radio-width: 1.25rem !default;\n$form-check-input-radio-height: $form-check-input-radio-width !default;\n\n$form-check-input-radio-before-width: 1rem !default;\n$form-check-input-radio-before-height: $form-check-input-radio-before-width !default;\n\n$form-check-input-radio-after-width: $form-check-input-radio-before-width !default;\n$form-check-input-radio-after-height: $form-check-input-radio-after-width !default;\n$form-check-input-radio-after-border-radius: $form-check-input-radio-border-radius !default;\n$form-check-input-radio-after-background-color: var(--#{$prefix}body-bg) !default;\n\n$form-check-input-radio-checked-background-color: var(--#{$prefix}body-bg) !default;\n$form-check-input-radio-checked-after-border-radius: $form-check-input-radio-border-radius !default;\n$form-check-input-radio-checked-after-width: 0.625rem !default;\n$form-check-input-radio-checked-after-height: $form-check-input-radio-checked-after-width !default;\n$form-check-input-radio-checked-after-border-color: $primary !default;\n$form-check-input-radio-checked-after-background-color: $primary !default;\n$form-check-input-radio-checked-after-margin-top: 0.1875rem !default;\n$form-check-input-radio-checked-after-margin-left: 0.1875rem !default;\n$form-check-input-radio-checked-after-transition: border-color !default;\n$form-check-input-radio-checked-focus-background-color: var(--#{$prefix}body-bg) !default;\n\n$form-switch-padding-left: 1.85rem !default;\n$form-switch-form-check-input-border-radius: 0.4375rem !default;\n$form-switch-form-check-input-width: 2rem !default;\n$form-switch-form-check-input-height: 0.875rem !default;\n$form-switch-form-check-input-background-color: rgba(\n  var(--#{$prefix}emphasis-color-rgb),\n  0.25\n) !default;\n$form-switch-form-check-input-margin-top: 0.35rem !default;\n$form-switch-form-check-input-margin-right: 0.7rem !default;\n\n$form-switch-form-check-input-after-border-radius: 50% !default;\n$form-switch-form-check-input-after-width: 1.25rem !default;\n$form-switch-form-check-input-after-height: $form-switch-form-check-input-after-width !default;\n$form-switch-form-check-input-after-background-color: var(--#{$prefix}surface-bg) !default;\n$form-switch-form-check-input-after-margin-top: -0.1875rem !default;\n$form-switch-form-check-input-after-box-shadow: $box-shadow-2 !default;\n$form-switch-form-check-input-after-transition: background-color 0.2s, transform 0.2s !default;\n\n$form-switch-form-check-input-focus-before-box-shadow: 3px -1px 0px 13px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.6) !default;\n$form-switch-form-check-input-focus-before-transform: scale(1) !default;\n$form-switch-form-check-input-focus-before-transition: box-shadow 0.2s, transform 0.2s !default;\n\n$form-switch-form-check-input-focus-after-border-radius: $form-switch-form-check-input-after-border-radius !default;\n$form-switch-form-check-input-focus-after-width: 1.25rem !default;\n$form-switch-form-check-input-focus-after-height: $form-switch-form-check-input-focus-after-width !default;\n\n$form-switch-form-check-input-checked-focus-before-margin-left: 1.0625rem !default;\n$form-switch-form-check-input-checked-focus-before-box-shadow: 3px -1px 0px 13px $primary !default;\n$form-switch-form-check-input-checked-focus-before-transform: scale(1) !default;\n$form-switch-form-check-input-checked-focus-before-transition: box-shadow 0.2s, transform 0.2s !default;\n\n$form-switch-form-check-input-checked-checkbox-after-border-radius: 50% !default;\n$form-switch-form-check-input-checked-checkbox-after-width: 1.25rem !default;\n$form-switch-form-check-input-checked-checkbox-after-height: 1.25rem !default;\n$form-switch-form-check-input-checked-checkbox-after-background-color: $primary !default;\n$form-switch-form-check-input-checked-checkbox-after-margin-top: -3px !default;\n$form-switch-form-check-input-checked-checkbox-after-margin-left: 1.0625rem !default;\n$form-switch-form-check-input-checked-checkbox-after-box-shadow: 0 3px 1px -2px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.2),\n  0 2px 2px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.14),\n  0 1px 5px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.12) !default;\n$form-switch-form-check-input-checked-checkbox-after-transition: background-color 0.2s,\n  transform 0.2s !default;\n\n$form-file-height: calc(1.79rem + 0.33rem + 2px) !default;\n\n$form-file-label-focus-border-color: $primary !default;\n$form-file-label-focus-transition: all 0.2s linear !default;\n$form-file-label-focus-text-border-width: 2px 1px 2px 2px !default;\n$form-file-label-focus-button-border-width: 2px 2px 2px 1px !default;\n$form-file-label-disabled-background-color: #e9ecef !default;\n$form-file-label-height: $form-file-height !default;\n$form-file-label-border-color: #bdbdbd !default;\n$form-file-label-border-radius: 0.2rem !default;\n\n$form-file-text-padding-y: 0.33rem !default;\n$form-file-text-border-color: #bdbdbd !default;\n\n$form-file-button-line-height: 1.5 !default;\n$form-file-button-background-color: #fff !default;\n$form-file-button-border-color: $form-file-text-border-color !default;\n\n$form-file-sm-height: calc(1.33rem + 0.33rem + 2px) !default;\n$form-file-sm-font-size: 0.775rem !default;\n$form-file-sm-line-height: 1.5 !default;\n$form-file-sm-padding-y: $form-file-text-padding-y !default;\n\n$form-file-lg-height: calc(2.315rem + 0.33rem + 2px) !default;\n$form-file-lg-font-size: 1rem !default;\n$form-file-lg-line-height: 2.15 !default;\n$form-file-lg-padding-y: $form-file-text-padding-y !default;\n\n$form-select-transition: all 0.2s linear !default;\n$form-select-focus-border-color: $primary !default;\n$form-select-focus-border-box-shadow: inset 0px 0px 0px 1px $primary !default;\n\n$form-range-webkit-slider-thumb-margin-top: -6px !default;\n$form-range-webkit-slider-runnable-track-height: 4px !default;\n\n$input-group-height: calc(1.75rem + 0.33rem + 2px) !default;\n$input-group-min-height: $input-group-height !default;\n$input-group-padding-y: 0.27rem !default;\n$input-group-transition: all 0.2s linear !default;\n\n$input-group-focus-transition: $input-group-transition !default;\n$input-group-focus-border-color: $primary !default;\n$input-group-focus-box-shadow: inset 0 0 0 1px $primary !default;\n\n$input-group-text-padding-y: 0.26rem !default;\n\n$input-group-lg-height: calc(2.315rem + 0.33rem + 2px) !default;\n$input-group-lg-font-size: 1rem !default;\n$input-group-lg-padding-y: 0.33rem !default;\n$input-group-lg-text-font-size: $input-group-lg-font-size !default;\n\n$input-group-sm-height: calc(1.33rem + 0.33rem + 2px) !default;\n$input-group-sm-min-height: $input-group-sm-height !default;\n$input-group-sm-font-size: 0.775rem !default;\n$input-group-sm-padding-y: $input-group-lg-padding-y !default;\n$input-group-sm-text-font-size: $input-group-sm-font-size !default;\n$input-group-sm-text-line-height: 1.5 !default;\n\n$input-group-form-outline-border-left-width: 1px !default;\n$input-group-form-outline-border-left-color: #bdbdbd !default;\n\n$form-outline-select-arrow-color: var(--#{$prefix}surface-color) !default;\n// scss-docs-end input-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-valid-tooltip-color: $white !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states-mdb: (\n  'valid': (\n    'color': $form-feedback-valid-color,\n  ),\n  'invalid': (\n    'color': $form-feedback-invalid-color,\n  ),\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$fixed-action-button-zindex: 1030 !default;\n$zindex-toast: 1060 !default;\n$alert-zindex: 1070 !default;\n$zindex-popover: 1080 !default;\n$zindex-tooltip: 1090 !default;\n// scss-docs-end zindex-stack\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-tabs-link-border-bottom-width: 2px !default;\n$nav-tabs-link-font-weight: 500 !default;\n$nav-tabs-link-font-size: 12px !default;\n$nav-tabs-link-padding-top: 17px !default;\n$nav-tabs-link-padding-bottom: 16px !default;\n$nav-tabs-link-padding-x: 29px !default;\n$nav-tabs-link-hover-background-color: var(--#{$prefix}highlight-bg-color) !default;\n$nav-tabs-link-active-color: $primary !default;\n$nav-tabs-link-active-border-color: $primary !default;\n\n$nav-pills-margin: 0.5rem !default;\n$nav-pills-link-border-radius: 0.25rem !default;\n$nav-pills-link-font-size: $nav-tabs-link-font-size !default;\n$nav-pills-link-padding-top: $nav-tabs-link-padding-top !default;\n$nav-pills-link-padding-bottom: $nav-tabs-link-padding-bottom !default;\n$nav-pills-link-padding-x: $nav-tabs-link-padding-x !default;\n$nav-pills-link-line-height: 1 !default;\n$nav-pills-link-background-color: $nav-tabs-link-hover-background-color !default;\n$nav-pills-link-font-weight: $nav-tabs-link-font-weight !default;\n\n$nav-tabs-link-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.55) !default;\n$nav-tabs-link-hover-bgc: var(--#{$prefix}highlight-bg-color) !default;\n\n$nav-pills-link-color: $nav-tabs-link-color !default;\n$nav-pills-link-hover-bg: $nav-tabs-link-hover-bgc !default;\n$nav-pills-link-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$nav-pills-link-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n// scss-docs-end nav-variables\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-box-shadow: 0 4px 12px 0 rgba(var(--#{$prefix}box-shadow-color-rgb), 0.07),\n  0 2px 4px rgba(var(--#{$prefix}box-shadow-color-rgb), 0.05) !default;\n$navbar-padding-top: 0.5625rem !default;\n$navbar-brand-img-margin-right: 0.25rem !default;\n// scss-docs-end navbar-variables\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-color: var(--#{$prefix}surface-color) !default;\n$dropdown-bg: var(--#{$prefix}surface-bg) !default;\n$dropdown-link-color: $dropdown-color !default;\n$dropdown-header-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.55) !default;\n\n$dropdown-margin-top: 0.125rem !default;\n$dropdown-box-shadow: $box-shadow-4 !default;\n$dropdown-font-size: 0.875rem !default;\n$dropdown-item-border-radius: 0.5rem !default;\n$dropdown-item-padding-y: 0.5rem !default;\n$dropdown-item-padding-x: 1rem !default;\n$dropdown-border-radius: 0.5rem !default;\n$dropdown-divider-bg: var(--#{$prefix}divider-color) !default;\n$dropdown-divider-border-top-width: 2px;\n\n$dropdown-state-color: var(--#{$prefix}surface-color) !default;\n$dropdown-state-background-color: var(--#{$prefix}highlight-bg-color) !default;\n$dropdown-link-disabled-color: rgba(var(--#{$prefix}surface-color-rgb), 0.5) !default;\n\n$dropdown-menu-animated-animation-duration: 0.55s !default;\n$dropdown-menu-animated-animation-timing-function: ease !default;\n\n$dropdown-animation-duration: 1s !default;\n// scss-docs-end dropdown-variables\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-font-size: 0.9rem !default;\n$pagination-color: var(--#{$prefix}body-color) !default;\n$pagination-transition: all 0.3s linear !default;\n$pagination-border-radius: 0.25rem !default;\n\n$pagination-hover-color: var(--#{$prefix}body-color) !default;\n$pagination-hover-bg: var(--#{$prefix}highlight-bg-color) !default;\n$pagination-active-transition: all 0.2s linear !default;\n\n$pagination-circle-border-radius: 50% !default;\n$pagination-circle-padding-x: 0.841rem !default;\n\n$pagination-circle-lg-padding-left: 1.399414rem !default;\n$pagination-circle-lg-padding-right: 1.399415rem !default;\n\n$pagination-circle-sm-padding-left: 0.696rem !default;\n$pagination-circle-sm-padding-right: 0.688rem !default;\n\n$pagination-focus-bg: var(--#{$prefix}highlight-bg-color) !default;\n\n$pagination-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$pagination-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n$pagination-active-font-weight: 500 !default;\n\n$pagination-disabled-color: rgba(var(--#{$prefix}body-color-rgb), 0.55) !default;\n$pagination-disabled-bg: transparent !default;\n// scss-docs-end pagination-variables\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: 0.5 !default;\n$placeholder-opacity-min: 0.2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: 1.5rem !default;\n$card-spacer-x: 1.5rem !default;\n$card-box-shadow: $box-shadow-4 !default;\n$card-cap-bg: rgba(255, 255, 255, 0) !default;\n$card-footer-background-color: rgba(255, 255, 255, 0) !default;\n$card-header-border-width: 2px !default;\n$card-header-border-color: var(--#{$prefix}divider-color) !default;\n$card-footer-border-width: 2px !default;\n$card-footer-border-color: var(--#{$prefix}divider-color) !default;\n$card-border-radius: 0.5rem !default;\n$card-img-overlay-padding: 1.5rem !default;\n$card-bg: var(--#{$prefix}surface-bg) !default;\n$card-border-color: rgba(0, 0, 0, 0.175);\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1.15rem !default;\n$accordion-padding-x: 1.5rem !default;\n$accordion-border-radius: $border-radius-lg !default;\n$accordion-button-color: var(--#{$prefix}surface-color) !default;\n$accordion-button-active-bg: var(--#{$prefix}surface-bg) !default;\n$accordion-button-active-color: $primary !default;\n$accordion-button-focus-box-shadow: inset 0 -1px 0 var(--#{$prefix}border-color) !default;\n$accordion-color: var(--#{$prefix}surface-color) !default;\n$accordion-flush-button-box-shadow: inset 0 -2px 0 var(--#{$prefix}divider-color) !default;\n$accordion-flush-item-border-bottom: 2px solid var(--#{$prefix}divider-color) !default;\n$accordion-borderless-button-border-radius: 0.5rem !default;\n$accordion-borderless-button-bgc: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-borderless-button-color: var(--#{$prefix}primary-text-emphasis) !default;\n$accordion-icon-color: $surface-color !default;\n$accordion-icon-active-color: $primary !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-color: var(--#{$prefix}surface-inverted-color) !default;\n$tooltip-padding-y: 6px !default;\n$tooltip-padding-x: 16px !default;\n$tooltip-font-size: 14px !default;\n$tooltip-bg: var(--#{$prefix}surface-inverted-bg) !default;\n$tooltip-border-radius: 0.25rem !default;\n// scss-docs-end tooltip-feedback-variables\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-box-shadow: $box-shadow-2 !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-border-bottom-width: $border-width-alternate !default;\n$popover-border-width: 1px !default;\n$popover-border-color: var(--#{$prefix}divider-color) !default;\n$popover-header-bg: var(--#{$prefix}surface-bg) !default;\n$popover-bg: var(--#{$prefix}surface-bg) !default;\n$popover-header-color: var(--#{$prefix}surface-color) !default;\n$popover-body-color: var(--#{$prefix}surface-color) !default;\n\n// scss-docs-end popover-variables\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-box-shadow: $box-shadow-4 !default;\n$toast-border-radius: $border-radius-lg !default;\n$toast-border-bottom-width: $border-width-alternate !default;\n$toast-background-color: var(--#{$prefix}surface-bg) !default;\n$toast-padding-x: 1rem !default;\n$toast-padding-y: 0.65rem !default;\n$toast-header-background-color: var(--#{$prefix}surface-bg) !default;\n$toast-btn-close-width: 1.3em !default;\n$toast-btn-close-mr: -0.375rem !default;\n$toast-btn-close-ml: 0.75rem !default;\n// scss-docs-end toast-variables\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-border-radius: 0.27rem !default;\n\n$badge-dot-border-radius: 4.5px !default;\n$badge-dot-height: 9px !default;\n$badge-dot-width: $badge-dot-height !default;\n$badge-dot-margin-left: -0.3125rem !default;\n\n$badge-notification-font-size: 0.6rem !default;\n$badge-notification-margin-top: -0.1rem !default;\n$badge-notification-margin-left: -0.5rem !default;\n$badge-notification-padding-y: 0.2em !default;\n$badge-notification-padding-x: 0.45em !default;\n// scss-docs-end badge-variables\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-box-shadow: $box-shadow-4 !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-header-border-color: var(--#{$prefix}divider-color) !default;\n$modal-footer-border-color: var(--#{$prefix}divider-color) !default;\n$modal-header-border-width: $border-width-alternate !default;\n$modal-footer-border-width: $border-width-alternate !default;\n$modal-content-color: var(--#{$prefix}surface-color) !default;\n$modal-content-bg: var(--#{$prefix}surface-bg) !default;\n// scss-docs-end modal-variables\n\n// Alerts\n\n// scss-docs-start alert-variables\n$alert-padding-y: 1.25rem !default;\n$alert-padding-x: 1.5rem !default;\n$alert-border-radius: $border-radius-lg !default;\n// scss-docs-end alert-variables\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 4px !default;\n$progress-bar-color: color-contrast($primary) !default;\n$progress-circular-size: 48px !default;\n$progress-circular-bar-width: 4px !default;\n// scss-docs-end progress-variables\n\n// Range\n\n// scss-docs-start range-variables\n$range-thumb-height: 30px !default;\n$range-thumb-width: 30px !default;\n$range-thumb-top: -35px !default;\n$range-thumb-background: $primary !default;\n$range-thumb-active-background: var(--#{$prefix}primary-bg-subtle) !default;\n$range-thumb-margin-left: -15px !default;\n$range-thumb-border-radius: 50% 50% 50% 0 !default;\n$range-thumb-transform: scale(0) !default;\n$range-thumb-transition: transform 0.2s ease-in-out !default;\n$range-thumb-value-font-size: 12px !default;\n$range-thumb-value-line-height: 30px !default;\n$range-thumb-value-color: color-contrast($primary) !default;\n$range-thumb-value-font-weight: 500 !default;\n// override default bootstrap values for form range\n$form-range-thumb-bg: $range-thumb-background !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n// scss-docs-end range-variables\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-border-radius: $border-radius-lg !default;\n$list-group-item-padding-x: 1.5rem !default;\n$list-group-item-transition-time: 0.5s !default;\n$list-group-bg: transparent !default;\n$list-group-disabled-color: rgba(var(--#{$prefix}body-color-rgb), 0.5);\n\n$list-group-light-item-py: 1rem !default;\n$list-group-light-item-border: 2px solid var(--#{$prefix}divider-color) !default;\n$list-group-light-item-border-width: 2px !default;\n$list-group-light-active-border-radius: 0.5rem !default;\n$list-group-light-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$list-group-light-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n$list-group-active-margin-top: 0 !default;\n$list-group-small-item-py: 0.5rem !default;\n// scss-docs-end list-group-variables\n\n// Images\n\n// scss-docs-start images-variables\n$image-hover-overlay-transition: all 0.3s ease-in-out !default;\n\n$image-hover-zoom-transition: all 0.3s linear !default;\n$image-hover-zoom-transform: scale(1.1) !default;\n\n$image-hover-shadow-transition: $image-hover-overlay-transition !default;\n$image-hover-shadow-box-shadow: $box-shadow-4-strong !default;\n$image-hover-shadow-box-shadow-soft: $box-shadow-5 !default;\n// scss-docs-end images-variables\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-divider-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.55) !default;\n$breadcrumb-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.55) !default;\n$breadcrumb-item-color: $breadcrumb-active-color !default;\n$breadcrumb-item-transition: color 0.15s ease-in-out !default;\n$breadcrumb-item-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.7) !default;\n$breadcrumb-item-before-color: $breadcrumb-divider-color !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-prev-icon-bg: none !default;\n$carousel-control-next-icon-bg: none !default;\n$carousel-control-icon-font-size: 1.7rem !default;\n// scss-docs-end carousel-variables\n\n// Scrollspy\n\n// scss-docs-start scrollspy-variables\n$scrollspy-menu-sidebar-font-size: 0.8rem !default;\n$scrollspy-menu-sidebar-color: var(--#{$prefix}body-color) !default;\n$scrollspy-menu-sidebar-line-height: 1.1rem !default;\n$scrollspy-menu-sidebar-padding-x: 5px !default;\n$scrollspy-menu-sidebar-font-weight: 400 !default;\n$scrollspy-menu-sidebar-transition: all 0.2s ease-in-out !default;\n$scrollspy-menu-sidebar-margin-y: 3px !default;\n\n$scrollspy-menu-sidebar-active-color: $primary !default;\n$scrollspy-menu-sidebar-active-font-weight: 600 !default;\n$scrollspy-menu-sidebar-active-border-width: 0.125rem !default;\n$scrollspy-menu-sidebar-active-border-color: $primary !default;\n\n$scrollspy-collapsible-nav-transition-time: 0.5s !default;\n// scss-docs-end scrollspy-variables\n\n// Dividers\n\n// scss-docs-start divider-variables\n$divider-height: $border-width-alternate !default;\n$divider-width: $border-width-alternate !default;\n$divider-bg: var(--#{$prefix}divider-color) !default;\n$divider-opacity: 1 !default;\n\n$divider-blurry-bg-image: linear-gradient(\n  90deg,\n  transparent,\n  var(--#{$prefix}divider-blurry-color),\n  transparent\n) !default;\n$divider-blurry-height: 1px !default;\n$divider-blurry-opacity: 0.25 !default;\n\n$divider-blurry-vr-bg-image: linear-gradient(\n  180deg,\n  transparent,\n  var(--#{$prefix}divider-blurry-color),\n  transparent\n) !default;\n$divider-blurry-vr-width: 1px !default;\n// scss-docs-end divider-variables\n"
  },
  {
    "path": "src/scss/free/forms/_form-check.scss",
    "content": "//\n// Material styles for check / radio / switch\n//\n\n.form-check {\n  min-height: 1.5rem;\n}\n\n.form-check-input {\n  position: relative;\n  width: $form-check-input-width-md;\n  height: $form-check-input-height;\n  background-color: $form-check-input-background-color;\n  border: $form-check-input-border-width solid $form-check-input-border-color;\n\n  &:before {\n    content: '';\n    position: absolute;\n    box-shadow: $form-check-input-before-box-shadow;\n    border-radius: $form-check-input-before-border-radius;\n    width: $form-check-input-before-width;\n    height: $form-check-input-before-height;\n    background-color: transparent;\n    opacity: 0;\n    pointer-events: none;\n    transform: $form-check-input-before-transform;\n  }\n\n  &:hover {\n    cursor: pointer;\n\n    &:before {\n      opacity: $form-check-input-hover-before-opacity;\n      box-shadow: $form-check-input-hover-before-box-shadow;\n    }\n  }\n\n  &:focus {\n    box-shadow: none;\n    border-color: $form-check-input-focus-border-color;\n    transition: $form-check-input-focus-transition;\n\n    &:before {\n      opacity: $form-check-input-focus-before-opacity;\n      box-shadow: $form-check-input-focus-before-box-shadow;\n      transform: $form-check-input-focus-before-transform;\n      transition: $form-check-input-focus-before-transition;\n    }\n  }\n\n  &:checked {\n    border-color: $form-check-input-checked-border-color;\n\n    &:before {\n      opacity: $form-check-input-checked-before-opacity;\n    }\n\n    &:after {\n      content: '';\n      position: absolute;\n    }\n\n    &:focus {\n      border-color: $form-check-input-checked-focus-border-color;\n\n      &:before {\n        box-shadow: $form-check-input-checked-focus-before-box-shadow;\n        transform: $form-check-input-checked-focus-before-transform;\n        transition: $form-check-input-checked-focus-before-transition;\n      }\n    }\n  }\n\n  &:indeterminate {\n    &:focus {\n      &:before {\n        box-shadow: $form-check-input-indeterminate-focus-before-box-shadow;\n      }\n    }\n  }\n\n  &[type='checkbox'] {\n    border-radius: $form-check-input-checkbox-border-radius;\n    margin-top: 0.19em;\n    margin-right: 6px;\n\n    &:focus {\n      &:after {\n        content: '';\n        position: absolute;\n        width: $form-check-input-checkbox-focus-after-width;\n        height: $form-check-input-checkbox-focus-after-height;\n        z-index: 1;\n        display: block;\n        border-radius: 0;\n        background-color: $form-check-input-checkbox-focus-after-background-color;\n      }\n    }\n\n    &:checked {\n      background-image: none;\n      background-color: $form-check-input-checkbox-checked-background-color;\n\n      &:after {\n        display: block;\n        transform: $form-check-input-checkbox-checked-after-transform #{'/*!rtl:ignore*/'};\n        border-width: $form-check-input-checkbox-checked-after-border-width;\n        border-color: $form-check-input-checkbox-checked-after-border-color;\n        width: $form-check-input-checkbox-checked-after-width;\n        height: $form-check-input-checkbox-checked-after-height;\n        border-style: solid;\n        border-top: 0;\n        border-left: 0 #{'/*!rtl:ignore*/'};\n        margin-left: $form-check-input-checkbox-checked-after-margin-left;\n        margin-top: $form-check-input-checkbox-checked-after-margin-top;\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: $form-check-input-checkbox-checked-focus-background-color;\n      }\n    }\n\n    &:indeterminate {\n      border-color: $form-check-input-indeterminate-focus-border-color;\n    }\n  }\n\n  &[type='radio'] {\n    border-radius: $form-check-input-radio-border-radius;\n    width: $form-check-input-radio-width;\n    height: $form-check-input-radio-height;\n    margin-top: 0.125em;\n    margin-right: 4px;\n\n    &:before {\n      width: $form-check-input-radio-before-width;\n      height: $form-check-input-radio-before-height;\n    }\n\n    &:after {\n      content: '';\n      position: absolute;\n      width: $form-check-input-radio-after-width;\n      height: $form-check-input-radio-after-height;\n      z-index: 1;\n      display: block;\n      border-radius: $form-check-input-radio-after-border-radius;\n      background-color: $form-check-input-radio-after-background-color;\n    }\n\n    &:checked {\n      background-image: none;\n      background-color: $form-check-input-radio-checked-background-color;\n\n      &:after {\n        border-radius: $form-check-input-radio-checked-after-border-radius;\n        width: $form-check-input-radio-checked-after-width;\n        height: $form-check-input-radio-checked-after-height;\n        border-color: $form-check-input-radio-checked-after-border-color;\n        background-color: $form-check-input-radio-checked-after-background-color;\n        transition: $form-check-input-radio-checked-after-transition;\n        transform: translate(-50%, -50%);\n        position: absolute;\n        left: 50%;\n        top: 50%;\n      }\n\n      &:focus {\n        background-color: $form-check-input-radio-checked-focus-background-color;\n      }\n    }\n  }\n}\n\n.form-check-label {\n  padding-left: 0.15rem;\n  &:hover {\n    cursor: pointer;\n  }\n}\n\n//\n// Switch\n//\n\n.form-switch {\n  .form-check-input {\n    background-image: none;\n    border-width: 0;\n    border-radius: $form-switch-form-check-input-border-radius;\n    width: $form-switch-form-check-input-width;\n    height: $form-switch-form-check-input-height;\n    background-color: $form-switch-form-check-input-background-color;\n    margin-top: 0.3em;\n    margin-right: 8px;\n\n    &:after {\n      content: '';\n      position: absolute;\n      border: none;\n      z-index: 2;\n      border-radius: $form-switch-form-check-input-after-border-radius;\n      width: $form-switch-form-check-input-after-width;\n      height: $form-switch-form-check-input-after-height;\n      background-color: $form-switch-form-check-input-after-background-color;\n      margin-top: $form-switch-form-check-input-after-margin-top;\n      box-shadow: $form-switch-form-check-input-after-box-shadow;\n      transition: $form-switch-form-check-input-after-transition;\n    }\n\n    &:focus {\n      background-image: none;\n\n      &:before {\n        box-shadow: $form-switch-form-check-input-focus-before-box-shadow;\n        transform: $form-switch-form-check-input-focus-before-transform;\n        transition: $form-switch-form-check-input-focus-before-transition;\n      }\n\n      &:after {\n        border-radius: $form-switch-form-check-input-focus-after-border-radius;\n        width: $form-switch-form-check-input-focus-after-width;\n        height: $form-switch-form-check-input-focus-after-height;\n      }\n    }\n\n    &:checked {\n      background-image: none;\n\n      &:focus {\n        background-image: none;\n\n        &:before {\n          margin-left: $form-switch-form-check-input-checked-focus-before-margin-left;\n          box-shadow: $form-switch-form-check-input-checked-focus-before-box-shadow;\n          transform: $form-switch-form-check-input-checked-focus-before-transform;\n          transition: $form-switch-form-check-input-checked-focus-before-transition;\n        }\n      }\n\n      &[type='checkbox'] {\n        background-image: none;\n\n        &:after {\n          content: '';\n          position: absolute;\n          border: none;\n          z-index: 2;\n          border-radius: $form-switch-form-check-input-checked-checkbox-after-border-radius;\n          width: $form-switch-form-check-input-checked-checkbox-after-width;\n          height: $form-switch-form-check-input-checked-checkbox-after-height;\n          background-color: $form-switch-form-check-input-checked-checkbox-after-background-color;\n          margin-top: $form-switch-form-check-input-checked-checkbox-after-margin-top;\n          margin-left: $form-switch-form-check-input-checked-checkbox-after-margin-left;\n          box-shadow: $form-switch-form-check-input-checked-checkbox-after-box-shadow;\n          transition: $form-switch-form-check-input-checked-checkbox-after-transition;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/forms/_form-control.scss",
    "content": "//\n// Material styles for form control - form outline\n//\n\n.form-control {\n  min-height: auto;\n  padding: 4.5px 12px 3.68px 12px;\n  transition: all 0.1s linear;\n  box-shadow: none;\n\n  &:focus {\n    box-shadow: none;\n    transition: all 0.1s linear;\n    border-color: $primary;\n    box-shadow: inset 0px 0px 0px 1px $primary;\n  }\n  &.form-control-sm {\n    font-size: 0.775rem;\n    line-height: 1.5;\n  }\n  &.form-control-lg {\n    line-height: 2.15;\n    border-radius: 0.25rem;\n  }\n}\n\n.form-outline {\n  position: relative;\n  width: 100%;\n\n  .form-helper {\n    width: 100%;\n    position: absolute;\n    font-size: 0.875em;\n    color: #757575;\n    .form-counter {\n      text-align: right;\n    }\n  }\n\n  .trailing {\n    position: absolute;\n    right: 10px;\n    left: initial;\n    top: 50%;\n    transform: translateY(-50%);\n    pointer-events: none;\n    color: var(--#{$prefix}surface-color);\n  }\n\n  .form-icon-trailing {\n    padding-right: 2rem !important;\n  }\n\n  .form-control {\n    min-height: auto;\n    padding-top: $input-padding-top;\n    padding-bottom: $input-padding-bottom;\n    padding-left: $input-padding-left;\n    padding-right: $input-padding-right;\n    border: 0;\n    background: transparent;\n    transition: $input-transition;\n    ~ .form-label {\n      position: absolute;\n      top: 0;\n      max-width: 90%;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      left: $form-label-left;\n      padding-top: $form-label-padding-top;\n      pointer-events: none;\n      transform-origin: 0 0;\n      transition: $form-label-transition;\n      color: $form-label-color;\n      margin-bottom: 0;\n    }\n    ~ .form-notch {\n      display: flex;\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 100%;\n      max-width: 100%;\n      height: 100%;\n      text-align: left;\n      pointer-events: none;\n      div {\n        pointer-events: none;\n        border: $border-width solid;\n        border-color: $form-notch-div-border-color;\n        box-sizing: border-box;\n        background: transparent;\n        transition: $input-transition;\n      }\n      .form-notch-leading {\n        left: 0;\n        top: 0;\n        height: 100%;\n        width: $form-notch-leading-width;\n        border-right: none;\n        border-radius: $form-notch-leading-border-radius 0 0 $form-notch-leading-border-radius;\n      }\n      .form-notch-middle {\n        flex: 0 0 auto;\n        width: auto;\n        max-width: calc(100% - #{$form-notch-middle-max-width});\n        height: 100%;\n        border-right: none;\n        border-left: none;\n      }\n      .form-notch-trailing {\n        flex-grow: 1;\n        height: 100%;\n        border-left: none;\n        border-radius: 0 $form-notch-trailing-border-radius $form-notch-trailing-border-radius 0;\n      }\n    }\n    &:not(.placeholder-active)::placeholder {\n      opacity: 0;\n    }\n    &:focus,\n    &.active {\n      &::placeholder {\n        opacity: 1;\n      }\n    }\n    &:focus {\n      box-shadow: none !important;\n    }\n    &:focus ~ .form-label,\n    &.active ~ .form-label {\n      transform: $input-focus-active-label-transform;\n    }\n    &:focus ~ .form-label {\n      color: $input-focus-label-color;\n    }\n    &:focus ~ .form-notch .form-notch-middle,\n    &.active ~ .form-notch .form-notch-middle {\n      border-right: none;\n      border-left: none;\n      border-top: 1px solid transparent;\n    }\n    &:focus ~ .form-notch .form-notch-middle {\n      border-color: $input-focus-border-color;\n      box-shadow: 0 1px 0 0 $input-focus-border-color;\n      border-top: 1px solid transparent;\n    }\n    &:focus ~ .form-notch .form-notch-leading,\n    &.active ~ .form-notch .form-notch-leading {\n      border-right: none;\n    }\n    &:focus ~ .form-notch .form-notch-leading {\n      border-color: $input-focus-border-color;\n      box-shadow: -1px 0 0 0 $input-focus-border-color, 0 1px 0 0 $input-focus-border-color,\n        0 -1px 0 0 $input-focus-border-color;\n    }\n    &:focus ~ .form-notch .form-notch-trailing,\n    &.active ~ .form-notch .form-notch-trailing {\n      border-left: none;\n    }\n    &:focus ~ .form-notch .form-notch-trailing {\n      border-color: $input-focus-border-color;\n      box-shadow: 1px 0 0 0 $input-focus-border-color, 0 -1px 0 0 $input-focus-border-color,\n        0 1px 0 0 $input-focus-border-color;\n    }\n    &:disabled,\n    &.disabled,\n    &[readonly] {\n      background-color: $input-disabled-background-color;\n    }\n\n    &:disabled,\n    &.disabled,\n    &[readonly] {\n      ~ .timepicker-toggle-button,\n      ~ .datepicker-toggle-button,\n      ~ .datetimepicker-toggle-button,\n      ~ .select-arrow,\n      ~ .trailing {\n        color: rgba(var(--#{$prefix}surface-color-rgb), 0.5);\n      }\n    }\n\n    &.form-control-lg {\n      font-size: $input-font-size-lg;\n      line-height: $input-line-height-lg;\n      // padding-left: $input-padding-left-lg;\n      // padding-right: $input-padding-right-lg;\n      ~ .form-label {\n        padding-top: $form-label-padding-top-lg;\n      }\n      &:focus ~ .form-label,\n      &.active ~ .form-label {\n        transform: $input-focus-active-label-transform-lg;\n      }\n    }\n    &.form-control-sm {\n      // padding-left: $input-padding-left-sm;\n      // padding-right: $input-padding-right-sm;\n      padding-top: $input-padding-top-sm;\n      padding-bottom: $input-padding-bottom-sm;\n      font-size: $input-font-size-sm;\n      line-height: $input-line-height-sm;\n      ~ .form-label {\n        padding-top: $form-label-padding-top-sm;\n        font-size: $form-label-font-size-sm;\n      }\n      &:focus ~ .form-label,\n      &.active ~ .form-label {\n        transform: $input-focus-active-label-transform-sm;\n      }\n    }\n  }\n\n  &.form-white {\n    .form-control {\n      color: $form-white-input-color;\n      ~ .form-label {\n        color: $form-white-label-color;\n      }\n      ~ .form-notch {\n        div {\n          border-color: $form-white-notch-div-border-color;\n        }\n      }\n      &:focus ~ .form-label {\n        color: $form-white-input-focus-label-color;\n      }\n      &:focus ~ .form-notch .form-notch-middle {\n        border-color: $form-white-input-focus-border-color;\n        box-shadow: 0 1px 0 0 $form-white-input-focus-border-color;\n        border-top: 1px solid transparent;\n      }\n      &:focus ~ .form-notch .form-notch-leading {\n        border-color: $form-white-input-focus-border-color;\n        box-shadow: -1px 0 0 0 $form-white-input-focus-border-color,\n          0 1px 0 0 $form-white-input-focus-border-color,\n          0 -1px 0 0 $form-white-input-focus-border-color;\n      }\n      &:focus ~ .form-notch .form-notch-trailing {\n        border-color: $form-white-input-focus-border-color;\n        box-shadow: 1px 0 0 0 $form-white-input-focus-border-color,\n          0 -1px 0 0 $form-white-input-focus-border-color,\n          0 1px 0 0 $form-white-input-focus-border-color;\n      }\n      &::placeholder {\n        color: $form-white-placeholder-color;\n      }\n      &:disabled,\n      &.disabled,\n      &[readonly] {\n        background-color: $form-white-disabled-bgc;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/forms/_form-file.scss",
    "content": ".form-control {\n  &[type='file'] {\n    border-color: var(--#{$prefix}form-control-border-color);\n    &::-webkit-file-upload-button {\n      background-color: transparent;\n    }\n    &:disabled {\n      background-color: var(--#{$prefix}form-control-disabled-bg);\n      color: rgba(var(--#{$prefix}surface-color-rgb), 0.5);\n\n      &::file-selector-button {\n        color: rgba(var(--#{$prefix}surface-color-rgb), 0.5);\n      }\n    }\n  }\n  &:hover {\n    &:not(:disabled):not([readonly])::-webkit-file-upload-button {\n      background-color: transparent;\n    }\n  }\n}\n"
  },
  {
    "path": "src/scss/free/forms/_form-range.scss",
    "content": "// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n  &:focus {\n    box-shadow: none;\n\n    // Pseudo-elements must be split across multiple rulesets to have an effect.\n    // No box-shadow() mixin for focus accessibility.\n    &::-webkit-slider-thumb {\n      box-shadow: none;\n    }\n    &::-moz-range-thumb {\n      box-shadow: none;\n    }\n    &::-ms-thumb {\n      box-shadow: none;\n    }\n  }\n\n  &::-moz-focus-outer {\n    border: 0;\n  }\n\n  &::-webkit-slider-thumb {\n    margin-top: $form-range-webkit-slider-thumb-margin-top; // Webkit specific\n    box-shadow: none;\n    appearance: none;\n  }\n\n  &::-webkit-slider-runnable-track {\n    height: $form-range-webkit-slider-runnable-track-height;\n    border-radius: 0;\n    box-shadow: none;\n    background-color: var(--#{$prefix}secondary-bg);\n  }\n\n  &::-moz-range-thumb {\n    box-shadow: none;\n    appearance: none;\n  }\n\n  &::-moz-range-track {\n    box-shadow: none;\n  }\n}\n"
  },
  {
    "path": "src/scss/free/forms/_form-select.scss",
    "content": "// Select\n\n.select-input {\n  &.form-control {\n    &[readonly]:not([disabled]) {\n      background-color: transparent;\n    }\n  }\n}\n\n.form-select {\n  transition: $form-select-transition;\n}\n\n.form-select:focus {\n  border-color: $form-select-focus-border-color;\n  outline: 0;\n  box-shadow: $form-select-focus-border-box-shadow;\n}\n"
  },
  {
    "path": "src/scss/free/forms/_input-group.scss",
    "content": "//\n// Base styles\n//\n\n.input-group {\n  flex-wrap: nowrap;\n\n  > .form-control {\n    min-height: $input-group-min-height;\n    height: $input-group-height;\n    padding-top: $input-group-padding-y;\n    padding-bottom: $input-group-padding-y;\n    transition: $input-group-transition;\n\n    &:focus {\n      transition: $input-group-focus-transition;\n      border-color: $input-group-focus-border-color;\n      outline: 0;\n      box-shadow: $input-group-focus-box-shadow;\n    }\n  }\n}\n\n.input-group-text {\n  background-color: transparent;\n  padding-top: $input-group-text-padding-y;\n  padding-bottom: $input-group-text-padding-y;\n  > .form-check-input[type='checkbox'] {\n    margin-left: 1px;\n    margin-right: 1px;\n  }\n  > .form-check-input[type='radio'] {\n    margin-right: 0;\n  }\n}\n\n.input-group-lg {\n  > .form-control {\n    height: $input-group-lg-height;\n    font-size: $input-group-lg-font-size;\n    padding-top: $input-group-lg-padding-y;\n    padding-bottom: $input-group-lg-padding-y;\n  }\n\n  .input-group-text {\n    font-size: $input-group-lg-text-font-size;\n  }\n}\n\n.input-group-sm {\n  > .form-control {\n    min-height: $input-group-sm-min-height;\n    height: $input-group-sm-height;\n    font-size: $input-group-sm-font-size;\n    padding-top: $input-group-sm-padding-y;\n    padding-bottom: $input-group-sm-padding-y;\n  }\n\n  .input-group-text {\n    font-size: $input-group-sm-text-font-size;\n    line-height: $input-group-sm-text-line-height;\n  }\n}\n\n.input-group {\n  &.form-outline {\n    .input-group-text {\n      border-left: 0;\n    }\n    input + .input-group-text {\n      border: 0;\n      border-left: $input-group-form-outline-border-left-width solid\n        $input-group-form-outline-border-left-color;\n    }\n  }\n  .form-outline:not(:first-child),\n  .select-wrapper:not(:first-child),\n  .form-outline:not(:first-child) .form-notch-leading,\n  .select-wrapper:not(:first-child) .form-notch-leading {\n    border-top-left-radius: 0 !important;\n    border-bottom-left-radius: 0 !important;\n  }\n  .form-outline:not(:last-child),\n  .select-wrapper:not(:last-child),\n  .form-outline:not(:last-child) .form-notch-trailing,\n  .select-wrapper:not(:last-child) .form-notch-trailing {\n    border-top-right-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n  }\n}\n\n.input-group > [class*='btn-outline-'] + [class*='btn-outline-'] {\n  border-left: 0;\n}\n\n.input-group > .btn[class*='btn-outline-'] {\n  padding-top: 0.47rem;\n}\n\n.input-group > .btn {\n  padding-top: 0.59rem;\n}\n\n.input-group {\n  &.input-group-lg {\n    .input-group-text {\n      height: $input-group-lg-height;\n    }\n  }\n}\n\n.input-group {\n  .input-group-text {\n    height: $input-group-height;\n  }\n  .btn {\n    line-height: 1;\n  }\n}\n\n.input-group {\n  &.input-group-sm {\n    .input-group-text {\n      height: $input-group-sm-height;\n    }\n  }\n}\n\nINPUT,\nSELECT,\nTEXTAREA {\n  &:-webkit-autofill {\n    animation-name: onautofillstart;\n\n    -webkit-background-clip: text;\n    box-shadow: inset 0 0 20px 20px var(--#{$prefix}body-bg);\n    -webkit-box-shadow: 0 0 20px 20px var(--#{$prefix}body-bg) inset !important;\n\n    &:hover,\n    &:focus,\n    &:active {\n      animation-name: onautofillstart;\n\n      -webkit-background-clip: text;\n      box-shadow: inset 0 0 20px 20px var(--#{$prefix}body-bg);\n      -webkit-box-shadow: 0 0 20px 20px var(--#{$prefix}body-bg) inset !important;\n    }\n  }\n\n  &:not(:-webkit-autofill) {\n    animation-name: onautofillcancel;\n  }\n}\n\n@keyframes onautofillstart {\n  from {\n  }\n}\n@keyframes onautofillcancel {\n  from {\n  }\n}\n"
  },
  {
    "path": "src/scss/free/forms/_validation.scss",
    "content": "//\n// Material styles for form validation\n//\n\n@mixin form-validation-state-selector($state) {\n  @if ($state == 'valid' or $state == 'invalid') {\n    .was-validated #{if(&, \"&\", \"\")}:#{$state},\n    #{if(&, \"&\", \"\")}.is-#{$state} {\n      @content;\n    }\n  } @else {\n    #{if(&, \"&\", \"\")}.is-#{$state} {\n      @content;\n    }\n  }\n}\n\n@mixin form-validation-state-mdb(\n  $state,\n  $color,\n  $tooltip-color: color-contrast($color),\n  $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n  $focus-box-shadow: 0 0 0 $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n  .#{$state}-feedback {\n    position: absolute;\n    display: none;\n    width: auto;\n    margin-top: $form-feedback-margin-top;\n    font-size: 0.875rem;\n    font-style: $form-feedback-font-style;\n    color: $color;\n    margin-top: -0.75rem;\n  }\n\n  .#{$state}-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%; // Contain to parent when possible\n    padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n    margin-top: 0.1rem;\n    font-size: 0.875rem;\n    line-height: $form-feedback-tooltip-line-height;\n    background-color: $tooltip-bg-color;\n    border-radius: 0.25rem !important;\n    color: $form-feedback-valid-tooltip-color;\n  }\n\n  @include form-validation-state-selector($state) {\n    ~ .#{$state}-feedback,\n    ~ .#{$state}-tooltip {\n      display: block;\n    }\n  }\n\n  .form-control {\n    @include form-validation-state-selector($state) {\n      margin-bottom: 1rem;\n      background-image: none;\n      border-color: $color;\n\n      &:focus {\n        border-color: $color;\n        box-shadow: $focus-box-shadow;\n      }\n    }\n  }\n\n  .form-outline {\n    .form-control {\n      @include form-validation-state-selector($state) {\n        ~ .form-label {\n          color: $color;\n        }\n\n        ~ .form-notch .form-notch-leading,\n        ~ .form-notch .form-notch-middle,\n        ~ .form-notch .form-notch-trailing {\n          border-color: $color;\n        }\n\n        &:focus ~ .form-notch .form-notch-middle,\n        &.active ~ .form-notch .form-notch-middle {\n          border-top: 1px solid transparent;\n        }\n        &:focus ~ .form-notch .form-notch-middle {\n          box-shadow: 0 1px 0 0 $color;\n        }\n        &:focus ~ .form-notch .form-notch-leading {\n          border-color: $color;\n          box-shadow: -1px 0 0 0 $color, 0 1px 0 0 $color, 0 -1px 0 0 $color;\n        }\n        &:focus ~ .form-notch .form-notch-trailing {\n          border-color: $color;\n          box-shadow: 1px 0 0 0 $color, 0 -1px 0 0 $color, 0 1px 0 0 $color;\n        }\n\n        &.select-input.focused {\n          & ~ .form-notch .form-notch-leading {\n            box-shadow: -1px 0 0 0 $color, 0 1px 0 0 $color, 0 -1px 0 0 $color;\n          }\n\n          & ~ .form-notch .form-notch-middle {\n            box-shadow: 0 1px 0 0 $color;\n            border-top: 1px solid transparent;\n          }\n\n          & ~ .form-notch .form-notch-trailing {\n            box-shadow: 1px 0 0 0 $color, 0 -1px 0 0 $color, 0 1px 0 0 $color;\n          }\n        }\n      }\n    }\n  }\n\n  .form-select {\n    @include form-validation-state-selector($state) {\n      border-color: $color;\n\n      &:focus {\n        border-color: $color;\n        box-shadow: $focus-box-shadow;\n      }\n\n      ~ .#{$state}-feedback {\n        margin-top: 0;\n      }\n    }\n  }\n\n  .input-group {\n    .form-control {\n      @include form-validation-state-selector($state) {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  input[type='file'].form-control {\n    @include form-validation-state-selector($state) {\n      .#{$state}-feedback {\n        margin-top: 0;\n      }\n\n      &:focus {\n        box-shadow: inset 0 0 0 1px $color;\n        border-color: $color;\n\n        ~ .form-file-label {\n          box-shadow: none;\n        }\n      }\n\n      &:focus-within {\n        ~ .form-file-label {\n          .form-file-text,\n          .form-file-button {\n            border-color: $color;\n          }\n        }\n      }\n    }\n  }\n\n  .form-check-input {\n    @include form-validation-state-selector($state) {\n      border-color: $color;\n\n      &:checked {\n        background-color: $color;\n      }\n\n      &:checked {\n        &:focus {\n          &:before {\n            box-shadow: 0px 0px 0px 13px $color;\n          }\n        }\n      }\n\n      &:focus {\n        box-shadow: none;\n\n        &:before {\n          box-shadow: 0px 0px 0px 13px $color;\n        }\n      }\n\n      ~ .form-check-label {\n        color: $color;\n        margin-bottom: 1rem;\n      }\n\n      &[type='checkbox'] {\n        &:checked {\n          &:focus {\n            background-color: $color;\n            border-color: $color;\n          }\n        }\n      }\n\n      &[type='radio'] {\n        &:checked {\n          border-color: $color;\n          background-color: $white;\n\n          &:focus {\n            &:before {\n              box-shadow: 0px 0px 0px 13px $color;\n            }\n          }\n\n          &:after {\n            border-color: $color;\n            background-color: $color;\n          }\n        }\n      }\n    }\n  }\n  .form-check-inline .form-check-input {\n    ~ .#{$state}-feedback {\n      margin-left: 0.5em;\n    }\n  }\n\n  .form-switch {\n    .form-check-input {\n      @include form-validation-state-selector($state) {\n        &:focus {\n          &:before {\n            box-shadow: $form-switch-form-check-input-focus-before-box-shadow;\n          }\n        }\n        &:checked {\n          &[type='checkbox'] {\n            &:after {\n              background-color: $color;\n              box-shadow: $form-switch-form-check-input-checked-checkbox-after-box-shadow;\n            }\n          }\n          &:focus {\n            &:before {\n              box-shadow: 3px -1px 0px 13px $color;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n.was-validated .input-group .invalid-feedback,\n.was-validated .input-group .valid-feedback {\n  margin-top: 2.5rem;\n}\n\n.input-group .invalid-feedback,\n.input-group .valid-feedback {\n  margin-top: 2.5rem;\n}\n\n@each $state, $data in $form-validation-states-mdb {\n  @include form-validation-state-mdb($state, $data...);\n}\n"
  },
  {
    "path": "src/scss/free/mixins/_buttons.scss",
    "content": "// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n  $background,\n  $border,\n  $color: color-contrast($background),\n  $shadow: $btn-contextual-box-shadow\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-hover-bg-shade-amount),\n      tint-color($background, $btn-hover-bg-tint-amount)\n    ),\n  $hover-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-hover-bg-shade-amount),\n      tint-color($background, $btn-hover-bg-tint-amount)\n    ),\n  $hover-border:\n    if(\n      $color == $color-contrast-light,\n      shade-color($border, $btn-hover-border-shade-amount),\n      tint-color($border, $btn-hover-border-tint-amount)\n    ),\n  $hover-color: $color,\n  $focus-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-focus-bg-shade-amount),\n      tint-color($background, $btn-focus-bg-tint-amount)\n    ),\n  $focus-color: $color,\n  $active-border:\n    if(\n      $color == $color-contrast-light,\n      shade-color($border, $btn-active-border-shade-amount),\n      tint-color($border, $btn-active-border-tint-amount)\n    ),\n  $active-background:\n    if(\n      $color == $color-contrast-light,\n      shade-color($background, $btn-active-bg-shade-amount),\n      tint-color($background, $btn-active-bg-tint-amount)\n    ),\n  $active-color: $color\n) {\n  --#{$prefix}btn-bg: #{$background};\n  --#{$prefix}btn-color: #{$color};\n  --#{$prefix}btn-box-shadow: #{$shadow};\n  --#{$prefix}btn-hover-bg: #{$hover-background};\n  --#{$prefix}btn-hover-color: #{$hover-color};\n  --#{$prefix}btn-focus-bg: #{$focus-background};\n  --#{$prefix}btn-focus-color: #{$focus-color};\n  --#{$prefix}btn-active-bg: #{$active-background};\n  --#{$prefix}btn-active-color: #{$active-color};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n  $color,\n  $hover-color,\n  $focus-color,\n  $active-color,\n  $hover-background: tint-color($color, $btn-outline-hover-bg-tint-amount),\n  $focus-background: tint-color($color, $btn-outline-focus-bg-tint-amount),\n  $active-background: tint-color($color, $btn-outline-active-bg-tint-amount)\n) {\n  --#{$prefix}btn-bg: transparent;\n  --#{$prefix}btn-color: #{$color};\n  --#{$prefix}btn-hover-bg: #{$hover-background};\n  --#{$prefix}btn-hover-color: #{$hover-color};\n  --#{$prefix}btn-focus-bg: #{$focus-background};\n  --#{$prefix}btn-focus-color: #{$focus-color};\n  --#{$prefix}btn-active-bg: #{$active-background};\n  --#{$prefix}btn-active-color: #{$active-color};\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-top, $padding-bottom, $padding-x, $font-size, $line-height) {\n  --#{$prefix}btn-padding-top: #{$padding-top};\n  --#{$prefix}btn-padding-bottom: #{$padding-bottom};\n  --#{$prefix}btn-padding-x: #{$padding-x};\n  @include rfs($font-size, --#{$prefix}btn-font-size);\n  --#{$prefix}btn-line-height: #{$line-height};\n}\n// scss-docs-end btn-size-mixin\n\n// Button size variant outline\n@mixin button-outline-size($padding-top, $padding-bottom, $padding-x, $font-size, $line-height) {\n  --#{$prefix}btn-padding-top: #{$padding-top};\n  --#{$prefix}btn-padding-bottom: #{$padding-bottom};\n  --#{$prefix}btn-padding-x: #{$padding-x};\n  @include rfs($font-size, --#{$prefix}btn-font-size);\n  --#{$prefix}btn-line-height: #{$line-height};\n}\n"
  },
  {
    "path": "src/scss/free/mixins/_color-mode.scss",
    "content": "// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n  @if $color-mode-type == 'media-query' {\n    @if $root == true {\n      @media (prefers-color-scheme: $mode) {\n        :root {\n          @content;\n        }\n      }\n    } @else {\n      @media (prefers-color-scheme: $mode) {\n        @content;\n      }\n    }\n  } @else {\n    [data-mdb-theme='#{$mode}'] {\n      @content;\n    }\n  }\n}\n// scss-docs-end color-mode-mixin\n"
  },
  {
    "path": "src/scss/free/mixins/_ripple.scss",
    "content": "@mixin ripple-variant($color_value) {\n  $gradient: rgba(\n        $color: $color_value,\n        $alpha: 0.2,\n      )\n      0,\n    rgba(\n        $color: $color_value,\n        $alpha: 0.3,\n      )\n      40%,\n    rgba(\n        $color: $color_value,\n        $alpha: 0.4,\n      )\n      50%,\n    rgba(\n        $color: $color_value,\n        $alpha: 0.5,\n      )\n      60%,\n    rgba(\n        $color: $color_value,\n        $alpha: 0,\n      )\n      70%;\n  background-image: radial-gradient(circle, $gradient);\n}\n"
  },
  {
    "path": "src/scss/free/mixins/_table-variants.scss",
    "content": "// Deprecated\n\n// scss-docs-start table-variant\n// @mixin table-variant-mdb($state, $background) {\n//   .table-#{$state} {\n//     background-color: $background;\n//   }\n// }\n// scss-docs-end table-variant\n"
  },
  {
    "path": "src/scss/mdb.free.scss",
    "content": "// CORE FUNCTIONS\n@import './bootstrap-rtl-fix/functions';\n@import './free/functions';\n\n// CORE VARIABLES\n@import './custom/variables';\n@import './free/variables';\n@import './free/variables-dark';\n@import './bootstrap-rtl-fix/variables';\n@import './bootstrap-rtl-fix/variables-dark';\n@import './bootstrap-rtl-fix/maps';\n\n// BOOTSTRAP CORE\n@import './bootstrap-rtl-fix/mixins';\n@import './bootstrap-rtl-fix/utilities';\n\n// BOOTSTRAP CORE COMPONENTS\n@import './bootstrap-rtl-fix/root';\n@import './bootstrap-rtl-fix/reboot';\n@import './bootstrap-rtl-fix/type';\n@import './bootstrap-rtl-fix/images';\n@import './bootstrap-rtl-fix/containers';\n@import './bootstrap-rtl-fix/grid';\n\n// BOOTSTRAP COMPONENTS\n@import './bootstrap-rtl-fix/tables';\n@import './bootstrap-rtl-fix/forms';\n@import './bootstrap-rtl-fix/buttons';\n@import './bootstrap-rtl-fix/transitions';\n@import './bootstrap-rtl-fix/dropdown';\n@import './bootstrap-rtl-fix/button-group';\n@import './bootstrap-rtl-fix/nav';\n@import './bootstrap-rtl-fix/navbar';\n@import './bootstrap-rtl-fix/card';\n@import './bootstrap-rtl-fix/accordion';\n@import './bootstrap-rtl-fix/breadcrumb';\n@import './bootstrap-rtl-fix/pagination';\n@import './bootstrap-rtl-fix/badge';\n@import './bootstrap-rtl-fix/alert';\n@import './bootstrap-rtl-fix/progress';\n@import './bootstrap-rtl-fix/list-group';\n@import './bootstrap-rtl-fix/close';\n@import './bootstrap-rtl-fix/toasts';\n@import './bootstrap-rtl-fix/modal';\n@import './bootstrap-rtl-fix/tooltip';\n@import './bootstrap-rtl-fix/popover';\n@import './bootstrap-rtl-fix/carousel';\n@import './bootstrap-rtl-fix/spinners';\n@import './bootstrap-rtl-fix/offcanvas';\n@import './bootstrap-rtl-fix/placeholders';\n\n// Helpers\n@import './bootstrap-rtl-fix/helpers';\n\n// Utilities\n@import './free/utilities';\n@import './bootstrap-rtl-fix/utilities/api';\n\n// MDB CORE\n@import './free/mixins';\n@import './free/utilities';\n\n// MDB CORE COMPONENTS\n@import './free/root';\n@import './free/reboot';\n@import './free/type';\n@import './free/colors';\n@import './free/shadows';\n@import './free/flag';\n@import './free/images';\n\n// MDB FORMS\n@import './free/forms/form-control';\n@import './free/forms/form-select';\n@import './free/forms/form-check';\n@import './free/forms/form-file';\n@import './free/forms/input-group';\n@import './free/forms/validation';\n@import './free/forms/form-range';\n\n// MDB COMPONENTS\n@import './free/tables';\n@import './free/buttons';\n@import './free/deprecated';\n@import './free/dropdown';\n@import './free/button-group';\n@import './free/nav';\n@import './free/navbar';\n@import './free/card';\n@import './free/breadcrumb';\n@import './free/pagination';\n@import './free/badge';\n@import './free/alert';\n@import './free/progress';\n@import './free/list-group';\n@import './free/close';\n@import './free/modal';\n@import './free/toasts';\n@import './free/tooltip';\n@import './free/popover';\n@import './free/scrollspy';\n@import './free/ripple';\n@import './free/range';\n@import './free/accordion';\n@import './free/carousel';\n"
  }
]